Jordan Johnson avatar image
Jordan Johnson asked Noah Z commented

How can I get resource utilization statistics from a Process Flow resource?

I'm just curious what the plan was for collecting resource utilization since "acquire" in process flow doesn't seem to change the operator state for the operator associated with the resource?

FlexSim 16.0.1
process flowstatisticsutilization
· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Jordan Johnson avatar image Jordan Johnson ♦♦ commented ·

Thanks to @Anna Kamphaus for the original question.

0 Likes 0 ·
Brenton King avatar image
Brenton King answered Noah Z commented

Because of the current limitation of Process Flow with states, it is often easier to link your resources to actual 3D objects and then switch their states manually. You can then display their utilization charts in the dashboard. Note that nothing is actually happening within my 3D world, its only purpose is to give me the stats for my PF. (My code turns the processor red while it is in use.)

I hope that in the future we can change the state of a resource in Process Flow without it requiring a 3D counterpart... @Anna Kamphaus


· 4
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

A Kamphaus avatar image A Kamphaus commented ·

I've linked my PF resources to 3D resources however in most cases in my current model the resources is usually only acquired for a specific time and then released. This does not cause a state change in the 3D operator so my utilization shows that the operator is idle for the entire period.

0 Likes 0 ·
Brenton King avatar image Brenton King ♦ A Kamphaus commented ·

In the above example I am assuming that the 3D world isn't being used in the model. Its only purpose is to collect state info. Because the 3D model is not in use, I'm not fighting with the default states of the object. I use the setstate command to tell it exactly which state I want it to be in. If the 3D model is in use, you won't be able to use the same method without taking care to not utilize the machine for any other purpose that would interrupt its state. For example, if the processors received an item during this period they would update their state using the default state profile of a processor. You are always fighting their desire to set their own state if they are interacted with in any way.

If you want to make sure that the state you desire is not interrupted you need to make that object (process, operator, etc) unavailable during the desired period. You can do this in one of two ways (off the top of my head).

1) The preferred method of placing a TE into a state for a specific amount of time is through the use of the TS Delay. However, this only works if you know the exact time of the delay.

2) If the delay is open ended you will want to use the custom task activity and select "Utilize" from the list of tasks. You get to specify a state for the duration of the delay.

A Utilize task requires the use of the freeoperators(,) command to exit the specified state.

2) Similar to the utilize method , stopobject and resume object commands can also be used. The stop object command freezes the object and places it into the specified state. The object is not available until the resumeobject command is fired on it. You get to specify a state.



I spoke about these options on the phone with you but I thought I'd post it so other may learn from our conversation as well!

0 Likes 0 ·
April Zwerneman avatar image April Zwerneman commented ·

Hi @Brenton King,

Are there any updates on this since 2016, or do I still have to tie process flow resources to 3D objects? I am also trying to get utilization statistics on a process flow resource. The state pie chart won't let me select a process flow resource because the "member is not an object".



0 Likes 0 ·
Noah Z avatar image Noah Z April Zwerneman commented ·

@Regan Blackett

I'm also interested in whether there is an easy way to do this in the more recent versions. It looks like Brenton hasn't been active recently so I'm pinging you as well.

0 Likes 0 ·
anthony.johnson avatar image
anthony.johnson answered Raja Sekaran edited

OK, I got to thinking about the allocated idle state check box feature I mentioned in my previous answer, and I realized that you can just implement that yourself, with some listeners on the Resource. So I'm attaching a process flow that will set the state on objects that are acquired on the resource but idle. You'll see that when the simulation runs, operators will be in the "allocated idle" state when they are acquired by the resource but otherwise idle. This is done without having to change the primary acquiring/releasing process.

Once this is done, to get the utilization of individual operators you just include allocated idle in the set of utilization states in a dashboard state pie chart.

· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Shankar Narayan avatar image Shankar Narayan commented ·


While trying to face similar situation of measuring utilization of an operator that is being called from FixedResource PF model, I tried using your above technique with a STATE_BUSY or STATE_UTILIZE parameters passed in the code snippet, but the dashboard does not seem to register either of these while it has no problem registering your STATE_ALLOCATED_IDLE state. Any ideas on how to go about registering Operator's BUSY/PROCESSING/UTILIZE/LOADING/UNLOADING states in the dashboard while controlling them from PF model? I understand that this works in the conventional Flexsim 3D world but for some reason even in the latest release 16.2 of the platform, this seems a bit challenging to pull off from a PF. Any help is sincerely appreciated.


0 Likes 0 ·
anthony.johnson avatar image
anthony.johnson answered anthony.johnson edited

Some options:

  • If you're looking for a "cumulative" utilization, you can track the Content statistic of the resource. Unfortunately, this isn't perfect, because it's not normalized to a 100% scale, however, you can calculate utilization manually from that (if there are 5 available, and the average content is 4, then it's 80% utilized). While not the perfect solution, it might be suitable for some cases.
  • If you have a resource that is numeric, then you can simulate utilization by giving the resource a number of 100. Then when you acquire the resource, acquire a percentage of the total resource capacity (instead of acquiring just 1). Then the resource's content statistic is its utilization.
  • If you're looking for individual utilizations, for task executers, the main problem is to set the TE to a different state to distinguish "idle" from "allocated idle", because if you're giving him task sequences, he will automatically set his state during those tasks. One option is to explicitly set the state of the operator to something like allocated idle as soon as you acquire it, and set it back to idle as soon as you release it. However, you'd also need to set it back to "allocated idle" whenever the operator finishes a task sequence and goes back to idle. So, again, not a perfect solution.
  • Another option, similar to explicitly setting the state, is to always give the operator a wait-for-task task when he could potentially be idle. There you can define the state you want him to be in while he's waiting for you to give him more to do.

Obviously none of these are really easy solutions. Perhaps there should be, first, a feature on the resource where you can check a box and define the state to put the object into when he's been acquired but is idle, and second, a utilization statistic on the resource, which is essentially 100 times its content divided by its capacity.

5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.