User's guide chapter 10 section 1 & 2



Previous: Chapter 9 Next: Chapter 11

Chapter 10 – Modeling Techniques

10.1 – Activity-Related Techniques

10.1.2 – Activity Time Variation

Activity time that varies randomly due to the variable nature of the entity or activity or as a result of the inconsistent behavior of the resource used at the activity.

Suggested Technique

1. Determine the probability distribution that best fits the activity time (more on probability distributions).

2. Enter the probability distribution in the Time field of the General properties sheet for the activity (alternatively, a TIME statement can be used in the action logic for the activity).

Example: A phone-in order may have a time that is triangularly distributed with a minimum of 2 minutes, a mode of 5 minutes and a maximum of 12 minutes

Activity time variation example

TO DO: In the Time field of the General properties dialog enter T(2, 5, 12) as shown above. Alternatively you could enter Action Logic for the activity: TIME(T(2, 5, 12) min).

10.1.2 – Processing Entities Concurrently at an Activity

Multiple entities are allowed to enter an activity and be processed concurrently (at the same time at the same activity), independent of other entities.

Suggested Technique

1. Set the capacity of the activity to the maximum number of entities that can occupy the activity at any one time.

Example: Because a bank uses five tellers, the Bank_Teller activity is able to concurrently and independently handle up to five Customers at any given time.

Processing Entities Concurrently at an Activity

TO DO: Create the activity with a  Capacity of  5.

10.1.3 – Attribute-Dependent Activities

The activity time or some other activity action is based on the value of a particular attribute of the entity.

Suggested TechniqueAttribute-Dependent Activities

1. Define an attribute for the entity in the Insert -> Attributes & Variables dialog. Optionally, you may use one of the predefined attributes listed in Chapter 3.12.3.

2. Set the attribute to the desired value in any action logic in the model using the assignment statement.

3. Use an IF…THEN statement in the Action logic of the activity specifying the time or other action statements to be executed based on that attribute.

IF a_Type = REGULAR THEN
{
Time 8 Min
}
ELSE
{
Time 5 Min
}

Example: Two types of Orders are processed in a system: Regular and Pre-invoiced . At the Log In activity, Orders which have been previously designated as Regular orders require an invoice to be printed and therefore take 8 minutes to process. Pre-invoiced orders take only 6 minutes to process.

TO DO: Define a descriptive attribute called Type with the descriptors Regular and Pre Invoiced. Assign the appropriate descriptor to the attribute in some Action logic prior to the Log_In activity. Enter the Action Logic (as shown above) to determine the type of order and act accordingly.

Important information to be aware of If the attribute assignment is based solely on percentage and this is the only activity where the attribute is used to make a decision, use the Percentage-Dependent Activities technique below.

10.1.4 – Percentage-Dependent Activities

The activity time or some other activity action occurring only a percentage of the time.

Suggested Technique for Activity Times

If only the activity time is different based on percentage, the following technique may be used.

1. Select the General tab of the activity’s properties dialog.

2. Enter a Discrete distribution function in the Time field for simple activity time assignment by percentage.

Example: An activity takes 5 minutes 28% of the time, and 7 minutes 72% of the time.

Percentage-Dependent Activities

TO DO: Enter the Discrete distribution (as shown above) in the Time field.

See Also To learn more about the Discrete distribution, see Distributions in Chapter-3.12.1.

Suggested Technique for Activity Actions

1. In the Action logic of the activity, use the Percent() function in an IF…THEN statement.

2. Define Action logic for the true and false cases of the Percent() function.

Example: Twenty percent of the time the X_Ray activity requires the use of a Specialist for 30 minutes. The other 80% of the time X_Ray simply takes 15 minutes with no resource required.

Percentage-Dependent Activities

TO DO: In  X_Ray ’s Action Logic, enter the logic as shown above.

10.1.5 – Assembly Activities

Attach or join one or more entities (e.g. component parts) to a base entity.Assembly Activities

Note that in many instances you may not need to model the actual entities being joined but only the time to join them. If it is known, for example, that the components assembled to a base entity are always available when needed, it is sufficient to specify an assembly time for the base part at each assembly station as it moves through the process.

Suggested Technique

If it is necessary to model the component entities feeding into the assembly activity, do the following:

1. Route the main or base entity into the assembly activity using any routing other than an Attach.

2. Connect each storage or activity holding the entities to be attached to the assembly activity using the Attach routing (each type of component to be assembled must come from a separate storage or activity).

 Example: Four Wheels and a Handle are assembled to a Wagon at the Assembly station

TO DO: Route the Wagon by any routing other than an Attach or Pickup. Route the Wheel (quantity of 4) and the Handle using an Attach routing for each as shown above. The time to perform the assembly activity may be defined in the activity’s Time field.

10.1.6 – Disassembly Activities

Detach one or more entities from another entity to which they have been attached.

Suggested TechniqueDisassembly Activities

1. Create an activity where the disassembly is to occur and define the disassembly time.

2. Use a Detach routing for the entities to be detached from the assembly. (Use Name = entity_name in the Condition field to detach only certain entities.)

3. Define a routing (not a Detach) for the entity to which the others were attached (the base or main entity).

Important information to be aware of If you want to separate one or more entities from another entity and they have not been previously attached to the entity somewhere in the model, use the create routing. See 10.2.2 Creating Entities.

Example: A store rents Skis to Customers for a random period of time and the Customer later returns the Skis to be checked back into the Ski Storage.

TO DO: Attach the Skis to the Customer at the Rental activity. Define the random rental time in the Rental activity, then route the Customer to the Return_Skis activity. Detach the Skis from the Customer using a Detach routing as shown above and route the Customers out of the Return_Skis activity with a 100% routing.

10.1.7 – Recurring Activities

An activity through which the same entity passes multiple times, possibly with a different activity time or routing with each pass.

Suggested TechniqueRecurring Activities

1. Define an attribute called Pass (or another appropriate name).

2. In the activity Action logic, increment the Pass attribute: INC Pass

3. Use an IF…THEN statement in Action logic to specify a different activity time for each pass through.

4. Use Conditional routings based on the value of Pass, e.g. Pass = 1 , or Pass =2 if the routing is different with each pass.

Example: A machined Part must pass through the same Wash activity twice. The wash cycle and the routing are different for each pass. The first time through the Part is washed for 5 minutes and then it goes to Station5. The second time through, the Part is washed for 3 minutes and then it goes to Station6.

TO DO: Define an attribute called Pass. Define action logic for the Wash activity as shown above. Connect Wash to each station with conditional routings, their condition fields set as shown above. Route the Part from Station5 back to the Wash activity.

10.1.8 – Grouping or Batching After an Activity

Collect two or more entities into a batch or group after an activity in order to move them onto the next activity as a batch. Useful for accumulating a batch of a specified quantity or recreating a batch that had been previously batched.Grouping or Batching After an Activity

Suggested Technique (batching a specified quantity)

1. Specify an output queue capacity for the activity that is at least as great as the largest batch size.

2. In the Batching tab, select Batch for After Activity.

3. Specify the quantity to be batched.

Example: In producing TO-DO pads, the printer groups the pads into batches of 50 as they come off the press (after the Printing activity). The pads are then routed to the Padding activity and then to the Cutting activity.

TO DO: Select the Batching tab of the Printing activity and choose Batch for After Activity, then enter a Batch Size of 50. Select the General tab and enter 50 in the Output Queue Cap. field.

10.1.9 – Grouping or Batching a Variable Quantity at a Specific Time

Collect two or more entities into a batch or group after an activity or queue in order to move them onto the next activity as a batch. Useful for holding entities for daily processing.

Suggested Technique (batching a variable quantity)

1. Make the routing prior to batching activity an Attach routing. In place of a quantity to attach, insert the word ALL.

2. Place a new (temporary) entity with an arrival connector to the batching location.

3. Set the arrival type to match your batching pattern. Often a Daily Pattern arrival will provide all the flexibility needed to set batching times.

Example: Product orders arrive throughout the day but are not processed until 4:00 PM

Grouping or Batching a Variable Quantity at a Specific Time

TO DO: Create a new entity that will act as a trigger to cause batching to occur. Create a Daily Pattern arrival for the “trigger” entity. Set the pattern of arrival, for each day, to have a single entity arrive at the time the batch is to occur. Create a queue, or holding location, for the entities that will be batched. Make the routing an Attach routing from the queue to the batch location with a quantity of ALL.

10.1.10 – Ungrouping or Unbatching After an ActivityUngrouping or Unbatching After an Activity

Separate an entity batch into individual entities after the completion of an activity. It is assumed that entities have been previously batched. To create entities from a single entity that has not been batched, see 10.2.2 Creating Entities.

Suggested Technique

1. Select Unbatch in the After Activity section of the Batching tab for the activity.

 Example: After being painted and dried in batches, Parts are unbatched before moving on. The Parts enter the Dry activity already grouped (in the Paint activity). They are dried as a batch and then unbatched to be routed to the next activity individually.

TO DO: Select the Dry activity’s Batching tab. Choose Unbatch for After Activity. You may need to define an output queue for the activity if you don’t want to block up the paint and dry activities.

 See Also To see how the Parts are grouped before the Paint activity, see Grouping or Batching Before an Activity.

Important information to be aware of All batches or groups are unbatched when the batched entity exits the model in order to complete statistics collection on each entity.

10.1.11 – Grouping or Batching Before an Activity

Collect two or more entities in the input queue of an activity in order to process them together as a batch. Useful for batching a specified quantity or for rebatching a batch of items that had been previously unbatched. To unbatch entities after the operation, see Ungrouping or Unbatching After an Activity.

Suggested Technique (batching a specified quantity)

1. Specify an input queue capacity for the activity that is at least as great as the largest batch size. (Activity input queues are automatically set to 999 as the default capacity.)

2. In the Batching tab, select Batch for Before Activity.

3. Specify the quantity to be batched.

Example: Parts are collected in groups of ten and painted in an automatic painting process. The Parts enter the Paint activity input queue individually, they are grouped in sets of 10, painted, and routed to the Dry activity as a group.

Grouping or Batching Before an Activity

TO DO: Select the Paint activity’s Batching tab. Choose Batch for Before Activity and set the quantity to be batched at 10.

See Also To see how the Parts are ungrouped after the Dry activity, see Ungrouping or Unbatching After an Activity.

10.1.12 – Rebatch to a Previous Quantity

Create a batch that is the same size as a previous batch without specifying a quantity. This allows the batch size to be set in one place and all subsequent batches to be set automatically. To unbatch entities after the operation, see Ungrouping or Unbatching After an Activity.Rebatch to a Previous Quantity

Suggested Technique (re-creating a batch)

1. Specify an input queue capacity for the activity that is at least as great as the largest batch size. (Activity input queues are automatically set to 999 as the default capacity.)

2. In the Batching tab, select Rebatch for Before Activity

Example: A batch of 48 PC boards must be unpacked (unbatched) at the Receiving activity, individually inspected at the Inspection activity, and then moved individually (on a conveyor) to be rebatched at the Packaging activity.

TO DO: Select Rebatch for Before Activity in the Batching tab of the Packaging activity. Then enter a number greater than or equal to 48 in the Input Queue Cap. field in the General tab.

 Important information to be aware of The Rebatch option may also be used to create a batch for arrivals defined with a quantity greater than one. See Batching.

10.1.13 – Ungrouping or Unbatching Before an Activity

For entities routed to an activity as a batch, it may be desirable to unbatch the entities prior to the activity (in the input queue) for processing each entity individually.

Suggested Technique

1. Select Unbatch in the Before Activity section of the Batching tab for the activity.

Example: The sales department accumulates a stack of 20 purchase orders, Orders , which move together as a batch to accounting for billing. At the Billing activity, an invoice is created for each purchase order and sent on individually to a data entry activity.

Ungrouping or Unbatching Before an Activity

TO DO: Select the Billing activity and select the Batching tab. Now choose Unbatch for Before Activity as shown above.

 Important information to be aware of If you want to accumulate the same entities back into a batch after the activity, select Rebatch for After Activity and make sure an output queue capacity is defined to meet or exceed the quantity that will be rebatched.

10.1.14 – Processing Individual Entities from a Batch

A batched entity enters an activity input queue where each entity in the batch is processed individually. The entities may be rebatched optionally in the output queue.

Suggested TechniqueProcessing Individual Entities from a Batch

1. Route the previously batched entity to the activity. Make sure the activity has an input queue capacity greater than zero (the default is 999).

2. In the activity’s properties dialog under the batching tab, select Unbatch for Before Activity. (Optionally select Rebatch for After Activity if you wish to have the entities regrouped in the same quantity as they came in.)

Example: A batch of 48 PC boards must be unpacked (unbatched) and individually inspected at the Inspection activity and then batched together again before they are moved to the Packaging activity. (It is assumed that the PC Boards have been previously batched.)

TO DO: Select Unbatch for Before Activity and Rebatch for After Activity in Batching tab of the Inspection activity. Enter 48 (or a higher number) in the Output Queue Cap. field in the General tab.

Important information to be aware of If individual entity statistics are unimportant, it is easiest to leave the batch intact at each activity (or let a single entity represent the batch) and specify an activity time equal to the time needed to process the entire batch at the activity. See GroupQty( ) to change the time based on quantity in the batch.

10.1.15 – Scheduling Activities

Normally, if all activities may be performed during the same shift or block of time (e.g. an 8 to 5 shift), it is unnecessary to simulate the activities by shift. In such cases you simply run the simulation for a time equal to the sum of all the time periods. For example, to model a full week of a process that is performed from 9 a.m. to 5 p.m., Monday through Friday, simply run the simulation for 40 hours.

In situations where one or more activities are performed during different shifts or time periods, it may be useful to reflect this difference in a schedule during the simulation. In such instances you must decide whether it makes sense to model full days or consolidate only those portions of each day when work is being done.

Suggested Technique

1. Define a default schedule for all activities that occur during “normal” hours as follows:

1. In the Simulation -> Options dialog (Files tab), select Default Activity Shift File and click Create Shift… to open the shift editor.

2. Using the Shift Editor , specify a shift to be used as the normal or default shift.

3. After closing the Shift Editor, assign the created shift file as the Default shift.

2. Define a schedule for each activity that has a working period that is different than the normal working period. This is done as follows:Scheduling Activities

1. Select Create Shift… in the Activity dialog under the Schedule tab. This opens the Shift Editor.

2. Using the Shift Editor, specify a shift to be used for this activity.

3. Enter the name of this shift file in the Shift File field of the Activity dialog.

Example: Orders arriving between 8 a.m. and 5 p.m. are placed in an in-basket. Processing of orders, however, is done at 11 a.m. and 4 p.m.

TO DO: Create a shift file for 8:00 a.m. to 5:00 p.m. and enter it as the default activity shift file in the Options dialog (the in-basket will use this shift). Create another shift file 11:00 a.m. to 11:30 p.m. and 4:00 p.m. to 4:30 p.m. and enter it as the shift file for the Process Order activity.

See Also For creating, editing, and assigning shift files, see Shift Definition. Also see Shifts & Breaks for Resources.

10.1.16 – Holding Entities Until a Condition is Satisfied

Only allow one part at a time to enter a section of the process.

Suggested Technique

1. Create a global variable.

2. Increment the variable when a part enters the capacity limited section of the process.

3. Decrement the variable when a part leaves the capacity limited section of the process.

4. Use a Wait Until statement to limit the number of parts that enter the capacity limited section of the process.

Example: To avoid clogging a production system, one part at a time is allowed to enter a section of the process that has recursive loops.

Holding Entities Until a Condition is Satisfied

TO DO: Create a global variable named Counter (this can be any name). Increment the counter when the entity enters the section of the process you want to limit. Decrement the counter when the entity leaves the section of the process you want to limit. Use a Wait Until statement to hold entities until the proper condition exists.

 See Also To learn more about the Wait Until statement, see WAIT UNTIL.

10.1.17 – Interrupting an Activity

In situations where an activity is scheduled to go off shift or on break, it is sometimes desirable to interrupt the current activity rather than wait until it is finished.

Suggested Technique

1. Define and assign a shift file as described in Chapter 10, Section 10.1.15, Scheduling Activities.

2. Check the interrupt box in the schedule dialog.

Example: An invoicing activity is actually performed by people who go to lunch at noon even though no resources are assigned to the activity; the resources are assumed since the activity time is the focus of the model. When the assumed people go to lunch and on break, the activity is shut down even if it’s in the middle of processing an invoice.

Interrupting an Activity

TO DO: Assign the shift file to the activity. Check Interrupt current activity… as shown above.

10.2 – Entity-Related Techniques

10.2.1 – Assembling Entities

Attaching one or more entities to a base entity.

Suggested Technique

1. Use a percentage or conditional routing to the assembly activity for the base entity.

2. Use the Attach routing for each entity to be attached to the base entity.

Example: In the final assembly step of a bicycle assembly line, two pedals and the seat are assembled to each bicycle. Assembly time is four minutes.

Assembling Entities

TO DO: Create the activity and storages and make the connections as shown above. In the Attach routing for the pedals, enter a quantity of 2 in the properties dialog as shown. Enter 4 in the Time field of the Final Assembly activity.

10.2.2 – Creating Entities

One or more new entities are created or split off from another entity at an activity. (The values of any user-defined attributes are the same as those of the entity that triggered their creation.)

Suggested Technique

1. Define a routing from the activity where the creation occurs (this is the routing to be used for all entities created by the activity).

2. Select the connection and choose Create from the Type list in the properties dialog.

3. Enter the name of the newly created entity in the Created entity name field.

 Important information to be aware of When you add an additional text label to an entity, place the label on the center of the entity. Otherwise, the entity will appear larger during simulation.

4. In the Entities to be created field, enter the quantity of entities the activity will create for each entity coming into the activity.

5. Define another routing from the activity to route the original incoming entity. (If no other routing is defined, the original entity will exit the model.)

 Example: See the example on Chapter 10, Section 10.2.5, Reuniting Entities.

See Also To learn more about creating entities, see Create.

10.2.3 – Creating Entities Under Certain Conditions

Creation of a new entity occurs only under certain conditions. You can control whether or not an entity is created or the quantity of created entities to suit changing conditions.

Suggested Technique

1. In the create route, replace the quantity created with an attribute, variable, expression or distribution.

Example: A company receives telephone calls, 25 percent of which turn into orders and 75 percent which do not. In either case, calls must be logged and terminated.

Creating Entities Under Certain Conditions

TO DO: Place a discrete distribution in the quantity field of the Create routing. See Discrete Distribution.

10.2.4 – Dividing Entities

A single entity is split or divided up into two or more entities.

Suggested Technique

1. From the activity where the entity is divided, connect one or more Create routings, each specifying the quantity of entities to create for that particular new entity.

2. Don’t create any other output routing connections for the original entity to take. This causes the original entity to exit the system.

Example: A company receives telephone orders from which an invoice and a shipping request are generated. The invoice and shipping request continue on through the model, but the call is ended at the Take Order activity.

Dividing Entities

TO DO: Create entity graphics for both of the new entities. Change both routings from the Take Order activity to Create routings with the Created entity name: entered as shown above.

10.2.5 – Reuniting Entities

Reunite or join one or more entities to the entity from which they were previously created or detached.

Suggested Technique

1. Create one or more entities at one or more activities using the Create routing.

2. Reattach the created entities to the creating entity by using an Attach routing and selecting the Attach to: entity that created it in the properties dialog of the connection.Reuniting Entities

Important information to be aware of If you desire, you may detach and reattach any reattached entity created originally by a Create routing.

Example: A loan application filled out by the customer is reviewed and a credit report is made. The application is then joined up with the Customer at the interview activity.

TO DO: Create the activities and routings as shown above, changing the connection types as indicated. Enter the entity name for the Create routing as indicated and select Attach to: entity that created it in the Attach routing.

Important information to be aware of It is a good idea to set the input queue of the Interview activity high enough to handle entities that must wait to be matched with their credit application. This will prevent gridlock.

See Also Alternatively, you could have the originating entity pick up the created entity using the Pickup routing. See Picking Up Entities for more information.

10.2.6 – Picking Up Entities

The entity requesting the pickup is attached to the requested entity.

Suggested Technique

1. Create a routing for the entity that will trigger the pickup to occur.

2. Create a pickup routing attached to the activity where the entity is to be picked up. Optionally you may designate Pickup: created entity in the properties dialog.

Important information to be aware of If desirable, picked up entities can later be detached and again reattached.

Example: A clinic processes samples provided by patients and provides results to the patient. Each patient provides a sample (Create a Sample). The patient proceeds to the waiting room to await results. The sample is processed and when ready is the triggering device to signal the patient to move forward and pick the sample up.

Picking Up Entities

TO DO: Create the activities and routings as shown above, changing the connection types as indicated. Enter the entity name for the Created entity to sample and select Pickup: created entity in the Pickup routing.

See Also Also see Pickup for additional information about the Pickup routing.

10.2.7 – Separating Entities

Separating entities that were previously attached or picked up. If the entity never had another entity attached or never picked up another entity, then use the create routing to generate the new entity (see Dividing Entities).

Suggested Technique

1. Connect the separating activity or storage to another activity or storage using the Detach routing.

2. Optionally enter a condition for detaching the entities in the properties dialog of the Detach routing. (Used when more than one entity has been attached and a specific entity needs to be detached.)

3. Route the main entity (the one from which an entity is to be detached) using any routing other than a Detach routing, i.e., use a 100% routing.

Example: An Invoice has been created by an Order and later attached to the Order for processing. Now the Invoice must be separated from the Order for filing. (Invoices are filed by number and Orders by date.

Separating Entities

TO DO: Connect the Separate activity to the filing activities with connection types as shown. Since it may be possible that other entities are attached to the Order, enter the condition as shown above.

10.2.8 – Sorting Entities

An activity that examines the name or some other attribute of an entity to determine how to route the entity for further processing. For example, you want to separate all entities by size (small, medium, and large) into separate storage bins.

Suggested TechniqueSorting Entities

1. Define an attribute to be used for sorting purposes.

2. Set the attribute to the desired value in any action logic prior to the sorting activity.

3. At the activity where the sorting takes place create Conditional route connections to each activity or storage where the sorted items go.

4. In the condition field of the routing properties dialog, enter the conditional expression for taking that path (e.g. Type = small). (Be sure that all possibilities are covered or an error occurs.)

Example: The Work_File has been assigned a Size attribute earlier in the model. Now we want to sort the work files into three different working folders (storages) to be processed later by different activities in the model.

TO DO: Connect the sorting activity to the storages with Conditional routings as shown. In the Condition field of each routing (as shown) enter Size = descriptor, where descriptor is either small, medium, or large, assigned previously to the descriptive attribute Size.

 See Also Conditional Branching.

10.2.9 – Renaming Entities

Changing the name of an entity at an arrival, activity, or move time (routing). The name is important because statistics are reported by entity name when entities exit the system.

Suggested Technique

1. Route the entity whose name will change using a Percentage, Conditional, or Renege routing.

2. In the properties dialog of the routing, enter the new name in the New name field.

Example: Callers on hold at the order desk will hang up if they have to wait too long. Some may wait as many as 8 minutes, other as few as 2 minutes, but most will wait around 3½ minutes. We want to rename the calls that hang up (renege) so that we can keep separate statistics on those calls.

Renaming Entities

TO DO: Create the renege routing and enter the triangular distribution, T(2,3.5,8), and the new name (LostCall) in the appropriate field as shown above.

Alternative Technique

1. Select the Action tab in the properties dialog of the activity or routing.

2. Enter the following logic: NewName(new_entity_name)
where new_entity_name is the name you want to change it to. Note that the new name must be a name that has already been defined for an entity on the layout. This will change the entity’s name and graphic.

Example: Depending on an attribute named Color , a Part is renamed. If the Color is red, the Part is renamed Reject . If the Color is blue, the Part is renamed GearA . And if the Color is green, the Part is renamed GearB to indicate a quality difference and therefore a different use in the plant.

Renaming Entities Alternative Technique

Action Logic:

IF Color = red THEN NewName(Reject)
IF Color = blue THEN NewName(GearA)
IF Color = green THEN NewName(GearB)

TO DO: In the routing’s Action logic, enter the IF…THEN statements shown above to change the entity’s name according to the value of the Color attribute. Place entities on the layout named Reject, GearA and GearB.

See Also To learn more about the NewName function, see NEWNAME.

An entity can be renamed using either the New Name drop down list in a routing Properties Dialog Box, or the NEWNAME statement in action logic. When renaming, all attributes from the original entity are inherited except the system created attributes ID and Name. The system created attributes which are inherited are Cost, CycleStart, and VATime.

10.2.10 – Randomly Assigning Entity Attribute Values

An entity attribute is assigned a different value or descriptor based on a random percentage. This applies to both predefined attributes such as Cost and user-defined attributes that are defined in the Attributes & Variables dialog under the Insert menu.

Suggested Technique

1. Define the entity attribute.

2. Assign a value or descriptor to the attribute in Action logic using the userdefined distribution function. For example: Color = D2(30, red, 70, blue)

Example: Eighty percent of the time an insurance claim form is for personal injury and 20% of the time for property damage.

Randomly Assigning Entity Attribute Values

TO DO: Define the descriptive attribute called Type in the Attributes & Variables dialog under the Insert menu with PER and PROP as descriptors. Enter the Action logic as shown above in the arrival’s Action logic tab.

10.2.11 – Customer RenegingRenaming Entities

A customer waiting for service decides to leave rather than continue waiting.

Suggested Technique

1. Route the customer to the desired activity.

2. Make sure this activity has sufficient Input queue capacity to hold waiting customers.

3. Create a Renege routing from that activity to another storage or activity, or leave it unconnected so the customer will leave the system entirely.

4. Set the Renege after time for the amount of time the customer will wait before leaving. (This is usually a distribution to indicate variability of a customer’s patience.)

Example: Callers on hold at the order desk will hang up if they have to wait too long. Some may wait as many as 8 minutes, other as few as 2 minutes, but most will wait around 3½ minutes. We want to rename the calls that hang up (renege) in order to keep separate statistics on those calls.

TO DO: Create the renege routing and enter the triangular distribution, T(2, 3.5, 8), and the new name in the appropriate fields as shown above.

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

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.

User's guide chapter 10 section 5 & 6



Previous: Chapter 9 Next: Chapter 11

10.5 – Resource-Related Techniques

10.5.1 – Using a Resource at an Activity

A resource (employee, machine, etc.) is used at an activity to perform the activity.

Suggested Technique

1. Create the activity where the resource will be used.

2. Create the resource. (Be sure that the Object Type field in the properties dialog indicates Resource.)

3. Connect the resource to the activity.

 Important information to be aware of Alternatively, you may use the GET and FREE statements in the Action logic of the activity. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

Using a Resource at an Activity

TO DO: Create the resource and connect it to the activity as shown above.

 Important information to be aware of For simple situations like the previous one, it may not be necessary to model the resource unless there are times when it is unavailable due to other activities requiring its use, since it would probably be of no interest to the modeler.

See Also To learn more about resources, see Resources and Resource Assignments.

10.5.2 – Using a Resource to Move Entities

Routing an entity with the use of a resource (employee, machine, etc.).

Suggested Technique

1. Create the routing connection where the resource will be used.

2. Create the resource. (Be sure that the Object Type field in the properties dialog indicates Resource .)

3. Connect the resource to the routing connection using the line tool.

 Important information to be aware of Alternatively, you may use a GET statement in the Action logic of the routing connection and a FREE statement in the Action logic of the next activity. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the routing or activity.

Example: Patients in a waiting room are escorted to a treatment room by a nurse.

Using a Resource to Move Entities

TO DO: Connect the nurse (once created as above) to the appropriate routing.

See Also To learn more about resources, see Resources and Resource Assignments.

10.5.3 – Keep a Resource throughout Multiple Activities

A resource is continuously used throughout a number of activities, including the moves from one activity to another. Useful in modeling resources such as case workers.

Suggested Technique

1. Connect the resource to the activity where the resource will first be used and select Get from the Type field in the properties dialog of the connection.

2. Connect the resource to the activity where the resource will last be used and select Free from the Type field in the properties dialog of the connection

Important information to be aware of Alternatively, you may use the GET and FREE statements in the Action logic of the appropriate activities. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

Example: Incoming jobs to a copy center are received, copied, and invoiced all by the same clerk in three consecutive steps.

Keep a Resource throughout Multiple Activities

TO DO: Connect the clerk to the Receive activity and select Get from the Type field in the properties dialog. Then connect the clerk to the Invoice activity and select Free from the Type field in the properties dialog.

 See Also To learn more about resources, see Resources and Resource Assignments.

10.5.4 – Using Multiple Resources

Using more than one resource (employee, machine, etc.) to perform an activity.

Suggested Technique

1. Connect the resources to the activity or routing.

2. Make sure that each connection Type is either a Get or Get and Free.

Example: A dental treatment requires the use of a dentist and an assistant.

Using Multiple Resources

TO DO: Connect both resources to the activity.

 Important information to be aware of Alternatively, you may use the GET or JOINTLYGET and FREE statements in the Action logic. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity. If each resource is required for different lengths of time, use Get connections and specify the times followed by FREE statements in the activity Action logic. For example:

TIME(3.5 min)
FREE Doctor
TIME(5 min) // Nurse used for 5 additional minutes
FREE Nurse

10.5.5 – Using Alternate Resources

Designating a resource to use as an alternate if the primary resource assigned to the activity or move is unavailable.

Suggested Technique

1. Connect the primary resource to the activity or routing.

2. Connect the alternate resource to the primary resource connection.

 Important information to be aware of Alternative resources may also be captured using the GET or JOINTLYGET statement with the OR operator. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

Example: Normally the loan officer will help the customer with the loan application at the Application activity, but if no loan officers are available, a customer service representative can take the loan application.

Using Alternate Resources

TO DO: Connect the Service Rep (the alternate resource) to the assignment connection between the Loan Officer and the Application activity as shown above.

See Also To learn more, see Resources and Resource Assignments.

Important information to be aware of If you use a GET connection (instead of a GET & FREE) to capture a resource and then connect an alternate resource to that connection, you must connect a free connection to both the primary and alternate resources when the resource is freed. One free connection is then executed and the others are ignored; the correct resource is freed without you knowing which one was captured.

10.5.6 – Determining the Resource Being Used

When an alternate resource is captured by an entity and a decision or activity time depends on which resource was captured, the OwnedResource function may be used to determine which resource was captured.

Suggested Technique

1. In the action logic of the activity or routing, use the OwnedResource() function without a number between the parentheses to test the name of the most recently captured resource.

2. Execute the appropriate action based on the name returned by the OwnedResource() function.

 Important information to be aware of Alternatively, you may use the GET statement with an OR separating the alternate resources in the Action logic to capture the resources, and then use the OwnedResource() function to determine the captured resource. Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

Example: A receptionist usually answers the phone, but if the receptionist is busy, the filing clerk will answer the phone. If the filing clerk answers the phone, the call lasts about 7 minutes, otherwise it takes about 5 minutes.

Determining the Resource Being Used

TO DO: In the Action logic of the Answer Phone activity, enter:
IF OwnedResource() = Clerk THEN TIME(7 min)
ELSE TIME(5 min)

 See Also To learn more about the OwnedResource() function, see OwnedResource(n).

10.5.7 – Prioritizing Resource Usage

When two different activities each have an entity waiting to use the same resource, one activity may have higher priority over another. When that is the case, the resource will be used at the activity with a higher priority specified in the resource connection.

Suggested Technique

1. Select the resource connection that is attached to the activity with a higher priority.

2. Enter a priority in the Priority field between 0 and 99. The higher the number the higher the priority (the default is 0).

3. Enter the appropriate priorities in the properties dialogs of the remaining resource connections that must be prioritized.

 Important information to be aware of Alternatively, you may use the GET or JOINTLY GET statements in the Action logic with a priority set off by a comma for the resource: GET Resource1, 99 . Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

 Example: A grocery store uses their available cashiers to restock shelves during slow times, but their cashiering duties have a higher priority than restocking. Note: For the priority to work, customers must be waiting in line (in the input queue) when the resource becomes free. If people are not waiting, the priority will not be the determining factor for selection.

Prioritizing Resource Usage

TO DO: Connect the worker to both Restock and Cashiering activities, but enter a priority of 1 for the cashiering connection. (The default for the other connection is a priority of 0.) When there are available cashiers, they will respond first to the cashiering activity since it has a higher priority.

 See Also To learn more about resources, see Resources and Resource Assignments.

10.5.8 – Interrupting Resources

Taking a resource off a task to perform another whether or not it has finished the original task. Then the resource returns to the interrupted task to finish it.

Suggested Technique

1. Select the resource connection that is attached to the activity or routing that should always receive immediate attention.

2. Check the Respond immediately box in the properties dialog of the resource connection.

 Important information to be aware of Alternatively, you may use the GET or JOINTLYGET statements in the Action logic with a priority of 100 set off by a comma for the resource: GET Resource1, 100. (The 100 is an interruptive priority.) Connected resources will always be captured before resources specified in a GET statement. On the other hand, resource connections that free a resource occur after any Action logic for the activity.

Example: A receptionist must type up dictations and answer the phone. When the phone rings the receptionist must interrupt typing the current dictation and answer the phone.

Interrupting Resources

TO DO: Make the connections and check the Respond immediately box as shown above.

10.5.9 – Scheduled Equipment Maintenance

Scheduling equipment for regular maintenance so that it is unavailable for use during certain periods. (If maintenance is done during off hours, it can be safely ignored in the model.)

Suggested Technique

1. Assign a shift to the resource to indicate scheduled downtime (for maintenance or other purposes). For information on creating and assigning shifts, see Defining & Editing Shift & Break Blocks.

 Important information to be aware of Whenever possible, use the shift schedule for scheduled interruptions.

10.5.10 – Equipment Failure

A resource, such as a machine, fails during the simulation.

Suggested Technique

1. Select the resource for which you want to define random failure.

2. In the properties dialog, click on the Availability tab and select the Time option button.

3. Enter the appropriate distributions in the Time between interruptions (the time between failure) and the Interruption time (the repair time) fields.

Example: A copy machine breaks down at random intervals between 5 and 115 hours. The repair takes between 1 and 11 hours.

Equipment Failure

TO DO: Enter the distributions as shown above in the appropriate fields.

 Important information to be aware of If the time defined in the activity or routing where the resource is being used is lengthy, you may want to break up the activity or routing into smaller steps to allow for possible equipment failure, since the resource will not go down until the current activity or routing has freed it. Therefore, modeling equipment failure becomes more statistically significant over multiple replications.

10.5.11 – Employee Absenteeism

Employees, for one reason or another, are not always available. An employee may miss a day, half day, or an hour of work.

Suggested Technique

1. Select the employee (resource) to display its properties dialog.

2. Click on the Availability tab.

3. Select the Time option and enter a Time between interruptions (the number of hours between the employee’s absences). This is usually a distribution to indicate the variability of absenteeism.

4. Enter the number of hours the employee is absent in the Interruption time field. Often this is 8 hours to indicate a full day of work missed. (It could also be a distribution.)

Example: The assembly line has 10 workers. Each worker misses a day of work an average of every 30 days worked (Uniformly distributed between 15 and 45 days).

TO DO: Select the Workers resource and click on the Availability tab. Select Time and enter the values as shown above, using a distribution to introduce variability to absenteeism. Multiply the distribution described above by 24 ash shown below in order to achieve units of days instead of hours.

Employee Absenteeism

10.5.12 – Shifts & Breaks for Resources

In situations where one or more resources are available during different shifts or time periods, it may be useful to reflect this difference in a schedule during the simulation.

Suggested Technique

1. Define a default schedule for all resources that are available during “normal” hours as follows:

1. In the Simulation -> Options dialog (Files tab), select Default Resource Shift File and click Create Shift file… to open the shift editor.

2. Using the Shift Editor , specify a shift to be used as the normal or default shift.

3. After closing the Shift Editor , assign the created shift file as the Default shift in the Options dialog.

2. Define a schedule for each resource that has a working period that is different than the normal working period. This is done as follows:

1. Select Create shift file… in the resource properties dialog under the Shift tab. This opens the Shift Editor.

2. Using the Shift Editor , specify a shift to be used for this resource.

3. Enter the name of this shift file in the Shift file field of the Shift tab.

Example: A Part arrives from an outside vendor and must be inspected and placed in storage before it can be used. The same number of workers are assigned to the Assembly activity both the day and the swing shift, but the technicians assigned to the Inspection activity are scheduled only for the day shift.

Shifts & Breaks for Resources

TO DO: Create a shift file for day and swing shifts (7:00 a.m. to 12 p.m. with two 1 hour lunch breaks) and enter it as the default resource shift file in the Options dialog. Create a day shift file (7 a.m. to 3 p.m. with a hour lunch) and enter it as the shift file for the Tech resource. Check the Interrupt current activity to go off shift or on break box so that the Techs can go home at 3 p.m. even when they are in the middle of inspecting Parts.

 See Also For more information on creating, editing, and assigning shift files, see Defining & Editing Shift & Break Blocks.

10.5.13 – Consumable Resources

Modeling consumable resources such as money, energy, water, etc. Useful for modeling the consumption and replenishment of a resource.

Suggested Technique

1. Create a variable to represent the consumable resource (see Variables).

2. When an activity, storage, or routing uses a consumable resource, decrement the variable’s value using the DEC statement in the Action logic.

3. When the resource is replenished in the model, increment the variable’s value using the INC statement in the appropriate Action logic.

Example: A hydro-electric power plant wants to track its usage of water, a consumable resource. Power Request (the entity flowing through the model) has an attribute called BTU indicating the energy level required to produce the needed power. The Steam activity uses 1,000 gallons of water for every BTU, and the Recycle activity restores about 70% of the water back into the system. The question is, how many gallons are not recovered.

Consumable Resources

TO DO: Create a variable called v_Water. Enter the Action logic as shown above for the appropriate activity.

10.5.14 – Resource Sharing

Sharing resources between two or more activities. Useful when a resource may be used at more than one activity.

Suggested Technique

1. Connect the resource to the activities that use it.

2. Optionally define priorities where activities have higher or lower priority.

3. Check respond immediately when an activity may interrupt another activity’s use of the resource.

Example: A law office has a shared pool of 8 paralegals that perform various activities in the office. When a file is routed to the Point-of-Law Research activity a paralegal is required, and when a file is routed to Appellate Research a paralegal is also required. Both activities have been defined with a capacity of 8 in order to take full advantage of the paralegals when they are available.

Resource Sharing

TO DO: Define the Paralegal as a resource with a quantity of 8 as shown above. Connect the Paralegal to the two activities which require their service. Once a paralegal is available, the activity that is waiting for him or her may be performed.

10.5.15 – Employee Availability

Taking into account the employee’s additional duties, not defined in the model, using resource availability. Useful when an employee is not always available to perform the activity assigned to him or her in the model due to personal circumstances or extraneous duties.

Suggested Technique

1. Select the resource to which additional duties are to be assigned.

2. In the properties dialog, select the Availability tab.

3. Use the percentage option to indicate the percentage of time the employee is available to perform duties within the model.

 Example: A Support Technician is primarily responsible for answering technical support calls, however, about 15% of his time is spent in administrative duties and other activities unrelated to the process.

Employee Availability

TO DO… Select the Technician resource and click on the Availability tab. Enter 85 in the Percent field. Now the Technician is available 85% of the time and performs duties and activities outside the scope of the model 15% of the time.

 Important information to be aware of Optionally, you can assign the resource to one or more activities that represent the extraneous work. Use a periodic arrival to have tasks randomly arrive at these activities.

10.6 – Storage / Inventory Techniques

10.6.1 – Stock Replenishment

A new order is placed when the input queue of an activity, or the contents of a storage, falls to the re-order level specified in the Order Signal. The activity’s input queue, or the storage’s contents must first reach a level higher than the re-order level, then fall to that level, or an order will never be placed. Therefore the size of the activity’s input queue or storage’s capacity must be at least 1 larger than the re-order level.

Suggested Technique

1. Create an ordered arrival connection from the entity to be ordered to the activity or storage where it enters the process.

2. Connect the storage or activity where the inventory level is to be monitored to an ordered arrival or routing connection.

3. Select the Order Signal connection and enter the Reorder level and the Order quantity in the properties dialog.

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: A storage area containing a box of clear plastic bags is used in the packaging line for shipping computers. When there are 30 bags left, 100 more bags are ordered.

Stock Replenishment

TO DO: Create the Ordered arrival connection from Part A to the Storage Bin. Connect the Storage Bin to the Ordered arrival. For the Order Signal, enter 30 and 100 in the Reorder level and Order quantity fields as shown above. Set the input queue of Assembly1 to zero.

 Important information to be aware of If a storage immediately follows the end point of the Order Signal (where the order arrives), the free capacity of the storage must be equal to or greater than the order quantity. If an activity immediately follows the order arrival point, the sum of the activity’s input queue and capacity must be equal to or greater than the order quantity.

10.6.2 – Produce on Demand (Make to Stock)

Producing additional items when an in-process or finished goods storage has been depleted to a certain level. Useful for producing on demand based on the monitoring of an inventory level. Can also be used for modeling a Kanban system.

Suggested Technique

1. Create an Ordered routing from an activity or storage that is to wait for an order signal before releasing more entities.

2. Connect the storage or activity being monitored to the Ordered routing connection.

3. Select the Order Signal and enter the Reorder level and the Order quantity in the properties dialog.

4. Check Place order at start if you want an order to be placed at time zero of the simulation. (This is useful to initially get entities moving in the system.)

Example: An assembly line pulls assemblies from the Storage Bin . When the Storage Bin ’s quantity drops to 30, an order is placed for 100 more assemblies. Side_Line_A then produces the assemblies from parts in Inventory and routes them to the Storage Bin.

Produce on Demand

TO DO: Create the Order Signal connection and in the properties dialog enter 30 and 100 in the Reorder level and Order quantity fields as shown. Set the input queue of Assembly1 to zero.

10.6.3 – Initializing Storage &