Simul8 Tips, Technical Corner

Using Resource Priorities

Lots of systems use multi-skilled resources. These resources can work on several tasks, but are likely to be better in some tasks than others. Please see the screenshot below for a simplified version of such a system:

Simulation showing multi-skilled resources

This example shows two types of work entering the system, each requiring to be processed in different activities. Work of type 1 enters the model in the first Start point and is routed to Activity 1. Here we need a resource from resource pool Pool Type 1, which uses both Skill resources with a preference for Skill 1. Work type 2 enters the second stream in the model and uses Pool Type 2, which looks for one of both Skill resources with a preference for Skill 2. This means that both pathways have a preference for a certain type of resource, but if that resource is unavailable the other resource will start the task if available.

The above setup is very common in industries like call centers. Here agents are trained to handle certain calls (e.g. new contracts), but can handle other calls too (e.g. complaints) if the primary group of agents is fully utilized. However, it is very likely that a resource is more efficient in handling work of their primary skill type. When a lot of work is backing up in the system we may want these resources to concentrate on their primary task, which creates the best overall system performance. We can therefore differentiate between 2 states in the model:

  • Resource surplus: the number of resources outnumbers the number of tasks requiring these resources. In other words, not all resources are fully utilized.
  • Work surplus: the amount of work outnumbers the number of resources, which means work will be queueing up.

In case of a resource surplus state the above example handles our desired logic perfectly; new work will be allocated to the primary resource, but if that resource is unavailable the secondary resource will jump in and work on that item. However, once the system starts moving into a work surplus state additional functionality is required in order to ensure that the Skill resource concentrate their efforts on their primary tasks. If we were to leave the normal setup as detailed above resources would rotate between both tasks, resulting in sub-optimal performance.

In order to ensure resources look for work of their primary skill we need to use a feature introduced in SIMUL8 2014: the Resource Priority Matrix. This feature can be found by double clicking on Skill 1/Skill 2. This opens the following dialog:

Resource Properties

Clicking on the Priority Matrix button opens a new dialog. Here we can see two columns of Activities; the one on the left detailing all Activities in the model and the one in the center detailing the Activities used for this Priority behavior. Add the Activities where you want to have the resource looking for work into the middle column and use the field in the lower right hand corner of the dialog to set a priority for each station. A higher number means a higher priority. See the following screenshot for an example:

Priority Activities for Skill 1

In this example for Skill 1 the resource will look for work in both Activities, with a priority for Activity 1. If work is found here, the resource will start this work prior to any resource requirements. If no work is found, the resource will look down the list for other opportunities. Please note that Activities can have an equal priority in which case a system reserved label named ‘Priority’ (higher value means a higher priority) can be used to select the best suitable work item between these equally important stations. When work of equal priority is found (or the Priority label is not used) the work item that has been waiting the longest will be selected to be processed first. Applying this logic to all relevant resources ensure that in case of a work surplus state resources work on their primary tasks until the system returns to a resource surplus state, in which case normal resource logic kicks back in.