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 & Queue Contents

Having an initial quantity or inventory of entities at a storage area or queue when the simulation begins.

Suggested Technique

1. Connect the desired entity to the activity or storage and select Periodic as the arrival type.

2. In the Periodic arrival’s properties dialog, enter zero (0) in the Repeat every field and the First time field. Enter the quantity to arrive in the Quantity per arrival field.

Example: At the beginning of a process, a pre-inspection storage is initialized with 1000 units of inventory.

Initializing Storage & Queue Contents

TO DO: Create the Periodic arrival connection and enter the Quantity per arrival. Enter zero (0) in the Repeat every and First time fields.

10.6.4 – Determining Inventory Levels

Having an activity check the current number of entities on-hand at a particular storage area. Useful for making decisions based on the number of entities in a storage, activity, or range of activities.

Suggested Technique

1. From the Insert menu select Attributes & Variables.

2. In the resulting dialog select the Global Variables tab.

3. Create a variable to track the level of entities at the storage (e.g., Inv_Level).

4. In the Action Logic of the storage, enter INC Var_Name , where Var_Name is the name of the variable you defined.

5. In the Action Logic of every connection routing entities out of the storage, enter DEC Var_Name , where Var_Name is the name of the variable you defined.

6. In the Action Logic of the activity from which you wish to determine the inventory level, enter an IF…THEN statement to test the value of the variable as shown in the example below.

Example: A manager wants to know how many times the business is under-stocked during the week (the length of the simulation run). He defines two variables, Times_Under and Stock_Level.

Determining Inventory Levels

TO DO: Enter the action logic as shown in the above illustration.

10.6.5 – Pulling Items Last In/First Out (LIFO)

The last entity to enter the storage is the first to exit or leave. Thus entities entering 1, 2, 3 exit in the order 3, 2, 1. Useful when it is important to model entities that are processed last in, first out.

Suggested Technique

1. Select the storage where you want to use the LIFO method.

2. Click on the Queuing order list box on the General tab of the properties sheet and select LIFO as shown below.

Example: Orders arriving in a basket (the storage) are processed last in, first out. The last order to be placed is pulled from the top of the stack to be processed.

Pulling Items Last In/First Out

TO DO: Select the storage and on the General tab of the properties sheet, select LIFO from the Queuing order list box.

10.6.6 – Highest Priority Entities First

Pull entities out of a queue based on a priority by using a real or contrived resource as the enabler to move down the routing. This could be based on dollar value, how much time they have spent in the system or even the time of day.

Suggested Technique

1. Place a priority on entities before they arrive at the queue.

2. Pull the highest priority items from the queue by using a resource to capture by priority.

3. Free the resource so that it can capture the next entity

Example: Two types of orders are placed in a storage container. High priority items represent orders for greater than $1,000 and should be processes first.

Highest Priority Entities First

TO DO: Create a attribute named a_Priority (this may be any name). Assign the priority to the entity on the arrival route before it arrives in the storage. From the storage, GET a resource as the enabler and use the priority of the entity as the priority to GET the resource.

 See Also To learn more about Resource Priorities, see Chapter 3, Section 3.7, Resource Assignments.

User's guide chapter 10 section 7 & 8



Previous: Chapter 9 Next: Chapter 11

10.7 – Decision Making Techniques

10.7.1 – Conditional Decision Making

Making a decision based on a particular condition. Useful when an activity time, action logic, or routing decision is based on the value of an attribute or variable.

Suggested Technique

To decide on a particular activity time based on the value of an attribute or variable, see Attribute-Dependent Activities.

To decide on a particular action logic based on the value of an attribute or variable, see Recurring Activities.

To decide on which routing to take based on the value of an attribute or variable, see Conditional Branching.

10.7.2 – Probabilistic Decision Making

Making a decision based on probability or percentage basis. Useful when an activity time, action logic, or routing decision is based on a random percentage.

Suggested Technique

To decide on a particular activity time based on probabilities, see Percentage-Dependent Activities.

To decide on a particular action logic based on probabilities, see Suggested Technique for Activity Actions.

To decide on which routing to take based on probabilities, see Percentage-Based Branching.

10.8 – Cost Gathering Techniques

ProcessModel and Activity-based Costing

ProcessModel’s primary costing approach is Activity-based costing (ABC), a method of tracking operating costs directly associated with processing entities. Operating costs are generally categorized as one of two types: variable and fixed. Variable costs are directly proportional to the number and type of entities processed, e.g. the number of customers serviced or the number of products manufactured. Fixed or overhead costs remain constant from period to period, regardless of the amount and type of entities processed, e.g., rent, utilities, salaries, etc. The total operating cost for a period is the sum of all variable and fixed costs for that period.

The two most commonly used methods of tracking operating costs today are traditional (volume-based) and ABC. Both methods treat variable costs in the same way; each entity processed increases variable costs by the unit cost associated with that entity.

Traditional costing and ABC treat fixed costs differently. Traditional costing allocates fixed costs to each entity according to some basis such as the direct labor costs associated with a particular entity. For example, two entity types, A and B, are processed through a system with a fixed cost of $10,000 per week. If entity A consumes 60% of the direct labor costs and entity B consumes 40%, then $6,000 in overhead would be allocated or charged to entity A and $4,000 to entity B.

With ABC we track the activities and resources used by the entities. Continuing with our example, we know that entity A accounts for 30% and entity B for 70% of the fixed costs when we consider the activities and resources used by the entities. So we are more accurate to say that the overhead cost for entity A is $3,000 and $7,000 for entity B.

The key to ABC is identifying and quantifying cost drivers such as the cost of using a resource to perform a particular activity. ProcessModel can track time-based and eventbased cost drivers, including labor costs, resource usage, activity costs, storage costs and material costs. Additional costs may be assigned in any Action logic. This gives you the capability to track any operating costs by entity type.

To evaluate the potential of a system, costs can be entered as a negative (i.e. Worker – $25/hr.), while revenue sources can be entered as a positive (i.e. completed Part $5). The output summary will provide the equivalent of a net revenue for the duration of the run.

If overhead costs are desirable to include, a resource should be defined with a per hour cost of the overhead. This resource should not be attached to any entity. At the end of the simulation the cost of “overhead” will be spread out over the length of the simulation. The decision to make the overhead number positive or negative should be determined by your other cost numbers. If other costs were negative then the overhead will also be negative.

10.8.1 – Resource Usage CostResource Usage Cost

Tracking the cost of using resources (people, machines, etc.) in the model. (The resource usage cost is added to the cost attribute for the entity that uses it.)

Suggested Technique

1. Select the resource and click the Cost tab on the properties dialog.

2. Enter the cost per hour of usage.

3. Enter the cost per use.

Example: A plumber charges $75 for a house call and then charges an additional $50 per hour for the time spent providing service.

TO DO: Select the resource and click on the Cost tab of the properties dialog. Enter the hourly cost and the cost per use.

10.8.2 – Activity CostActivity Cost

Tracking the cost of an activity.

Suggested Technique

1. Select the activity and click the Cost tab on the properties dialog.

2. Enter the activity cost when done with the entity.

3. Enter the hourly cost of the activity in process.

Example: The application review activity is modeled without the use of a defined resource, however the review is actually performed by a loan officer whose wages and benefits equal $23.45 per hour. In addition, the bank’s additional overhead cost has been estimated to average $8.00 for every application reviewed.

TO DO: Select the activity and click on the Cost tab of the properties dialog. Enter the hourly cost and the cost per entity processed as shown above.

10.8.3 – Waiting Time Cost

Waiting Time CostTracking the cost applied to the time an entity spends in the model waiting to be processed at an activity or to be moved to the next activity. If waiting time for a given entity has the same cost rate, simply assign the cost per hour in the properties dialog of the entity. However, if waiting time costs are different at different stages in the process, or if they are to be tracked at only certain stages, then the following methods may be used.

The waiting time is always calculated using the Clock() statement and an attribute to track that time. The pre-defined Cost attribute is then incremented by a factor of the waiting time. The method for tracking that waiting time varies depending on the situations presented here. To learn more about the Clock() statement, see Clock( ).

Action Logic:

V_day = 1
While 1 Do
{

Time(1 hr)
Inc V_hour
If V_hour = 24 Then
{

V_hour = 0
Inc V_day

}
If V_day = 8 Then
{

V_day = 1

}

}

Cost of Waiting in a Storage

Suggested Technique

1. Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).

2. In the Action logic of the storage, assign the value of the Clock() to the a_Start_Time attribute: a_ Start_Wait = Clock().

3. In the Action logic of the routing that routes the entity from the storage, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following:

INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00

Cost of Waiting in a Storage

TO DO: Enter the Action logic for the objects as shown in the above illustration.

Cost of Waiting in an Input Queue

Suggested Technique

1. Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).

2. As the last line in the Action logic of the routing connection to the activity with the input queue you are tracking, assign the value of the Clock() to the a_Start_Wait attribute: a_ Start_Wait = Clock().

3. In the Action logic of the destination activity or storage, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following:

INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00

 Important information to be aware of This time includes the time required to capture resources that have been connected to the activity, since they are captured before the Action logic of the activity is executed. To avoid this, delete the connections and use the GET or JOINTLYGET statement to capture the resources for the activity after the a_Start_Wait attribute has been set and the cost incremented as described above.

Example:

Cost of Waiting in an Input Queue

TO DO: Enter the Action logic for the objects as shown in the above illustration.

Cost of Waiting in an Output Queue

Suggested Technique

1. Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).

2. As the last line in the Action logic of the activity with the output queue you are tracking, assign the value of the Clock() to the a_Start_Wait attribute: a_ Start_Wait = Clock()

3. As the first line in the Action logic of the routing connection, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following:

INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00

 Important information to be aware of This waiting time will include the time required to capture resources connected to the routing, since they are captured before the Action logic of the routing is executed. To avoid including this waiting time, delete the connections and use the GET or JOINTLYGET statement to capture the resources for the routing move after the a_Start_Wait attribute has been set and the cost incremented as described above. In addition, any time defined in the General tab of the activity’s properties dialog, will be executed after the last line of Action logic. To avoid counting this time, enter a 0 for the time in the general tab and define the activity time using the TIME statement in the action logic before the a_Start_Wait clock assignment.

Example:

Cost of Waiting in an Output Queue

TO DO: Enter the Action logic for the objects as shown in the above illustration.

Cost of Waiting for a Resource

Suggested Technique

1. Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).

2. Instead of using resource connections, use the GET or JOINTLYGET statements to capture the resource.

3. On the line preceding the GET or JOINTLYGET statement, enter the following logic: a_ Start_Wait = Clock()

4. On the line following the GET or JOINTLYGET statement, increment the Cost attribute using the INC statement. For example to apply $5.00 per hour of waiting for the resource (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following: INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00

Example:

Cost of Waiting for a Resource

TO DO: Enter the Action logic for the objects as shown in the above illustration.

10.8.4 – Special Cost Assignments

Tracking additional costs based on special circumstances.

Suggested TechniqueSpecial Cost Assignments

1. Create a variable or attribute to track the special circumstance from which additional costs will be calculated.

2. Assign a value to the attribute or variable where appropriate.

3. Use the value of the variable or attribute to increment the Cost attribute of the entity to which the additional cost applies, or increment the variable if you are tracking a cost not associated specifically with an entity.

Example: The car wash washes cars, pickups, and large trucks. The model however uses only one entity: the Customer. An attribute called a_Size has been defined with the descriptors: car, pickup, and truck. Each size costs the car wash a different amount of money to wash.

TO DO: Create and assign the attribute Size. In the Wash activity, enter the Action logic shown above.

10.8.5 – Categorize Cost

Suggested Technique

1. Create a real attribute and a variable. Attribute will be used to store the cost of the entity as entity enters an activity, variable will be used to calculate the cost when the entity leaves the activity.

2. In the action logic of the relevant activity set the value of the attribute defined above to the default attribute Cost.

3. On the exit route of the relevant activity set the value of the variable to be default attribute Cost minus the attribute defined in step 1.

Example:

Categorizing Cost Example

TO DO: To create multiple categories use multiple variables. Enter the Action logic for the objects as shown in the above illustration.

User's guide chapter 10 section 9 & 10



Previous: Chapter 9 Next: Chapter 11

10.9 – Statistics Gathering Techniques

Common model statistics are gathered by ProcessModel automatically and reported after the model is simulated (see Chapter 6, Analyzing Output Data). This section covers techniques involved in gathering additional statistics of particular interest through the use of variables and attributes. To learn more about variables and attributes, see Attributes and Variables.

10.9.1 – Tracking Entity Conditions

Counting the total number of entities meeting a special condition.

Suggested Technique

1. Determine the condition or attribute to be counted.

2. Create a variable of type Integer to use to keep a tally.Tracking Entity Conditions

3. In the appropriate Action logic, increment or decrement the variable to reflect the condition being counted.

Example: A restaurant has a buffet. The management wants to know how many men, women, and children go through the buffet. An attribute called a_Gender has been defined and assigned one of three descriptors (man, woman, kid) in the arrival Action logic of the Customer entity according to a discrete distribution. Three variables have been defined to count the number for each gender: Children, Men, and Women.

TO DO: Create the variables and attribute as described above. Enter the Action logic as shown in the above illustration in the properties dialog for the Buffet activity.

To examine the results, look for variable statistics in the General Statistics Report (see General Statistics Report) where you will find the average value of each variable. The total count is reported as the current value of each variable.

10.9.2 – Tracking Contents

Tracking the time-weighted average number of entities occupying a stage in the process that consists of more than a single activity.

Suggested Technique

1. Define a variable of type Integer to track the contents.

2. Increment the variable in Action logic when entering the particular processing stage.

3. Decrement the variable in Action logic after leaving the processing stage.

Example: Once a customer leaves a car at the repair shop, it is serviced, cleaned, and readied for the customer to pickup. We want to know the average number of cars between the start of the Service and the end of the Cleaning activities.

Tracking Contents

TO DO: Define the variable Serv_Clean_Content as type Integer . Enter the Action logic as depicted in the illustration above.

To examine the results, look for variable statistics in the General Statistics Report (see General Statistics Report) where you will find the average value of the variable. The average value is the average contents of the processing stage being tracked. The change in the contents over time can be viewed by selecting Time Series from the View menu in the Output Module . See Time Series Plots & Histograms.

10.9.3 – Tracking Times

Tracking the length of time spent in a particular stage of a process.

Suggested Technique

1. Define an attribute of type Real called a_ Start_Time (or some other appropriate name) to record when each entity starts a process stage.

2. Define a variable of type Real to store the accumulated time called v_ Accum_Time (or some other appropriate name).

3. Define a variable of type Integer to count the number of entities passing through the stage called v_ Entity_Count (or some other appropriate name).

4. Define a variable of type Real to which the average time may be assigned called v_ Avg_Time (or some other appropriate name).

5. When entering the processing stage, enter the following Action logic: a_Start_Time = Clock()

6. When leaving the processing stage, enter the following Action logic:
INC v_Accum_Time, Clock() – a_Start_Time
INC v_Entity_Count
v_Avg_Time = v_Accum_Time / v_Entity_Count

Example: Once a customer leaves a car at the repair shop, it is serviced, cleaned, and readied for customer pickup. We want to know the average time spent from the time it is sent to service to the time it is returned from cleaning.

Tracking Times

TO DO: Create the attribute and variables. Enter the Action logic as shown in the above illustration.

The ending or current value of the Avg_Time variable is reported under variable statistics in the General Statistics Report (see General Statistics Report). You may also want to examine the Time Series graphs on the Avg_Time variable to see how the average time varied during the duration of the simulation run.

10.9.4 – Tracking Times Against a Standard

Counting the number of times that an activity or other time consuming events fell within a particular range.

Suggested Technique

1. Create two variables and an attribute (all of type Real) used in tracking the statistic.

2. In the appropriate Action logic, increment or decrement the variable accordingly.

Example: A call service center with 50 operators wants to measure its level of service by tracking the number of calls that are answered within 30 seconds compared with the number of calls that are not. Calls are answered by an automated system and put on hold until they can be answered by an operator. A variable is created to track each number: v_ Above and v_ Below . An attribute called a_ Start_Time is used to track the waiting time.

Tracking Times Against a Standard

TO DO: Create the variables v_ Above and v_ Below and the attribute a_ Start_Time . Enter the Action logic in the storage and activity as shown above. Enter an Input Queue Size of 0 (zero) and a capacity of 50 for the activity. Enter a Move time of 0 (zero) for the routing connection between the storage and activity.

10.9.5 – Tracking Resource Uses

Tracking the number of times a particular resource is used for a particular activity or set of activities.

Suggested Technique

1. Create a variable used to track the statistic.

2. In the appropriate Action logic, test for the resource being used.

3. Based on the outcome of the test, increment the tracking variable accordingly.

Example: A team leader takes support calls when no other technicians are available. We want to know how many calls the team leader is taking. A variable called Lead_Calls is defined to track the number of calls the team leader takes.

Tracking Resource Uses

TO DO: Define the variable Lead_Calls . In the resource connection for the Lead, select the Use as alternate option. Enter the Action logic as shown in the above illustration in the Answer activity.

10.9.6 – Creating a 24-Hour Clock

Create an on-screen clock that will display the time of day and day of week.

Suggested Technique

1. Create a variable for the hour of the day (v_Hour) and for the day of the week (v_Day).

2. Place both newly created variables in screen (See Display a variable in a user defined position)

3. Place an entity with a single arrival (periodic with an arrival frequency of zero).

4. Have the entity arrive at a location with the following action logic.

Example: For presentation purposes, a display of a 24-hour clock and day of week is critical to help team leaders see the timing of certain events.

Waiting Time Cost

Action Logic:

v_Day = 1
While 1 = 1 Do
{

Time(1 Hr)
Inc v_Hour
If v_Hour = 24 Then
{

v_Hour = 0
Inc v_Day
If v_Day = 8 Then
{

v_Day = 1

}

}

}

TO DO: Define the variables V_Hour and V_Day. Create a new entity arriving at a new activity. Set the arrival type to periodic and the arrival frequency to zero. In the action logic at the activity place the action logic provided above.

10.9.7 – On-Screen Variables

Show dynamic variables while the simulation runs.

Suggested Technique

1. Create a variable used to track the statistic.

2. From the Variable dialog, select the Scoreboard check box.

Example: A new statistic is created to show the number completions per day. The output graphs will adequately display the statistics but the dynamic view of the statistic on the screen will aid in developing understanding.

On-Screen Variables

TO DO: Define a variable to collect the desired statistic and place a check in the check box labeled Scoreboard. Place the desired logic in the action tab to manipulate the variable and collect the statistic needed. Run the model and the view the variable on the scoreboard.

10.10 – Animation Techniques

The animation can be manipulated from within the model in two ways: an entity graphic may be changed part-way through the model, and routing lines may be hidden from the view.

10.10.1 – Changing Entity Graphics During Simulation

There are two methods of changing the entity graphic during the simulation. Both methods are described below with separate suggested techniques.

1. Change the graphic without affecting output statistics (visual change only).

2. Change the graphic and collect statistics under the new name (visual and statistics).

Suggested Technique — Change graphic only

1. Create each entity graphic that may be needed by placing a separate graphic on the layout with a unique name. Label the first entity placed on the screen #21, the second #22, etc. The count starts with 21 because ProcessModel has 20 built-in graphics. You can label the entities by using the text tool to place text label next to the entity.

2. In the Action logic where the graphic is to be changed, use the NewGraphic( ) statement to assign it the graphic defined in step 1. Use the NewGraphic statement combined with the appropriate graphic number to change the graphic as desired.

Example: A manufacturing line assembles cement trucks. One of the key metrics is total cycle time. However, it is important to the client to see the build-up of the assembly. Different graphics are developed for stages of the assembly process. The change in graphic is shown writing action logic for each graphic change. If 5 entity graphics had been developed and placed in order of creation, then the first entity (for example the frame) would become graphic #21 and the second entity (frame plus the drive train) would become graphic #22. The entity graphic could be changed from the first graphic to the second by placing the following statement in the Action Logic of the activity where the change will take place.

Changing Entity Graphics During Simulation

TO DO: Create the entities that may be used (different stages of the assembly buildup) and use the NewGraphic( ) statement to change the graphic in the Action logic as shown above.

Suggested Technique — Change graphic and collect statistics under a new name

1. Create each entity graphic that may be needed by placing a separate graphic on the layout with a unique name.

2. Select the name of the new graphic from the New Name drop down in the routing dialog.

Example: Calls arrive into a call center based a predefined pattern. Calls are classified into three categories (Simple, medium and difficult) by percentage routings. It is desirable to track each of the categories separately.

Change graphic and collect statistics under a new name

TO DO: Place the entities to be used in the model on the layout. Go to the routing where the graphic will be changed and select the name of the graphic from the New Name drop down.

10.10.2 – Hiding Connection Lines

Making the connection invisible entities so that appear to move without a path connecting the origin and destination of the entity.

Suggested Technique

1. Right-click on the line.

2. Select Format… from the pop-up menu.

3. Change the Color of the line and the arrowheads to the same color as the background.

Example:

Hiding Connection Lines

10.10.3 – Creating a Background Graphic

Creating a background for the model. Useful in illustrating your model.

Suggested Technique

1. From the Insert menu select Picture.

2. Locate and select a file form the Insert Graphic dialog. Only use WMF or EMF files for background graphics.

3. Move and size the shape as needed.

Important information to be aware of Creating a layer for the background graphic is advisable so that model graphics can edited without interference from the background graphic. The layer to the right will be on top during the simulation.

Creating a Background Graphic

To add, rename or change the order of layers, right-mouse click on existing layer in the lower left corner of the screen.

Creating a Background Graphic

10.10.4 – Changing the Speed of Animation

During presentations it is often desirable to change the speed of animation to skip over periods of time that are uneventful and to slow the simulation to enhance understanding or make specific points.

Suggested Technique

1. Create an IF-Then statement that checks for time range and then either speeds up or slows down the animation.

Example: At the start of the model run turn the animation off until the simulation reaches 168 hours. At the simulation clock time of 168 hours the simulation speed will be set to 30

Changing the Speed of Animation

TO DO: At the first activity, use an If-Then-Else statement to check the simulation clock. If the time is less than 168 hours, use the Animate statement to set the animation speed to 0 (turns the animation off). Otherwise set the animation speed to 30 (30% of full speed).

10.10.5 – Importing Entity Graphics

Import graphics to be used as entities to enhance the dynamic representation of your model. The files that work best for entities are WMF and EMF. Other file types will work but with some limitations. JPG and GIF file types will animate properly but the static representation of the entity will often be shifted or discolored. BMP files should not be used.

Many free WMF files are available on the internet. Most graphics used in websites are either JPG or GIF which means that you can pull graphics from your company website and use them as animated graphics.

Suggested Technique

1. Import graphics directly into the palette by right-mouse clicking inside the palette and selecting Add Files.

2. Select the files to import. Multiple files can be selected at the same time by holding down the Ctrl key during selection.

3. Press the Add button to add files to the palette.

4. To make a graphic on the palette an entity, double-click on the graphic. The Shape Properties dialog will appear. Enter a name for the graphic, followed by the word Entity enclosed in parenthesis as shown above.

Importing Entity Graphics

When shapes with this designation are placed on the layout the entity dialog will appear. To create a Storage or Resource, place those words in parentheses after the name of the shape.

User's guide chapter 10 section 11 & 12



Previous: Chapter 9 Next: Chapter 11

10.11 – Parallel Processing

ProcessModel supports parallel processing. Several demo models are included to show how parallel processing is done.

Parallel Processing Using Create

1. Use a create route to create entities that are processed on a parallel path.

Example 1

Customer arrives in a car to a car wash, customer is escorted to the cashier while the car moves to car wash. Demo Model: Create & Attach.

Parallel Processing Example 1

Example 2

Account 1 comes into the system, Account 2 is created and processed on parallel as a new process for comparison. Demo Model: Old vs New Process.

Conditional Parallel Processing Example

Conditional Parallel Processing

1. Use attributes and create routes to conditionally send entities on a parallel path.

Example

Patients with defined attributes arrive at assessment, depending on the patient’s attributes lab work, xray, CT or Ultrasound is ordered. Model: Variable Create Complete.

Conditional Parallel Processing Example

10.12 – Adding Fields to Objects

Create objects with predefined custom fields. This is done by adding secondary text areas. These fields can be added to the object so every time an object is placed or only to a specific object.

Suggested Technique

1. Right click the object from your gallery that you wish to create a template out of. Click Properties.

opening properties window for an object

2. Click Edit on the Share Properties window, then click Symbol and goto the Text Layout tab.

editing symbols to add text

To edit text alignment, font etc for each text area select the text area in the preview window and then click on Format in the Selected Text Area.

3. Under Secondary Text Areas, click Add to add secondary text fields to top, right, left or bottom of your object.

activity with multiple text fields

To add fields to a single object that is in the model, right click on the object and click Text Layout.

User's guide chapter 10 section 13 & 14



Previous: Chapter 9 Next: Chapter 11

10.13 – Model Objects

10.13.1 – Service Level Agreement

ProcessModel provides easy to use Model Objects that can be added to any model on the go. There are two types of SLA model objects provided to the users, both of them can be opened first to review the instructions contained within them or can be easily inserted into a model by clicking the Insert button.

1. Reporting \ Calculate SLA in Hours.

2. Reporting \ Calculate SLA in Minutes.

calculating sla in processmodel

10.13.2 – Set Up an Interface

ProcessModel provides a model object that can be used to create an interface that interacts with the model being created. The interface itself is easily created in MS Excel, thanks to the easy to use instructions provided within the Excel file. Users can create variations that can be shown or limit what  is shown based on a previous selection. Once the interface is setup, the changes can be transferred to the model with just a press of a button. The model object can be found under the Arrivals category with the name Create an Interface.

This is the model object that will allow you to create an interface.

create an interface modelobject

A typical example of how an interface would look.

Model Object Interface Example

Previous: Chapter 9 Next: Chapter 11