User's guide chapter 3 section 1 & 2



Previous: Chapter 2Next: Chapter 4

Chapter 3 – Model Elements

Model Elements chart

3.1 – Data Entry Rules for Names & Numbers

ProcessModel requires names and numbers to be entered following some simple rules. You should be familiar with these conventions to ensure that valid entries are made in your model.

Names

Using descriptive, but short, names is recommended. The name you enter in the properties dialog for a resource, for instance, could be used in Action logic. If the name is too long and cumbersome, entering the logic statements could become tedious. If the name is too short or cryptic, you may not remember what it is later. However, you are free to adopt your own naming convention within the limits of the following rules:

• All letters are case insensitive (“A” is the same as “a”).
• Only the letters A through Z (upper or lower case), the digits (0-9) and the underscores “_” may be used. No other symbols or characters may be used in ProcessModel names.
• Names must begin with a letter of the alphabet or an underscore “_”. (e.g. Item5 or _Item5, but NOT 3_Item).
• Names must be single words (use underscores “_” for spaces).
• DO NOT use hyphens, e.g., High-Color would be invalid.

If no name is assigned to an object, a default name will be assigned. Some words are reserved, using one of these words will result in an underscore being appended to the name.

Numbers

When entering numbers as a constant or within an expression, you should follow these rules:

• Do NOT use commas. The number 2,984.43 should be entered as 2984.43.
• Enter negative numbers using the dash (e.g.-345.23, not (345.23) or )

All values, such as quantity and time values, may be expressed as a number such as 23.5 or 9.25.

3.2 – Entities

Entities are the items or people being processed—e.g., products, documents, customers, etc. An entity is defined by selecting an entity shape from the shape palette, placing it on the layout, and entering any applicable information for that object in the properties dialog.

Entities are represented by graphics you choose from the palette. They will be shown as moving graphics during the process simulation. Using meaningful graphics in the model to represent entities in your real system will allow others to accurately visualize the flow through the process. They are processed at activities and are moved on routings from activity to activity. Entities can have an initial cost and collect additional costs from processing at activities, movement on routings and from the use of resources. There are hundreds of predefined entities in ProcessModel from all major industries.

Any ProcessModel graphic can be used as an entity (activity, resource, storage, link, label). To use a non entity graphic as an entity, double-click on the graphic and change the object type to Entity.

Each pre-defined entity graphic is assigned a number by ProcessModel. These numbers are used only for the NewGraphic statement (see NEWGRAPHIC).

Important information to be aware of ProcessModel contains several predefined entity shapes. Each predefined entity shape has the word ‘entity’ placed in parentheses in the shape name. However, you may also define custom entity shapes.

3.2.1 – General

Properties dialog general processmodel software

Name The name of the entity (e.g. Customer, Product_A, etc.). The entity name is used primarily for decision making and reporting purposes. It is simply a descriptive attribute that may be changed during the simulation and tested for making process decisions. Entity statistics are reported based on the final name of the entity.

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 smaller during simulation.

Statistics: Yes / No This selection determines whether statistical information will be collected, displayed in the scoreboard, and reported in the Output Module for this entity.

 The maximum number of entities that can be displayed in the simulation scoreboard is 12. That number cannot be modified.

Object Type Allows the type of object to be changed from Entity to something else.

3.2.2 – Cost

The identification of cost is optional and has no effect on the behavior of the model.

Properties dialog cost processmodel software

Initial cost The initial value assigned as the cost of each newly created entity (negative 1,000,000 to 1,000,000). Once assigned, the entity cost may be increased automatically during the simulation based on waiting time, activity time, and resource usage. This cost is added to the pre-defined Cost attribute of the entity.

Waiting cost The cost that is added to the entity per hour of waiting time. Cost may range from negative 1,000,000 to 1,000,000. This cost is added to the pre-defined Cost attribute of the entity.

See Also To learn more about costs, see “ProcessModel and Activity-based Costing”.

User's guide chapter 3 section 3 & 4



Previous: Chapter 2 Next: Chapter 4

3.3 – Activities

Activities are the tasks performed on entities—e.g., assembly, document approval or customer checkout. An activity is defined in terms of the activity time as well as any resource requirements. User-defined action logic may also be specified for an activity. Activities have a processing capacity and may have input and output queues associated with them. Resources connected to an activity are captured before the activity takes place and freed after it has ended.

3.3.1 – General

Properties dialog activity general ProcessModel software

Name The name of the activity (e.g. CheckIn).

Capacity The maximum number of entities (1 – 999,999) that can be processed concurrently (either individually or in batch). Scenario Parameters may be used in place of numeric values. INF may be used to represent the largest numeric value allowed (999,999).

Stats on This check box allows you to turn off statistics collection for individual activities in your model. By default, this option remains checked.

Time The time to perform the activity. Any expression including distributions, attributes, or variables may be entered as the time value. If a resource is connected to the activity, the resource is captured before the time is taken. Activity times may also be defined using TIME statements in the Action section of the dialog.

 If an entity is spending more time than expected at an activity where you are using action logic, you likely have time on the General tab AND in a TIME statement in your action logic. If you use a TIME statement in action logic, you should typically set the time on the General tab to 0. Otherwise you will first execute the time in the action logic. Then the time on the General tab will be executed. Thus your two time settings add together.

Input Queue Cap. The capacity of the input queue. The input queue is like a waiting area. If the input queue has available capacity, entities may be routed into it to wait until the activity has available capacity to process the entity. If the queue has no available capacity, entities must wait at the previous activity (or in that activity’s output queue) until capacity becomes available in the input queue or the activity (0–999,999). Scenario Parameters may be used in place of numeric values.

Output Queue Cap. The capacity of the output queue. The output queue is like a waiting area where entities will wait for available capacity at the intended destination (0–999,999). Scenario Parameters may be used in place of numeric values.

Object Type Allows the type of the object to be changed to something other than an activity. For instance, you may want to change an activity object into a storage or resource.

3.3.2 – Batching

The batching tab allows you to hold entities in queue until a specified quantity is reached. For example, parts might be held in front of a heat treating oven until a specified quantity is reached. The group of part is moved into the oven and the entire batch is heat treated for a specific time. The batch is then moved out of the oven. This batching is performed to increase the efficiency of an expensive resource allowing it cycle only when it has a full load.

When the batch is created in the input queue, one entity is moved into the capacity for processing (the batch). The processing time will be for the batch. If the batch is created in the output queue, then the routing time will be for one entity (again the batch).

A basic explanation of how ProcessModel works may prove helpful. When the batch quantity is reached, all entities are then attached to a new entity (the batch). You may change graphics, set attributes, accumulate cost and assign resources to the new entity. Recognize you are making assignments to the new entity. If the batch is unbatched, the batch entity goes away and the attached entities are removed from the batch and continue on. VA Time accumulated as a batch will be divided among the unbatched entities. Cost added to the batch will also divide to the unbatched entities.

If a resource is assigned (Get) to an entity prior batching, the resource will be trapped in the batch. If you have less resources than the quantity of the batch, the models will be unable to process the request to get the next resource and entities will stop at the Get statement. If a resource is assigned to a batch and is unbatched before the resource is released (Free), the resource will be transferred to the first exiting entity from the batch.

When and unbatch occurs, entities will exit the batch in the same order as they entered the batch.

A batch can consist of other batches. When unbatching, only one level of batch is unbatched at a time.

It is possible to accomplish many other types of batching. For example you could

1. Batch at the end of a shift regardless of quantity – see the model object “short batches”

2. Batch all waiting entities – see the model object “all waiting entities at a specific time”

3. Produce separate batches for different entities — see the model object “group similar entity types”

4. Batch based on multiple criteria — see the model object “smaller quantity because the batch was open too long”

 The batch will assume the name of the last ENTITY entering the batch. For example, if you had Car and Truck ENTITIES being batched together, and Truck was the last ENTITY to enter the batch, then the batch name would be Truck, regardless of how many of each ENTITY type were contained within the batch.

 Attaching is just creating a batch. So if a batch was -not- created after an attach operation, and you then unbatch, the attached child entities will be detached. However, unbatching should not be used as a detaching method because of the following; When forming a batch, a temporary entity is created and the batching entities grouped together with it. When you unbatch, that temporary entity is destroyed. Therefore, if you unbatch a group of “attached” entities, the parent entity will be destroyed and the child entities will detach and move downstream in the model.

Properties dialog activity batching ProcessModel software

Before Activity

None No batching occurs before the activity. (No Batch Size field appears.)
Batch The activity will batch or group incoming entities (whether or not the entities have already been batched) and process them as a batch. The number batched is defined by the Batch Size field.

Important information to be aware of An input queue with a capacity that meets or exceeds the maximum batch size is required.

Important information to be aware of An Attribute may be used in the Batch Size field to set the number to be batched. The specified batch quantity is evaluated each time an entity is batched. If the entity attribute is less than or equal to the number already waiting to be batched, the batch is formed (with possibly a new size) and released for processing. This allows the specified batch quantity to vary if desirable. It also allows for the creation of short batches.

Unbatch The activity unbatches or ungroups the incoming entity (if the entity has not been batched, the unbatching is ignored) and processes each entity individually.

Rebatch The activity will batch or group the same number of entities back together that were unbatched previously. This means you don’t have to know how many entities were previously unbatched in order to rebatch them—no batch size is required.

Important information to be aware of An input queue with a capacity that meets or exceeds the maximum batch size is required.

After Activity

• None No batching occurs after the activity. (No Batch Size field appears.)
• Batch The activity will batch or group entities (whether or not the entities have already been batched) after the activity has completed processing. The number batched is defined by the Batch Size field.

Important information to be aware of An output queue with a capacity that meets or exceeds the maximum batch size is required.

• Unbatch The activity unbatches or ungroups entities after the activity has completed processing. If the entity has not been batched, the unbatching is ignored. No output queue capacity is required, but without sufficient capacity downstream, processing could be delayed while the unbatching occurs.
• Rebatch The activity will batch or group the same number of entities back together that were unbatched previously or arrived in quantities greater than one (in which case the quantity batched is the quantity of the arrival). This means you don’t have to know how many entities were previously unbatched in order to rebatch them—no batch size is required.

Important information to be aware of An output queue with a capacity that meets or exceeds the maximum batch size is required.

Batch Size Determines the number of entities to be included in each batch. (Used only when batching entities.) An Attribute may be used in the Batch Size field to set the number to be batched. The specified batch quantity is evaluated each time an entity is batched. If the entity attribute is less than or equal to the number already waiting to be batched, then batch is formed (with possibly a new size) and released for processing. This allows the specified batch quantity to vary if desirable. It also allows for the creation of “short batches,” or batches that formed early before the normal size is achieved.

Important information to be aware of Before using batching, consider that your batch may just as easily be modeled as a single entity (see Section 10.3.8, Job Shop Scheduling Opens in a new page). Also, remember that batching may require an input queue or output queue. Follow the directions on the properties dialog. If a queue is needed, make sure it has sufficient capacity to hold an equal or greater number of entities than the expected maximum batch size. Also note that all batches or groups are unbatched when the batched entity exits the model in order to complete statistics collection on each entity. However, if a batch or group has had an entity attached to it during the simulation, ProcessModel will not unbatch that particular batch (or any groups within that batch).

Variable Batch Size

Existing “in process” batch sizes change when variable batch sizes change.

First some definitions. A batch is a group of items that will be processed at one time. In ProcessModel when a number is entered into the Batch Size field, all processing at that activity will stop until the batch size is met. That means that a batch could wait for hour or even days for the batch to reach the specified size. Changing the batch sizes allows the modeler to have control over what to do if the batch size isn’t met and yet the batch still needs to close. For example: at Quest Diagnostics human samples are processed within predefined response times. The economic order size is to process 24 at one time , but when the end of the day arrives and the economic order quantity has not been reached, the order must still be closed even if there is only one specimen in the batch. These undersized batches are called Short Batches.

An entity needs to enter the batching location to trigger the review of the batch size. In other words you can’t cause the release of a batch by simply changing a variable, but the next entity to enter will cause the review of the batch size.

The entities waiting to be batched don’t know anything about the batch size value. They are always released into the batch when the number of waiting entities equals or is greater than the “current” batch size.

For example, suppose your initial batch size is 10 and you have 5 entities waiting to be batched. Then your batch size changes to 6 AND a new entity enters the batching activity. Those 5 waiting entities will be released into the batch as soon as one more entity arrives. They will not wait for a batch quantity of 10.

When Variable Batch Sizes Change

Sometimes a batch size is controlled by an attribute on the entity arriving at the batching location and other times by a variable. Use the method that best suites your needs. See the model object Batching \ Short Batches for an example of how to change the batch size.

3.3.3 – Action

Develop customized behavior for entities at an activity. In addition to the information set in the General tab of the activities properties dialog, logic can be developed to report statistics, control processing, collect information and a host of other items. Variables, entity attributes, systems information and if-then statements allow expansive capabilities to be accessed from the action tab.

Properties dialog activity action ProcessModel software

Action logic is processed when the entity enters the Capacity of an activity, and then entities also process the time entered on the General tab. For this reason, when action logic is used, often a TIME statement is included in the action logic and the General tab time is set to 0.

Action logic does not occur in the Input Queue of an activity. If a situation requires action logic in the input queue, see the model object “Flow control – action logic in the input queue”

For additional information see Section 3.11, Action Logic.

3.3.4 – Cost

The cost tab provides a method of adding cost to each entity as it moves through the process. The cost tab also provides a means for classifying how time is accounted at the activity (VA, NVA, BVA). Other costs may be added by the usage of resources (see section 3.4.3 Resource Costs), routings (see section 3.6 Entity Routing Costs) and the initial costs of an entity (see section 3.2.2 Entity Costs).

The identification of cost is optional and has no effect on the behavior of the model.

Properties dialog activity cost ProcessModel software

Hourly cost Cost added to each entity per hour of time spent performing this activity. Cost values may range from negative 1,000,000 to 1,000,000. Idle time, while waiting for resources, is not counted. This cost is added to the pre-defined Cost attribute of the entity being processed.

Activity cost Cost added to each entity completing this activity. This cost is added to the pre-defined Cost attribute of the entity being processed.

Important information to be aware of If costs are entered as a negative number and final completed production is entered as a positive then a net revenue number can be obtained from the Summary Report. See “Output Summary Reports Opens in a new page” in Chapter 6.2.

Important information to be aware of Resource cost must be a number. Expressions, attributes, variables, or scenario parameters are not allowed.

See Also To learn more about costs, see ProcessModel and Activity-based Costing Opens in a new page.

VA Time How the time for each entity completing this activity is categorized. As an entity is processed its total time in the system will be divided into three categories Value Added, Non-Value Added and Book Value Added. This allows an accurate accounting of how much of the total process time adds value from

VA — Value Added – Time for those work elements that transform the product or service in a way the customer is willing to pay for.

Value adding (VA Time) activities are those which must be done in order to meet the customer’s requirements. Without these activities, the customer wouldn’t get their desired output. To be a value added action the action must meet all three of the following criteria:

1. Necessary to meet customer requirements.

2. Required for or assists in the production of the product or service.

3. Represents an output that the customer is willing to pay for.

Value added time is calculated by summing the entity VA Time. If the VA type is set to BVA Time (Business Value Added) the time in the activity will be associated to another category. Otherwise all entity time is calculated as NVA Time (non value adding).

It’s not always easy to identify which of the three types an activity is. If you don’t understand customer requirements, spotting Real VA will be difficult. Book/Business Value Added is almost always the most contentious to identify. People will tell you “but we have to do that”, usually for reasons lost in time. Perhaps there was once an audit requirement to carry out a check at a step in the process, but does it apply now? Maybe there was a National Standard that stated an activity had to be done, but is it still required? The biggest challenges, in most public sector processes will be: “why are there so many checks, inspections and approvals required?” What value do they really add and can they be eliminated?

NVA — Non-value Added – Adding Time for those work elements that are not used to transform the product or service in a way the customer is willing to pay for.

Non Value Added activities are waste! They don’t contribute to the customer’s requirements and don’t need to be performed. Non value added time is characterized by the following:

1. If eliminated, would not impact the product or service to the customer.

2. Creates waste, extra time, rework.

3. Is performed because of inefficiency elsewhere within the process.

4. Represents a equivalent effort to other activities or adds unneeded steps to the process.

Non value added time is applied to an entity when an entity is in the capacity of an activity AND the VA Type is set to NVA Time.

NVA time is also accumulated when an entity:

* Travels on a route

* Sits in storage

* Waits in an input queue

* Is held by a Wait Until statement

NVA Time is calculated by summing the time an entity spends in the above 5 identified areas. Activities are classified from the customer’s point of view meaning that the value of each action in the process is determined by whether it adds value from the customer perspective—value added—or does not add value from the customer perspective—non-value added. Steps that are required but irrelevant from the customer perspective represent a final classification—business-value added.

BVA — Book-value Added – Time for those work elements that are required to stay in business. Often government required steps will be classified as BVA.

Important information to be aware of The time that an entity spends in the Input queue, Output queue or in route is Non-Value Added.

3.3.5 – Shift

Properties dialog activity shift ProcessModel software

Shift file The name of the shift file which defines the times when this activity can be performed. A default shift file for all activities may be defined in the Options dialog under the Simulation menu.

Browse Allows you to search through one or more directories to locate a shift file.

Interrupt current activity to go off shift or on break Check this option if the current activity is to be interrupted in order to go off shift or on break. If not checked, the shift will interrupt the activity only after it has completed processing the current entity.

Create shift file Opens the shift editor for defining a shift and saving it as an.SFT file. For more information, see Section 3.10.1, Shift Definition.

 Shift with breaks; The breaks are not included in the scheduled hours reported in the Output report. Example: If you have an 8 hour shift with 1 hour of downtime for breaks and lunch, the Schedules Hours would show 7 hours for a 24 hour simulation run length or 35 hours for a 5 day run length.

3.3.6 – Submodel

The submodel tab (shown below) allows you to reference a subprocess chart when you are creating hierarchical models. All activities have a submodel tab in their properties dialog. For more information, see Chapter 7, Hierarchical Modeling.

Properties dialog activity submodel ProcessModel software

Subchart If the activity is to be linked to a subprocess, enter the name of the subchart file defining the subprocess.

Simulate subchart If a subchart is defined, it may be ignored for a particular run by unchecking this option. If checked, information defined for the activity is ignored as control drops to the subchart.

Activate If a subchart is defined, that chart will be opened. If a new name is entered into the Subchart field a new blank model will be created and activated.

 Submodel tab will not show on 50 object licenses.

3.4 – Resources

See Basics 9 – Representing People and Equipment — Resources video tutorial.

Resources are the agents used to perform activities and move entities such as service personnel, operators or equipment. More than one unit of a particular resource may be defined if they are used interchangeably and have the same operating characteristics. Resources may be shared between several activities. If no resource is assigned to an activity, it is assumed that no resource is required.

Resource in ProcessModel simulation software

3.4.1 – General

Properties dialog resource general ProcessModel software

Name The name of the resource (e.g. Worker).

Quantity The number of units of this resource type (1 – 9999). Scenario parameters may also be used. The quantity value is read only once at the beginning of the simulation so using values which change during a simulation (such as variables) cannot be used.

If scenario parameters are used in a resource quantity field, no indicator lights will be displayed during simulation. The only way to have indicator lights show during simulation is to use a numeric value in the resource’s quantity field. The maximum number of indicator lights during simulation for any resource is 12.

Object Type Allows the type of object to be changed from Resource to something else.

3.4.2 – Availability

Properties dialog resource availability ProcessModel software

Percent Available Enter the percentage of time the resource is to be available for use. If a percent is entered that is less than 100, interruptions will occur randomly and last for times that are also random with an average time of five minutes. Any expression excluding attributes is valid.

Time Available As an alternative to entering a percent availability, you may define availability in terms of Time between interruptions and the Interruption time, both of which may be defined as probability distributions or any other expression excluding attributes. Another way to look at this would be Mean Time To Failure (MTTF) and Mean Time To Repair (MTTR).

 The length of time a resource is unavailable is randomly determined. But the average break in availability will be approximately 5 minutes.

 A resource availability can be changed using a variable as the percentage, in the availability tab of the properties dialog. The following rules apply, assuming there is at least one change during simulation. 1. No value can be greater than 99%. Example: 100 & 10 will not work. 2. One of the values has to be less than 90%. Example: 99 & 89. 3. If one of the values is greater than 90% the other value can not be less than 10% of the first value. Example: 99 & 9. 4. Both values can be less than 90%. Example: 50 & 80.

3.4.3 – Cost

The identification of cost is optional and has no effect on the behavior of the model.

Properties dialog resource cost ProcessModel software

Important information to be aware of If costs are entered as a negative number and final completed production is entered as a positive then a net revenue value for the process can be obtained from the Summary Report.

Important information to be aware of Resource cost must be a number. Expressions, attributes, variables, or scenario parameters are not allowed.

Hourly cost Cost per hour for using this resource. This cost (negative 1,000,000 to 1,000,000) is added to the pre-defined Cost attribute of the entity using the resource.

Cost per use Cost each time the resource is used. This cost (negative 1,000,000 to1,000,000) is added to the predefined Cost attribute of the entity using the resource.

See Also To learn more about costs, see ProcessModel and Activity-based Costing.

3.4.4 – Shift

Properties dialog resource shift ProcessModel software

Shift file The name of the shift file which defines the times during which this resource is scheduled to be available. If different units of the same resource have a different schedule, they should be defined as separate resource types (e.g. Shift1_operators, Shift2_operators).

Important information to be aware of A default shift file for all resources may be defined in the Options dialog under the Simulation menu.

Browse Allows you to search through one or more directories to locate a shift file.

Interrupt current activity to go off shift or on break Check this option if the current use of the resource is to be interrupted in order to go off shift or on break. If not checked, the priority is 99 which is the highest non-interruptive priority.

 If an entity is being worked on when it’s resource goes off-shift, the entity will wait at the activity until that same resource comes back on shift. The only way to get the entity to be passed to the next shift coming on-line is to use action logic. There is a model object in the ProcessModel software that demonstrates how to make that occur. It is under the category Shifts \ Release Entity To Next Shift.

Create shift file Opens the shift editor for defining a shift and saving it as an.SFT file. See Section 3.10.1, Shift Definition.

User's guide chapter 3 section 5 & 6



Previous: Chapter 2 Next: Chapter 4

3.5 – Entity Arrivals

Arrival connections define how entities enter the system to begin processing. Entity arrivals are defined by connecting an entity object to an activity or storage object and then entering any defining information in the properties dialog for the connection. Multiple arrival connections can be created from an entity to one or more activities or storages.

Entity Arrivals

Common Tabs

There are two common tabs on the properties dialog for arrivals: Action and Name. These tabs are explained in this section first followed by a description of each type of arrival.

Action

Assign custom behavior to a model when entities arrive in the model. In addition to the arrival information set in the General tab of the arrival properties dialog, assignment statements and IF…THEN statements can reference user-defined entity attributes as well as predefined attributes and variables.

Properties dialog entity arrivals action tab ProcessModel software

Action logic is processed at the instant the entity is created but before entering any activity. To learn more about Action Logic, see Section 3.11, Action Logic.

Name

The Name tab (shown below) allows you to define route names when you are linking hierarchical models. All arrival connections have a Name tab in their properties dialog. For more information, see Chapter 7, Hierarchical Modeling.

Properties dialog entity arrivals name tab ProcessModel software

Connection name This name is used when mapping connections between different charts (main model and submodel). For hierarchical modeling only. See “Connection Naming” in Chapter 7.3.3.

Entity Arrival Types

Following is a description of each type of arrival that can be defined. To change the arrival type, select the desired type from the Type option under the General tab of the Arrival properties dialog. The following types are available:

• Continuous
• Daily Pattern
• Ordered
• Periodic
• Scheduled

3.5.1 – Continuous

A continuous arrival causes entities to continuously feed the connected activity whenever processing capacity is available at the activity; any activity input queue is ignored. This type of an arrival should only connect to activities and requires no other information to be defined.

Properties dialog entity arrivals continuous ProcessModel software

Important information to be aware of You should be aware of the following operating constraints when using the Continuous arrival:

• DO NOT bring other arrivals into the same activity or storage to which the Continuous arrival is attached.
• Since the input queue is ignored when using the Continuous arrival, any batching activity set to occur before the activity will be ignored as well.

3.5.2 – Daily Pattern

A daily pattern arrival shows the rate at which entities arrive for different time periods during the day. Arrivals are assumed to occur randomly within each period. The pattern for each day of the week can be different from the others.

Daily pattern arrivals graph

Important information to be aware of If a shift file has been defined for the activity where entities arrive, it is a good idea to synchronize the arrival periods with the activity schedule.

Properties dialog entity arrivals daily pattern ProcessModel software

Properties dialog entity arrivals daily pattern ProcessModel software

As displayed after the pattern for Monday has been defined

Day The list of days of the week. A pattern may be defined for each day.

Start – End, Quantity The list of period entries showing the start time, end time, and quantity of entities to arrive during that period for the day currently selected.

Copy day Button to copy a day’s pattern in order to paste it later on another day. Prevents tedium of entering the same periods for each day of the week that has the same arrival pattern.

Paste day Once a day has been copied, the Paste button becomes active and lists the name of the day that will be copied in the button itself. Select another day in the Day list and press the button to paste the pattern into the new day.

New Creates a new period entry in the Start – End, Quantity list with default times and quantity. The order of the new entry in the list will automatically be adjusted to maintain a chronological list.

Delete Removes an arrival period from the list.

Start time The start time edit field for the currently selected period.

End time The end time edit field for the currently selected period.

Quantity The quantity edit field for the currently selected period. Any valid expression may be used.

Important information to be aware of Time entries for a Daily Pattern many not overlap (Correct example: Monday 8:00-9:00, 9:00-10:00. Incorrect example: Monday 8:00-9:00, 8:30-9:30 — these time slots overlap).

How To – Define a daily pattern

1. Click on the Define Pattern button to display the Daily Pattern dialog.

2. Click the New button to create a new entry in the pattern dialog. This creates the Monday 8:00am – 9:00am, 1 default entry. (The quantity and times may be changed as desired.)

3. Repeat step 2 for each time period to be defined in which arrivals occur.

4. Once a particular day’s pattern has been defined, you can copy the pattern to another day by selecting the defined day, clicking on the Copy day button, then selecting the day to which the pattern will be copied and clicking the Paste button. (The name of the weekday appears on the Paste button, so you will know which day is being copied.)

A Note About Time

When you use the Daily Pattern arrival or Scheduled Arrival, you must understand that statistics, especially resource statistics, may be affected due to the way the clock works in ProcessModel. Each ProcessModel simulation begins at 12:00 a.m. (midnight) on Monday morning of the first week. Therefore, Daily Pattern or Scheduled arrivals may skew statistical results, especially with regard to resource and input and output queue utilization. The solution is the use of Shifts in conjunction with your Daily Pattern or Scheduled arrivals. For more information see Schedules—Shifts & Breaks.

3.5.3 – Ordered

An ordered arrival is used in connection with an order signal connection to place an order for more entities to arrive (see Section 3.8, Order Signals).

Properties dialog entity arrivals ordered ProcessModel software

Properties dialog entity arrivals ordered ProcessModel software

Lead Time This is the time required for the entities to arrive once an order is placed. Any expression excluding attributes is valid.

3.5.4 – Periodic

A periodic arrival causes entities to arrive at repeating time intervals. It is also useful for initializing inventory levels at the beginning of the simulation. This is done by entering a time of zero (0) in the Repeat Every field.

Properties dialog entity arrivals periodic ProcessModel software

Repeat every The time between arrivals. Any expression excluding attributes is valid. A time value of zero (0) will cause only one entry for this arrival.

Quantity per arrival The number of entities that arrive after each time interval. Any expression excluding attributes is valid.

First time The time (relative to the beginning of the simulation) that the first arrival should occur. Use a time of zero (0) to initialize the model with entities at the beginning of the simulation.

 The maximum amount of time that can be entered in the First Time field of a Periodic arrival is 35,791 hours. If a larger value is entered, the arrival will occur as the simulation starts rather than at the designated time.

3.5.5 – Scheduled

A scheduled arrival causes a quantity of entities to arrive at a storage or activity at set times such as appointments or incoming shipments. Multiple scheduled arrivals for the same time occur in the order in which they are defined.

Properties dialog entity arrivals scheduled ProcessModel software

Properties dialog entity arrivals scheduled ProcessModel software

Arrivals [Time, Quantity] The list of defined arrivals listing the quantity, the week number, the day of the week, and the time the arrivals begin to come into the system.

New This button allows you to create a new arrival based on the data held currently in the edit fields of the dialog.

Delete Allows you to delete the selected entry from the Arrival list.

Week This is the week in the simulation when the arrivals are to occur (numbered from 1 in ascending order).

Day This is the day of the week on which the entities are to arrive.

Time This is the time of day that the arrival occurs. If more than one arrival is scheduled for the same time, the arrivals will occur in the order in which they were defined.

Quantity The number of entities to arrive at the scheduled time.

Action Although not required, you may enter Action logic for each scheduled arrival. This is useful for assigning a value or descriptor to an attribute at the time of arrival based on the particular arrival entry in the dialog. Select the arrival in the Arrivals list above and enter the logic in the Action text box. To learn more see Action Logic.

How To – Define an arrival schedule

1. Click on the Define Schedule button to display the Scheduled Arrivals dialog. A default arrival is automatically created as shown on the previous page.

2. To create an additional arrival click on the New button. (Edits to the quantity and time fields are updated to the currently selected arrival once you move to another field or press New.)

How To – Read in an arrival schedule from outside files

1. Create scheduled arrivals with a quantity of zero for the number of arrivals anticipated.

2. From the Tools menu select Export Data. Export the data to the chosen application.

3. Open the exported file. Modify the Excel or Access File by adjusting the desired parameters and save.

4. Press the file import button to import the changed data into ProcessModel.

A Note About Time

When you use the Daily Pattern arrival or Scheduled Arrival, you must understand that statistics, especially resource statistics, may be affected due to the way the clock works in ProcessModel. Each ProcessModel simulation begins at 12:00 a.m. (midnight) on Monday morning of the first week. Therefore, Daily Pattern or Scheduled arrivals may skew statistical results, especially with regard to resource and input and output queue utilization. The solution is the use of Shifts in conjunction with your Daily Pattern or Scheduled arrivals. For more information, see Schedules—Shifts & Breaks.

3.6 – Entity Routings

See Basics 5 – The Logic of the Flow video tutorial.

Entity routings define direction and conditions for the flow for entities. An entity routing is defined by connecting activities and storages to depict the direction and sequence of flow. An activity or storage may have multiple input routing connections and multiple output routing connections. Entities do not move to the next activity or storage until there is available capacity and the condition or rule for routing the entity has been satisfied.

If resources are connected to the routing, they are captured after the entity has been cleared to move to the next activity and freed after the move time has elapsed.

The General properties tab allows you to select the type of routing and set certain information specific to that type of routing. Then each routing dialog consists of three tabbed sheets on which you can define information about the routing. The Cost tab allows you to define cost data, and the Action tab allows you to define specific actions to take place prior to the move. The Name tab allows you to route entities to and from submodels. Since the Cost, Action, and Name tabs are common for all routings, they are defined first in this section.

Common Properties Tabs

Cost

ProcessModel allows you to assign a cost to the routing of an entity from one activity or storage to the other. The cost is added to the pre-defined Cost attribute of the entity in the model after the move is completed.

Properties dialog entity routing cost ProcessModel software

All routing connections have a cost tab in their properties dialog. The identification of cost is optional and has no effect on the behavior of the model.

Cost per move The cost added to each entity after completing a particular routing. This cost (negative1,000,000 to 1,000,000) is added to the pre-defined Cost attribute of the entity being moved.

See Also To learn more about costs, see ProcessModel and Activity-based Costing.

Action

Develop customized behavior for entities that follow this route. In addition to the information set in the General tab of the routing properties dialog, logic can be developed to report statistics, control movement or processing, collect information and a host of other items. Variables, entity attributes, systems information and if-then statements allow expansive capabilities to be accessed from the action tab.

Properties dialog entity routing action ProcessModel software

A routing’s Action Logic is processed when the condition for routing to the next activity (activity or storage) has been satisfied and any resources have been captured to make the move but before the actual move takes place. You may think of this logic as exit logic or logic processed just prior to exiting the activity. For additional information see Action Logic.

Name

The linkage tab (shown below) allows you to define connection names used when you are creating hierarchical models. For more information, see Chapter 7, Hierarchical Modeling.

Properties dialog entity routing name ProcessModel software

Connection name This is used to map connections into and out of the activity that represents the submodel. A connection going into this activity will route the entity to a like named connection in the submodel. A connection coming from this activity receives entities from the submodel’s like-named connections.

Routing Types

The following routing types are available:

• Alternate
• Attach
• Conditional
• Create
• Detach
• Else
• Ordered
• Percentage
• Pickup
• Renege

And they are explained in detail on the following pages.

Routing Execution Order

When you use multiple routings from an activity, the order in which they were created or connected to the originating activity is the same order in which ProcessModel will consider each routing connection to determine which routing the entity will take.

The order in which routings are created is usually only important when you create more than one of the same routing type from the same activity or storage. For instance, you want to pick up an entity from one of two activities. If an entity is waiting at activity one, it should be picked up. The entity waiting at activity two should only be considered if activity one has no entity waiting. To model this, the Pickup routing should be connected to activity one first.

Changing Execution Order

The order in which ProcessModel considers routing connections can be changed by disconnecting the routings from the originating activity and then reconnecting them in the order you want them to be considered.

3.6.1 – Alternate

Description

An alternate routing is executed if the destination for its primary routing has no capacity for additional entities. The alternate routing is created when you connect a line from a routing (the primary routing) to the alternate destination as illustrated below.

If capacity is unavailable at the alternate destination, the entity is routed to the first destination with available capacity. DO NOT attach more than one alternate to any routing so that it is always clear which routing is the alternate. However, an alternate routing may itself have an alternate routing; as many alternate routings as needed may be defined.

 Action logic on a route will only be executed when an entity actually traverses that route. Therefore, in an alternate routing situation, action logic on the primary route will not be executed if the entity selects the alternate route. However, if a resource “connector line” is attached to the primary route, and the resource is not available, entities will be blocked from selecting either the primary or the alternate route. When a resource connector line is used, the resource must be available before any other actions can occur on the object’s capacity (route, activity, or storage).

Usage

Simple directional decisions based on no room at the destination are made with the alternate routing

Properties dialog entity routing alternate route ProcessModel software

Properties dialog entity routing alternate route ProcessModel software

Type Any routing connected from another routing must be an alternate, so this field cannot be changed.

Move Time This allows you to specify a different move time for the alternate routing. Any expression is valid.

Caution An alternate routing may be used with the following routing types:

• Alternate
• Else
• Conditional
• Percentage
• Create
• Renege
• Detach

DO NOT use an alternate routing with an Attach , Ordered , or Pickup routing. Instead, use the Else routing with these signal activated routings.

Example

Military aircraft land for refueling and are directed to a series of hydrants (which is the fastest method of refueling). If all of the hydrants are full then the aircraft is diverted to a series of large fuel bladders. If all of the fuel bladders are being used the aircraft is sent to a parking spot where trucks fuel the aircraft. Refueling by truck is the slowest method of refueling and thus selected only when the other options are not available.

Military aircraft example

Alternate routes are drawn by selecting the line connector tool Right Angle Line and drawing from an existing route to a destination activity or storage.

3.6.2 – Attach

See Standard Assembly video tutorial.

See Conditional Assembly video tutorial.

Description

An Attach route causes the routing entity to be attached to an entity waiting at the destination activity or storage. The presence of another entity (routed from a different routing) at the destination signals the attach routing to occur. The other entity at the destination activity or storage is detained until the attachment occurs.

To use an analogy, the Parent (or main entity) requests a Child to join it (Attach). The Child stays put (before the attach routing) until a parent requests it. The Child then travels the attach routing and becomes part of the Parent. The Child is carried by the parent, unless specifically Detached. See Detach.

The attach action takes place prior to any activity time defined at the destination activity

If you don’t want to hold up processing entities that are behind the entity waiting to be attached, define an output queue with sufficient capacity.

After an Attach or Pickup has occurred, the attributes of the parent entity are the only attributes recognized by the system. The child’s attributes are masked until a detach occurs. To pass a child’s attributes to the parent when attaching or picking up, you must assign the child attribute to a variable. Then after the attach/pickup, assign that variable to a parent’s attribute.

Properties of Attach Routes:

  1. The parent entity goes to the attach location and waits for the child entities to arrive and attach.
  2. You can attach multiple children to the parent by using a number, variable, attribute, scenario parameter, or the word ALL in the attach route’s quantity field.

Usage

• The attach routing is the primary method of assembling entities. A Parent or main entity is the base and the attach (s) is (are) the subcomponent (s). The assembly will not move to the next activity until the subcomponent is attached.
• When the attach is coupled with the create route it acts to hold the further processing of the main entity until all of the child entities related to that parent have been attached. An order may create all of it’s components at the start of a model and then hold the order until all of the components are completed and attached.

Properties dialog entity routing attach route ProcessModel software

Properties dialog entity routing attach route ProcessModel software

Move Time Time to move to the next activity or storage. Any expression is valid.

Quantity The quantity of entities to be attached. If you wish to attach every entity waiting in the input queue of the activity where the attaching takes place, enter ALL . Any expression is valid. A quantity of zero results in no attachment.

Attach to Choose whether the entity is to be attached to any entity (for general assembly) or to the entity that created it (for re-attachment to the entity that Created it).

 To collect statistics on any entity that has been attached to another entity, it must be Detached prior to exiting the model.

 To attach all the children created by a parent, set the Quantity to ALL and the Attach To to entity that created it. This means that if some parent entities created no children, then none will be attached, while parent entities that created many entities will require all of those entities to be attached before moving to the next activity.

 If the entity requesting the attach has an attribute that describes the quantity to be attached and that same attribute is used in the quantity field of the attach route, then attaching is controlled by the attribute. If the attribute of the requesting entity is set to zero, no entities are attached. If the attribute of the requesting entity is set to five then five entities will be attached. If the requesting entity carries several attributes then options of a complex assembly can be handled. At each station where assembly takes place, the corresponding attribute will determine the number of parts assembled.

Example Suppose that a software order can generate two possible options in addition to its own processing. The first option is inclusion of training which happens 70 percent of the time. The second option is inclusion of one day of consulting which happens 30 percent of the time. If the options are included, additional work needs to be completed in parallel with the order and then be inserted into the order before the shipment is released to the customer. In some instances neither training or consulting will be included. In other instances both training and consulting will be needed. In either case if something was created, it must be attached and if nothing was created the order should not be delayed.

Properties dialog entity routing create route ProcessModel software

Properties dialog entity routing create route ProcessModel software

Training orders are created using a variable quantity. See Chapter 3, Section , Common Distributions. Seventy percent of the time a need for Training will be created. For information on the create route see Chapter 3, Section 3.6.4, Create.

Properties dialog entity routing attach route ProcessModel software

With the quantity set to ALL and the Attach To set to entity that created it, all children created from this parent are required to be attached before the parent will be released to the next activity.

3.6.3 – Conditional

Description

A conditional route causes entities to choose a routing based on some condition (usually a name or other entity attribute). This is one of the most powerful and diverse routes available in ProcessModel.

Usage

• The name of an entity creates a need to process along a different set of activities. For example Calls are processed one way while Faxes are processed by different activities.

Properties dialog entity routing conditional route ProcessModel software

• The process routing changes based on the time of day. If it is before 10:00 PM then one route is followed, but between 10:00 PM and 6:00 AM another route is followed. This time based decision would require that the variable be changed to reflect the time of day. See “Creating User-Defined Variables” in Chapter 3.12.4.
• The process routing changes based how high a priority, how valuable, if the entity is over due or if it has already been down a route. These entity specific types of decisions would require the creation and assignment of an attribute. See “Creating User-Defined Attributes” in Chapter Chapter 3.12.3.
• The process routing changes based on the number of resources available in process alternatives. Making resource based decisions requires definition of resources and the use of Functions. See “FreeUnits(name of activity or resource)” in Chapter 3.11.1. Many other model parameters may be checked.
• In a job shop (production facility designed to manufacture a wide variety of products) the number of entities and the potential variation of routings can be overwhelming if conventional model building techniques are used. To simplify the building process, conditional routings may be used at each processing juncture. An attribute may be defined to correspond with each juncture. Instead of many entity types, one entity type can be defined with attributes that tell the entity which route to take at each juncture. Scheduled arrivals are defined with attributes so that the entity “knows” what path to take at each juncture. For more information on Scheduled Arrivals see Chapter 3, Section 3.5.5, Scheduled.

Move Time Time to move to the next activity or storage. Any expression is valid.

New Name Optionally assign a new name to the entity. This also assigns a new graphic to the entity if that graphic is defined as an entity on the layout.

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.

Condition This is the condition for selecting this route (e.g Name = entity name). You may leave the field blank for a single unconditional routing which is equivalent to specifying a 100% routing. Complex expressions are also allowed using AND and OR operators (e.g. Att1 = 2 OR Att1 = 5). Any expression is valid. Valid comparison operators in conditional expressions are as follows:

= equal to
> greater than
< less than >= greater than or equal to
<= less than or equal to
<> not equal to
OR one of or both expressions
AND both expressions

Example

Insurance policies are treated differently if they are valued at less than $10,000. The process is different, expending less resources and time. When policies enter the system they have a field that contains the value of the policy. In ProcessModel this would be an entity attribute . In this example it was called a_Policy_Value. The conditional routes out of the decision are evaluated in the order draw. If the value of the attribute a_Policy_Value is less than or equal to 10000 then the top routing is chosen. If the value is greater than 10000 the bottom route is chosen.

Important information to be aware of If one or more Conditional routings are defined together, a conditional routing with the Condition field left blank may be used as a “last resort” routing. This Conditional routing must be the last routing connected to the activity. If none of the conditions in the other Conditional routings are satisfied, the entity will be routed along this “last resort” routing.

3.6.4 – Create

Description

A Create routing defines the creation of additional entities either before or after an activity. Created entities (such as a created order) can later be reattached to the creating entity or to some other entity by using the Attach or Pickup routing. To use an analogy, a Parent has a Child (create). The child is related to the parent and may be reunited with its unique parent at a later point in the model.

Most of the time a create route is in addition to a percentage route (the parent). If no percentage route is used with the create route, the creating entity exits the system.

The starting time for a created entity is when it is created not when the parent starts in the simulation.

This routing is often used with the attach routing (but it is not required) to form a closed loop “request and report back” system. Combined with the attach routing, the create routing forms a powerful combination with many uses in service, manufacturing and healthcare systems.

An example of the create routing follows: Phone orders are received by an Administrative group. After taking the order and entering the information into the system, the admin sends notification (create routings) of the order to Sales, Engineering and Accounting. Each of these groups has a part to play in assuring that the order is properly approved before the product can be released to production. The admin continues to work on the order (percentage routing) at the same time the other departments are completing their work.

In healthcare there are many examples of work completed in parallel with patient requirements (Lab, X-ray, Pharmacy, etc.).

In manufacturing, a create route can be used to initiate when elements of an assembly need to be started in the production area (combine with delays for different part types and resetting the cyclestart attribute).

 If you use a Create route to create a new entity, all user defined attributes are inherited as well as the system created ID attribute. However, all other system created attributes (Cost, CycleStart, Name, VATime) are not inherited.

Usage

• A customer order may have many separate parts that require parallel processing. For example an order may require a credit check from the finance department and a feasibility confirmation from engineering while the order is being processed. The create route is used to start all of the separate parts of the order. The attach route can be used to assure that the separate parts of the order are all accounted for before the order is completed. See “Attach” in Chapter 3.6.2.

Properties dialog entity routing create route ProcessModel software

Properties dialog entity routing create route ProcessModel software

• The quantity created can be controlled by an attribute on the parent. This technique is useful for the arrival of a truck that will “unload” a unique amount of entities. See “Attributes” in Chapter 3.12.3.

Create route example

Create route example

Create After Activity or Before Activity The new entity may be created and routed before or after the activity time and Action logic occur. If created before the activity, it may be reattached to the originating entity at the activity itself.

Move Time Time to move to the next activity or storage. Any expression is valid.

Quantity The quantity of entities to be created (0 – 9999). Any expression is valid and is evaluated each time a creation occurs. A value of zero causes the creation to be ignored. This means that creations can occur based on system conditions or entity attributes.

Created Entity Name The name of the newly created entity. To define a different graphic for this new entity, place a new entity object for it on the layout (it does not need to be connected to another object).

Conditional Create

When it is necessary to create only part of the time, an attribute can be used to carry the create quantity. That attribute is then placed in the quantity field of the create dialog.

When the creating entity reaches the point where the create occurs, then the attribute is read and the value placed in the quantity field. If the value is zero then no entity is created. If the value in the attribute is greater than zero, then that number will be created.

3.6.5 – Detach

Description

A Detach routing causes entities that have been attached to the current entity to be detached and routed to the connected activity.

More Information

A detach route can be used disassemble entities that have been previously assembled or to unload entities previously loaded (with an attach routing in the current model).

A detach route is almost always used in conjunction with a percentage routing so that the base or carrying entity has a place to go. If no percentage routing is drawn from the same activity as the detach then the carrying entity will exit the system.

You may not connect more than one Detach routing from the same activity, but you can detach all entities then add a storage and then separate entities using conditional routings.

After detaching, the parent entity’s attributes remain with the parent. In addition, any attributes assigned while the entities were attached remain with the parent. The detached child will retain any attributes it had prior to the attach. They will not inherit attributes assigned to the attached group of entities.

Usage

• Any time statistics are needed for items that have been previously attached use the detach at the end of the model.

Properties dialog entity routing detach route ProcessModel software

Properties dialog entity routing detach route ProcessModel software

• A bus route has people loading the bus (Attach route) and people unloading (Detach route) at predetermined stops. An attribute can be used to tag individuals. This tag is later used in the detach routing to signal them to leave the bus. See “Attributes” in Chapter 3.12.3.

Properties dialog entity routing detach ProcessModel software

Move Time Time required to move to the next activity or storage. Any expression is valid.

Detach After Activity or Before Activity The entity may be detached before or after the activity. Detaching before the activity allows the detached entity to be reattached as part of the same activity.

Condition An optional condition to be satisfied for detaching entities that are to use this routing. This allows multiple detach routings to be defined with different conditions. This could be used to detach and route specific entities (previously attached) to specific destinations.

Important information to be aware of You may only connect one Detach routing to a process step. If you specify a condition for the detach, only the entities matching that condition will be detached and follow that route. If the condition field is left blank, all attached entities will detach and follow the detach route.

Detach Child and Parent Separately

Since there is no route defined for the parent entity to use, it exits the model at that activity. In order to see the parent entity leave the activity, add a 100% exit route from the activity, in addition to the detach route. The child entities will leave on the detach route and the parent entity will leave on the 100% route.

Before or After the Activity on a Detach Route

The terms Before or After the activity when using a Detach route refer to the activity from where the route originates (the non-arrow head end of the route). If you detach Before the activity, all attached entities will be detached, be released to leave for the next activity and then the carrier entity will execute it’s processing time. If you detach After the activity, all attached entities enter the activity as a single unit. They then detach after the activity time has been executed.

Detaching Children and Grandchildren

In a detach route, the Detach needs to be done in levels. If you create and then attach entities at multiple levels (parent creating children, and children creating grandchildren, then attaching each entity back to their respective parent) you must use a separate detach route for each “generation” of child entities. You must also detach in the proper order; detach the most recently attached child entities, then detach the next most previous attached entities. In addition, the activity hosting the detach route for the grandchild entities (on the upstream end of the detach route) must have an input queue.

Combining Detach Route with other Route Types

You cannot combine Detach and Conditional routes. The only routing type you can combine with a Detach route is a 100% route. If you want to route each type of entity in the attached group to a different location, you must do it as a separate step after the detach has occurred. Leaving the Condition field blank on the Detach route will route “all” attached child entities down the Detach route. You could then use Conditional routes at a subsequent activity (following the Detach route) to route the child entities appropriately. If you enter a Condition on the Detach route, then only the entities matching that condition will be routed down the Detach route. All other child entities will remain attached to the parent entity, and go down the 100% route. If no 100% route is used in conjunction with the Detach route, the parent, and any remaining attached entities will exit the model immediately. In version 5 and above, Conditional routed can be combined with Detach. That being said, the conditional route would be for the base entity (parent entity) and not for the detached entity.

3.6.6 – Else

Description

An Else routing is executed if none of the one or more Attach , Pickup , or Ordered routings with which it is associated can be executed. An analogy might help to explain how the Else route would work in conjunction with an Attach route. An understanding of the attach route is important before this analogy will make sense. If the main entity is the Parent and the attaching entity is the Child then the Else route would tell the child what to do if the Parent didn’t show up. The Child arrives at the activity that has the attach route and looks for a corresponding parent at the destination. If the Parent has not yet arrived, then the Child follows the Else route. The Else route in conjunction with the Pickup route allows for the Parent to leave if the Child is not ready when the Parent arrives.

Else route example

Only one Else routing may be defined from an activity or storage having Attach, Pickup, or Ordered routings. However, an Else routing may have an alternate routing attached to it, which effectively allows for multiple Else routings.

If the Else routing is unable to be executed because of insufficient capacity at the next activity, the first of all the routings that can be satisfied is executed. For example, if an activity has two Attach routings and an Else routing connected from it, and neither of the Attach routings have an entity waiting for an attaching entity, then the Else routing will be executed if capacity is available. If capacity is unavailable, the entity waits for the first routing that can be executed.

Usage

Else Routing with a Group of Attach Routings

If no entity is waiting at the connecting activities for this entity to be attached, the entity will be routed via the Else route.

Else Routing with a Group of Attach Routings

Else Routing with a Group of Ordered Routings

If no order signal has been given, the entity will be routed via the Else route.

Else Routing with a Group of Ordered Routings

Else Routing with a Group of Pickup Routings

If no entities are waiting to be picked up at the destination activity or storage, the entity doing the picking up will be routed via the Else route.

Else Routing with a Group of Pickup Routings

Else Routing with a Group of Pickup Routings

Move Time Time to move to the next activity or storage. Any expression is valid.

Caution DO NOT use an Else routing with an Alternate, Conditional, Detach, Else, Percentage, or Renege routing. Doing so will cause an error to occur when you run the simulation.

3.6.7 – Ordered

Description

An ordered routing causes the routing entity to wait until an order signal is received (see Order Signals). Entities will wait in the output queue of the activity (or in the storage) from which the Ordered routing is connected until the Order Signal is received. If you want to continue processing entities behind the entity waiting for an order signal, make sure the capacity of the output queue or storage is sufficient.

Usage

• Just-in-time systems require that production inventory is controlled. The Ordered route in conjunction with the Order Signal allow the control of when and how much is ordered from an upstream activity.

Ordered routing in process improvement

Ordered routing in process improvement

Move Time Time to move to the next activity or storage. Any expression is valid.

3.6.8 – Percentage

Description

The Percentage routing causes a specified percentage of the output entities to be routed to the connected activity or storage. Multiple percentage routes can be defined from an activity. If capacity is unavailable at the connected activity or storage, the entity waits until capacity becomes available before moving.

Usage

• Single routes from one activity to another default to Percentage. That is to say that 100% of the time they will move from the current process to the next.

• Simple decisions that cause an entity to follow a yes or no path based on a percentage.

• Decisions involving more than two outcomes that are selected by percentage. The result of the decision is the route that is selected.

• Tagging entities with specific information a percentage of the time. For example 10% of the parts could be marked as high priority by setting an attribute in the action tab of the entities that traversed the 10% percentage route. See “Attributes” in Chapter 3.12.3 and also See “Action Logic” in Chapter.3.11.

Percentage routing in process improvement

Percentage routing in process improvement

Move Time Time to move to the next activity or storage. Any expression is valid.

Percent The percentage of output entities using this routing. The total percentage for multiple percentage routings must total 100% (If you have only two percentage routings from one activity or storage, ProcessModel automatically balances the percentage fields to equal 100%). Decimal fraction values (e.g. 25.5) may be entered. Only constant values are valid here.

New Name Optionally assign a new name to the entity. Statistics for the output report will be reported under this new name. This also assigns a new graphic to the entity if that graphic is defined as an entity on the layout.

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.

Important information to be aware of To develop a percentage route that changes for each entity type, use conditional routes and set the condition in the action tab of the activity. See “Conditional” in Chapter 3.6.3 and see “Action Logic” in Chapter.3.11.

3.6.9 – Pickup

Description

The pickup routing functions the same as the attach routing except that the controlling entity retrieves the attached entity instead of having the entity sent to it. To continue the analogy of the Parent and Child, in a Pickup routing, the Child notifies the Parent that it is ready to be picked up. The Parent then moves along the pickup route. after the Parent arrives at the destination the Child is joined to the Parent. The key difference between this route and the Attach is that the Parent must stay behind the Pickup route until requested and yet still perform as the entity that reports statistics in the output report.

A pickup route causes the routing entity to move to the activity when an entity to be picked up enters the input queue of the activity. The entity being picked up is attached to the entity having the pickup routing. The pickup action takes place prior to any activity time defined.

After an Attach or Pickup has occurred, the attributes of the parent entity are the only attributes recognized by the system. The child’s attributes are masked until a detach occurs. To pass a child’s attributes to the parent when attaching or picking up, you must assign the child attribute to a variable. Then after the attach/pickup, assign that variable to a parent’s attribute.

Properties of Pickup Routes:

  1. The parent entity must wait on the upstream side of the Pickup route until the child gets to the pickup location’s input queue. The child then requests the parent to come and pick it up.
  2. Since there is no quantity field on a Pickup route, only one child entity can be picked up by a parent entity.

Usage

• At a fast food restaurant the Parent or main entity places the order (create route). The Parent entity the goes to the waiting area. The Child entity is the order and is processed behind the scene. When the Child (order) is ready the Parent (customer) is notified (pickup route) and comes to claim the order.

Pickup routing in process improvement

Pickup routing in process improvement

Move Time Time to move to the next activity or storage. Any expression is valid.

Pick up any entity / Pick up created entity Choose whether each entity is to pick up any entity waiting for pickup or its own created entity (i.e. an entity which was created from it).

Important information to be aware of To collect statistics on any entity that has been attached to another entity, it must be detached prior to exiting the model.

Caution If you use resource connections at the destination of the Pickup routing to capture resources, the resources will be assigned to the entity being picked up, and you will not be able to free that resource until the entity that is picked up has been detached. In other words, the resource will be trapped. To assign a resource to the entity doing the pickup, so that it will not be trapped, use the GET or JOINTLYGET statements in Action logic rather than resource connections. See “Action Logic” in Chapter.3.11.

3.6.10 – Renege

Description

The Renege routing is used to cause entities (usually customers) to be routed to another activity or out of the system if they have not started the activity before a specified amount of time has expired. This phenomenon of dropping out of the waiting queue is referred to as reneging or abandonment. The entity will exit the system if you do not connect the routing to another activity or storage. An activity with a renege routing must have an input queue size of one or more.

Usage

• Customers tire of waiting in line or on hold and leave.

• If a customer problem is not handled in the required time, the problem is escalated (renege route) to another process.

• Material waiting processing has an expiration time (such as glue strips or oxygen absorption pads). If the expiration time has lapsed, then the expired material must be removed.

Renege routing in process improvement

Renege routing in process improvement

Move time Time to move to the next activity or storage. Any expression is valid.

Renege after The maximum time that an entity will wait for available capacity at the activity before reneging. If capacity becomes available in the activity before the renege time has expired, the entity will not renege, so any additional time spent waiting to capture a resource before beginning the activity is not considered. Any expression is valid.

New Name Optionally assign a new name to the entity. This also assigns a new graphic to the entity if that graphic is defined as an entity on the layout. Assigning a new name is a way to cause separate statistics to be gathered for the entities that actually renege.

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.

If the renege time is based on entity type, you can make a prior assignment of the renege time to an attribute and reference it in the Renege after field.

If a resource is connected to the activity from which reneging takes place, be sure that the resource is always available to avoid waiting additional time to get the resource. You can do this by making the resource dedicated to the activity or by selecting Respond immediately in the resource assignment connection’s properties dialog. In other words, if there is room to move out of the input queue, but a resource is required but not available, the entity will not be able to renege (it is already committed to move forward).

Remember that a renege only happens from the input queue. If the entity has already moved to the capacity area of the activity, then it can’t renege.

Once an entity has either entered an activity’s capacity or determined that it -will- enter the capacity, the renege will no longer have any effect on that entity. For example, if you get and free your resources in action logic (rather than with a connector line), the entity must enter the activity before it knows whether a resource is available or not. Therefore, if the resource is not available and the entity must wait “in” the activity for the resource longer than the specified renege time, the renege will have no affect on that waiting entity since it has already entered the activity.

User's guide chapter 3 section 7 & 8



Previous: Chapter 2 Next: Chapter 4

3.7 – Resource Assignments

Resource assignments define the use of one or more resources in performing an activity or moving an entity. For each entity that is processed or moved, each assigned resource is captured and held until it is freed via the resource connection or a FREE statement in Action logic. While the resource is captured, it is not available for use by other activities or routing connections. To be pulled away from a task the resource is performing, it must be interrupted by a resource assignment that has the Respond immediately box checked.

Resources may be captured for performing an activity or a move. They may also be freed or kept after the activity or move is completed. Multiple or alternative resources may be used for an activity or move.

A connected resource is always captured BEFORE any defined activity or move time and freed AFTER an activity or move time. If an input queue is defined for an activity, the connected resource is captured prior to the entity entering the activity. If no input queue is defined, the entity enters the activity and then captures the resource. Multiple resources required for an activity or routing are not captured until they are all available. To capture multiple resources as each becomes available, use a GET statement in the Action logic of the activity or routing.

Assignment Types

Following is an explanation of each type of resource assignment and the information in its properties dialog.

• Get and Free
• Get
• Free
• Alternate

Using Multiple Resources

You may use multiple resources and mix the resource connection types. You can mix multiple and alternate resources. When defining multiple resource connections, remember that they are executed in the order in which they were defined. To change that order, disconnect the resource connections and reattach them in the order you desire.

Resource Priority Values

There are 10 levels of priority values: 0 – 99, 100 – 199, 200 – 299 . . . 900 – 999. 0 – 99 is the only non-preemptive level.

Preemption means that the current work being done by a resource will be interrupted in order for the resource to go to the location of the preemptive GET. After that higher priority work is complete, the resource will return to the interrupted location. Preemption will occur only when the value of the calling priority is at least one level higher than the resource’s current priority.

The calling priority is at least 100 higher than the resource’s current priority.

For example, if a resource is working at a priority of 50, then a priority call of 150 will be required to perform a preemption. The 150 GET will be completed before returning to the initial 50 GET.

Using a priority which is 300 or higher will bring a down (or off shift) resource back on-line (or on shift).

Resource Priority, Shifts, and Interrupt

The Resource priorities, interrupt, shifts, and ‘Interrupt current activity to go off shift or on break’ can be used in a model together, the following restrictions apply.

  1. A resource priority of more than 100 is an interrupt priority, meaning that if a resource is working on a task that has a lesser priority the resource will leave that task and start working on the priority that is 100 or more.
  2. If the resource priority is less than 100, but it is higher than the other task the resource is working on, the resource will not leave the task its working on, but will complete it and then come to work on the task with greater priority.
  3. If ‘Interrupt current activity to go off shift or on break’ is checked on shift of the resource, this will mean that the ‘Interrupt current activity to go off shift or on break’ has a priority of 299. The resource will leave any task its working on and go offline.
  4. An interrupt priority that is used to have the resource leave the task its working on, and start working on another task will work with ‘Interrupt current activity to go off shift or on break’ if the priority is set to less than 199.
  5. An interrupt priority of greater than 199 will keep a resource online, even if its scheduled to go offline and ‘Interrupt current activity to go off shift or on break’ is checked.
  6. An interrupt priority of greater than 599 will bring back an offline resource online, even if its offline and ‘Interrupt current activity to go off shift or on break’ is checked.

3.7.1 – Get and Free

The Get and Free resource connection allows you to use the resource for the duration of the activity or move, and once the activity or move is complete, the resource is freed.

Get and free connector route

Get and free connector route

Quantity The number of units of this resource that are required. Any expression is valid.

Priority Enter the priority (0 – 99) for responding to this activity. Higher values have higher priorities. A priority is only necessary if the resource is assigned to multiple tasks that may be competing for the services of the resource.

Respond immediately Check this box if the resource is to interrupt any other activity in order to respond immediately to this activity. This selection is only meaningful if the resource is assigned to multiple tasks. (A resource that is off shift or on break will not respond until back on duty by this request.)

3.7.2 – Get

The Get resource connection allows you to get the resource and hold it until you explicitly free it later using a Free resource connection or FREE statement in Action logic.

Get resource connector route

Get resource connector route

Quantity The number of units of this resource that are required. Any expression is valid. You may leave this field blank or enter 0 if the actual getting of the resource is done explicitly in the Action logic of the activity or routing. In this case, the connection serves only as a graphic representation of the resource being used.

Priority Enter the priority (0 – 99) for responding to this activity. Higher values have higher priorities. A priority is only necessary if the resource is assigned to multiple tasks that may be competing for the services of the resource.

Respond immediately Check this box if the resource is to interrupt any other activity in order to respond immediately to this activity. This selection is only meaningful if the resource is assigned to multiple tasks. (A resource that is off shift or on break will not respond until back on duty by this request.)

3.7.3 – Free

The Free resource connection frees a resource that was previously captured using the Get resource connection. If you attempt to free a resource that has not been captured, the Free connection is simply ignored.

Free resource connector route

Free resource connector route

Quantity The number of units of this resource to be freed. Any expression is valid.

3.7.4 – Alternate

To use a resource as an alternate to another resource, connect the alternate resource to the other resource’s assignment connection as shown in the illustration below. If the resource units of the connection to which it is attached are unavailable, the alternate resource will be used. If neither one is available, the first available resource will be used.

Alternate resource connector route

Alternate resource connector route

Alternate to an Alternate

To define an alternate resource for an alternate resource, simply connect the resource to the other alternate connection as shown below. No more than one alternate may be connected to another resource connection so that the order of preference in selecting resources is clear. To define multiple alternate resources, simply continue connecting an alternate resource to each previously connected alternate resource.

Alternate to an Alternate resource connector route

Alternate to a Get Connection

When an alternate resource is connected to a Get resource connection as shown in the following illustration, the resulting captured resource must be freed with either a Free resource connection or a FREE statement in Action logic.

Alternate to a Get Connection resource connector route

Since you cannot know which resource will be captured when assigning resources as alternates to a Get resource connection, you must create a Free resource connection for every possible resource as shown above. Doing this will free the resource that was captured and ProcessModel will ignore the other Free resource connections. See “FREE” in Chapter 3.11.2 for the use of FREE ALL in action logic.

Alternate Resources On Different Shifts

Define an alternate resource on a different shift in the same manner as the alternate descriptions provided above. Assign each resource type to the appropriate shift. See “Defining & Editing Shift & Break Blocks” in Chapter 3.10.1. If a resource is off shift, a check will be made to see if the alternate is available.

3.8 – Order Signals

An Order Signal is a connection from an activity or storage to an Ordered arrival or routing which notifies the arrival or routing to order or release additional entities. The signal is triggered by a drop in inventory level at the storage or activity input queue.

Order Signals route

Order Signals route

Reorder Level The level to which the storage or activity input queue must drop before signaling an order for more entities. Any expression is valid.

Order Quantity The quantity to order when an order is placed. Any expression is valid.

Place order at start Check if an initial order is to be placed at the beginning of the simulation run. If the initial order is insufficient to raise the queue or storage level above the reorder level, a Periodic arrival should be defined, in addition to the Ordered arrival, with its First time field set at time zero (0) to initialize the inventory level (see Periodic).

Important information to be aware of When an order signal is used to order entities at an arrival connection (the Order Signal is connected to an arrival connection), the arrival type must be Ordered . To learn more, see Ordered.

Important information to be aware of For ordering to continue, the inventory level must rise above the reorder point. If your system functions so that inventory trickles in and never allows the quantity to rise above the reorder point, another method of re-ordering entities must be used. For an alternate ordering method multiple capabilities in ProcessModel will be required. Continuous along with WAIT UNTIL.

User's guide chapter 3 section 9 & 10



Previous: Chapter 2 Next: Chapter 4

3.9 – Storages

Storages are waiting areas, stock places, etc. where entities can wait for further processing. Storages are useful when controlling the order in which entities are allowed to move on through the model. Since an activity provides the option to have a built-in input and output queue, a storage is for visual purposes or to model special queuing conditions such as multiple activities sharing a common input queue.

Explaining Storages

3.9.1 – General

General tab on properties dialog for storage

Name The name of the storage (e.g. StockRoom ).

Capacity The maximum number of entities that can occupy this storage (1 – 999,999). Scenario Paramenters may also be used in this field.

Queuing order The order in which entities are queued to leave the storage: none, first-in first-out, last-in first-out.

None Entities that have completed their Action Logic are free to process any routing logic independent from other entities that have finished their Action Logic. Will process FIFO if no other routing requirements are enforced (i.e. Conditional Routes, Get with a priority, etc.).

First In, First Out (FIFO) — The first entity completing its Action Logic must be routed first.

Last In, First Out (LIFO) — The last entity completing its Action Logic must be routed first.

Object Type Allows the type of object to be changed from Storage to something else.

3.9.2 – Action

Action tab on properties dialog for storage

Action Develop customized behavior for entities at an storage. Logic can be developed to report statistics, control processing, collect information and a host of other items. Variables, entity attributes, systems information and if-then statements allow expansive capabilities to be accessed from the action tab. For additional information see Section 3.11, Action Logic.

3.10 – Schedules—Shifts & Breaks

3.10.1 – Shift Definition

Weekly shifts and breaks for activities and resources are defined using the Shift editor and may start and end at any minute of the day. Defining shifts for resources and activities in a model is only necessary when there are activities or resources with different work schedules. Otherwise the simulation can be run for a single block of time as though there was no off-shift time.

Shifts and breaks are defined by blocking out sections of time on a grid divided into days and hours. Once a weekly shift and break schedule has been defined, it may be saved in a shift file, which has an.SFT extension. This allows you to use the shift definition in models you create later.

Creating shifts in ProcessModel Shift Definition

This screen shot of the Shift Editor shows a shift defined to begin at 8 a.m. and end at 4:30 p.m. with two short breaks and a lunch break.

If the shift file opens blank but the model simulates correctly, make sure the file path is shorter than 255 characters.

 The shift file in a resource’s Shift tab can not be changed as conditions change in the simulation. Each resource can only have 1 shift for the entire simulation run. An attribute, variable, or scenario parameter can however be checked in the action logic. Then based on that parameter’s value, The appropriate resource with the desired shift can be selected.

How To – Open the Shift Editor

1. Open the Options dialog from the Simulation menu and click on the Files tab.

or…

Click on the Shift tab of the properties dialog when a resource or activity is selected.

2. Click on the Create Shift File button.

Shift Editor

The Shift editor consists of a menu bar, Shift and Break mode buttons, time control buttons, and a grid representing one week of time. (All shown on the previous page.)

The remainder of this section describes the Shift Editor menus and the following procedures:

• Drawing a Block of Time for a Shift or Break
• Selecting a Block
• Resizing a Block
• Editing the Begin or End Time
• Deleting a Block
• Duplicating a Specific Day’s Shift
• Customizing Shift and Break Colors

Shift Editor Menus

The menus used in the Shift editor are accessible from the menu bar at the top of the editor and include the following:

File For opening shift files and saving open shift files.

Edit For deleting unwanted shift and break blocks. You may also duplicate a specific day of the shift. If you delete a shift, it deletes the shift as well as the breaks in the shift.

View For access to status and tool bars.

Options For customizing the colors which represent shifts and breaks.

Defining & Editing Shift & Break Blocks

You define a shift by selecting the Shift tool and drawing a shift block for each day that is to represent time on the shift. The break block tool can then be selected to draw break blocks over any portion of the defined shift. A break differs from off-shift time in that if a resource or activity is busy when a break time is scheduled to occur, the duration of the break time remains unchanged even if it could not immediately take effect. Off-shift time, in contrast, is reduced by any delay in going off shift, i.e., the activity comes back on shift at the scheduled time regardless of any delay in going off shift. This behavior typifies most real world situations.

When drawing a shift or break block, you must be sure to follow these rules:

• Shift blocks may not overlap with other shift blocks.
• Break blocks may only be drawn on top of shift blocks.
• Break blocks may not overlap or be adjacent to other break blocks.

How To – Draw a block

1. Click on the Shift or Break button to designate the type of block.

How to draw a shift block

2. Begin dragging the mouse on the grid at the day and time that the block should begin.

3. Release the mouse button at the time that the block should end. If you want to define a block more precisely than the grid allows, see Editing the Begin or End Time below.

Caution If the block you draw is invalid, it is ignored and will not appear on the time grid.

How To – Select an existing block

• Click on the block. A border appears to show that the block has been selected.

Selecting an existing shift block

How To – Deselect a block

• Click on the selected block or click on the white area of the window.

How To – Resize a block

1. Select the block.

2. Click and drag the border of the block until the block is the desired size.

3. Release the mouse button.

How To – Edit a block’s begin or end time

1. Select the block.

2. Adjust the begin or end time accordingly using the buttons at the top of the screen. Click on the part of the time display you want to change (the hour, the minutes, or the AM/PM label). While that part of the display is highlighted, use the arrow buttons to increase or decrease the time, or to switch between AM and PM.

Editing a begin and end time of a shift block

How To – Delete a block

• Select a block and choose the Delete option from the Edit menu.

or…

• Select a block and press the Delete key on the keyboard.

How To – Duplicate a shift block from one day to another day

1. Select any shift or break segment for the day you wish to duplicate.

2. Select Duplicate button from the toolbar. Duplicate toolbar button

3. In the shift schedule, click on the day to which you wish to copy the shift block.

Important information to be aware of To duplicate the same shift multiple times, hold the SHIFT key down while clicking were the shift is to be duplicated. Release the SHIFT key on the last duplication to exit the duplication mode.

How To – Change the color for shifts or breaks

1. From the Options menu, select Define Shift or Define Break.

2. Choose Colors under the Options menu. The colors dialog box appears.

Change the color for shifts or breaks

3. Click on the desired color.

3.10.2 – Shift Assignments

Once one or more shift files have been defined, resources and activities may be assigned to these shift schedules in the model. To designate a particular shift as the default shift for all activities or resources, see Default Shift File. To override the default shift, you may assign a shift schedule to a particular resource or activity in its properties dialog. If different units of the same resource have a different schedule, they should be defined as separate resource types (e.g. Shift1_operators, Shift2_operators).

Shift Assignments

How To – Assign shift schedule to a resource or activity

1. Select the resource or activity on the layout. (Double click if the properties dialog has been closed.)

2. Click on the Shift tab to display the shift schedule properties.

3. Enter the name of the shift file or use the Browse button to find the file. Or click on the Create shift file button to create the file and return to enter the name.

4. Check the Interrupt current activity to go off shift or on break box if the activity or resource is to be interrupted, if busy, in order to go off shift or on break. If not checked, the priority is 99 which is the highest non-interruptive priority, meaning that the activity will finish processing the entity or the resource will complete its assignment before going off shift or on break.

Default Shift File

The Files tab on the Options dialog accessed from the Simulation menu allows you to specify a default shift file for activities and a default shift file for resources. A default shift file may be overridden by selecting a different file in the properties dialog for that specific activity or resource.

How To – Define a default shift file for activities or resources

1. From the Simulation menu, select Options and select the Files tab in the dialog.

Define a default shift file

2. Select Default Activity Shift File or Default Resource Shift File , then click on the Create shift file button.

3. Create a shift file following the instructions in Shift Definition.

4. Enter the name of the shift file in the File Name field.

5. Check the Interrupt activity/resource to go off shift or on break box if activities or resources that are currently busy are to be interrupted in order to go off shift or on break. If not checked, the priority is 99 which is the highest non-interruptive priority.

6. Click on the Close button when finished.

User's guide chapter 3 section 11 & 12



Previous: Chapter 2 Next: Chapter 4

3.11 – Action Logic

ProcessModel allows you to design custom behavior in your model by using action logic in which you enter simple but powerful logic statements. Action logic allows you to define special logic that may not be easily defined using the normal property fields. Examples would include assigning values to attributes and variables or performing a test using an IF…THEN statement.

Action logic can be defined for any activity, storage, arrival or routing by clicking on the Action tab of the properties dialog.

Depending on the object or connection for which the action is defined, only certain statements and other logic elements are meaningful and therefore valid. The valid statements and logic elements (variables, attributes, resources, distributions, operators, and scenario parameters) are available via the Keywords and Filters (Keywords & filters) dialog. These statements and elements may be pasted from the list box into the action window to help you construct the desired action logic.

Action Logic zoom window

You may also start typing your saved attributes, variable, scenarios, scenario parameters, activity, entity, resource names or any of the ProcessModel supported statements, functions or distributions to see a help menu popup to help you easily populate what you wish to add.

Auto help for action logic

Paste elements into the action window

1. Click the Keywords and Filters Keywords & filters button on the action logic window.

2. Select the type of element (including statements) you want from the pull down box.

3. Select the specific element or statement from the list box.

4. Press the Insert button to insert the element at the position of the cursor in the action edit window or simply double-click the item.

Important information to be aware of Action Logic often uses expressions (combinations of attributes, variables, numbers, and operators) in assigning values to attributes or variables, testing the value or state of a variable or attribute, etc. For more information on expressions and valid operators, see Expressions.

See Also To learn advance functions / Keyboard shortcuts, see “Advanced Options for Action Logic Window”.

3.11.1 – Functions

Functions provide you with critical system information at any given time during the simulation. They can be used in an assignment statement to set the value of a variable or attribute or in an IF…THEN statement to make a decision based on system information. There are several system functions: Clock(), Contents(), FreeCap(), FreeUnits(), GroupQty(), OwnedResource(), Percent(), and ResQty().

 System reserved words cannot be used as variable names, attributes, or scenario parameters.

Clock( )

Clock(min)
Clock(sec)
Clock(hr)
Clock(Day)
Clock(Wk)

Syntax:

CLOCK( ) or CLOCK(time unit)

Example:

a_Time = Clock( )
v_Time_in_System =
Clock( ) – CycleStart
If Clock(Hr) > 24
Then…

The default clock function returns the elapsed time of the simulation clock in minutes. It can be accessed, but not assigned a value. For example a variable could be assigned the value of the clock in minutes: v_Var1 = Clock() would result in the number of minutes elapsed in the simulation assigned to the variable. To assign the number of hours that have elapsed, use v_Var1 = Clock(hr), and to get the number of seconds, use v_Var1 = Clock(sec).

More Information

A common use of the Clock( ) function is collect and plot individual cycle times for entities. It can be used to help collect individual times in just part of the model or individual entities for the entire cycle time. Why would this be important? Doesn’t ProcessModel automatically collect and report the average cycle time for each entity type? Yes it does, but a major reason for simulation is to dig deeper than averages, because averages are misleading.

ProcessModel automatically notes the simulation clock time when each entity first enters the process and writes that information to a default entity attribute called CycleStart. You can use a formula below calculate and record the processing time for each entity.

Example: v_Time = Clock() – CycleStart

Each entity that crosses the action statement that contains this formula will find out the current simulation time, subtract the starting time of the entity and write the result to variable defined (in this case, v_Time).

Many times, however, it is helpful to know the time it takes for an entity to complete only a portion of the process, for example activities 4 to 6 of a larger process. In this case, you would enter a_attribute1 = clock() in the action logic of the route entering activity 4. [Not specifying a unit of time by not putting anything in the parentheses after “clock” causes ProcessModel to use the default time unit which is minutes.] This would cause ProcessModel to note the time that each entity enters activity 4. You would also enter v_variable1 = clock() – a_attribute1 in the action logic of the route leaving activity 6. This would cause ProcessModel to take a new clock reading, subtract from it the first clock reading, and write to a variable that reflected the difference which you could then track in your output reports.

Important information to be aware of If you change the default time units to hours, then the value returned will be divided by 60. If you change the default time units to seconds, then the value returned will be multiplied by 60.

Contents(name of activity) 

Returns the total number of entities at an activity. Use CONTENTS() to make decisions based on how busy an activity is. Using CONTENTS() to keep track of the number of entities at an activity requires fewer steps and allows more flexibility than using variables to count the number of entities that enter and exit an activity. For example, the second syntax does in one statement what would require several statements without the CONTENTS() function.

Example

A car wash has an activity called Wash that often gets too busy for one operator to handle so the supervisor then comes to help. The logic below models this situation with an IF…THEN statement and the CONTENTS() function. As long as the activity contains fewer than three cars, the worker processes any arriving car. However, if the contents of the activity are greater than three, the Supervisor may also be used.

IF CONTENTS(Wash) {

GET Worker

}
ELSE
{

GET Worker OR Supervisor

}

FreeCap(name of activity) 

Returns the available capacity of an activity (an integer).

Example

Suppose an entity can be routed to one of two identical ovens for a curing process. However, you would like to ensure the ovens are loaded as evenly as possible at all times. The following logic could be used to set an attribute (called a_Router) to a 1 or a 2 based on the available capacity of the ovens. Conditional routings would then be used to route to the appropriate oven:

IF FREECAP(Oven1) > FREECAP(Oven2) THEN
{

a_Router=1

}
ELSE {a_Router=2}

FreeUnits(name of activity or resource) 

Returns the free units of an activity or resource (an integer).

Example

The example below demonstrates the use of the FREEUNITS() function to adjust the processing time for an entity based on the number of units of a resource available to process it. Once a Plane arrives at a passenger gate, it captures a certain number of resources named BH (Baggage Handlers). Operation logic at the gate determines how many BH resources have been captured and, accordingly, how long it will take to service the Plane. The more Baggage Handlers a Plane captures, the less time it takes to service it.

WHILE FREEUNITS(BH) <3
{

DO TIME(2 min)

}
IF FREEUNITS(BH)>=5 THEN {GET 5 BH}
ELSE
{

GET FREEUNITS(BH) BH
TIME(60/RESQTY(BH) min)

}

GroupQty( ) 

Returns the number of entities in a batched or loaded entity (a loaded entity is an entity with other entities attached to it). If the entity is a loaded entity, it will return only the number of loaded entities, not the base entity. For example, if you attach four Castings to a Pallet, the GroupQty() will return the number of Castings (i.e. 4), which does not include the entity Pallet.

In the case of multiple levels of groups and loads, GroupQty() returns the number of entities in the uppermost level only.

Example

A group of documents called Folder arrives at the Secretary in-box and is processed for some amount of time according to the number of documents in the folder. Each document takes 3.0 minutes to process.

TIME (GROUPQTY() *3.0 min)

OwnedResource(n) 

Returns the n th resource currently being used by the entity. Each resource is referenced according to the order it was put into use so that the longest held resource is OwnedResource(1). The most recently captured resource can be referenced by omitting the number: OwnedResource().

Example

The OwnedResource() function is useful when a decision must be made based on the resource that was captured. For example, suppose an entity captures either Worker_1 or Worker_2 in order to perform an activity. If Worker_1 is used, the activity takes 5 minutes. If Worker_2 is used, the activity takes 6.5 minutes. This can be defined using the following Action logic.

GET Worker_1 OR Worker_2
IF OWNEDRESOURCE() = Worker_1 THEN {TIME(5.0 min)}
ELSE {TIME(6.5 min)}
FREE OWNEDRESOURCE()

Important information to be aware of This function cannot be assigned a resource name in Action logic. For example, an assignment statement like OwnedResource() = Worker_1 will generate an error.

Percent(n) 

The percent function allows you to execute one or more statements only a certain percentage of the time. Used in an IF…THEN statement, the function returns a TRUE or FALSE.

To use the percent function, enter PERCENT(n) where n is the percentage of the time that the statement will return a TRUE condition in an IF…THEN statement.

Example

In the first example, logic following the THEN statement is executed 21.5% of the time. In the second, logic following the THEN statement is executed 35% of the time and the logic following the ELSE statement is executed 65% of the time.

1) IF PERCENT(21.5) THEN…
2) IF PERCENT(35) THEN…

ELSE…

ResQty(name of resource) 

Returns the number of units of a specific resource that the current entity owns. You can use RESQTY() to determine the amount of time necessary to process an entity based on the number of units of a resource the entity owns.

Example

The example below demonstrates the use of RESQTY() to adjust the processing time for an entity based on the number of resources available to process it. Once a Plane arrives at a passenger gate, it captures a certain number of resources named BH (Baggage Handlers). Operation logic at the gate determines how many BH resources have been captured and, accordingly, how long it will take to service the Plane. The more Baggage Handlers a Plane captures, the less time it takes to service it.

IF FREEUNITS(BH)>=5 THEN {GET 5 BH}
ELSE
{

GET FREEUNITS(BH) BH

}
TIME(45/RESQTY(BH) min)

3.11.2 Statements

Statements are simply commands to be executed at particular stages in an entity’s progress through the process. The following pages explain in detail each statement listed below.

 System reserved words cannot be used as variable names, attributes, or scenario parameters.

Comments
( ) = ( ) assignment
ANIMATE
DEC
DISPLAY
FREE
GET
INC
IF…THEN…ELSE
JOINTLYGET
NEWGRAPHIC
NEWNAME
PAUSE
REPORT
STOP
TIME
WAIT UNTIL
WHILE…DO

Comments

Comments You can add explanatory comments to your action logic by placing special characters in front of the comment. Comment lines are for user information only and the simulation ignores them during run time. To include a single-line comment, use a pound sign “#” or two forward slashes “//” at the beginning of the line. Multiline comments begin with a “/*”… and end with a “*/”. Some statements and functions such as GET or FREE are not ignored when found in a single comment line. To ensure they are ignored, you must use the multiline /* . . . */ comment indicators, and the ending “*/” must appear on a different line than the opening “/*”.

 FREE, GET, and JOINTLYGET, PERCENT and GROUP statements are not ignored by the // comment indicator. Use the /* … */ comment indicators. These indicators are normally used to comment multiple lines. So if you are only commenting out a single line, the closing */ must appear on a second line since it cannot exist on the same line as the opening /*.

For example:

IF Test = Reject THEN INC RejectQty
/*Number of rejects increased
for each test reject.*/

or…

// The logic below describes how rejects are handled.

( ) = ( )

This is the assignment statement which allows you to assign a value (or descriptor) to a variable or to one of the attributes defined for your entities.

Syntax

assignee = assignor

assignee The variable or attribute to which the value is assigned.
assignor The value assigned to the variable. This could be another variable or attribute, a pre-defined descriptor, or a mathematical expression.

Example

In the first example, the attribute a_ Attr1 is assigned a value of 2. The second example assigns the value of a_ PO_No to the attribute a_ Invoice_No . Number three assigns the descriptor Red to the attribute a_ Color . And the last example assigns the product of 5 and the value of Base to the attribute a_ Size.

1) a_Attr1 = 2
2) a_Invoice_No = a_PO_No
3) a_Color = Red
4) a_Size = 5 * Base

ANIMATE

The ANIMATE statement allows the control of the animation speed through the action logic dialog.

Syntax

ANIMATE(speed)

speed A numeric value between 0 and 100. One is the slowest and one hundred is the fastest speed of animation. A speed of zero turns the animation off.

Example

In the first example, ANIMATE statement is used to turn the animation off so that the model will run ahead in time quickly. In the second example the speed of animation is set very slow (usually to show a particular entity or activity). In the third example the speed of animation is set to the highest possible speed with animation still on (often used to help the user gain a “feel” for the general flow and buildups that would occur over time.

1) animate(0)
2) animate(10)
3) animate(100)

The ANIMATE statement is usually implemented by placing a separate entity, arrival and activity combination in the existing model. Scheduled arrivals work well because the exact time can be assigned for the arrival(s) and individual action logic applies for each scheduled arrival. The first arrival could be used to “fast forward” to a time in the model of particular importance, while the next arrival could be used to slow the animation for inspection of a particular aspect of the simulation and then a third to again “fast forward” to see the results.

DEC

The decrement statement allows you to decrement a variable or attribute’s value. It subtracts one (the default) or more from the value of the variable or attribute.

Syntax

DEC name [, expression]

name This is the name of the variable or attribute to be decremented.

[expression] You can optionally decrement the variable or attribute by more than one using an expression which can be a constant or a mathematical expression. The name and expression must be separated by a comma. (The square brackets illustrate only that this element is optional.)

Example

The following are several easy-to-understand examples. The first decrements the value of v_ Var1 by one. The second decrements the value of a_ Attr1 by five. The third decrements the value of Number_in_System by the value of an attribute called a_ Batch_Size.

1) DEC v_Var1
2) DEC a_Attr1, 5
3) DEC Number_in_System, a_Batch_Size

DISPLAY

Pauses the simulation and displays a message. The simulation will resume when the user selects OK.

Syntax

DISPLAY “< text string >” [,< attribute / variable / function call >]
DISPLAY “Now completing the 100th set”
DISPLAY “The current number of entries is: “, Var1
DISPLAY “Var1 = “, Var1 $ CHAR(13) $ “Attr1 = ” $ Attr1

text string The message ProcessModel will display. The text string must be enclosed in quotes.

[attribute / variable / function call] The text string or numeric value you wish to display.

After the original set of information (i.e. text string, variable) the “$” character is used to add additional information (i.e another text string or variable). You can force a carriage return by using the statement CHAR(13). Each new item that is appended to the statement must be prefaced with the “$” character.

Example 1

This example displays a message whenever a new order type begins processing at the current activity. A variable, v_ Last_Order , stores the order type of the last entity processed at the activity. If the current entity’s a_ Order_Type attribute value is different from the previous order type, ProcessModel displays a message stating the new order’s type.

IF Order_Type <> Last_Order THEN
{

DISPLAY “New Order Type: ”, a_Order_Type
v_Last_Order = a_Order_Type

}

Example 2

This example displays the entity name during simulation.

Display “Entity Name = “, Name

Or

Display “Entity Name = “, Ent(Name)

Using just Name will display the entity number rather than the text name. Name is the system defined attribute which contains the numeric value of the entity name. Ent(Name) will display the text name of the entity.

Important information to be aware of The display statement is valuable for debugging complex models and for halting a model temporarily during a presentation to display information.

FREE

The free statement allows you to free a resource (or resources) being used by the current entity.

Syntax

FREE [ quantity ] resource
FREE [ quantity ] resource , [ quantity ] resource , …
FREE ALL

[quantity] The number of units of the following resource to free. If no quantity is used, the quantity is assumed to be one. (The square brackets illustrate only that this element is optional.)

resource The name of the resource or list of resource names to be freed. If any resource specified is not being used by the current entity, it is simply ignored.

ALL The keyword used with the FREE statement to free all captured resources.

Example

In the following example, an entity, which earlier captured the resource Operator, frees the Operator after a three minute activity time. This action is followed by an increment of the variable called v_TimesUsed.

TIME(3 min)
FREE Operator
INC v_TimesUsed

If no action statements follow the freeing of a resource, the resource can just as easily be freed by drawing a Free resource assignment connection between the resource and the activity.

GET

The get statement enables an entity to obtain a resource. ProcessModel attempts to capture the resources in the order they are listed. If multiple resources are requested, but not available, those that are available will be captured and tied up until all are available.

Syntax

GET [ quantity ] resource, [ priority ]
GET [ quantity ] resource, [ priority ] AND [ quantity ] resource, [ priority ]
GET [ quantity ] resource, [ priority ] OR [ quantity ] resource, [ priority]

[quantity] You can optionally specify the number of resources to get if the resource has multiple units defined for it. (The square brackets illustrate only that this element is optional.)

Important information to be aware of By default, quantity is equal to one unit of the resource.

resource The name of the resource to be captured.

AND Used to capture more than one resource as each becomes available. To wait until all become available before capturing any of them, use the JOINTLYGET statement.

OR Used to capture one resource or the other. Useful for situations where one of several resources could be used to accomplish the same thing.

[priority] You can optionally specify priority level to get the resource (0-99). The higher the number, the higher priority. A priority above 99 will become an interrupt priority, to learn more see Chapter 10, Section 10.5.8, Interrupting Resources. (The square brackets illustrate only that this element is optional.)

Example

The following examples demonstrate the use of the GET statement. The first shows a simple request for a resource called Operator . The second tests the Size attribute to determine whether or not the Operator and Helper are needed. And the third requests three units of the resource called Operator.

1) GET Operator
2) IF Size > 10 THEN GET Operator AND Helper
3) GET 3 Operator

Important information to be aware of 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…THEN…ELSE

The if statement is used to test for a condition and then execute sections of logic based on whether that condition is True or False. The condition is described with a Boolean expression , If the condition is True, the logic flow branches one way. If the condition is False, the flow branches in another direction.

If-Then statements can be added to Action Logic fields of the following objects:

  • Arrivals
  • Activities
  • Storages
  • Routings

Syntax

If Boolean Expression Then
{

Statement

}

If Boolean Expression Then
{

Statement1

}
Else
{

Statement2

}

If Boolean Expression Then
{

Statement1
Statement2

}
Else
{

Statement3
Statement4

}

If Boolean Expression Then
{

Statement

}

If Boolean Expression Then
{

Statement1

}
Else
{

Statement2

}

If Boolean Expression Then
{

Statement1

}
Else
{

If Boolean Expression Then
{

Statement

}

}

conditional expression Is a comparative expression using comparison operators like the equals sign (=) and the less than/greater than symbols (< >). The result of this expression is either true or false (yes or no). Multiple or alternative conditions can be tested using the operators AND and OR. Parentheses may be used for nesting expressions.

statement_1 This statement is executed if the conditional expression is true. This can also be a block of statements started with a BEGIN keyword or symbol ({ ) and ended with the END keyword or symbol ( }).

statement_2 This statement, preceded by the keyword ELSE, is executed if the conditional expression is false. This can also be a block of statements started with a BEGIN keyword or symbol ({ ) and ended with the END keyword or symbol ( }).

Rules

  • All words must have at least one space separation
    NO IfName = Rework YES If Name=Rework OR If Name = Rework
  • If more than one action is the result of the If-Then statement, the group of statements must be bracketed By the Begin and End statements or {…}

    If Name = Phone_Call Then
    {

    Inc v_Calls
    Time(5 min)

    }
    Else
    {

    Inc v_Fax
    Time(10 min)

    }

    In the Example above if the Attribute “name” contains the word Phone_Call, then the statement is true. the statements after the THEN will be executed and all the statements after the Else will be skipped.

  • Indenting and carriage returns are optional — but if you want to be able to read your work next week, group blocks of statements and indent so that it is easy to see the result of true or false conditions.

Example

In the following examples the IF…THEN…ELSE statement is used to make decisions about what happens in the model. In the first example, the variable v_Calls is incremented if the Name has the same descriptor value as Phone_Call. The second example shows a decision made based on the a_Patient_Type. If the patient is critical, both a Nurse and a Doctor resource are needed. Otherwise, only a nurse is captured and the activity takes less time.

1)
IF Name = Phone_Call THEN INC v_Calls

2)
IF a_Patient_Type = Critical THEN
{

GET Nurse AND Doctor
TIME(N(30, 5) min)
FREE ALL

}
ELSE
{

GET Nurse
TIME(N(8, 1) min)
FREE ALL

}

INC

The increment statement allows you to increment a variable or attribute’s value. It adds one (the default) or more to the value of the variable or attribute.

Syntax

INC name [, expression]

name This is the name of the variable or attribute to be incremented.

[expression] You can optionally increment the variable or attribute by more than one using an expression which can be a constant or a mathematical expression. The name and expression must be separated by a comma. (The square brackets illustrate only that this element is optional.)

Example

The following are several easy-to-understand examples. The first increments the value of v_ Var1 by one. The second increments the value of a_ Attr1 by five. And the third increments the value of v_ Number_in_System by the value of v_ Num_Processed plus one.

1) INC v_Var1
2) INC a_Attr1, 5
3) INC v_Number_in_System, v_Num_Processed +1

JOINTLYGET

This statement allows an entity to get more than one resource, but not until they all become available.

Syntax

JOINTLYGET [ quantity ] resource, [ priority ]
JOINTLYGET [ quantity ] resource, [ priority ] AND [ quantity ] resource, [ priority ]
JOINTLYGET [ quantity ] resource, [ priority ] OR [ quantity ] resource, [ priority]

[quantity] Optionally specify the number of units of the resource that you want to capture. (The square brackets illustrate only that this element is optional.)

Important information to be aware of By default, quantity is equal to one unit of the resource.

resource The name of the resource you want to capture.

AND Used to capture more than one resource once they all become available. To capture multiple resources as each one becomes available, use the GET statement.

OR Used to capture one resource or the other. Useful for situations where one of several resources could be used to accomplish the same thing.

[priority] You can optionally specify priority level to get the resource (0-999). The higher the number, the higher priority. (The square brackets illustrate only that this element is optional.)

Example

The following examples demonstrate the use of the JOINTLYGET statement. The first shows a simple request for a resource called Operator and a resource called Helper. The second tests the a_ Size attribute to determine whether or not the Operator needs two Helper resources. The third example requests the Operator and three units of the resource called Helper . If three helpers are not available, the statement may get two operators and two helpers.

1) JOINTLYGET Operator AND Helper
2) IF a_Size > 10 THEN JOINTLYGET Operator AND 2 Helper
3) JOINTLYGET (Operator AND 3 Helper) OR (2 Operator AND 2 Helper)

NEWGRAPHIC

This statement allows you to change an entity’s graphic without changing the name of the entity. The NEWGRAPHIC statement will permit you to graphically depict a change in an entity’s state without affecting the statistics collected for the original entity. The NEWGRAPHIC statement allows depiction of:

• assembly, by adding to the complexity of graphics
• value or size change, by increasing the size of the graphics
• exception tracking, by changing the color of the graphic.

For more information, see Finding Graphic ID Numbers.

Syntax

NEWGRAPHIC(id#)

id# The identification number of the new entity graphic you want to use in the animation. Numbers (1-20) are pre-assigned to the entities in the standard entities shape palette. When you place entity graphics on the layout, ProcessModel adds them internally as graphic number 21, 22, 23, . . . and so on.

Example

Suppose you want a completed order to appear with a different graphic. To do this, you would use the NewGraphic statement for the entity (e.g. Order) to change its ID from 21 to 22 (this will substitute a new graphic for the original). At the activity or connection where the change takes place, enter the following statement in the Action logic:

NEWGRAPHIC(22)

NEWNAME

This statement allows you to change the name of an entity along with its graphic so that model animation as well as statistical reports will reflect the change. In effect, this statement reassigns the entity the name enclosed in parentheses and changes the graphic i.d. number appropriately.

Syntax

NEWNAME(name)

name The new name assigned to the entity with its accompanying graphic if defined on the layout. The new entity and its graphic must be previously defined on the layout when using this statement.

Example

We want to see completed orders as a different graphic and collect statistics on the completed orders, so we use the NewName statement on the entity named Order. At the activity or connection where the change takes place, enter the following in properties dialog Action logic:

NEWNAME(Completed_Order)

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.

PAUSE

Pauses the simulation and (optionally) displays a user-specified message. This pause allows you to examine the system in detail by using menu items from the Options and Information menu. The simulation will continue only when the user selects Resume Simulation from the Simulation menu.

Syntax

PAUSE [< text string >]
PAUSE
PAUSE “Work in Process levels are critically low.”

text string The optional message ProcessModel will display.

Example

The simple example below pauses the simulation after the 100th Claim has been processed at activity Quality Check. The purpose for doing this might be to view the current state of the system at this particular point in time.

INC v_Total
IF v_Total >= 100 THEN
{

PAUSE “Total = 100”
v_Total=0

}

REPORT

Calculates and reports the current statistics to the output database. This is useful to get a snapshot of the model at various points during the simulation.

The REPORT statement may be followed by the WITH RESET option to reset the statistics after the report is made to the database. When you use the WITH RESET option, you generally want to provide some periodic looping event that will call the report function at specific times.

Used with the AS option, REPORT creates a report with the name specified in the expression.

Syntax

REPORT [WITH RESET] [AS < text string >]
REPORT
REPORT WITH RESET
IF v_thruput = 50 THEN REPORT AS “RepOvr50”

text string A unique name given to the report so it can be easily identified in the General Stats dialog in the Output Program. If any reports have the same name, a number is tacked on the end of the name to make it unique.

Example

To get a snapshot report every 40 hours, schedule a “dummy entity” to arrive periodically (every 40 hours) at a “dummy activity.” In the action logic field, enter the statement REPORT WITH RESET AS 40HOUR and set the activity time to 0.

Report syntax action logic

This results in reports named, 40HOUR, 40HOUR2, 40HOUR3, etc.

 Variables are not automatically reset. You will need to manually reset the variables with the report statement if they are being used to track statistics.

 When a REPORT statement is used in a model, the final report is not generated. So unless a Report statement occurs exactly at the end of the simulation, there will likely be some additional processing that occurs. But that last bit of processing won’t be reported. Make sure the last Report statement occurs exactly at the end of simulation time.

 The “reset” doesn’t reset the number of entities in the activity. So at the start of each new report, there could be entities already in the activity. Therefore, if we add the Total Entries values for each report, we will have a number greater than the actual number of entities that entered that activity. Rather than add the Total Entries values, increment a variable in the activity in question. Then view that variable in the output report.

STOP

Terminates the current replication and optionally displays a message. The simulation will then continue with the next replication. Use STOP to end a replication when a user-defined condition becomes true.

Syntax

STOP [<“ text string” >]
STOP
STOP “Normal termination”

text string An optional message to display when the replication stops.

Example

The example below uses a STOP statement to terminate the simulation whenever the variable v_Total_Complete reaches 100.

INC v_Total_Complete
IF v_Total_Complete = 100 THEN

STOP

TIME

The time statement allows you to require the entity to spend time at an activity and has the same effect as entering a time value under the General tab of the properties dialog. This permits you to define a processing time based on logical criteria such as the value of an entity attribute.

Syntax

TIME( time expression <wk/day/hr/min/sec >)

time expression The amount of time to detain the entity at the activity. It can also be expressed as a distribution to add variability to the processing time.

<hr/min/sec> The time unit for the expression.

Caution DO NOT use this statement in an arrival connection’s Action logic. Doing so will result in an error when you run the simulation.

Example 1

In the first example, a 5-second activity time is specified. In the second, the activity time is a normal distribution with a mean of 10 minutes and a standard deviation of 2.5 minutes. The third example illustrates a discrete distribution function where the activity has a 20% chance of taking 5 minutes, a 30% chance of taking 8 minutes, and a 50% chance of taking 10 minutes. The fourth example uses a mathematical expression to indicate an activity time in hours equal to 2.5 times the value of the a_ Size attribute.

1) TIME(5 sec)
2) TIME(N(10, 2.5) min)
3) TIME(D3(20, 5, 30, 8, 50, 10) min)
4) TIME(a_Size * 2.5 hr)

Important information to be aware of The time expression and time unit must be used together and separated by a space. A Day time unit equals 24 hours and Week time unit equals 168 hours.

Example 2

Using a Time statement with 0 time can be a very helpful piece of action logic. The purpose of this statement is to place the current entity at the bottom of the simulation’s processing stack. One application of this kind of statement is as follows. Suppose you want to have 20 items enter a storage, one at a time or in groups, and have all 20 items leave the storage at the same time. You can accomplish this with batching. However, you can simplify your model by using the following action logic in a storage.

Inc v_Counter
Wait Until v_Counter = 20
Time(0 Min)
Dec v_Counter

This action logic will count entities entering the storage, and hold them until there are 20. Once the Wait condition is true, all 20 entities move to the Time statement which will place each entity at the bottom of the simulation’s pending actions queue. The result is that the v_Counter variable is not decremented until all 20 entities have passed the Time statement. Since the processing sequence of all 20 entities are now consecutive, they all move one after the other to the Dec statement, reducing the counter to 0 before any new entities enter the storage. The process then repeats for the next 20 entities entering the storage.

WAIT UNTIL

Delays processing of the current logic until the Boolean expression is true. The rest of the model continues to process during the delay. Note that if the expression initially evaluates to be false, ProcessModel reevaluates it only when a variable in the expression changes. ProcessModel releases multiple entities waiting on the same condition one at a time. This allows a released entity to reset the variable value and prevent the release of other waiting entities.

Syntax

WAIT UNTIL
WAIT UNTIL v_Var1 > 3
WAIT UNTIL v_Var1 < a_Attr3 AND v_Var2 >= 5

Boolean expression The condition that must be satisfied to continue processing the entity or resource. One side of the Boolean expression must contain a variable that can change due to some other event in the model.

Example

The following example uses the WAIT…UNTIL statement to group a variable number of people at an airport shuttle stop. As each person arrives at the shuttle stop, a variable (v_Total) is incremented to keep track of the number of people waiting. The WAIT…UNTIL statement causes all people to wait at this point until the variable, v_Total, is equal to or greater than five.

INC v_Total
WAIT UNTIL v_Total >= 5

WHILE…DO

Repeats logic or logic block continuously while a condition remains true.

Syntax

WHILE DO
WHILE v_Var1 > 3 DO TIME(10 min)
WHILE v_Var1 < a_Attr3 AND Var2 >= 5 DO
{

}

Boolean expression The condition that must be satisfied to continue processing the entity or resource. One side of the Boolean expression must contain a variable that can change due to some other event in the model.

Example

The following example uses the WHILE…DO loop to track the day of the week. v_Var1 is a variable that is set to zero at the beginning of the simulation and remains constant, so the loop will continue for the length of the simulation. v_Day_of_Week is a variable that changes every 24 hours and is reset to one on the eight day.

While v_Var1 = 0 DO
{

INC v_Day_of_Week
IF v_Day_of_Week = 8 THEN v_Day_of_Week = 1
TIME(24 Hr)

}

3.12 – Expressions

An expression provides a value based on an evaluation of the names, constants, and symbols in the expression. Some expressions provide a numeric value; these are called numeric expressions. Others provide a true/false value; these are called Boolean expressions.

Expressions allow you to introduce variability into your model. They let you track, control, and respond to events. To create an expression you may use any combination of constants, probability distributions, attributes, and variables. These elements allow you to expand the scope and improve the credibility of your model.

This section shows you how to create expressions and how to use distributions, attributes, and variables in your model to accurately reflect the variability and randomness of the real world.

Numeric Expressions

Unless otherwise stated in this manual, expressions refer to numeric expressions which consist of elements (attributes, variables, distributions, and constants) combined with normal mathematical operators ( + , – , etc.) that result in a numeric value. A numeric expression may be as simple as a variable name or as complex as a formula.

Expression Elements

The following table illustrates the expression elements.

Element Meaning Examples
attribute name Attribute’s current value a_Weight
a_Pkg_Qty
a_SerialNumber
variable name Variable’s current value v_Num_In_System
v_Qty_To_Go
v_Total_Pieces
distribution A probability distribution T(5, 15, 45)
N(34, 3)
U(50, 5)
constant A specific number 5
10.25
19.01

Mathematical Operators

The following table illustrates the use of mathematical operators.

Item Meaning Examples
+ addition a_Weight + 2.5
a_Pkg_Qty + 3.4
subtraction v_Num_In_System – 5
100 – v_Qty_To_Go
* multiplication 5 * v_Total_Pieces
a_Weight * 0.98
/ division v_Total_Pieces / 100
a_Pkg_Qty / v_Bin_Qty
() parentheses (v_Total_Pieces – v_Total) / 100
a_Pkg_Qty / (v_Bin_Qty – 100)
** exponentiation a_Pkg_Qty ** v_Total_Pieces
2 ** v_Bin_Qty
modulus  a_Value1 = 10
a_Value2 = 4
a_Div = a_Value1 / a_Value2
v_Remainder = a_Value1 – (a_Div * a_Value2)// Where a_Div is an integer.

Examples of Numeric Expressions

You may combine items to form a compound expression. Parentheses may be used to set off parts of the expression to be evaluated first. For information on the order in which operators are evaluated to determine the expression’s value, see Operator Precedence below.

a_Attr1
50.91
v_Var1 + 5
v_Total_Pieces + 5 * a_Pkg_Qty
(a_Weight + 5) * (a_Pkg_Qty / 2)
N(25, 4.8) + a_Weight * (v_Total_Pieces – 10)

Boolean Expressions (True / False)

In addition to numeric expressions, you may use logical operators to create Boolean expressions that compare two numeric expressions yielding a result of True or False. These expression may be used in IF…THEN statements and condition fields to make specific decisions in the model based on the values of two numeric expressions.

Boolean Operators

The following table lists and illustrates the use of Boolean operators to create Boolean expressions.

Item Meaning Examples
= equal to a_Weight = 2.5
v_Total_Pieces = 50
> greater than a_Weight > 2.5
v_Total_Pieces > 50
< less than a_Weight < 2.5
v_Total_Pieces < 50
<> not equal to a_Weight <> 2.5
v_Total_Pieces <> 50
>= greater than or equal to a_Weight >= 2.5
v_Total_Pieces >= 50
<= less than or equal to a_Weight <= 2.5
v_Total_Pieces <= 50
AND both expressions a_Weight = 25 AND v_Total = 30
v_Total >= 20 AND v_Total <= 30
OR Done or both expressions a_Weight > 5 OR v_Total <= 20
v_Total = 30 OR a_Weight =15

Examples of Boolean Expressions

You may use simple or compound numeric expressions on either side of the Boolean operator.

IF v_Total_Pieces > 5 * a_Pkg_Qty THEN…

IF (a_Weight + 5) <= (a_Pkg_Qty / 2) THEN…

IF N(25, 4.8) + a_Weight = v_Total_Pieces – 10 THEN…

IF a_Weight >= v_Total_Pieces AND a_Pkg_Qty > 20 THEN…

IF v_Total_Pieces = a_Pkg_Qty OR a_Pkg_Qty > 35 THEN…

Operator Precedence

As in conventional mathematics, ProcessModel evaluates expressions with more than one operator according to certain rules of precedence. Expressions with more than one operator are evaluated from left to right in the following order:

1. Terms inside parenthesis: ( )
2. Multiplication: *; and Division: /
3. Addition: +; and Subtraction:
4. Equalities and Inequalities: =, <>, >, >=, <, <=

3.12.1 – Distributions

See Basics 7 – Why Variability is Critical video tutorial.

In the real world, events tend to occur randomly, according to certain statistical patterns or distributions. Distributions allow you to add randomness or variability to your model in order to make it more accurately reflect reality. ProcessModel is capable of creating random sample values that fit a specific theoretical or user-defined distribution.

Important information to be aware of You can use a distribution when specifying time values and quantities or when assigning a value to an attribute or variable. For example, this statement:

TIME (T(2, 2.6, 4) min)

would make the activity last for a time randomly selected from a triangular distribution with a minimum time of 2 minutes, a most likely time of 2.6 minutes, and a maximum time of 4 minutes.

Distribution functions are built-in functions that generate random values from numbers using pre-determined patterns. Distributions may be discrete, selecting one among a finite number of possible solutions, or continuous according to the pattern provided by the input parameters. An example of using a discrete distribution is when an entity can randomly route to one of several places, or when randomly generating a batch size. Examples of continuous distributions include service and inter-arrival times. The distributions directly available to you in ProcessModel are:

Distributions in ProcessModel simulation software

Many additional distributions can be used because of conversions made by Stat::Fit to ProcessModel distributions. See Convert Raw Data to Distributions.

Common Distributions

The following is a list of the most commonly used distributions and the syntax used to define them. The s parameter is optional (see discussion of streams following this list).

Common
Distributions
Syntax Components
Normal N(a, b, s) a = mean, b = standard deviation,
s = stream (optional)
example: N(30,5)
Triangular T(a, b, c,s) a = minimum, b=mode, c=maximum,
s = stream (optional)
example: T(2,10,13)
Uniform U(a, b, s) a = mean, b=half range, s = stream (optional)
example: U(20,4)
User-Defined D n (% 1 ,x 1 ,…% n ,x n ) % = percentage (entries must total 100%)
x = value (numeric or pre-defined descriptor)
n = number of%, x entries between 2 and 5
example: D3(20, 35, 30, 45, 50, 37.5)

The following illustration shows an example of each of the common distributions:

Common distributions in ProcessModel simulation software

Triangular This distribution is probably the most versatile yet easy to understand. It allows you to set a lower limit, an upper limit, and a most likely point. In the above example, the distribution would return a random number where the minimum value could be 2, the most likely value would be 5, and the maximum value could be 12.

For example, a call center may take as little as 1 minute with a call but usually takes 3.4 minutes and sometimes takes up to 15 minutes to complete the call. To model this in the Time field of the activity, you would enter: T(1, 3.4, 15)

Generally, you should express time values using the triangular distribution since it is flexible and realistic, yet easy to understand. Studies have shown that activity times are never uniformly distributed and rarely normally distributed. Generally, activity times approximate a triangular distribution that is skewed to the right as shown in the example above

Normal A normal Bell curve, this distribution allows you to designate a mean (average) and a standard deviation to generate a random number within that curve, the most likely number to be generated being the mean. The previous example shows a normal distribution with a mean or average of 30 and a standard deviation of 5.

Uniform This distribution allows you to generate a completely random number since any number under its curve is just as likely to be selected as any other. It is very useful when you want to have a random number unaffected by a most likely point. The previous example will result in a random number from 16 to 24 (i.e. 20 ± 4).

For example, suppose you want to assign a random number from 0 to 30 to an attribute called a_Cover_Time. Enter a_Cover_Time = U(15, 15) in the Action logic where the assignment needs to take place.

User-Defined This distribution is specialized to allow you to generate a specific number based on percentages. You can create two, three, four, or five possible outcomes. The previous example, D3(20, 35, 30, 37.5, 50, 45), will generate the number 35 exactly 20% of the time, 30% of the time the number will be 37.5, and 50% of the time 45 will be the number.

For example, two types of patients require different preparation times. About 38% of the time a nurse takes 25 minutes to prepare the patient and 62% of the time it takes 43 minutes. Enter D2(38, 25, 62, 43) in the Time field of the preparation activity.

To see the parameters for other distributions found in ProcessModel, select the Action tab for an Activity and select Distributions from the drop down filter. Select the desired distribution then select the Paste button to move a distribution into action field. This will show the parameters used to build up a distribution.

To determine what distribution to use in the absence of raw data, use the following table:

Characteristics Possible Distribution
Unbounded

symmetrical about the mean
unbounded distribution skewed to the left
unbounded distribution skewed to the right

Normal
Extreme Value IA
Extreme Value IB

Bounded above a minimum

Time to a random event — time between arrivals
Time to a complex event — failure times
Time to task completion — service times, repair times

Exponential
Gama
Gama

Bounded between and minimum and a maximum Time to task completion

— when the minimum is not more than 3 * (Max -Most likely)
— when the Maximum is not more than 3 * (Most likely – Minimum)
— Other

Triangular
Beta

Important information to be aware of For detailed information on all available distributions, use the Stat::Fit Help or the Stat::Fit user’s guide found in “C:\Program Files\ProcessModel\x.x\StatFit\SF Manual V2.pdf”.

Streams

An optional stream number (1 – 100), shown as the S in the above tables, can be used to generate independently random numbers for the distribution. If this option is omitted, ProcessModel will use stream 1. The range is 1 – 100. The stream number is used to start the random seed value of a distribution at a number other than 1, which is the default. The stream number, preceded by a comma, is included as an additional parameter at the end of a distribution. It is placed before the closing parenthesis.

Important information to be aware of Any negative values returned by a distribution that are used for a time expression will be automatically converted to zero.

3.12.2 – Convert Raw Data to Distributions

See Stat::Fit video tutorial.

SummaryStat::Fit Inputting Data

1. Click Stat::Fit from the Tools menu.

2. Copy the column of data that you want to use within Stat::Fit.

3. Click in the open space directly across from the number 1 and press CTRL + V to paste data.

Stat::Fit Window with Data Pasted

4. Click the Auto::Fit button.

5. In the Auto::Fit dialog, select unbounded, lower bound, or assigned lower bound and click OK.

Important information to be aware of Users with greater statistical background may enjoy experimenting with the power of Stat::Fit here.

Stat::Fit Distributions Window

6. Click on the distribution you wish to use in the dialog displayed. This will generate the Comparison graph.

Stat::Fit Graphs Window

Important information to be aware of The Comparison graph allows you to compare your actual data against the selected distribution. The bars represent your data, while the line represents the distribution that will fit that data.

Important information to be aware of Other comparative graphs are accessible through the Results option of the Fit menu.

7. With the best distribution selected, click the Export button. Click OK to export the distribution to the clipboard.

Stat::Fit Export Distribution Window

8. Now return to ProcessModel and paste the distribution in the desired field or Action logic using the CTRL-V shortcut.

Detailed Information

Stat::Fit® is a comprehensive yet user-friendly curve fitting package. Stat::Fit will take raw data from spreadsheets, text files, or manual input and convert that data into the appropriate distribution for instant input into ProcessModel software.

It automatically fits continuous distributions, compares distribution types, and provides an absolute measure of each distribution’s acceptability. It also translates the fitted distribution into specific forms for use in ProcessModel products. It is developed by our technology partners at Geer Mountain Software.

Stat::Fit statistically fits your data to the most useful analytical distribution. Its operation is intuitive, yet its help file extensive. The Auto::Fit function automatically fits continuous distributions, provides relative comparisons between distribution types, and an absolute measure of each distribution’s acceptability. The Export function translates the fitted distribution into ProcessModel. Some of the features are included below

Stat::Fit takes raw data (e.g. collected service times) and turns them into a single distribution that represents the collected data. For example, data collected on the length of breakdowns can be turned into a single distribution and be placed in a ProcessModel field.

Using stat fit with processmodel

Stat::Fit is accessed from the Tools menu. It allows you to improve the accuracy of your models by using collected data to determine the best distribution to use in order to reflect that data (See “Distributions” in Chapter 3.12.1).

Distribution Fitting:

For Many distributions:

Beta, Binomial, Chi Squared, Erlang, Exponential, Extreme ValueIA, Extreme Value IB, Gamma, Geometric, Inverse Gaussian, Inverse Weibull, Johnson SB, Johnson SU, Logarithmic, Logistic, Loglogistic, Lognormal, Normal, Pareto, Pearson V, Pearson VI, Poisson, Power Function, Rayleigh, Triangular, Uniform, Weibull.

Descriptive Statistics:

Mean, Median, Mode, Standard Deviation, Variance, Coefficient of Variation, Skewness, Kurtosis.

Parameter Estimates:

Maximum Likelihood, Moments.

Goodness of Fit Tests:

Chi-squared, Kolmogorov-Smirnov, Anderson-Darling.

Graphical Analysis:

Density graphs, Distribution Graphs, Difference graphs, Box Plots, Q-Q plot, P-P plot, Scatter plot, Autocorrelation graphs.

Additional Features:

Built-in random variate generator, Data manipulation options, Distribution Viewer, Distribution Percentiles

Continuous Distributions vs. Discrete Distributions

Distribution fittings are built-in functions that generate random numbers using predetermined patterns. Distributions may be discrete, randomly returning one value among a specified list of values, or they can be continuous and interpolate randomly according to the pattern provided by the input table or parameters. There are several steps in determining the best distribution to use given raw data from observations of the process being modeled. First, you must determine whether the data is discrete or continuous, then follow the appropriate instructions. For instructions on finding the best discrete or continuous distribution, see Discrete distribution.

Stat::Fit is capable of much more than fitting data to distributions, but you need only take advantage of a few of its easy-to-use features when fitting your data to a ProcessModel distribution.

Continuous Distribution

The following example shows you how Stat::Fit can help you create more accurate models. A bank wants to model its teller operations, including the amount of time that it takes to serve each customer. Therefore, for a week, the time each customer spent with a teller is recorded. The data is entered in a text file which can be read by Stat::Fit. Using Stat::Fit, the data is analyzed and an activity time distribution is found that accurately reflects the amount of time required to serve a customer.

Discrete Distribution

The following example shows how a restaurant could use ProcessModel to model its seating operation. The number of customers is a quantity of discrete entities. Therefore, the Stat::Fit component of ProcessModel would take data about the number of customers who enter in each group, create a discrete distribution to represent that data, and place the distribution in the Quantity field for Arrivals in the ProcessModel for the restaurant.

Determine the best discrete distribution from raw data

1. Click Stat::Fit from the Tools menu.

2. Copy the column of data that you want to use within Stat::Fit.

3. Click in the open space directly across from the number 1 and press CTRL + V to paste data.

Discrete distribution example

4. Click the Auto::Fit button Auto fit button in stat fit.

5. In the Auto::Fit dialog , select discrete distributions as shown below and click OK.

Fitting discrete distribution

Stat::Fit then calculates the best distribution choices and displays them along with their rank (the higher the rank, the better the fit)

Automatic fitting by Stat Fit

6. Click on the name of the distribution that best fits the data.

Finding the best discrete distribution

7. With the best distribution found, follow the instructions for exporting data to ProcessModel found in fitting continuous data.

Replications in Stat::Fit

Replications in Stat::Fit

Replications in Stat::Fit

Find out how many process simulation replications should be run in order to accurately represent a system. There are formulas to calculate replications required, even better one of the formula’s has been automated in Stat::Fit, a fantastic tool provided with ProcessModel. Stat::Fit is found on the Tools/Stat::Fit menu.

The Replications command allows the user to calculate the number of independent data points, or replications, of an experiment necessary to provide a given range, or confidence interval, for the estimate of a parameter. The confidence interval is given for the confidence level specified, with of default of 0.95. The resulting number of replications is calculated using the t distribution.

The expected variation of the parameter must be specified by either its expected maximum range or its expected standard deviation. Quite frequently, this variation is calculated by pilot runs of the experiment or simulation, but can be chosen by experience if necessary. Be aware that this is just an initial value for the required replications, and should be refined as further data are available.

Alternatively, the confidence interval for a given estimate of a parameter can be calculated from the known number of replications and the expected or estimated variation of the parameter.

Distributions and their Usage

Following is a list of distributions and their general uses in ProcessModel. These distributions can be determined by using Stat::Fit and then used within different areas of ProcessModel. For a complete list of usable distributions and their descriptions, please refer to the Appendix of the Stat::Fit user’s guide found at: C:\Program Files\ProcessModel\x.x\StatFit\SF Manual V2.pdf.

Distributions Usage
Beta The Beta distribution is a continuous distribution that has both upper and lower finite bounds. Because many real situations can be bounded in this way, the Beta distribution can be used empirically to estimate the actual distribution before much data is available. Even when data is available, the Beta distribution should fit most data in a reasonable fashion, although it may not be the best fit.

For more information, see Beta Distribution.

Binomial The Binomial distribution is a discrete distribution bounded by [0,n]. Typically, it is used where a single trial is repeated over and over, such as the tossing of a coin. The parameter, p, is the probability of the event, either heads or tails, either occurring or not occurring. Each single trial is assumed to be independent of all others. The Binomial distribution can be used to represent the sampling of defective parts in a stable process, and other event sampling tests where the probability of the event is known to be constant or nearly so.
Exponential The Exponential distribution is continuous and is frequently used to represent the time between random occurrences, such as the time between arrivals at a specific location in a queuing model or the time between failures in reliability models. It has also been used to represent the services times of a specific operation.
Erlang The Erlang distribution is a continuous distribution bounded on the lower side. The Erlang distribution has been used extensively in reliability and in queuing theory.
Gamma The Gamma distribution is a continuous distribution bounded at the lower side. The Gamma distribution has been used to represent lifetimes, lead times, personal income data, and service times.
Geometric The Geometric distribution has been used for inventory demand, marketing survey returns, etc.
Inverse Gaussian The Inverse Gaussian distribution is a continuous distribution with a bound on the lower side. This distribution can be used to represent reliability and lifetimes, and repair time.
Lognormal The Lognormal distribution is a continuous distribution bounded on the lower side. This distribution can be used to model the duration of sickness absence, physicians’ consultant time, lifetime distributions in reliability, distribution of income, employee retention, and many applications modeling weight, height, etc.

For more information, see Lognormal Conversion.

Normal Normal distribution is frequently used to represent symmetrical data, but suffers from being unbounded in both directions. If the data is known to have a lower bound, it may be better represented by suitable parametrization of the Lognormal, Weibull, or Gamma distributions. See distributions for a description of the input parameters.
Poisson The Poisson distribution is a discrete distribution bounded at 0 on the low side and unbounded on the high side. The Poisson distribution finds frequent use because it represents the infrequent occurrence of events whose rate is constant. This includes many types of events in time or space such as arrivals of telephone calls, defects in semiconductors manufacturing and defects in all aspects of quality control.
Pearson5 The Pearson 5 distribution is a continuous distribution with a bound on the lower side. The Pearson 5 distribution is useful for modeling time delays where some minimum delay value is almost assured and the maximum time is unbounded and variably long, such as time to complete a difficult task, time to respond to an emergency, time to repair a tool, etc.
Pearson6 The Pearson 6 distribution is a continuous distribution bounded on the low side.
Triangular The Triangular distribution is a continuous distribution bounded on both sides.The Triangular distribution is often used when no or little data is available; it is a good starting point for approximating data, but it is rarely an accurate representation of a data set. (see Law & Kelton1). See distributions for a description of the input parameters.

For more information, see Triangular Distribution.

Uniform The Uniform distribution is a continuous distribution bounded on both sides. Its density does not depend on the value of x. The Uniform distribution is used to represent a random variable with constant likelihood of being in any small interval between min and max. See distributions for a description of the input parameters.

For more information, see Uniform Distribution.

User-Defined The User-Defined distribution is a discrete distribution defined by a probability of obtaining each value. See distributions for a description of the input parameters.
Weibull The Weibull distribution is a continuous distribution bounded on the lower side. In particular, the Weibull distribution is used to represent wear out lifetimes in reliability, health related issues, and duration of industrial stoppages.

3.12.3 – Attributes

Attributes are values or placeholders associated with individual entities that may, for example, indicate the entity’s size or condition. Attributes are placeholders for either values (real or integer) or descriptors (single-word descriptions). An attribute’s value can only be assigned, incremented, decremented and examined by the entity to which the attribute belongs. For example, while ActivityA processes an entity, the attribute called a_Color could be tested for only that particular entity in the activity’s Action Logic. Entities have the following pre-defined attributes:

Name – The name of the entity. DO NOT use an assignment statement to assign this attribute, e.g., Name = BadCall will not work. Use the NewName statement or the available fields in the routing properties dialog.
Cost – The current accumulated cost for an entity. To learn more about costs, see ProcessModel and Activity-based Costing.
VATime – Cumulative value-added time (in minutes).
ID – Unique identifying number assigned to each entity (created entities have the same ID as the entity that created them so they can be reunited later if desired).
CycleStart – Time (in minutes) entity entered system.
BVATime – Time (in minutes) added to BVA change.
GraphicID – Unique identifying number assigned to each entity graphic
ProcessStartTime – Process start time (in minutes).
CreatedQty – Number of entities created.
LastResTime – Time spent by the last resource on the entity (in minutes).
ReBatchQty – Previous batch quantity.
LoadStatus – Displays the load status of an entity when using an attach route. A value of 1 means all the entities needing to be attached are now attached, a 0 means that the entity is still waiting for the entities to attach or no attach is being used. LoadStatus will only store a value of either 0 or 1.
RoutingBlock_ – Entity Attribute for each subchart.

Pre-defined attributes are manipulated automatically by the system, so they should only be manually manipulated with careful forethought.

Creating User-Defined Attributes

User-defined attributes are defined by the user in the Attributes & Variables dialog accessed from the Insert menu. User-defined attributes may be given an initial value using action statements defined for the entity arrival.

Creating User-Defined Attributes

Shown here after a new descriptive attribute was created using the New button.

New This button creates a new attribute.

Delete This button deletes the selected attribute. (Note that the pre-defined attributes may not be deleted.)

Name The name of the attribute. Letters, numbers, and the underscore “ _ ” character are allowed in the name. The name must be one continuous word (i.e. a_Priority_Level).

Type The type of attribute. This can be set to Integer, Real, or Descriptive.

If you assign a real value (containing a decimal portion) to an integer parameter (user or system defined), the value will be truncated to 0 decimal places. It will not be rounded. Capacity, input queue, output queue, batch size, and resource quantity fields are all integer fields which will be truncated if you enter a number with a decimal value.

Integer Any whole number (no digits to the right of the decimal).

Real Any number including those with digits to the right of the decimal. Use Real when a high level of accuracy and detail is needed.

Descriptive Defined with a list of adjectives or descriptors that may be assigned to the attribute.

Paste Rule How the Attribute will be added when pasted into a model.

Duplicate If the Attribute does not exist in the target model, then it will be added to the Attribute dialog. If the Attribute does exist in the target model then that Attribute will not be added to the Attribute dialog.

Clone If the Attribute does not exist in the target model, then it will be added to the Attribute dialog. If the Attribute does exist in the target model then it will be added with post-fix (a_color will become a_color1). In addition, all instances of the a_color in the logic to be pasted will become a_color1.

Descriptor list The list of adjectives or descriptors that may be assigned to the descriptive attribute. Only available for attributes whose Type is Descriptive.

Using Descriptors

Attributes and Variables can be defined with a type: Descriptive. The Descriptor List is where a list of adjectives / descriptors that may be assigned to the descriptive attribute or variable can be defined. Descriptors are helpful in making your model easier to read and understand. Difficult logic is easier to explain to others when using descriptive attributes and variables.

For most models, few rules are needed when defining descriptive attributes and variables. However, if a model is developed that transfers the value of descriptive attributes or variable to other descriptive attributes or variables then additional care is needed during definition. When declaring Descriptors for attributes and variables the following rules should be considered:

  1. Reserved words should not be used.
  2. Should not start with a number.
  3. Descriptors that are common between multiple attributes or variables should always be defined in the same order, in all the attributes and variables. Common descriptors must be listed one after the other. The initial value for all variables that use common descriptors must be set and must be the same.
  4. It is recommended that a space is not added in the descriptor names, any space added will result in it being replaced with an underscore ‘_’ during simulation.

Examples:

Invalid Descriptors:

  1. CONTENTS
  2. CREATE
  3. CYCLESTART
  4. D2
  5. D3
  6. 14THSTATION
  7. 17THRESOURCE

Note: In the descriptors above 1 to 5 are reserved words, while 6 and 7 use a number at the start.

Valid Descriptors:

  1. CONTENTSOF1
  2. CREATEFROM1
  3. CYCLESTARTOF1
  4. D2FROMTO1
  5. D3FROMTO1
  6. STATION14TH
  7. RESOURCE17TH
  8. COLORRED
  9. YELLO
  10. YES
  11. NO

Invalid Same Descriptors:

  1. a_Test1:
    • RED
    • GREEN
    • BLUE
    • YELLOW
    • BLACK
  2. a_Test2
    • BLUE
    • GREEN
    • RED
    • BLACK
    • YELLOW
  3. v_Test1
    • GREEN
    • RED
    • BLUE
    • YELLOW
  4. v_Test2
    • BLUE
    • RED
    • GREEN
    •  BLACK

Valid Same Descriptors:

  1. a_Test1:
    • RED_1
    • GREEN_2
    • BLUE_3
    • YELLOW_4
    • BLACK_5
  2. a_Test2
    • RED_1
    • GREEN_2
    • BLUE_3
    • YELLOW_4
    • BLACK_5
  3. v_Test1
    • RED_1
    • GREEN_2
    • BLUE_3
    • YELLOW_4
    • BLACK_5
  4. v_Test2
    • RED_1
    • GREEN_2
    • BLUE_3
    • YELLOW_4
    • BLACK_5

Note: The value of a descriptive variable, when using the DISPLAY action logic will return an integer value based on the descriptors position in the descriptor list, the _# at the end of each descriptor will help in quick troubleshooting.

Define an Attribute

1. Select Attributes & Variables from the Simulation menu.

2. Press the New button.

3. Enter the name of the attribute.

4. Select the type: Real, Integer, or Descriptive. If you select Descriptive, you must enter the list of descriptors in the edit box provided. (Each descriptor should be entered on a separate line.)

Hierarchical Model – Delete Attributes

Linked hierarchical model files synchronize data when you save each file. When you delete a variable, attribute, or scenario parameter in one model file, it is added back in from the other linked files during synchronization.

  1. Unlink your hierarchical model files.
  2. Make your change in each file and save it.
  3. Re-link the hierarchical structure

3.12.4 – Variables

Like attributes, variables are placeholders for either values (real or integer) or descriptors (single-word descriptions). They may be used to describe or track activities and states in the system such as the number of entities that have completed a particular activity. Variables are global in nature and can be set, incremented, decremented, and examined in the Action tab of the properties dialog (most elements have an action tab). Variables are of two types: predefined and user-defined. Predefined variables that are set up automatically include the following:

  • Qty_Processed_ Number of entities processed for an entity type. For example, Qty_Processed_EntA is the number of EntA processed.
  • Avg_VA_Time_ Average value-added time (time units) for an entity type. For example, Avg_VA_Time_Orders is the number of time units the entity type Orders has spent in value-added activity.
  • Avg_Cycle_Time_ Average cycle time (time units) for an entity type. For example, Avg_Cycle_Time_AssemblyA is the average number of time units that the entity type AssemblyA spent in the model.
  • Avg_Cost_ Average cost for an entity type. For example, Avg_Cost_Call is the average cost for the entity type Call in the model. Average cost applies only to completed entities.

 The largest variable values ProcessModel can use is: 2,147,483,647.

Variables may also be displayed during the simulation on the scoreboard or in a user defined position.

User Defined Variable

Creating User-Defined Variables

You can create user-defined variables in the Attributes & Variables dialog accessed from the Insert menu. You can also give the variable an initial value.

Attributes & Variables

Shown here after a new Integer variable was created using the New button.

New This button creates a new variable.

Delete This button deletes the selected variable. (Note that the pre-defined variables may not be accessed from the Attributes & Variables dialog.)

Name The name of the variable. Letters, numbers, and the underscore “ _ ” character are allowed in the name. The name must be one continuous word (i.e. v_Inventory_Level).

Type The type of variable. This can be set to Integer, Real, or Descriptive.

If you assign a real value (containing a decimal portion) to an integer parameter (user or system defined), the value will be truncated to 0 decimal places. It will not be rounded. Capacity, input queue, output queue, batch size, and resource quantity fields are all integer fields which will be truncated if you enter a number with a decimal value.

• Integer Any whole number (no digits to the right of the decimal).

• Real Any number including those with digits to the right of the decimal.

• Descriptive Defined with a string of adjectives or descriptors that may be assigned to the variable.

For more information, see Using Descriptors.

Initial Value The value assigned to the variable at the beginning of the simulation. If you do not enter a value or descriptor, ProcessModel will use zero (0) or the first descriptor in the list as the initial value for the variable.

Stats Changes the type of statistics that are collected.

None No statistics will be collected

Basic Collects basic statistics such as total changes, average minutes per change, current value and average value. Observation based.

Basic Time Same information as Basic, but the information is Time-weighted.

Detailed Allows all of the same information as the Basic option plus standard deviation information.

Detailed Time Same information as Detailed, but the information is Time weighted.

Observation-based Variable information is calculated based on a simple average.

Time-weighted Variable information is calculated based the average of the products of the variable multiplied by the length of time it remained at that value.

Paste Rule How the Global Variable will be added when pasted into a model.

Duplicate If the Global Variable does not exist in the target model, then it will be added to the Global Variable dialog. If the Global Variable does exist in the target model then that Global Variable will not be added.

Clone If the Global Variable does not exist in the target model, then it will be added to the Global Variable dialog. If the Global does exist in the target model then it will be added with post-fix (v_Reject_Count will become v_Reject_Count1). In addition, all instances of the v_Reject_Count in the logic, to be pasted, will become v_Reject_Count1.

Scoreboard The variable will be displayed on the simulation scoreboard when this object is checked.

Descriptor list The list of adjectives or descriptors that may be assigned to the descriptive variable. Only available for variables whose Type is Descriptive.

Define a variable

1. Select Attributes & Variables from the Insert menu.

2. Click on the Global Variables tab.

3. Click on the New button.

4. Enter the name of the variable.

5. Select the type: Real, Integer, or Descriptive. If you select Descriptive, you must enter the list of descriptors in the box provided with a separate descriptor entered on each line.

6. Enter an initial value.

Display a Variable on the Scoreboard

1. Select Attributes & Variables from the Insert menu.

2. Click on the Global Variables tab.

3. Select the Scoreboard check box.

Display a variable in a user defined position

1. Select the Label palette from the Gallery.

Selecting the Label palette

2. Select a Label graphic and place it on the layout to the left of where you want the variable to be displayed.

3. In the label dialog box select the variable name to be displayed on-screen.

Displaying a user defined variable through a label

Hierarchical Model – Delete Variables

Linked hierarchical model files synchronize data when you save each file. When you delete a variable, attribute, or scenario parameter in one model file, it is added back in from the other linked files during synchronization.

  1. Unlink your hierarchical model files.
  2. Make your change in each file and save it.
  3. Re-link the hierarchical structure

User's guide chapter 3 section 13 & 14



Previous: Chapter 2 Next: Chapter 4

3.13 – Scenarios: Setting Up Experiments

Scenarios are experiments that are run with a model in which the value of one or more parameters varies for each run. Scenarios allow you to run and compare multiple test cases for a model all automatically. You create scenarios by defining scenario parameters to be used in your model, referencing them in your model, and then defining specific scenarios in which values are assigned to those parameters.

3.13.1 – Scenario Parameters

Scenario parameters are placeholders like variables, only they are used to represent a value that changes from scenario to scenario. For example, if you want to run three model scenarios experimenting with different activity times, you would enter a scenario parameter as the activity time, and then define three different scenarios with three different times in the Scenarios tab of the Scenarios & Parameters dialog.

Scenario Parameters

New This button creates a new parameter that may then be edited.

Delete This button deletes the selected parameter.

Name The name of the parameter to be used in the model in place of actual values.

Default Value The value of the parameter when the Save & Simulate Chart menu item is selected rather than Run Scenarios.

Move Up Moves the selected parameter up in the list.

Move Down Moves the selected parameter down in the list.

How To – Define a scenario parameter

1. From the Simulation menu select Define Scenarios.

2. Click on the Scenario Parameters tab in the dialog (as shown on the previous page).

3. Click on the New button.

4. Enter the name of the parameter.

5. Enter a default initial value. This could be a specific number (e.g. number of resources) or a distribution function.

Hierarchical Model – Delete Scenario Parameters

Linked hierarchical model files synchronize data when you save each file. When you delete a variable, attribute, or scenario parameter in one model file, it is added back in from the other linked files during synchronization.

  1. Unlink your hierarchical model files.
  2. Make your change in each file and save it.
  3. Re-link the hierarchical structure

3.13.2 – Scenarios — Define Experiments

The Scenarios tab of the Scenarios & Parameters dialog allows you to define scenarios or experiments with different values for each of your selected parameters. It also allows you to disable specific scenarios to control which scenarios are run.

Define Experiments

New This button creates a new scenario.

Delete This button deletes the selected scenario.

Parameters This box lists the parameters and their defined start-up values.

Name The name of the scenario to be used in reporting statistics.

Value The value represents the scenario parameter for the selected scenario.

Disabled Disables the selected scenario, so that it will not be run during the simulation.

Set to Default Resets the value of the selected parameter to its default value.

How To – Define scenarios

1. From the Simulation menu select Define Scenarios.

2. Click on the Scenarios tab in the dialog (as shown in the previous graphic).

3. Click on the New button.

4. Enter the name of the scenario.

5. Select parameter from the Parameters list box and enter a value in the Value field below.

6. Repeat step 5 for each parameter you wish to change for the selected scenario.

7. Repeat steps 3-6 to create additional scenarios.

3.13.3 – Using Scenario Parameters

To make use of the scenario parameters you have defined for your scenarios, you must enter the name of the parameter in place of the value it will represent in the model. For example, you may want to enter a different processing time for a particular activity each time you run the simulation. So you would enter the name of the parameter in the Time field on the General properties tab of that activity, as shown below.

Using Scenario Parameters

How To – Set up and run scenarios

1. Define the necessary Scenario Parameters (see distributions) in the Scenarios & Parameters dialog.

2. Define the desired Scenarios (see Scenarios — Define Experiments) in the Scenarios & Parameters dialog.

3. Enter the name of each parameter in the appropriate field or action logic in the model. (See the above example.)

4. From the Simulation menu, select Run Scenarios to run the simulation using the scenarios.

3.14 – Pick Lists

To simplify the process of entering Variables, Attributes, Resources and Scenario Parameters into fields, pick lists can be accessed by using a right-mouse-click inside any field requiring entry of this type. This selection of data by pick lists removes the opportunity for error due to typing mistakes or failure to include underscores, etc.

How To – Use a pick list

1. Right-mouse-click inside any field where an Attribute, Variable or Scenario parameter could be used.

Using a Pick list in ProcessModel

2. Select the Keywords menu item.

Keywords menu in the picklist

3. Select the desired attribute, variable, resource or scenario parameter from the selection list. You can filter the list of items displayed by clicking the drop down list and selecting the item type to display.

3.15 – Linking Files

Summary

1. Right Click on the object in the model where a file needs to be attached.

2. Click Link Document.

Linking Document to a Model

3. Add any file or a weblink, click OK to save.

link files and web links dialog

Important information to be aware of You may additionally add a description to the file or the web link under Description.

Important information to be aware of Once the link is established in the model, the shape will have a shadowed background.

4. To open the linked file simply right click on the same object, click the file name of weblink to open.

Menu Showing Attached Files

Detailed Information

Links are connections used to join your model to charts or other files like word processing documents or spreadsheets. When you right-click on a linked object and select the file, ProcessModel opens the link and accesses the file referenced. Links are useful for attaching information without adding an object that will show up on the output report.

Previous: Chapter 2 Next: Chapter 4