Hi SAS Community !
For my final year work in operations management, I work with SAS Simulation Studio 15.1 to model the flow of an assembly workshop. My problem concerns the management of the operators' work schedule. (Note : annotations and ressources types are in french).
The work consists in assembling a kit of parts (“PIECES” resource) on a shaft (“ARBRE” resource), passing through three assembly stations in this order:
An operator (“OPS MONTAGE” resource) assembles these two resources. All these resources are supported by the entity named “OF”. At the end of the operations, the OPS MONTAGE resource returns to the beginning of the model to be used again. The rest is destroyed and counted in order to have the number of modules produced.
The simulation time is 64,800min, which corresponds to 10 weeks of work. A workweek of 6,480min takes place according to this program:
Day | 1st shift | 2nd shift | Night |
| |
Monday | 480 | 480 | 480 |
| |
Tuesday | 420 | 420 | 600 |
| |
Wednesday | 420 | 420 | 600 |
| |
Thursday | 420 | 420 | 480 |
| |
Friday | 420 | 420 | 0 |
| |
Saturday | 0 | 0 | 0 |
| |
Sunday | 0 | 0 | 0 |
| |
Total | 2160 | 2160 | 2160 |
| |
Ops scheduled | 6 | 6 | 5 |
|
6 operators are required for the first and second shifts, but only 5 during the night.
So I programmed a schedule for the control of shifts :
Despite many attempts to program the agenda, each time, my operators are still 6 when they must be 5. In the example below, I must have 5 operators between time 2280 and 2760. However, at time 2328 I still have 6 operators.
I think it is because the “operator resource” must return to the "resource pool block” before being impacted by the agenda. I have already tried to make several “exits” between the assembly stations but without success. To summarize, my question is as follows:
How can we get the right number of operators, exactly when we need them?
In practice, if an operator does not have time to complete the next operation, he should not start it. Ideally, the model should anticipate the shift by preventing entities from going into the next blocks if there is not enough time to perform the next operation before the shift takes place.
I look forward to receiving appropriate assistance and thank you for your consideration.
Hello, thanks for your question.
It seems that you wish to be able to adjust the capacity of a mobile resource (Operator) while the operator is in service in one of the 3 Server blocks (MP, MC or MF). In order to enable immediate schedule adjustment for a resource entity held in a holding block (i.e. a Queue, Delay, or Server),
Information about schedule based preemption can be found in the Overview for Queue, Delay or Server. For example, the information in the Server block Overview is present in the last paragraph of the section named "Holding Block Preemption". It can be found in the online simulation Studio documentation at:
The above approach will ensure that you have the correct number of Operators exactly when you need them. However, it does not give you precise control over which Operator's schedule is adjusted. If you want more precise control, you would need to use the Resource Schedule Entity. You can look at the example model docSchedEntity to get a basic idea about how to use this feature. Description for the example model can be found at the following link in the documentation:
If you need additional assistance, we could organize a Webex session with you to understand your modeling needs in greater detail. Please feel free to reach out to SAS Tech Support in that regard so that they would be able to address your question (and any other concerns). Link to SAS Tech Support:
https://support.sas.com/en/technical-support/contact-sas.html
Hello, thanks for your question.
It seems that you wish to be able to adjust the capacity of a mobile resource (Operator) while the operator is in service in one of the 3 Server blocks (MP, MC or MF). In order to enable immediate schedule adjustment for a resource entity held in a holding block (i.e. a Queue, Delay, or Server),
Information about schedule based preemption can be found in the Overview for Queue, Delay or Server. For example, the information in the Server block Overview is present in the last paragraph of the section named "Holding Block Preemption". It can be found in the online simulation Studio documentation at:
The above approach will ensure that you have the correct number of Operators exactly when you need them. However, it does not give you precise control over which Operator's schedule is adjusted. If you want more precise control, you would need to use the Resource Schedule Entity. You can look at the example model docSchedEntity to get a basic idea about how to use this feature. Description for the example model can be found at the following link in the documentation:
If you need additional assistance, we could organize a Webex session with you to understand your modeling needs in greater detail. Please feel free to reach out to SAS Tech Support in that regard so that they would be able to address your question (and any other concerns). Link to SAS Tech Support:
https://support.sas.com/en/technical-support/contact-sas.html
Thank you very much !
With your answers, I am unlocked and I can go further for other applications.
Thank you again.
Hi, it's me again,
I have another question concerning the same model.
Is there any way to save the "time progression" of my entity into a server ?
For example, my entity stay 10min into MP instead of 31,8 when she's preempted. Is it possible to continue the assembly with another resource during 21,8 min insted of restart it for 31,8 min?
Thank you
Yes, it is certainly possible to keep track of how much time is left to complete service. Instead of reading the service time from a Number holder, you can assign the service time as an entity attribute and read it in at the time of service. That way, you can modify the value of the attribute if the entity is preempted to calculate the balance of the time left to complete service.
Hope this Helps.
Nmok,
I don't see how I can do that... Is it possible to have a little example with some screenshoots ?
I don't know how to make a server reading an attribute, neither how to create the balance of time when the entity is preempted. Do I use the "Time now" block ?
Your help is precious for me, I hope we'll find a solution to make this final work a real sucess !
Thank you again
Hello Thomas,
Attached is an example project created using Simulation Studio 15.1 which would address your issue. Just unzip the contents and run the project in Simulation Studio 15.1. I hope the comments in the model will help you understand the flow. Let me know if you have any questions.
Regards
Nmok
Hi nmok,
Thank you again, your example helped me a lot !
I just have a last (I hope so) problem.
I try to put a probability of non-attendance on my operator resources. I want to put it at each shift between the time they are created and when they go into the model (to make an assembly). The goal is to have 5% chance of absenteeism on each operator for each shift.
I tried with and without attributes but in vain. I have always the same problem : it works for the first shift, but for the second, there is only one operator into the model to continue the previous assembly.
Do you have an idea or an easy way to create this probability of absenteeism on the ops ressource ?
Regards,
Thomas Muraille
Hello Thomas,
This can be modeled independently of scheduling and I can create a simple model to demonstrate that as well. A few questions from my side before I do that:
Sorry I wasn't very clear in the last message. Here my answers :
1) Yes it's exactly like that. Every 8 hours (480 min into my model). Practically, I use 479 min with 6 ops and then 1 min to 0, because it help me to highlight the shift. But whatever...
2) No, none operators have to make 2 shifts in a row. I will explain the situation :
First, 6 operators take one drive shaft and spare parts to start assembly. Into the model it's 1 OPS MONTAGE + 1 ARBRE + 1 PIECES on 1 entity. They work during 480min on 3 differents servers with differents capacities. If an operator has finished his work during the shift of 480min, he starts another one (new one or ongoing one with no operator to make it, you'll see after)
At time 480, everybody have to stop the assembly and 6 others operators have to continue it during afternoon. For the night, we do the same thing but we have only 5 operators. So there is one "onging construction" with no one to work on it. The first operator who finished his work takes this ongoing one.
All this situation is done and work very well on my model, but I have to add one more situation on it : absenteeism.
So, at time 480, I have to allocate the 6 new operators on the 6 "ongoing constructions". But sometimes, someone can't makes his shift. So before allocate the operator on the "ongoing construction", I want to put a 5% chance he won't do his job (so he just does nothing).
Practically, I use 6 ressources and it's only the number of resources in uses that change. Because the goal is just to see how many constructions I can make during one week.
I hope you understand beter.
Hello Thomas, my apologies for the delay. I shall get back to you with a solution in a few days.
nmok
Hello Thomas, Can you give me the information about the arrival rate for "OF" entity, and the starting inventory values for "Arbre" and "Pieces" entities in your model?
Hello,
No problem for the delay, thank you for coming back !
It's a push flow, so there is always an "OF" entity ready. I can't tell you the real number of "Arbres" and "Pieces" but you can put 100 Arbres and 200 Pieces to start.
Hi nmok,
I solved my problem yesterday.
Here we have the OPS MONTAGE generator and assignation. When I start the simulation, 6 operators go into the resource pool without merging. With the "Présence" switch, I put 10% of probability to each operator to go into the delay for all the duration of his shift (which symbolizes an absence). The queue block is a storage before the assignation for the job. This is a non-blocking one.
When the shift is over, all operators are pushed by the OutPreempted or OutResource port and return into the resource pool. But if an operator has finised his job during his shift, he has to start another one without having a chance to be absent. So he goes directly into the queue block instead of the resource pool.
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.