BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ThomasMuraille
Fluorite | Level 6

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:

  1. Primary assembly (MP) – operating time 31.8min - capacity 3 operators.
  2. Final assembly (MF) - operating time 46.8min - capacity 4 operators.
  3. Crating (MC) - operating time 22.2min - capacity 2 operators.

Sas help.png

 

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 :

 

Shifts.png

Agenda.png

 

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.

 

Soucis.png

 

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.

1 ACCEPTED SOLUTION

Accepted Solutions
nmok
SAS Employee

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),

  1. You need to connect the "OutResource" port of the Server to the InEntity port of the Resource Pool. This enables the seized Operator entity whose resource units are to be adjusted to flow back to the Resource Pool at the instant when the schedule change goes into effect.
  2. You also need to connect the "OutPreempt" port of the holding block to a block downstream to enable the entity which had seized the resource (also referred to as the controlling entity) to flow out of the holding block. What this port is connected to depends on what you wish to do with this controlling entity. If it still needs to finish service then it needs to be routed back to the service queue. If it needs to be destroyed, it needs to be sent to a Disposer block.
  3. Connections described in steps 1 and 2 need to be carried out for each of the Server blocks in your model (MF, MP and MC).

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:

https://go.documentation.sas.com/?docsetId=simsug&docsetTarget=simsug_app1_sect029.htm&docsetVersion...

 

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:

https://go.documentation.sas.com/?docsetId=simsug&docsetTarget=simsug_app7_sect020.htm&docsetVersion...

 

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

 

 

View solution in original post

17 REPLIES 17
nmok
SAS Employee

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),

  1. You need to connect the "OutResource" port of the Server to the InEntity port of the Resource Pool. This enables the seized Operator entity whose resource units are to be adjusted to flow back to the Resource Pool at the instant when the schedule change goes into effect.
  2. You also need to connect the "OutPreempt" port of the holding block to a block downstream to enable the entity which had seized the resource (also referred to as the controlling entity) to flow out of the holding block. What this port is connected to depends on what you wish to do with this controlling entity. If it still needs to finish service then it needs to be routed back to the service queue. If it needs to be destroyed, it needs to be sent to a Disposer block.
  3. Connections described in steps 1 and 2 need to be carried out for each of the Server blocks in your model (MF, MP and MC).

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:

https://go.documentation.sas.com/?docsetId=simsug&docsetTarget=simsug_app1_sect029.htm&docsetVersion...

 

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:

https://go.documentation.sas.com/?docsetId=simsug&docsetTarget=simsug_app7_sect020.htm&docsetVersion...

 

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

 

 

ThomasMuraille
Fluorite | Level 6

Thank you very much !

 

With your answers, I am unlocked and I can go further for other applications.

 

Thank you again.

ThomasMuraille
Fluorite | Level 6

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

nmok
SAS Employee

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.

ThomasMuraille
Fluorite | Level 6

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

nmok
SAS Employee
Sure I will get back to you in a day or two.
nmok
SAS Employee

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

ThomasMuraille
Fluorite | Level 6

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

nmok
SAS Employee

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:

 

  1. Shift change happens at specific times in the simulation, correct? (for example every 8 hours?)
  2. So you are trying to model a situation where the schedule requires an operator to come back to work but with 5% probability, he\ she will not show up? And also if an operator is working 2 shifts in a row, then he\ she might choose not to continue working the second shift with 5% probability?

 

ThomasMuraille
Fluorite | Level 6

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.

nmok
SAS Employee

Hello Thomas, my apologies for the delay. I shall get back to you with a solution in a few days.

 

nmok

nmok
SAS Employee

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?

ThomasMuraille
Fluorite | Level 6

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.

ThomasMuraille
Fluorite | Level 6

Hi nmok,

 

I solved my problem yesterday.

 

Gestion présence.png

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.

SAS INNOVATE 2024

Innovate_SAS_Blue.png

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. 

Register now!

Multiple Linear Regression in SAS

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.

Discussion stats
  • 17 replies
  • 1113 views
  • 4 likes
  • 2 in conversation