Jump to content
Simio Forum

Matching Entities to Workers

Recommended Posts

Currently working on the logic piece for the design of the simulation.

We have a simple source, server and sink operation to model a current state hospital operation.

Our model is going to be based off the data shown below.


Patient 1 _____ 2016/05/06 09:19:00 _____ 2016/05/06 13:35:00 _____ Jane

Patient 2 _____ 2016/06/09 15:59:00 _____ 2016/06/10 12:36:00 _____ Mike

Patient 3 _____ 2016/06/10 08:23:00 _____ 2016/06/10 12:36:00 _____ Luke

Patient 4 _____ 2016/06/21 18:02:00 _____ 2016/06/22 14:55:00 _____ Luke

Patient 5 _____ 2016/05/11 14:14:00 _____ 2016/05/12 12:11:00 _____ Vick

Patient 6 _____ 2016/05/12 14:43:00 _____ 2016/05/12 14:54:00 _____ Jane

Patient 7 _____ 2016/06/29 17:06:00 _____ 2016/06/30 10:12:00 _____ Mary

Patient 8 _____ 2016/06/24 15:53:00 _____ 2016/07/29 06:55:00 _____ Todd

Patient 9 _____ 2016/05/08 09:57:00 _____ 2016/05/09 12:11:00 _____ Mary

Patient 10 _____ 2016/05/11 16:09:00 _____ 2016/05/13 16:09:00 _____ Mary

Patient 11 _____ 2016/04/02 10:03:00 _____ 2016/04/02 14:58:00 _____ Mike

Patient 12 _____ 2016/04/14 10:23:00 _____ 2016/04/16 12:13:00 _____ Mary

Patient 13 _____ 2016/05/25 10:21:00 _____ 2016/05/26 11:57:00 _____ Todd

We have a time date list in which Physical Therapy Orders were created. That is going to be schedule in which the patients (entities) come into the system. Those entities will go to an open server and wait till a PT (Worker) see's them at the date listed for ORDER COMPLETED.

My question is how do I logically indicated the right worker to the right patient? Is there a way link the worker to the entity through scheduling or any other method?

If I can solve this, this can give me some current state data on utilization and etc. From here I can then work on future state scenarios.

Another question, we will want to put in capacity constraints for the workers. Example, one a worker has seen 5 patients, stop work for the day. We were trying to think ahead on how to build that in the model. Our thought is making a process (in the Processes tab) that first tallies the number of patients seen, then make another process tree that does "If tally = 5, then stop work". We want to be sure we are on right track or if there is another method.

Appreciate any input folks have.


Link to post
Share on other sites

You can create a worker reference in an entity and point it to the table value upon patient creation. Then call it anytime when needed. Alternatively you can search through the table anytime you use it.

However, I would like to advise against it, and really advise against re-creating historical situation in a simulation. There is little validity in a model, which is fed historical data and then the results are compared yet again with this data. Time between creation and completion of an order should be a stochastic distribution, and the chosen PT a causal effect of the model rules.

As for a limitation for patients seen a day, just create an integer state variable and a monitor, which fires a process after a threshold is breached. Tallies are used for a different purpose, which is comparison between different measurement of the same value (but typically a different entity, like time between Point A and Point B)

Link to post
Share on other sites

If you make your table above be an Arrival table, then each entity will automatically reference the data in its row. For example, if your PT column is of type Object, then you can just Seize MyPatientTable.PT and it will seize the indicated resource.

I disagree with the advice against this approach. Using Arrivals to read deterministic historical data into a model can be an important validation technique. When you start with historical data, you might expect any differences between your model output and the historical output to be explainable - if you can't explain the difference, this could indicate a bug in your model.

I agree with creating a state to track PT uses per day (let's call it NumPatientsSeenToday). I'd consider having a custom PT object, with this state defined on that object. While you are at it, you might add a Property named MaxPatientsPerDay. Then you might add some process logic (possibly in its EvaluatingSeizeRequest) that simply rejects any seizes when NumPatientsSeenToday>=MaxPatientsPerDay. Of course you need to increment NumPatientsSeenToday each time there is a seize and reset it to 0 at the start of each day.

Link to post
Share on other sites

I see, this gives some clarity. Having Arrival table automatically reference the data in the row is very convenient. I had trouble conceptually thinking how the entity in the system would know which one it is from the reference table to know to pull the right worker. I would have to ensure everything matches from the PT names to the table. I would make the Server refer to the Arrivals table the date Order Completed and worker needed.

Link to post
Share on other sites

Some additional questions to the model. I have attached the file of the model.

We created a table that lists when the orders are generated (aka Patients entering the system). We have the middle column listing the day the patient is seen (worked on in the server) and the last column of the worker that sees that patient.

We were able to tie the worker by listing a reference in the Secondary Resource section.


1) Our model is not accurately pulling the workers at the time indicated to the appropriate entity. The model will be built with multiple servers to indicated more patient rooms. But as a test run, it is clearly not doing as instructed. Having issues addressing this. Any advice?

2) Once we get Question 1 resolved, we want to remove the time during the day for the "Order Completed" column. When we do that the time stamps changes to 12am. With a standard 8 hour work schedule for the workers. Does the 12am time stamp affect the workers and conflict with the standard schedule on the workers? The concern is just seeing the patients on that day between 8am - 5pm. The time of day does not matter.



Acute PT - Detailed w Arrival Times.spfx

Link to post
Share on other sites

Your model does seem to me to be working. I just added some animation to show what was happening. I animated the entity and added 2 labels to it. The top label is when it arrives into the model and the bottom one is when it is served by the PT.

Here is just before your workers come on shift for the first day:Capture1.thumb.PNG.0c6090fd63541350c60dc9dfb55495f7.PNG

And here is a few minutes later:Capture2.thumb.PNG.dd3f06c3d30d353efa70810d5943ca9c.PNG

It seems like things are working but it is hard to tell because your input data is not sorted by time. Simio will sort it for you, but it makes it hard to see if it is doing the right thing.

To get the patient to wait until his OrderCompleted time, you could execute a process with a Delay step where the delay time is something like Math.Max(OrderCompleted-TimeNow,0.0). If you want to adjust a clock time you can use the DateTime and/or the Math.Round functions. All times are stored in decimal hours. I provided a few examples in the FloorLabel:Capture3.PNG.44dcf126076f63dfec086cd0645a287a.PNG


I have attached my model, done in 8.144:Acute PT - Detailed w Arrival Times_DTS.spfx

Link to post
Share on other sites
  • 1 month later...

Thank you Dave for your assistance. We had to go through some paperwork to get the Simio updated to the latest version. Now had a chance to review the model. We had some questions on the results.

The ScheduledUtilization for the Popoluation and Resource is hard to interrupt what it means. I can't make sense of the values given. Along with Units Allocated, UnitsScheduled and UnitsUtilized.

TimeBusy and TimeIdel appears to make sense.

TimeoffShift and TimeoffShiftBusy seems off. I would expect near 16 hours of Time off shift.

Needs some help getting clarity how those values practically correlate to the model we built.

Link to post
Share on other sites
  • Create New...