WSF_QUANTUM_TASKER_PROCESSOR

processor WSF_QUANTUM_TASKER_PROCESSOR

Derives From: WSF_SCRIPT_PROCESSOR

Brother To: WSF_TASK_PROCESSOR

Script Classes: WsfQuantumTaskerProcessor

processor <name> WSF_QUANTUM_TASKER_PROCESSOR

  WSF_SCRIPT_PROCESSOR Commands ...
  processor Commands ...
  Platform Part Commands ...

  // Quantum Tasker Commands

  ignore_ally_tracks
  asset_representation ...
  generator ...
  evaluator ...
  allocator ...
  allocator_extra_tasks ...
  allocator_extra_assets ...
  reallocation_strategy ...
  update_assignments

  // Task Processor Commands

  comm_retry_attempts ...
  comm_retry_interval ...
  operating_level ...
  track_processor ...
  time_to_recognize_messages ...
  track_update_interval ...
  track_update_strategy ...
  show_task_messages
  show_uncompleted_tasks
  queuing_method ...
  number_of_servers ...

end_processor

Overview

WSF_QUANTUM_TASKER_PROCESSOR provides a common mechanism for sending and receiving “task assignments’ (could be associated with tracks). WSF_QUANTUM_TASKER_PROCESSOR provides additional script commands (e.g., AssignTask, CancelTask as defined in WsfQuantumTaskerProcessor) that allow tasks to be sent and received.

Method of Operation

When the WSF_QUANTUM_TASKER_PROCESSOR (processor) updates, it performs these basic steps:

  • Uses asset perception from platform (WSF_PERCEPTION_PROCESSOR)

  • Uses threat perception from platform (WSF_PERCEPTION_PROCESSOR)

  • Calls the generator to create a task list

  • Calls the evaluator to give values to all possible asset-task pairings

  • Calls the allocator to compute the appropriate allocation given the current evaluation (max profit allocation for example)

  • Sends out task assignments according to the selected reallocation strategy (for example: a static strategy does not allow reallocation of previously assigned tasks)

    Note

    If the processor has multiple WSF_PERCEPTION_PROCESSORs, it will implicitly link to the first one attached to it.

Script Interface

WSF_QUANTUM_TASKER_PROCESSOR utilizes capabilities of the Common Script Interface and WSF_SCRIPT_PROCESSOR

Quantum Tasker Commands

ignore_ally_tracks

Indicates that the Quantum Tasker should not pass tracks of allies to the task generator, and subsequently should not have any tasks related to ally tracks.

asset_representation [ platform | systems | resources ]

Indicates how the Quantum Tasker should represent asset perception objects. If ‘systems’ is defined then each platform subsystem is considered as an individual asset that can receive task assignments separate from other subsystems. If ‘resources’ is defined then each resource of a subsystem is considered as a taskable individual asset (missiles, sensor/jammer beams). However, the task assignments are still sent to the owning platform for processing as required.

generator [ simple_weapon | simple_jammer | simple_sensor | custom <script method name> ]

Indicates which task generator the Quantum Tasker is to use.

  • simple_weapon : creates a weapon task for every track given.

  • simple_jammer : creates a jammer task for every track given.

  • simple_sensor : creates a sensor task for every track given.

  • custom : allows the user to define a script method for generating tasks. Method must adhere to this script signature:

script Array<WsfQuantumTask> method_name ( Array<WsfLocalTrack>, Array<WsfAssetPerception> )
...
end_script

Note

Custom generator arguments are only valid during the lifetime of this method.

evaluator [ simple | distance | intercept_time | custom <script method name> ]

Indicates which task evaluator the Quantum Tasker is to use.

  • simple : evaluates every pairing with a value of ‘1.0’.

  • distance : evaluates an asset-task pairing according to the inverse distance between the asset and the task track (if exists).

  • intercept_time : evaluates an asset-task pairing according to the inverse intercept time of the asset with the task track (if exists).

  • custom : allows the user to define a script method for evaluating possible asset-task pairings. Method must adhere to this script signature:

script double method_name ( WsfQuantumTask, WsfAssetPerception )
...
end_script

Note

Custom evaluator arguments are only valid during the lifetime of this method.

allocator [ simple | greedy_isolated | greedy_priority | greedy_value | greedy_profit | optimal_profit | custom <script method name> ] [type <task_type>]

Indicates which allocation algorithm the Quantum Tasker is to use to assign tasks to assets given the current evaluation values.

  • simple : Assigns the first task to the first asset, etc.

  • greedy_isolated : An asset is assigned whatever task it evaluated the best for, regardless of other assignments. This could lead to many assets performing the same task.

  • greedy_priority : Assigns the remaining highest priority task to whatever non-busy asset evaluated highest, then marks that asset as busy, & repeats.

  • greedy_value : Assigns whatever remaining asset-task pairing evaluated the highest, marks asset as busy, & repeats.

  • greedy_profit : Assigns whatever remaining asset-task pairing has the highest profit (profit = pairing evaluation * task priority), marks asset as busy, & repeats.

  • optimal_profit : Performs a max weighting algorithm to determine the assignment that provides the maximum cumulative profit.

  • custom : allows the user to define a script method for allocating tasks to assets given the current matrix of values. Method must adhere to this script signature:

script Map<WsfAssetPerception, WsfQuantumTask> method_name ( Array<Array<double>> , Array<WsfAssetPerception> , Array<WsfQuantumTask> )
...
end_script

Note

Custom allocator arguments are only valid during the lifetime of this method.

If <task_type> is specified, then an allocation pass is performed using only tasks of that type. Multiple allocators can be defined. If no task type is specified, then all tasks are considered in the allocation pass.

allocator_extra_tasks [ simple | greedy_isolated | greedy_priority | greedy_value | greedy_profit | optimal_profit | custom <script method name> ]

Indicates which allocator will be used on any extra tasks that were not allocated by the primary allocator. If used, this means assets might have more than one task to perform. This allocator will be called repeatedly as long there are tasks that are still remaining and as long as it keeps finding at least one new allocation each pass. If no assets evaluated a task positively, then that task will not be allocated.

Default: none - extra tasks left unassigned.

allocator_extra_assets [ simple | greedy_isolated | greedy_priority | greedy_value | greedy_profit | optimal_profit | custom <script method name> ]

Indicates which allocator will be used on any extra assets that were not allocated by the primary allocator. If used, this means tasks might have more than one asset performing them. This allocator will be called repeatedly as long there are assets that are still remaining and as long as it keeps finding at least one new allocation each pass. If an asset did not evaluate any task positively, then that asset will not be allocated to a task.

Default: none - extra assets left unassigned.

reallocation_strategy [ static | dynamic | response | event ]

Indicates how the Quantum Tasker handles previously assigned tasks and changes in task assignments.

  • static : never allow a task reassignment, ever

  • dynamic : always allow task reassignment, possible on every update (however, this is unlikely if your evaluator operates on a continuous spectrum).

  • response : only allow a task reassignment when the original recipient rejects or cancels the task.

  • event : perform a complete allocation when a new task appears, an asset changes state, or a task is rejected/canceled. (kind of like an event driven version of the ‘dynamic’ strategy)

Default: static

update_assignments

If declared, a task assign message is sent to all assigned assets every update. This is only useful when task data (like aux data) is updated regularly on the tasks.

Default: not declared

Task Processor Commands

comm_retry_attempts <integer>

Indicates the number of attempts to retry failed communications.

comm_retry_interval <time-value>

Indicates the amount of time between attempts to retry failed communications.

operating_level <name> <level>

Indicates the operating condition or state and the associated level.

Example:

operating_level Engage 0
track_processor <track-proc-name>

Specifies the name of a WSF_TRACK_PROCESSOR (typically operating as a non_master_track_processor) whose track list will provide the tracks used in the evaluation process.

Default: Uses the platforms master track list.

time_to_recognize_messages <time-value>

Indicates the amount of time it takes to recognize a message.

track_update_interval <time-value>

Indicates the time interval for sending track updates to assignees.

track_update_strategy [ default | suppressor ]

Indicates how track updates are sent. With default behavior, if a task has been accepted then periodic track updates are sent to the assignee. With the Suppressor behavior, track updates are sent to assignees only when the track manager indicates a track has been updated.

show_task_messages

Indicates that information related task assignment, cancellation and completion are to be written to standard output.

show_uncompleted_tasks

This is a debugging tool that indicates information about uncompleted tasks is to be written to standard output during the destruction of the task processor.

queuing_method [ first_in_first_out | last_in_first_out | none ]

Only used if time_to_recognize_messages is defined and greater than zero. Specifies how incoming messages are to be queued if all of the servers are busy. A value of none indicates the message will be discarded.

Default: first_in_first_out

number_of_servers [ <integer-reference> | infinite ]

Only used if time_to_recognize_messages is defined and greater than zero. Specifies the maximum number of messages that can be ‘in process’ at any given instant of time. If a new message is received and all the servers are busy, the message will be queued according to the queuing_method

If ‘infinite’ is specified (the default), received messages are simply delayed by the required amount before being forwarded.

Default: infinite