You are here:Home>Learning Center>User's Guide>Chapter 10 - Modeling Techniques>Chapter 10 – Section 3 & 4

User's guide chapter 10 section 3 & 4

Previous: Chapter 9 Next: Chapter 11

10.3 – Arrival-Related Techniques

10.3.1 – Constant Supply of Entities

An arrival that supplies entities to the attached activity whenever that activity has the capacity to take more entities (any input queue capacity is ignored).Constant Supply of Entities

Suggested Technique

1. Create the entity and the activity at which it will arrive.

2. Create an arrival connection to the new activity from the entity.

3. On the arrival connection’s properties sheet, select Continuous from the Type pull-down box.

Example: The beginning of an assembly line has a constant supply of Part_A . Whenever the first assembly station ( Assembly_1 ) has a need for Part_A , it’s there.

TO DO: In the arrival connection’s properties sheet, select Continuous from the Type pull-down box. (This is the default connection type.)

10.3.2 – Fixed Interval Arrivals

Arrivals in which one or more entities arrive at fixed time intervals.Fixed Interval Arrivals

Suggested Technique

1. Create the entity and the activity at which it will arrive.

2. Create an arrival connection to the new activity from the entity.

3. On the arrival connection’s properties sheet, select Periodic from the Type pull-down box.

4. Enter the time interval and select the time unit.

5. Enter the quantity of entities to arrive at each interval.

Example: A tour group convenes in the lobby of a museum every hour to start a tour. The size of the tour group is 25.

TO DO: Place the entity and activity in the model. Connect the entity and activity and select Periodic from the Type pull-down box. Enter the 60 min in the Repeat every field and 25 in the Quantity per arrival field.

10.3.3 – Random Interval Arrivals

An average number of entities arrive randomly throughout a specified period. Useful in modeling situations where no specific pattern seems to exist.Random Interval Arrivals

Suggested Technique

1. Connect the entity to the storage or activity.

2. Select the connection and choose Periodic from the Type pull-down box.

3. Enter a distribution to create randomness in the Repeat every field. (The exponential distribution is recommended, e.g., E(10) would yield a random time period with an average of ten minutes.)

4. Enter the number of entities to arrive during the period. (This is usually left at the default of 1 .)

Example: A car wash gets an average of ten customers per hour arriving at random intervals. (This can be reduced to one customer about every six minutes.)

TO DO: Connect the Customer entity to the Line storage (where customers wait in line) and select Periodic from the Type pull-down box. Enter a distribution of E(6) to create an arrival about every six minutes.

10.3.4 – Appointment Scheduling

Arrivals occurring at specifically scheduled times such as office appointment schedules.Appointment Scheduling

Suggested Technique

1. On the arrival connection’s properties sheet, select Scheduled from the Type pull-down box.

2. Click on the Define Schedule… button.

3. Use the Scheduled Arrivals dialog to define the appointment schedule (see example below).

Example: A dentist wants to model his office procedures including the appointment schedule to decrease patient waiting time. The appointment schedule is modeled using a Scheduled arrival with one patient arriving every half hour except during the noon hour.

TO DO: Create the Scheduled arrival connection. Click the Define Schedule button and create a schedule. Click the New button for each scheduled arrival. (Any changes to the edit fields are updated when you press the New button.)

Important information to be aware of You can define action logic for each scheduled arrival entry. This is done in the lower half of the Scheduled Arrivals dialog. This is mainly useful to assign specific attribute values such as patient type.

10.3.5 – Appointment Scheduling with Early/Late Adjustment

Arrivals occurring at specifically scheduled times with provision for variable early and late adjustment.

Suggested Technique

1. Define a scheduled arrival in the same manner as shown in Appointment Scheduling, except that the starting time should be adjusted down by the time the number of minutes any appointed might arrive early (the offset).

2. Define the first activity for the purpose of delaying the arrival for the distribution that defines the early or late function of the arrival.

3. On the route out of the first activity (the activity that sets the early or late delay) set the CycleStart attribute to the clock.

Example: A dentist wants to model his office procedures including the appointment schedule to decrease customer waiting time. Customers are told to arrive 5 minutes early, but experience has shown that they will arrive according to a distribution added to the scheduled time minus an offset.

If a customer had an appointment for 9:00 AM then the scheduled arrival would be set to 8:55. The first activity, “Early/Late Adjustment,” has a distribution in the time field that represents the percentage of people that arrive before the five minute period is expired. The attribute CycleStart is set to the current time so effect in the model is that the person walked in the door after the Early/Late Adjustment.

TO DO: Create the Scheduled arrival connection. Click the Define Schedule button and create a schedule by entering times that are less than the real appointment by a predetermined offset. Create an activity that has the sole purpose of delaying the arrival by a early/late distribution. Enter this distribution in the time field. In the route leaving the delay activity, set the CycleStart attribute to the CLOCK() function.

Important information to be aware of You can define action logic for each scheduled arrival entry. This is done in the lower half of the Scheduled Arrivals dialog. This is mainly useful to assign specific attribute values such as patient type.

10.3.6 – Batch Arrivals

Arrivals in which two or more entities arrive together (i.e. the arrival quantity is greater than one) and are then batched tog
ether.Batch Arrivals

Suggested Technique

1. Create a Periodic or Scheduled arrival with a temporary entity for the arrival. Set the quantity per arrival to one.

2. In the action logic of the arrival, set an attribute equal to a distribution of the quantity to be batched.

3. From the first activity define a Create route with the newly created attribute in the quantity field.

4. In the second activity set the Batch Quantity to the same newly created attribute.

Example: A theme park groups or batches its customers in the Lobby for tours and other activities. Every hour the park begins a new tour and groups the customers that have arrived up to that time. (No more than about 75 show up at one time for a tour.

TO DO: Create an arrival to a storage. In the action logic of the storage set a attribute to the distribution that represents the quantity desired. Make a Create route from the storage with the attribute used for the quantity. In the Batching Area activity set the batch size to the same attribute. Set the input queue to at least 75.

10.3.7 – Production Lot Scheduling

A production schedule in which a sequence of different items are repeatedly produced.

Suggested Technique

Production Lot Scheduling1. Create an arrival from each entity type to the starting activity. Make sure you create the arrivals in the order they occur.

2. On the arrival connections’ properties sheet, select Periodic from the Type pull-down box.

3. Enter the quantity for each entity arrival (the quantity to be produced).

4. Each Repeat every field should have the same time in order to maintain a consistent arrival sequence for each of the entity types being processed.

5. In the First time fields, enter the amount of time each arrival will be delayed from the simulation start time.

Example: An assembly line is scheduled to produce three treadmill models but can only produce one specific model at a time. The production manager wants the assembly line to repeatedly produce 20 of Model_A, 17 of Model_B, and 28 of Model_C, in that order. The theoretical or minimum time to produce a treadmill is every 10 minutes.

TO DO: Define the Periodic arrivals as shown above. In the arrivals’ properties dialog, enter the following information:

Production Lot Scheduling

 Important information to be aware of To stop the time spent waiting to begin processing from being added to the entity cycle time statistics, enter CycleStart = Clock() in the Action logic of the first activity.

10.3.8 – Job Shop Scheduling

A job shop produces a sequence of jobs with varying quantities for a specific time period, e.g., a day or week.

Suggested Technique

Job Shop Scheduling1. Create an arrival to a common starting activity, such as Start Job, that is connected from any entity.

2. Select Scheduled as the arrival Type and then click on the Define Schedule button to define the sequence of the jobs.

3. Create each job with an appropriate start time to cause them to be arranged in the right sequence. Don’t worry about the actual start time since this is determined by equipment availability.

4. In each arrival’s Action logic window (in the schedule dialog), name the entity appropriately using the NewName statement (see example below).

Example: A job shop can produce four different kinds of brackets. It receives an order for 100 PartA brackets, 175 PartB brackets, 430 PartC brackets, and 280 PartD brackets. The shop will produce the brackets in that order.

TO DO: Define the arrivals for each job as shown in the dialog above. In each arrival’s Action logic window, enter NewName(n) where n is the name of the entity (PartA, PartB, PartC, PartD).

 Important information to be aware of Rather than using a generic named entity and renaming the entity in the Action Logic of each entry in the Scheduled Arrivals dialog, you could create each entity graphically and connect them to the same activity or storage using a Scheduled arrival connection for each entity type. Alternatively, you can use a Periodic arrival and specify zero (0) in the Repeat every field. Also note that if you don’t want the time spent waiting to start processing to be reflected in the entity cycle time statistics, enter CycleStart = Clock() in the Action logic of the first activity.

10.3.9 – Reorder Point Inventory Replenishment

Ordering more stock once an inventory reaches a certain level. Useful in maintaining certain levels of stock for production processes.

Suggested Technique

1. Create an Ordered arrival connection to the activity where incoming stock arrives.Reorder Point Inventory Replenishment

2. Connect the storage or activity where inventory levels are to be monitored to the Ordered arrival connection.

3. Enter the Reorder level quantity and the Order quantity. (Quantities apply to the entity at the storage or activity.)

4. Check Place order at start if you want an order to be placed at time zero of the simulation. (This is useful in initializing the inventory at the activity or storage.)

Example: An assembly line pulls Part_A from the Storage Bin. When the Storage Bin’s quantity drops to 30, an order is put in for 100 more of Part_A. Incoming parts are then inspected and put into inventory.

TO DO: Set Part_A’s arrival routing type to Ordered. Connect the Storage Bin to the Ordered arrival. Enter 30 and 100 in the Reorder level and Order quantity fields as shown above. Set the input queue of Assembly to Zero and the processing time to 10 minutes. For another example, see Stock Replenishment.

10.3.10 – Customer Arrival Patterns

The arrival rate of customers fluctuates according to a daily pattern. Useful for modeling customer traffic with busy and slow periods.

Suggested Technique

Customer Arrival Patterns1. Create an arrival connection from the customer entity to an activity or storage.

2. From the arrival’s properties sheet, select Daily Pattern as the arrival Type.

3. Click on the Define Pattern… button and create the pattern with the Daily Pattern dialog (see example below).

Example: Customers enter a retail store at a rate that varies throughout the day with high and low traffic periods. The first two hours the store is open, an average of 30 customers come into the store. At lunch time, an average of 85 customers come in. Then it slows down through the afternoon until about six o’clock.

TO DO: Create the above pattern for one day and then use the Copy day and Paste buttons to copy the pattern to other days. Or each day could vary as necessary. It is recommended that 5 to 10 replications be made of the simulated day.

 Important information to be aware of If you want resources and activities to be available for only the period of time when arrivals are occurring, you should define a shift schedule corresponding to the period of the arrival pattern. To learn more, see Schedules—Shifts & Breaks.

10.3.11 – Triggers

Triggers are stand-alone sections of a model that do such things as monitor other locations in your model, change global variable values, reset counters, etc. They are typically a single entity entering a single activity, running independently of all other sections of the model. An example trigger is one used to monitor the day of the week.

Suggested Technique

1. Create a Periodic arrival which repeats every 24 hours and has a quantity of 1.

2. Create a global variable to be controlled in the trigger, and it’s value to be checked elsewhere in the model.

3. Add action logic to the activity as shown below.

Example: An entity arrives every day which increments a counter representing the day of the week. An If . . . Then statement ensures the variable value is always between 1 and 7.

Triggers Day of the Week

TO DO: Use the v_DayOfWeek global variable in other locations in the model in If . . . Then statements to cause certain actions to occur based on which day of the week it is.

10.4 – Routing-Related Techniques

10.4.1 – Percentage-Based Branching

Routing entities from one activity to one of several subsequent activities based on percentages, e.g. 40% go to one activity and 60% go to another.Percentage-Based Branching

Suggested Technique

1. Create connections from the activity (or storage) to all the possible destinations.

2. In the properties dialog for each connection, select Percentage as the routing type and enter the percentage for that route.

Example: A bank expects 10% of its lobby customers to seek out a loan officer, 75% to require a teller, and 15% to open a new account or need some other customer service.

TO DO: Connect the Lobby activity with Percentage routings as indicated above.

 Caution All percentages must add up to exactly 100%. If only two percentage routings are used, ProcessModel automatically adjusts one when you change the other in order to make the percentages balance to 100%. If there are more than two percentage routings, you must make them add up to 100% manually.

10.4.2 – Conditional Branching

Routing entities based on a condition such as the value of a variable or attribute. If a routing decision is based on a condition of the entity such as customer type, use an attribute. If it is based on a condition external to the entity such as the total number of entities processed, or the time of day, use a variable.

Suggested Technique

1. Create an attribute or variable to which the possible conditions may be assigned.

2. Create the desired routings and for each select Conditional in the Type field.

3. Enter the condition in the Condition field of the properties dialog for each routing connection.

Example: Paid invoices are routed to filing. Invoices that are current are routed to the receivables desk, and those that are 30 days past due are routed to the collections desk.

Conditional Branching

TO DO: Create an attribute called a_Status which may be assigned three descriptors ( Paid , Current , and Past_Due ). Connect the activities, select Conditional type and enter the condition on the General tab of the properties sheet as shown above.

 Important information to be aware of The order you draw conditional routes is significant. For example, if the condition on the route drawn first is always true (Condition field is left blank), the other routes will never be tested because a true condition was found on the first route.

10.4.3 – Alternate Branching

Routing entities to an alternate storage or activity when the primary routing is selected destination has insufficient capacity.Alternate Branching

Suggested Technique

1. Create the primary routing(s) from the activity or storage to the desired destination(s).

2. Create an Alternate routing, connecting it from the primary routing to the alternate destination. (Multiple Attach, Pickup, or Ordered routings should be connected directly from the activity and used with the Else routing.)

Example: Normally a car coming into the shop (at the Front Desk activity) for service is routed to the Service Bay, but when three cars are waiting for service at the Service Bay, incoming cars car may be routed to the Brakes bay for service.

TO DO: Create the activities, assigning a capacity of three to the Service Bay input queue. Connect the Front Desk to the Service Bay with a 100% routing, then connect the Alternate routing from the Percent routing to the Brakes activity.

 See Also To learn more about the Alternate routing, see Alternate.

10.4.4 – Route on Demand (Pull / JIT)

Entities are routed to the next activity only when the next activity is ready for it. Useful for simple just-in-time or pull systems.

Suggested Technique

1. Create the downstream activity with an Input queue of zero (0).

2. If you want the upstream activities to continue processing even though downstream capacity may be unavailable, create Output queues with sufficient size to continue processing without actually routing the entities downstream.

Example: A doctor’s office has three exam rooms and a waiting room. A check-in activity receives incoming patients and routes them to the waiting room storage. As soon as a patient leaves an exam room, another patient may be routed into that exam room.

Route on Demand

TO DO: Create the activities, storage, and connections as shown above. In the properties dialog of the Exam activity, set the Capacity to 3 (representing three exam rooms) and the Input Queue Size to 0 (thus pulling from the Waiting storage when a patient leaves the activity).

 See Also Take a look at Produce on Demand (Make to Stock) for an example of using the Order Signal (e.g., kanban) to accomplish nearly the same thing in a different way.

10.4.5 – Picking Up Entities

An entity is routed to an activity to pick up another entity which is waiting in the input queue of the same activity. The other entity is then attached to the entity doing the pick-up. The activity Action logic and activity time is then processed.

Suggested Technique

1. Route the entity doing the pick-up with a Pickup routing.

2. Route the entity to be picked up to the same activity as the Pickup routing. (Use any routing except Attach or another Pickup routing.)

Example: A fast food restaurant models its customers coming in and placing an order. The order is processed, and the customer picks up the order.

Picking Up Entities

TO DO: Create the Customer entity and the activities and routings as shown above. Set the Pickup route to pickup entity that it created . This assures that the Customer picks up his or her own order once it is prepared.

 See Also To learn more about the Pickup routing, see Pickup.

10.4.5 – Moving the Midsection

Right click on the route and select Route Line.How can I move the midsection of a route so it doesn’t come so close to activities that it passes by?

To relocate the middle of a route, click on the route. Then click and drag the vertex (black box mid-way through the route) to the location where you want the route to be positioned.

If the route does not have a vertex, you can add one by right clicking on the route and selecting Add Vertex. Then click your mouse on the route where you want to add the vertex.

You cannot add a vertex to a straight route. To create a bend in a straight route, drag one end of the route (or the object it is attached to) to a different location.

To remove a vertex, right click on the route and select Route Line.