Resources and Resource Capability

48 views
Skip to first unread message

Nauzad Tantra

unread,
Sep 9, 2025, 7:10:51 AMSep 9
to JaamSim Users Discussion Group
Hi Harry,
I am trying to model a scenario where resources have different, but known capabilities and hence can run different servers. For example, in a call center setup, person A might be capable of answering phones and emails, while person B might only be able to answer phones, while another person might be able to respond to phone calls and online requests.

How would we go about setting this up? 

Also if I have a file containing an array of resources and their capabilities, how can I generate the right number of resources in the model without manual intervention each time I do so?

Kind regards,
Nauzad

Mark

unread,
Sep 16, 2025, 11:31:41 AMSep 16
to JaamSim Users Discussion Group
I'm currently facing a similar issue.  In my case, operators are non-identical so I need to use ResourceUnits.  In it's most general form we're both trying to model "multi-skilled resources".

My first intuition was to create a separate ResourcePool for each skill.  Then I could add each person with the "phones" skill to the "phonesResourcePool".  Except we can't do that as currently implemented because a ResourceUnit can only belong to a single ResourcePool.

Next I thought that maybe I could use some sort of deeply-nested ternary expression in the ResourceList property of the Seize, Server, and Processor blocks.  Unfortunately, the ResourceList property doesn't appear to accept expressions, or at least it doesn't allow the InputBuilder to be launched.  Even if the ResourceList did allow Expressions, it would probably require an extremely complex expression to check for availability, and state, and downtime, etc.

Perhaps I'm missing some other way (there is no "Accepts an entity of type..." description on the ResourceList property) such as making an array of ResourceUnits the argument of some sort of selector that can be an input to ResourceList, but right now it would appear to me that either a modification to ResourcePool (preferred) or a new object is necessary.

Nauzad Tantra

unread,
Sep 16, 2025, 8:20:12 PMSep 16
to JaamSim Users Discussion Group
So I guess we need to define the use-case for the new object. Here's what I've come up with:

In a practical scenario, I may have multiple (<10 to >500) people, that have independent schedules (different start/stop break times), need to link with different "resources" to do the work on an entity. Within this "working" time they could work on different (but specific) servers with a priority setting. There is a variability in their daily/shift setup time, a setup per batch and a run time per entity.

Let me give an example:
You have a number of doctors working in a hospital around the clock with an overlapping shift pattern. They need access to their respective tools (X-Ray machine, Operating Theatres etc.) to serve their patients. Some doctors may be able to change their roles if they are certified for different treatments (e.g. an anaesthetist may work in ER), if their primary role does not have a demand and their secondary role has a requirement for them. At the start of their day they need time to get into their scrubs (daily setup), Start up / warm up their machines (daily setup). They may then need to do some activities every time they change roles (setup per batch) and the time they need to treat each patient.

As an input to the above, you might have the doctors with their shift schedules, skillsets in one file. Another file denoting the tasks (maybe departments) along with required resources, resource time between failures, etc. and startup, setup, run times to serve each patient and a third file showing the incoming workstream of patients.

Is that the sort of functionality we would like to see achievable using (amongst other objects) the "new" object? Anything to add/subtract from the above?

Mark

unread,
Sep 17, 2025, 10:09:15 AMSep 17
to JaamSim Users Discussion Group
After thinking about this a bit more, I think it's probably possible to model this without a new object.

Instead of using a "Master/Resource" approach where an entity seizes a resource and some resources have multiple "skills", let's look at a "Master/Master" approach where all of the resources are modelled as entities (coming from an EntityGenerator object) as well.  In these types of models you switch the focus to synchronizing entities.  The "ResourceEntities" as we can call them now can have states, custom attributes for storing states, and they are available if they reside in a certain queue, otherwise they are following their own logic on their own trajectory, possibly delaying for specified time intervals to represent periods of unavailability.

I'll have to look at it closer, but I suspect it now becomes possible to do this using the "Match" property and/or the "SelectionCondition" property on the Processor object since they enable expressions which makes them significantly more powerful.  This "Master/Master" approach is very common when models start to get extremely complicated or you feel like you need something that Resources aren't setup to handle.

Just as a side question, are you trying to simulate an existing system/policy, or are you trying to optimize a system?  What you're describing with the doctors sounds a lot like a scheduling problem and you may find that there's a lot of questions like "which resource should be chosen at which time to maximize utilization / minimize treatment time" that could be difficult to decide using simulation logic.

Harry King

unread,
Sep 17, 2025, 12:15:39 PMSep 17
to JaamSim Users Discussion Group
Mark and Nauzad,

ResourceUnit has an input 'AssignmentCondition' that can be used to determine whether this ResourceUnit can be seized by an object. For your phones and emails example, assign attribute 'type' to your tasks and set it to "phone" or "email". For a ResourceUnit that can handle only phonecalls, set its AssignmentCondition input to 'this.Assignment.type == "phone"'.

For a ResourceUnit that can handle both phonecalls and emails, set the AssignmentCondition input to 'this.Assignment.type == "phone" || this.Assignment.type == "email"'.

For a more complicated set of skills, the ResourceUnit could have an attribute 'skills' that is set to an array such as {"phone", "email"}, in which case, the AssignmentCondition input would be 
'indexOf(skills, this.Assignment.type) > 0'.

Harry

Harry King

unread,
Sep 17, 2025, 12:16:57 PMSep 17
to JaamSim Users Discussion Group
Correction:
'indexOf(this.skills, this.Assignment.type) > 0'

Nauzad Tantra

unread,
Sep 17, 2025, 7:24:45 PMSep 17
to JaamSim Users Discussion Group
Hi Harry,
That sounds like a good option. How would you be able to assign those resources to independent servers though? I was thinking of having different server pools for each activity (some of which may follow others).

Nauzad

Reply all
Reply to author
Forward
0 new messages