Professional Documents
Culture Documents
SIMPROCESS
Tutorial Manual
Introductory and Advanced Tutorials
Copyright © 2002-2018 CACI, INC.-FEDERAL.
All rights reserved. No part of this publication may be reproduced by any means without written
permission from CACI.
The information in document is believed to be accurate in all respects. However, CACI cannot assume
the responsibility for any consequences resulting from the use thereof. The information contained
herein is subject to change. Revisions to this publication or new editions of it may be issued to
incorporate such change.
All the manuals can be opened directly from the Help/SIMPROCESS Manuals menu. There are links in
each manual to the other manuals. Press the Control key when clicking the link to have the referenced
manual open in a new window.
Tutorial Manual
The SIMPROCESS Tutorial Manual contains an introductory and an advanced tutorial. The introductory
tutorial steps a user through the basics of building a model, running a simulation, and evaluating
alternatives. The advanced tutorial begins with building a model then expanding the model to use some
of the more advanced features of SIMPROCESS.
Reference Manual
The SIMPROCESS Reference Manual describes the SIMPROCESS menus and toolbars, and it defines the
various SIMPROCESS modeling components (Entity Types, Activities, Resources, etc.) along with the
simulation components such as delaying, branching, and Resource assignments. In addition, the
SIMPROCESS statistical capabilities are described. Finally, the SIMPROCESS preference settings are
discussed.
User’s Manual
The SIMPROCESS User’s Manual is divided into five parts with each part being a separate file.
SIMPROCESS Tutorial Manual
Page 3
Organization of the SIMPROCESS Documentation
• Part A describes all the components required to build a model and prepare it for simulation. The
model layout, Activities and Processes, Entity Types, Resources, and graphical components are
covered. Also, the statistical modeling capabilities and simulation run settings are explained.
• Part B discusses running a simulation and looking at simulation results along will all the
reporting options. Plots and dashboards are also included in this part.
• Part C covers model browsing, model searching, and model navigation along with the library and
template feature. Model bundling, which eases the sharing of model with others is explained,
and the XPDL import/export features are discussed.
• Part D explains SIMPROCESS System and user-defined Attributes along with SIMPROCESS
Expressions, Functions, and System Methods.
• Part E focuses on analysis. It explains Scenarios and Scenario Reports, the Experiment Manager,
the SIMPROCESS Database, OptQuest for SIMPROCESS (optimization), and running models
without the SIMPROCESS user interface.
Metadata Manual
The SIMPROCESS Metadata Manual describes how to build and edit SIMPROCESS metamodels, assign
metamodels to a SIMPROCESS model, and enter metadata in a SIMPROCESS model.
OrgModel Manual
The SIMPROCESS OrgModel Manual describes how to build and edit SIMPROCESS Organization and
Resource Models (OrgModels) and assign OrgModels to a SIMPROCESS model.
This chapter gets you started with your first SIMPROCESS model. The purpose of this chapter is to
familiarize you with creating a basic SIMPROCESS model, simulating the process, and analyzing the
performance measures of the process. First, a description of the tutorial model is given. Then, a step-by-
step tutorial is provided.
The model for this tutorial is a representation of a call service process for a mail order business. Calls
arrive at the mail order business and are routed by an automated answering system to either the
customer service or sales department. Customer service calls arrive based on an Exponential distribution
with a mean value of 6 minutes. This means that a call arrives on average every 6 minutes. Sales calls
arrive based on an Exponential distribution with a mean value of 3 minutes. While the customer service
calls take about 15 minutes (use the Normal Distribution with a mean of 15 and a standard deviation of
3), the sales calls take about 6 minutes (use the Triangular Distribution with a minimum of 3, mode of 6,
and maximum of 12). The departments are staffed with 3 customer service representatives (at $15 per
hour) and 4 sales representatives (at $12 per hour).
The purpose of this SIMPROCESS exercise is to build a model of the call service process and analyze the
performance measures of the process. Specifically, the performance measures of interest are total
processing time, wait time, Resource utilization, and Activity costs.
Once you’ve placed the Process on the layout, you can size it, move it, and even cut and paste it. Now,
set the name of this Process to Generate Calls, and change the icon. To accomplish this task, you need
to bring up the properties for this object. There are 3 ways to bring up the properties of a hierarchical
Process that has been selected: 1) Click on the Properties button in the System toolbar (the button next
to the Clear tool), 2) Choose the Edit/Properties option from the main menu, or 3) right mouse click on
the Process and choose Properties from the pop up menu. Click on the Properties button and bring up
the Process properties.
The Name field contains the default name, Process1, which is displayed below the Process icon on the
layout. You can change this name or disable the Show Name option. For now, leave it as is. Also, on the
Icon list notice that DefaultIcon is selected.
In addition to the name, you can display text inside the Process icon on the layout. To accomplish this
task, select the Text Block tab. In the first line of Text type Generate. In the second line of Text type
Calls. When you close the properties by clicking OK, the text label will appear on the Process. Based on
your Font Attributes selections, you may need to resize the Process for the label to fit. If so, select the
Process then choose Resize from the Edit menu or right click on the Process and choose Edit/Resize
from the contextual menu.
One of the useful process documentation features of SIMPROCESS is the Comment field in the
properties. For this Process, enter “This process generates 2 types of calls.” To enter a comment, click
the detail button (three dots) to the right of the Comment field.
To define the second Process, click on the Process icon from the Model toolbar and drop the Process to
the right of the first Process on the layout. Then, click on the Properties button in the System toolbar to
bring up the properties. Label this Process by clicking on the Text Block tab and entering Process Calls.
In the Comment field, enter “As-Is Process with 3 Service and 4 Sales Reps.” You will create a To-Be
alternative of this process later in the tutorial.
To define the third Process, place it on the right-hand side of the layout, repeat the steps described
above, and label it Complete Calls. You now have 3 Processes on your layout. Resize the processes if
necessary. To resize, select the Processes and choose Edit/Resize.
Next, define the work flow by connecting the 3 Processes using the Connector tool from the Model
toolbar. SIMPROCESS gives you two types of Connectors. One type is a straight Connector (diagonal
button) and the other type is a bent Connector. For this tutorial use the bent Connectors. First, connect
Generate Calls to Process Calls. Select the Bent Connector tool from the Model toolbar and click on the
right-hand Pad (small triangle) of the Generate Calls process. Then, click on the left Pad of the Process
Calls process. When you click on the left Pad of the Process Calls process, the Connector between the
two Processes will appear. Repeat this task to connect the Process Calls Process to the Complete Calls
Process. Next, click on the left (input) Pad of the Generate Calls process and click the Clear button on
the System toolbar or press the Delete key on the keyboard. Since nothing is entering this Process, the
input Pad is not needed. Do the same thing for the right (output) Pad of the Complete Calls Process.
That Pad is not needed since no Entity instances are leaving the Process. When you are done, your
model should look like the figure below.
SIMPROCESS Tutorial Manual
Page 8
Chapter 1: Introductory Tutorial
As you can see, mapping your business process with SIMPROCESS is as quick and simple as flowcharting.
While SIMPROCESS gives you the benefits of flow diagramming, it also provides you with the benefits of
object-oriented simulation. The three Processes that you just placed on the layout during the process
mapping step are hierarchical objects. You can drill down inside each Process and define its sub-
Processes. Unlike the diagram relationships in flowcharting based simulation tools, in SIMPROCESS, the
relationships between hierarchical processes are based on object oriented modeling. In other words, the
sub-Processes not only inherit the graphical symbols of the hierarchical process but also their behavior.
This provides the major benefit of re-usability.
In this tutorial, you will drill down one level within each Process; however, there is no limit to the
number of levels you can drill down. To practice drilling down, simply select a Process and double click
on it. You can also drill down by using the View/Descend menu item, or by using Descend on the right
click menu, or by clicking the down arrow on the System toolbar. Notice that you have a new layout with
Pads that correspond to the Pads on the Process icon. Also notice that SIMPROCESS keeps you informed
as to where you are in the hierarchy by displaying the name of the parent Process for this current layer.
To ascend a level, simply double click any blank space on the layout. You can also accomplish the same
task by choosing View/Ascend from the menu, choosing Ascend from the right click menu, or clicking
the up arrow on the System toolbar. Now, you are ready to create a hierarchical simulation model of
your process by using the powerful Activity-based modeling and Resource modeling constructs.
The Entity instances (or flow objects) that will be moving through your model are usually created with
Generate Activities. The first Process in your model generates two types of calls. Drill down inside the
Generate Calls Process by selecting that object and double-clicking on it. First, define the Generate
Activity that generates the service calls. To do this, select the Generate Activity from the Model toolbar
and place it on the layout. Then, double-click on the icon to get the properties.
Change the name of this Activity to Generate Service Calls. Next, click on the New Entity button to
define the service calls. This brings up the Entity Type manager where new Entity Types are defined.
Select the Add option, type in the name Service Calls in the Name field of the Entity Type properties,
and click on OK. Notice that the name Service Calls appears in the Name column. This table contains all
the Entity Types defined in the model. Click Close to close the Entity Type manager and return to the
Generate properties.
You will see Exp (10.0) in the distribution list where 10 is the default value for the mean. To change the
mean value for the interval to 6, click on the Interval detail button (the button with three dots on it).
Enter 6 in the Mean field. Click OK to complete the distribution selection. You can also edit the Mean
field by editing the distribution list directly. Select Minutes as the Time Unit.
You will see Exp (10.0) in the distribution list where 10 is the default value for the mean. To change the
mean value for the interval to 6, click on the Interval detail button (the button with three dots on it). Do
that and enter 6 (minutes) in the Mean field. Click OK to complete the distribution selection. You can
also edit the Mean field by editing the distribution list directly. Select Minutes as the Time Unit.
The default value for generation of Entity instances in the Quantity field is 1, which is what you want for
this model, so use default is correct. Also, the default value for Entity for the Generate Activity is
Service Calls, so use default is appropriate for the Generate schedule. Click OK to close the Periodic1
schedule.
Notice that the Generate Activity gives you many other options. For example, you can use a data file,
spreadsheet, or database to generate the calls instead of a statistical distribution. Or, you can create
complex schedules and cyclical arrival patterns. For now, click on OK and move on to defining the
generation of sales calls.
To define the generation of sales calls, again select a Generate Activity from the Model toolbar and
place it on the layout below the first Generate Activity. Then, double-click on it to display its properties.
Change the name of this Activity to Generate Sales Calls.
Next, click on the New Entity button to define the sales calls the same way you did for Service Calls. This
brings up the Entity Type manager that allows you to define new Entity Types or edit existing ones.
Select the Add option, and enter the name Sales Calls. Choose an icon for the Sales Calls Entity Type
from the Icon list different from the one you used for Service Calls. When you view the animation
during the simulation run you will be able to see which calls moving through the system are Sales Calls
and which are Service Calls.
Click OK to close the Entity Type properties. Select the Periodic1 schedule and then click Edit. In this
instance the value use default for the Entity field is not appropriate since the name Service Calls is
displayed in the Entity field of the Generate Sales Calls Activity. To change it to Sales Calls, click on the
down-arrow to see the list of Entity Types and select Sales Calls from the list. Now, you are ready to
define the arrival interval between Sales Calls. To define the Interval, click on the Interval list to see the
available statistical distributions. Select the Exponential distribution again. Click on the Interval detail
button and enter 3 (every 3 minutes) in the Mean field as the mean value for the distribution. Before
closing the properties for the Exponential distribution, click on the View button to the right.
SIMPROCESS provides you with this useful viewing facility so that you can visualize the probability
density function for this distribution. When you are done viewing the curve, close that window to return
to the properties for the Exponential distribution, and then click OK to return to the properties for the
Periodic1 schedule. Select Minutes for the Time Unit and click OK. This returns you back to the
Generate properties. Click OK again to get back to the layout.
At this point, you must do an important task to complete the description of the call generation process.
That is, you must connect the output Pads of the two Generate Activities to the output Pad of the
hierarchical Process named Generate Calls. To do this select the Connector tool from the Model toolbar
and connect the output Pad of the Generate Service Calls Activity to the output Pad on the right-hand
side of the layout. Then repeat the same task by connecting the output Pad of the Generate Sales Calls
Activity to the output Pad of on the right-hand side of the layout.
Now, you are done describing the Activities for the Generate Calls Process. Double-click on any blank
area on the layout to return to the top level of the model.
Next, you will define the Process Calls Process which consists of a Branch Activity followed by two Delay
Activities. Double click on Process Calls to descend into the Process. Notice that SIMPROCESS gives you
an input Pad on the left-hand side, an output Pad on the right-hand side, and a blank layout in the
middle for placing the Activities at this level.
The Branch Activity determines the routing of calls. From the Model toolbar select the Branch Activity
and place it to the right of the input Pad. Then, using the Bent Connector tool connect the Process input
Pad to the input Pad of the Branch Activity. This means that Entity instances entering the Process Calls
Process will be the input to this Branch Activity.
Double click on the Branch Activity to display its properties. Change the Name of this Activity to Route
Calls. By default, the branch type is set to Probability. Change this setting by selecting the Entity Type
button and then select OK to close the properties.
The Delay Activities represent the Customer Service and Sales Activities. From the Model toolbar select
a Delay Activity and place it to the right of the Branch Activity. Then select the Connector tool and
connect the Branch Activity to this Delay Activity.
To specify which Entity instances take this route, double click on the Connector and select the Service
Calls Entity Type from the list of Entity Types on the right and then click the Add button to move the
Entity Type to the left. Then type in the name Serivce Calls in the Connector Name field and make sure
the Show Name option is selected. Click OK to close the properties.
Next, double click on the Delay Activity to define its properties. Change the Name of this Activity to
Customer Service and define the duration for servicing a Customer Service call. The Duration field is a
distribution list like the Interval field in the Generate Activity. Select the Normal distribution (Nor) from
the list. Then define the parameters of the distribution: 15 for the Mean and 3 for the standard
deviation (Std Dev). Again, select Minutes for the Time Unit. Notice that one of the tabs in the Delay
properties is for defining Resources required for this Activity. You will do that after completing the work
flow definition.
Next, you need to define the Delay Activity representing the servicing of the Sales Calls the same way
you did for Customer Service. To do this select the Delay Activity from the Model toolbar and place it to
the right of the Branch Activity just below the Customer Service Activity. Then select the Connector tool
and connect the Branch Activity to this Delay Activity.
To specify which Entity instances take this route, double click on the Connector and select the Sales Calls
Entity Type from the list of Entity Types on the right and then click the Add button to move the Entity
Type to the left. Then type in the name Sales Calls in the Connector Name field and make sure the Show
Name option is selected. This feature provides for meaningful documentation of the work flow. Click OK
to close the properties.
Next, double click on the Delay Activity to define its properties. Change the Name of this Activity to
Sales and define the Duration for servicing a Sales Calls Entity instance. Select the triangular
distribution (Tri) and set the parameters to a Minimum of 3, Mode of 6, and Maximum of 12. Make
sure to select Minutes as the Time Unit.
To complete the description of the Activities at this level, you need to connect the output Pads of the
Customer Service and Sales Activities to the output Pad that is on the right-hand side of the layout. At
this point, the layout of your Process should look something like the following.
When you are done with those connections, you can get back to the top level by double clicking on any
blank space in the layout.
The final task for completing the work flow is to describe the completion of calls. To accomplish this
task, double click on the hierarchical process named Complete Calls.
This Process is used for disposing of the calls after they are serviced. That is why the Dispose Activity
only has an input Pad. For now, you need not define any parameters for this Activity. Just select the
Dispose Activity from the Model toolbar and drop it in the middle of the layout. Then, using the Bent
Connector tool, connect the input Pad of the hierarchical Process to the input Pad of the Dispose
Activity. When you are done making this connection, simply double click in any blank space on the
layout and go back up to the top level.
At this point, you are through with the definition of your Processes, Activities and work flow. You are
now ready to define your Resources and where they are required to perform work.
One of the most powerful constructs of SIMPROCESS is the Resources. In this tutorial you will define the
Customer Service and Sales Resources, their capacity (quantity available), and hourly labor costs. You
will then assign them to the appropriate Activities.
Resources are defined by selecting Resources on the Define menu or by clicking the Define Resources
button on the Model toolbar. Selecting the Resources option brings up the Resource manager. To
define a Resource, click on the Add button, enter in the Name field Sales Rep and set the Units to 4. The
Units field is the SIMPROCESS distribution list. The only constant value option is 1 so simply replace
what is there with 4.
To define the hourly labor rate, click on the Cost tab and enter 12 in the field Cost per Time Unit. The
Time Unit defaults to Hours. This means that each representative costs $12 per hour. During the
simulation, SIMPROCESS will calculate the Activity costs based the actual usage of the sales
representatives. Then, click on the OK button to complete defining the Sales Rep Resource.
To define the Service Rep, click on the Add button of the Resource manager and repeat the same steps
while setting the Units to 3 and hourly labor rate to $15. When you are done defining the Service Rep,
click the OK button. Then click on the Close button of the Resource manager to get back to the layout.
Now, you are ready to define how these Resources are used in processing calls. This task is
accomplished by going into the Activities that use the Resources. Drill into the hierarchical Process
named Process Calls. First, assign the Sales Rep to the Sales Activity by double clicking on the Delay
Activity representing Sales. To define the Resource requirements for this Activity, select the Resources
tab. Select the Sales Rep Resource and click Add leaving 1 as the default for the Units. This means one
Sales representative is required to perform this Activity every time a Sales Call arrives. During the
simulation, when a call arrives it will be serviced by one of the 4 Sales Rep Resources. If all Sales Rep
Resources are busy, then the caller will wait in a queue until the next representative becomes available.
SIMPROCESS will automatically keep track of the number of calls waiting, as well as how much time each
call waited. Click OK to close the properties.
To define the usage of the Customer Service representatives, select the Customer Service Activity and
repeat the same steps, again assigning one representative to each call that enters the Activity. When
you are done assigning the Resources to their corresponding Activities, you are ready to simulate the
process.
Save the model before running the simulation. To save your model select the Save option on the File
menu or click the Save button on the System toolbar. Enter As-Is for the file name. The file extension
for SIMPROCESS models, .spm, is automatically assigned. So, your model file will be saved as As-
Is.spm. Now, you are ready to simulate your model.
Select the Define Global Statistics Collection item on the Report menu. Collect Entity Statistics and
Collect Resource Statistics should already be checked. If not, then select them. These are the default
statistics collected by SIMPROCESS. When using Define Global Statistics Collection it is not necessary to
individually request statistics for Entity Types, Resources, Activities, and Connectors.
The default start date will be January 1 of the current year. In our example the default start date is
01/01/2018. For now leave the start date as the default date and time. Change the end date to
01/02/2018. This means SIMPROCESS will simulate the model for 1 day (24 hours) and report statistics
over that time. Click OK to close the properties and accept the changes.
When the simulation starts running, SIMPROCESS gives an animated picture of the work flow. Animation
is an extremely powerful tool for verifying your model and visualizing your process in motion.
During the simulation, you will see the simulation clock on the lower right-hand corner of your screen.
As the process is simulated, SIMPROCESS dynamically updates the counters above the Processes and
Activities. At the top level of your model is the animation of the three hierarchical Processes. Double
click on the Generate Calls Process to see the animation of its detail. The counters that are above the
Generate Activities display the number of Entity instances generated so far.
Next, double click on any blank space to ascend back up to the top level. To watch the animation of the
Customer Service and Sales Activities, drill down into Process Calls. The counters above the Activities
show the number of Entity instances currently in the Activities.
Now, move back up to the top level and descend into Complete Calls. The counter above the Dispose
Activity displays the number of Entity instances disposed so far. In this model, because both types of
SIMPROCESS Tutorial Manual
Page 22
Chapter 1: Introductory Tutorial
calls are sent to the same Dispose Activity, the counter displays the total number of calls. In addition to
these counters, you can display real-time plots of cycle times, counts, and the number of calls waiting
for service.
Animation can be turned off anytime to speed up the execution of the simulation. This can be
accomplished by deselecting the Animation On menu item on the Simulate menu, by pressing F8, or by
clicking the Display animation button (movie reel) on the System toolbar. While the simulation is in
progress, notice that the status bar in the bottom of your screen displays “Simulating” and “Trial 1 of 1.”
When the simulation is over the status bar displays the message “Simulation Complete.” Once the
simulation is complete, you are ready to analyze the output reports.
First, look at “Entity : Total Count - Observation Based.” This gives you the values of 504 for Sales Calls
processed and 221 for Service Calls processed.
“Entity : Cycle Time (in Hours) By State” shows that the average total processing time for Sales Calls was
about .13 hours (7.8 minutes) while the total processing time for a Service Calls took about .34 hours
(20 minutes). These times include the actual time for a call (in process time) plus the wait time. The
average wait times are .011 (.66 minutes) for Sales Calls and .096 (5.8 minutes) for Service Calls.
Although the average wait time for Sales Calls is acceptable, an average wait time for Service Calls
seems too long. An important question that comes to mind is “If the average wait time was 6 minutes,
what was the maximum wait time for a customer service call?”
The maximum wait times were .142 (8.5 minutes) for Sales Calls and .520 (31.2 minutes) for Service
Calls. This means, of the 504 Sales Calls, the one that waited the longest had to wait 8.5 minutes and of
the 221 Service Calls, the one that waited the longest had to wait about 31.2 minutes.
Is this acceptable? For any mail order business that wants to be competitive, the answer is “Of course
not.” No customer would wait 31 minutes before getting serviced. Most likely they will hang up and try
again, or they will take their business somewhere else. In the next chapter you will create the To-Be
process to reduce the maximum wait time for customer service calls. Now, look at the Resource
statistics.
“Resource : Number of Units By State” shows that the average utilization of the Service Rep and Sales
Rep Resources was over 2. Because there were 4 units of Sales Rep and 3 units of Service Rep available,
this points out the possibility of over staffing in the sales department. However, you need to keep in
mind that wait times were minimal for sales calls while they were considerable for customer service
calls. If you were to reduce the sales staff to 3 units what would happen to wait times for sales calls? You
may want to try this alternative on your own after completing this tutorial.
Now review the Activity-based costing statistics. Since you only ran the simulation for 24 hours, this
means the costs were calculated for the 24-hour simulation run within the first week. There are three
SIMPROCESS Tutorial Manual
Page 24
Chapter 1: Introductory Tutorial
categories of costs: Resource by Activity, Resource by Entity, and Activity by Entity. In Activity by Entity
you see that the Activity costs are $712 for Sales and $826 for Customer Service. The proper
interpretation of these costs is as follows: It cost $712 to service 504 sales calls and $826 to service 221
customer service calls. This adds up a total of $1,538 for serving 725 phone calls.
Important Note: This simple exercise is intended to provide you with an overview of SIMPROCESS. In a
typical business process simulation project, you would need to run this model for longer duration and
for multiple replications before making conclusions about the results.
Evaluating Alternatives
This section of the tutorial shows you how to create and evaluate alternatives with SIMPROCESS. The
purpose of this section is twofold: 1) to familiarize you with the process analysis feature Alternative sub-
Processes, and 2) to improve the process that you just modeled.
The purpose of this exercise is to evaluate the process improvements that can be achieved by cross-
training the service and sales representatives. Specifically, the objective is to reduce the maximum wait
time for Service Calls from 31 minutes to under 8 minutes (.13 hours) while keeping the Activity costs
under $1,850 per 24 hours. Decision variables that you will tweak to meet the business objectives are
the Units of Resources and the hourly Cost per Unit.
You are now ready to define the To-Be Alternative of Process Calls. Double click on the Process to drill
down to the next level in the hierarchy. At this point the layout looks exactly like the As-Is Alternative.
Remember you copied the contents of the As-Is Alternative into the To-Be Alternative.
Next, modify the Resource assignments so that the Resources used for performing work are the new
Customer Rep Resource. Double click on the Customer Service Activity and click on the Resources tab.
Remove the Service Rep Resource assignment by selecting Service Rep then clicking the Remove
button.
Then select the Customer Rep Resource from the Resource tree and click the Add button. This means
that every service call will be handled by a Customer Rep instead of a Service Rep. Click the OK button
to close the properties and get back to the layout.
You also need to assign the Customer Rep to the Sales Activity. Repeat the same steps by removing the
Sales Rep Resource assignment and adding the Customer Rep to the Resource assignment.
You are now done creating the To-Be Alternative. Double click in any blank space in the layout to get
back to the top level.
This Alternative is saved as a separate model, To-Be.spm, in the Demos directory. See Chapter 3:
Demonstration Models in the SIMPROCESS Getting Started Manual for more information on the Demos
directory.
First, look at “Entity : Total Count”. This table shows that the redesigned process with 7 flexible
Customer Rep Resources serviced 460 Sales Calls and 251 Service Calls.
Next, look at “Entity : Cycle Time (in Hours) By State” and analyze the wait time reduction for the To-Be
Alternative. This report shows that the average wait time for Sales Calls was .01 hours (.6 minutes) and
for Service Calls was .008 hours (.48 minutes) indicating that the wait time for Service Calls was reduced
dramatically. The maximum values for wait times are .135 hours (8.1 minutes) for the Sales Calls and
.163 hours (9.8 minutes) for the Service Calls. These peak wait times are much more acceptable because
only one of the 460 Sales Calls had to wait 8.1 minutes and only one of the 251 Service Calls had to wait
9.8 minutes.
Now look at the cost statistics. The Customer Service Activity cost is $939 and the Sales Activity cost is
$820 summing to a total Activity cost of $1,759. This means you achieved our desired business
objectives by keeping total Activity costs under $1,850.
Comparing Alternatives
The table below compares the As-Is and To-Be results.
This chapter steps you through building a more complex SIMPROCESS model. The purpose of this
chapter is to reinforce the model building process by building a second model and to introduce some of
the more advanced features of SIMPROCESS.
This model represents a simplified version of a local electronics store that wants to improve its customer
service. The scenario and data do not reflect an actual store. The goal is to use the model to understand
more of the features of SIMPROCESS.
The tutorial begins with building the model flow, defining the Entity Types (and their use and arrival
schedules), and then defining the Resources and their assignment. From there some of the more
commonly used advanced features are introduced.
Models that show the various stages of the completion of this tutorial are in the Demos/Advanced
Tutorial directory. The table below shows the models along with their associated sections of this
tutorial. Each model builds on the previous model. The model that shows the results of all the sections
of this tutorial is Electronics Store.spm.
What can you glean about the model flow from this information? First, there must be a Generate
Activity to have customers arrive and a Dispose Activity to have customers exit. Once the customer
enters the model through the Generate Activity they need to browse through the store. The browsing
duration is modeled by a Delay Activity. Given that a certain percentage purchase something and a
certain percentage do not purchase anything there will need to be a Branch Activity. Those customers
that do not purchase anything should proceed to the Dispose Activity. For the customers that do
purchase something, there are three options. There are several ways to model this but to demonstrate
the overall flow of the model, each option should be represented by a Delay Activity or a Process that
includes Delay Activities. These three options should be preceded by a Branch Activity since there are
probabilities for each option. These customers need an Activity to represent the time required to
complete the purchase. Once they have paid they are routed to the Dispose Activity. Finally, there must
be Activities to replenish the stock of televisions and Blu-Ray players. These can go in an independent
Process. At this point, you are simply building the flow of the model. You are not assigning properties to
any items. However, assumptions regarding Entity Types and Resources influenced the building of the
model flow. There is the assumption of a Customer Entity Type and a Customer Service Rep Resource.
Also, the televisions and Blu-Ray players will be modeled by consumable Resources. Below is one way to
diagram the flow of the model.
The Activities Browse Store and Pay for Items are Delay Activities. Browse Store has its Icon set to
Retail Shop from the Icon Set City. The Activity Pay for Items has its Icon set to Card Reader Terminal
from the Icon Set Electronics. See Icon in Chapter 2 of Part A of the SIMPROCESS User’s Manual for
details on setting an Activity’s icon. Setting the Icon for these Activities is not required for the tutorial.
The three options for purchasing are represented by Processes. This means the Activities that model the
purchases will be inside the Processes. A separate Process contains the Activities for stock
replenishment. In order to place a descriptive label on a Process (such as Purchase Television), edit the
Process properties and select the Text Block tab. Enter the desired text in the Text field and set the
Font Attributes. Make sure Show Text is selected.
The text that is entered will not only display as a label on the Process, but it can also be displayed inside
the Process. Select Add Text Label to display the same text inside the Process and click the Properties
button to set the Label Orientation and Font Attributes for the inner label.
To use the Text Block as the Name of the Process, go to the General tab, deselect Show Name and
select Use Text Block. See Text Block in Chapter 2 of Part A of the SIMPROCESS User’s Manual for more
information on this feature.
Colors were set for the different Process flows by selecting a color using the Color Chooser then
selecting each Connector in the flow and then clicking the Apply Color button. The background color of
the Layout was set by choosing a color with the Color Chooser then selecting on the Layout menu the
Background Color/Current Layout menu item. You can also right click on the Layout and select
Color/Apply Color to Background from the contextual menu. See Color Tools in Chapter 4 of Part A of
the SIMPROCESS User’s Manual for a full discussion on selecting and applying colors. Selecting and
applying colors is not necessary for this exercise. To get the path of the Connector between Make a
Purchase? and Customer Departs, vertices were added to the Connector. These allow the Connector to
be given a specific path by selecting and dragging a vertex. Simply right click on the Connector and
choose Add Vertex. Click on the small green square and drag it to change the path of the Connector. A
Connector can have multiple vertices.
We chose to model the inquiry about televisions and order from inventory as two separate Activities
(Discuss TVs and Order from Inventory). This is because the data for each was separate. If the data
included discussion and ordering as one step, then one Activity with no Get Resource or Free Resource
Activities would have been sufficient. However, since there is data for each step we have two Activities.
Therefore, we are using a Get Resource and Free Resource Activity. The same customer service
representative that participates in the discussion will also order the purchases from inventory. If the
customer service representative Resource was assigned at each Activity, there could be a delay between
Discuss TVs and Order from Inventory. Once the Resource was released from Discuss TVs it could be
acquired by an Activity in another Process instead of by Order from Inventory, thus creating a delay
between the two Activities that would not exist in the actual store. By obtaining the Resource at Ask For
Help, we are able to keep the Resource until Order from Inventory is complete, releasing the Resource
at Service is Finished.
This is because the customer service representative is only needed at the Discuss Blu-Ray Players
Activity. Blu-Ray players do not have to be ordered from inventory since they are displayed on the shelf
for the customer to retrieve.
This Process does not have an Input Pad or an Output Pad. These were deleted since nothing enters or
exits this Process. A Pad can only be deleted from the outside of a Process. Ascend to the top level of the
model, select each Pad and then either press the Delete key or click the Clear button on the System
SIMPROCESS Tutorial Manual
Page 37
Chapter 2: Advanced Tutorial
toolbar. Only one Pad can be selected and deleted at a time. Inside the Process a Generate Activity was
included since the replenishment is scheduled at a certain time each week and the Replenish Resource
Activity only activates when an Entity instance enters the Activity. Since the only purpose of this Entity
instance is to replenish Resources it is disposed once that action is done.
Click OK then edit the other Connector exiting from the first Branch Activity. Again, set the Name and
select Show Name. In this case, though, you can either select If Probability is and enter 0.7 or select
Otherwise.
Click OK to close the properties and click and drag the Connector names to your desired locations. The
Connectors exiting the second Branch Activity (What Item? in our model) also need to be defined. Edit
the Connector between the second Branch Activity and Purchase Television. Set the Name, select Show
Name, and enter 0.5 for If Probability is. Do the same thing for the Connector between the second
Branch Activity and Purchase Blu-Ray and enter 0.25 for If Probability is. For the Connector between
the second Branch Activity and Purchase Television and Blu-Ray, either enter 0.25 for If Probability is
or select Otherwise. For both Branch Activities the sum of the probabilities of the exiting Connectors
must be 1.0.
Save Model
The model flow is complete and the Branch Connectors have been defined so, if you have not already
done so, save the model with a meaningful name. We named our model Electronics Store.spm,
which is in the Demos/Advanced Tutorial directory. If the model has never been saved File/Save
will invoke File/Save As so the model can be saved under a different name. Note: There is a version of
Electronics Store.spm for each section of this tutorial. The model for this first section is
Electronics Store Section 1.spm.
Define a second Entity Type named Trailer. For this Entity Type we selected the Trailer icon from the
Transportation Icon Set.
Once complete the Entity Type manager should display two Entity Types.
The Generate Activity defaults to having one Periodic schedule, Periodic1. Select this schedule and click
the Remove button since a Periodic schedule is not needed. Next choose Weekly from the list of
schedule types and click the Add button. This displays the properties for a Weekly schedule. This
schedule will cause instances of the Customer Entity Type to arrive during business hours approximately
every three minutes.
Change the default value of the Schedule field to Customer Schedule. The top portion of the schedule is
the same as a Periodic schedule. Select Customer from the Entity list (use default would also work since
the default Entity for the owning Generate Activity is Customer). Select 1.0 or type in 1 for Quantity
(again use default would work since the default Quantity for the owning Generate Activity is 1.0). For
the Interval select the exponential distribution from the list – Exp(10.0). Use the exponential
distribution because inter-arrival times are typically exponentially distributed. The mean defaults to 10.0
so that needs to be changed to 3.0. Click the detail button (three dots) to the right of the Interval list.
Change Mean to 3.0 and enter a Stream number. In the introductory tutorial we did not address the
random number stream. SIMPROCESS has 215 random number streams. It is good practice to assign a
unique random number stream to every distribution. This reduces correlation in the model since this
makes each random draw is independent of all other random draws. Since Stream 1 is the default enter
10 for Stream and click OK. (IMPORTANT: If you use different stream numbers that what is shown in
this tutorial your results will be different from but similar to the results presented in this tutorial.)
Interval should now show Exp(3.0,10). Since the distribution for generating Customer instances is
unique, the frequency of Entity instance generation will not change when other distributions are added
to the model. Select Minutes for Time Unit. The top fields should now be set. One instance of the
Customer Entity Type will arrive every two minutes based on an exponential distribution.
The bottom half of the schedule sets which days and what times of the days the schedule will operate.
Since the store is open every day of the week, Sunday through Saturday should be selected. When a
day is selected the Start Time and End Time fields enable. Enter the store hours for each day. The times
are based on a 24-hour clock so, for example, 9:00 pm should be entered as 21:00:00. Below is the
completed schedule.
Click OK to accept the changes to the Weekly schedule, and then click OK to close the Generate
properties. The scheduling of Customer arrivals is complete.
we entered 08:00:00. Again, the clock is a 24-hour clock so, if the value for hours is greater than 12, use
24-hour clock values. Below is the completed schedule.
Click OK to close the schedule properties, and then click OK to close the Generate properties. The
generation schedule for the Trailer Entity Type is complete.
Schedule Verification
To double check your Entity instance generation properties set the simulation Start and End dates in
the Run Settings. Select Run Settings on the Simulate menu. For now, run the model for six months.
So, for Start enter 01/01/2018 and for End enter 07/01/2018. No other Run Settings need to be
changed at this point.
How many instances of Customer should be expected over a six-month period? The store is open 12
hours per day Monday through Friday, 13 hours on Saturday, and six hours on Sunday. That is a total of
79 hours per week. Since an instance of Customer is generated approximately every three minutes you
should expect approximately 20 instances of Customer every hour (60 minutes per hour / 3 minutes per
Customer). That equates to approximately 1580 instances of Customer every week. Multiplying 1580
Customer instances per week by 26 weeks (six months) you get 41080 Customer instances for the six
months. If all the Activities and Processes are properly connected you should not get any model
verification errors when you attempt to run the model. If you do get model verification errors simply
cancel the simulation (Cancel Simulation) and correct the errors before continuing. When the errors
are corrected run the model again. Turn off animation so the model finishes as quickly as possible.
(Deselect the Display animation button on the System toolbar or deselect the Animation On menu
item on the Simulate menu.)
When the simulation is complete choose View Simulation Results on the Report menu. Replication 1
should already be selected under Select Replication. Select Customer on the Entity tab under Select
Component. This displays the statistics for the Entity Type Customer for replication 1 (the only
replication). Under Results the Total Count tab should already be visible. If not, select it. The Total
Generated row of the table shows 41284 instances of Customer were generated. This is close to the
expected value of 41080.
As an additional verification change the Number of Replications in the Run Settings to 10 and run the
model again. After selecting View Model Results select Avg of All 10 replications then select Customer.
Note the Average value for Total Generated. This is the average of the Total Generated for each of the
10 replications. This value is closer to our expected value of 41080. The number of Trailer Entity
instances generated was 26, one for each week.
Defining Resources
Based on what you already know about the store there will need to be customer service representatives
and cashiers. Also, the inventory of the store will be represented by Resources. This store employs a
total of four customer service representatives and four cashiers over two shifts with two customer
service representatives and two cashiers in each shift. So, there are two shifts of employees. Each shift
contains:
• 2 Customer Service Representatives (4 total).
• 2 Cashiers (4 total).
The inventory of the store should be modeled as consumable Resources since once an item is bought, it
is no longer available. Initial store inventory:
• 950 Televisions (consumable Resource)
• 700 Blu-Ray Players (consumable Resource)
There are two shifts: Shift A and Shift B. Shift A contains the following schedule:
• Monday-Friday: available from 9:00 am – 4:00 pm.
• Saturday: available from 9:00 am – 5:00 pm.
• Sunday: available from 12:00 pm – 5:00 pm.
• No lunch break.
The ending times of Shift B are one and one-half hours past closing time. This is because there are still
customers in the store that need to exit the store after closing time. First, define the Resources then
define the Resource Shifts. Select Resources from the Define menu or click the Define Resources
button on the Model toolbar to display the Resource manager.
Click the Add button to define a new Resource. Name the Resource Customer Service Rep A and set the
Units to 2.
Click OK then define Customer Service Rep B with the Units field set to 2. Define Cashier A and Cashier
B with the Units field set to 2. (It is not technically necessary to have A and B Resources for each. You
could just have a Customer Service Rep Resource and a Cashier Resource each with Units set to 4. The
Resource shifts will ensure only the proper amount are available. This example uses A and B Resources
for each shift for statistical purposes.) Then define TV and Blu-Ray Resources with the appropriate initial
quantity and mark them as Consumable. Once complete the Resource manager should look as follows.
Follow the same procedure for Shift B selecting Customer Service Rep B and Cashier B.
For both Resource Shifts leave Number of Units Available at the default Evl(Capacity). Capacity is a
System Attribute of Resources that returns the number of units defined for the Resource. Leave Start
Downtime when Resource is Idle selected for Downtime Options. This option ensures the Resource
does not become unavailable while in use. Once complete, the Resource Shift manager should show two
Resource Shifts: Shift A and Shift B.
Duration: None.
Customer Service Rep is released.
o Remove Blu-Ray Player from Shelf:
Duration: 30 seconds.
Acquire Blu-Ray Resource.
• Pay for Items:
o Duration: triangular distribution with a minimum of 1 minute, mode of 2 minutes, and
maximum of 5 minutes.
o Acquire Cashier A or Cashier B Resource.
• Replenish TV and Blu-Ray Inventory:
o Replenish Inventory
Replenish TV Resource up to capacity.
Replenish Blu-Ray Resource up to capacity.
Given this information you need to define durations and assign Resources to the appropriate Activities.
For example, below are the properties for Browse Store. All that is required is 10 be entered for
Duration Value and Minutes be selected for Duration Units. No Resources are required.
In each of the two Ask For Help Get Resource Activities (in Purchase Television and Purchase Television
and Blu-Ray) both Customer Service Rep A and Customer Service Rep B must be assigned. Any One
Member is selected for the Requires option since one unit of either Resource will suffice.
The Activity Discuss TVs in Purchase Television simply requires setting the Duration Value and
Duration Units. Select the triangular distribution from the Duration Value list (Tri) and set the
Minimum, Mode, and Maximum. Set the Stream to 11. Select Minutes for the Duration Units. No
Resource is required since the Resource was obtained in the previous Activity.
Order From Inventory is a Delay Activity that has a Duration and requires a Resource. This Activity
represents the delay to order a television from inventory. Set the Duration Value to Tri(1.0,3.0,5.0,12)
and the Duration Units to Minutes. On the Resources tab assign the TV Resource.
For the Free Resource Activity (Service is Finished) simply select Release all Allocated Resources. This
causes the Entity instance to release the Resource obtained in Ask For Help.
Complete the definition of the remaining Activities. Remember to use a different Stream for each
distribution. (Discuss Blu-Ray Players in Purchase Blu-Ray should use the distribution Tri(2.0,4.0,6.0,13).
Discuss TVs and Blu-Rays in Purchase Television and Blu-Ray should use the distribution
Tri(4.0,6.0,8.0,14). Order from Inventory in Purchase Television and Blu-Ray should use the distribution
Tri(1.0,3.0,5.0,15).) Except for the Replenish Resource Activity in Replenish TV and Blu-Ray Inventory,
the Activities are similar to what you have defined so far. The Replenish Inventory Activity requires two
Replenish Actions, one for the TV Resource and one for the Blu-Ray Resource. Edit the Replenish
Inventory properties. Under List of Replenish Actions on the General tab is a list of consumable
Resources. Either TV or Blu-Ray should already be visible. Select TV and click the Add button. This
creates a new Replenish Action. Simply select Replenish To Capacity and click OK.
Select the Blu-Ray Resource and do the same thing. Once done you should have two Replenish Actions
visible in List of Replenish Actions.
At this point all Activities should be defined with the appropriate properties.
SIMPROCESS Tutorial Manual
Page 57
Chapter 2: Advanced Tutorial
Question 1: On average, how long does a customer wait for service? Select View Simulation Results on
the Report menu. In the dialog that appears Replication 1 should already be selected under Select
Replication. Under Select Component the Entity tab should be selected so click on the Customer Entity
Type. This causes three tabs to display under Results: Total Count, Count By State, and Cycle Time By
State. To answer this question, select the Cycle Time By State tab then select Minutes for Results Time
Unit. Under Total In System the Average value is 20.185. This means that a Customer Entity instance
existed in the simulation an average of 20 Minutes. However, the question asked how long a customer
waited for service. Total In System is broken down into Processing (how long an Entity instance was in
service at an Activity), Wait For Resources (how long an Entity instance waited for Resources so service
could begin), Hold For Conditions (how long an Entity instance was waiting for a condition other than a
Resource), and Traveling (how long an Entity instance spent traversing Connectors). There was no
waiting other than for Resources so the statistic of interest is Wait For Resources. Scroll down to Wait
For Resources. The Average value is 3.405, so the average amount of time a customer waited for service
was 3.4 minutes. Note, though, the Maximum was 62.8 minutes.
Question 2: How busy are the Resources when available, that is, when on shift? Since this is a question
about Resources select the Resources tab under Select Component. There are four tabs in the Results
section: Number of Units By State, Percent Utilization By State, Units Busy By Activity, and Units
Busy By Shift. Select the Customer Service Rep A Resource then the Percent Utilization By State tab.
There are five categories of statistics on the tab: Idle, Busy, Planned Downtime, Unplanned Downtime,
and Reserved. Scroll down to the Busy statistic where you see Average, Std Dev, Minimum, Maximum,
and When Available. The Average value is the percentage of total time that the Resource was busy.
However, the total time includes the time when the Resource was off shift, that is, unavailable. What
you need to know is the percentage of available time that the Resource was busy. That is the value
When Available, which is 73% for Customer Service Rep A.
Simply select the other Resources to find their When Available value for Busy. The values are
Question 3: What is the average inventory level for TVs? Select the TV Resource and then select the
Number of Units By State tab. This tab has the same statistical categories as Percent Utilization By
State with the addition of Capacity. Capacity tracks number of units of the Resource during the
simulation. This category is only useful for consumable Resources. The Average value is 522, which
means, on average, there were 522 televisions in inventory. The Minimum is 52. So, at some point
during the simulation the number of televisions in inventory was only 52.
Next, the values to plot need to be added. Under Select Plot Values are six buttons that represent the
different types of values that can be plotted. You are interested in Resource values so click the Resource
button. In the dialog that appears select the TV Resource and the Capacity value then click the Add
Values button. This adds that value to the plot.
Without closing the dialog select Blu-Ray and Capacity and click the Add Values button. This adds the
Capacity value for the Blu-Ray Resource to the plot. Now you can select Close. The plot properties
should now include two values.
No more needs to be done for the plot to be constructed when the simulation is run. However, if you
want to select the color for each line and the legend label for each line select the values in the list and
use the buttons under Plot Legends to set the color and the legend label. See Setting Legends in
Chapter 5 of Part B of the SIMPROCESS User’s Manual for more information. Hide Plot at Simulation
Start is selected by default. Leave this selected since the simulation runs faster if the plot is not
displayed. Once the simulation is complete you can view the plot. Click OK to complete the addition of
the new plot and then close the Custom Real-Time Plots manager. Save and run the model. The
simulation will run a bit slower with the plot defined. Once the simulation is complete click the Display
Real-Time Plots button on the System toolbar. Select TV and Blu-Ray Inventory and click OK.
It is a bit difficult to see, but the red line, which represents the level of TV inventory, regularly dips
below 140. You can zoom into the lower portion of the plot by clicking on the plot dragging over the
portion that should be zoomed. The image below just shows the portion of the plot from the y axis value
of zero to 200.
This clearly shows the level of the TV Resource dipping below 140 several times. You already knew from
the statistics that the minimum value for Capacity was 52, but you did not know the frequency of
Capacity dropping below 140. A one-time event doesn’t necessarily indicate a change is needed but
regular violations of the store’s inventory policy could indicate a change is required. Notice the levels of
the Blu-Ray Resource never drop below its 10% threshold of 70. These results could lead to a
reevaluation of the reorder policy and/or the inventory policy. Should the store reorder more often? Is
10% of inventory always on hand necessary or would a lower percentage work? To address this issue,
add a delivery of televisions and Blu-Ray players on Tuesday mornings at 8:00 am. Edit the Trailer
Arrives Generate Activity in Replenish TV and Blu-Ray Inventory and add a Calendar schedule. Follow
the same procedure as you used in Trailer Entity Type. Once you have added the schedule for Tuesday
at 8:00 am, run the model again and check the plot. The inventory stays at relatively high levels.
Now that you know the behavior of the inventory levels go to the Simulate menu and deselect Update
Plots. This will improve the performance of the simulation since the plot will not be updated with
simulation results. If you need the plot again later, you can reselect Update Plots.
These costs are variable costs since the employees are paid based on the number of hours worked. A
weekly, monthly, or yearly salary would be a fixed cost since that is cost no matter how many hours are
worked. Each Resource must be edited to add the costs. Select Resources from the Define menu or click
the Define Resources button on the model toolbar to open the Resource manager. Select the Resource
and click the Edit button. When the Resource properties appear select the Cost tab. Below is the Cost
tab for the Customer Service Rep A Resource.
Under Variable Costs the Cost per Time Unit field contains the value 12.0 and the Time Unit is Hours.
Enter the hourly cost for each Resource. Once you have finished entering all the Resource costs you
need to define the Cost Periods. Cost Periods are used to track costs for time periods. For this model,
SIMPROCESS Tutorial Manual
Page 65
Chapter 2: Advanced Tutorial
you want to use monthly Cost Periods. Cost Periods are set on the Cost Periods tab of the Run Settings.
Select Run Settings on the Simulate menu then choose the Cost Periods tab. Period Frequency
defaults to Quarterly. Change that to Monthly then click OK to accept the changes.
Save and run the model. Once complete select View Simulation Results on the Report menu and
choose the Cost tab under Select Component. The Cost tab is not visible. You must click the arrow next
to the Resource tab and choose Cost to see the Cost tab. There are three entries on the Cost tab:
Resource By Entity, Resource By Activity, and Activity By Entity. When you select Resource By Entity
the Variable Cost and Absorption Cost tabs appear in the Results section. The Variable Cost tab only
shows the variable costs that come from the Variable Costs defined in the Resources. The Absorption
Cost tab includes any Variable Costs plus the Fixed Cost specified in the Resource properties. Since the
Resources in the model do not have Fixed Cost the two tabs will have the same results. The Variable
Cost tab breaks the costs down by Period, Resource, and Entity. If you scroll to the bottom of the table,
you’ll find the Total of all the costs. If you select Resource By Activity or Activity By Entity you’ll find
that the costs are broken out differently but the Total cost is the same. The Total for all the Resources is
49962.46, which is in USD (set on the Cost Periods tab of the Run Settings).
In the Requirements section TV is listed followed by 1.0 in parentheses. This indicates that one unit of
Resource will be acquired. To request more than one unit, click the Edit button. This allows the number
of units requested to be changed. Select the uniform integer distribution (Int) from the Units list. Click
the detail button (three dots) and set Minimum to 1 and Maximum to 2. Enter 16 for Stream.
Once complete the Resource request in the Requirements section should show the new number of
units to obtain.
The Activity Order from Inventory in Purchase Television and Blu-Ray also needs to be changed. Use
Stream 17. The Activities Remove Blu-Ray Player from Shelf in Purchase Blu-Ray and Purchase
Television and Blu-Ray must be changed. Also, use the uniform integer distribution for the Blu-Ray
requests. The Minimum should be 1, the Maximum should be 2, and the Stream should be 18 and 19
respectively.
If not already selected, select Update Plots on the Simulate menu then save and run the model. The
additional delivery of televisions and Blu-Ray players created a higher demand, which means the
inventory levels are now lower but not too low. Deselect Update Plots once complete.
By default, the Value is None, which means an Entity instance will wait as long as necessary to obtain
the Resource(s). In our model, though, a customer will not wait an unlimited amount of time. You need
to modify the model so the Maximum Wait for Resource Time is 10 minutes. This must be set at every
Activity that requests a Resource except for the Activities that are acquiring inventory Resources. Below
shows the Ask for Help Get Resource Activity in Purchase Television.
The same change needs to be made to Discuss Blu-Ray Players in Purchase Blu-Ray and Ask For Help in
Purchase Television and Blu-Ray. Also, select Collect Activity Statistics on the General tab of each of
these Activities. Save and run the model then look at the Activity statistics. Select View Simulation
Results on the Report menu and choose the Activity tab in the Select Component section. Most of the
Activity names are disabled. This is because no statistics were collected for these Activities. However,
Discuss Blu-Ray Players is enabled because you selected Collect Activity Statistics on the properties of
the Activity. Click on Discuss Blu-Ray Players. The Entity Count tab in the Results sections shows the
value of Total Not Processed is 405. This statistic gives us the number of Entity instances that left the
Activity without acquiring the required Resources and delaying the required time. (For the Get Resource
Activity the Entity instance simply exits without acquiring Resources.)
Scrolling down the Activity tree you find the two Ask For Help Activities. Ask For Help in Purchase
Television had 735 Entity instances exit without obtaining Resources, and Ask For Help in Purchase
Television and Blu-Ray had 374 Entity instances exit without obtaining Resources.
Maximum Wait for Resource Time is a useful feature, but now your model is invalid. This is because
the Entity instances that exit without obtaining Resources still follow the same model flow. They make
purchases. You need a way to recognize that an Entity instance is exiting an Activity prematurely and
appropriately handle that Entity instance when it exits the Activity. Fortunately, there is a way to handle
this. When an Entity instance exits an Activity due to the Maximum Wait for Resource Time, the Entity
instance System Attribute EndWait is set to TRUE. (See System Attributes in Chapter 1 of Part D of the
SIMPROCESS User’s Manual and Adding Resource Requirements to Activities in Chapter 3 of Part A of
the SIMPROCESS User’s Manual.) To take advantage of this add a Branch Activity after each of the Ask
For Help Activities (Purchase Television and Purchase Television and Blu-Ray) and after the Discuss Blu-
Ray Players Activity in Purchase Blu-Ray. For now, just delete the exiting Connector and insert a Branch
Activity along with a Dispose Activity then connect the Activities. The image below shows the revised
Purchase Television flow.
In the properties of the Branch Activity, under Select Branch Type, choose Attribute. From the
associated list choose Entity.EndWait.
This indicates the Activity will branch based on the value of Entity.EndWait. Since EndWait is a
BOOLEAN System Attribute the only values can be TRUE or FALSE. Next edit the properties of each
Connector that exits the Branch Activity. For the Connector between the Branch and Dispose Activities,
Entity.EndWait should be TRUE since the value TRUE means the Entity instance exited without
obtaining the Resources.
Do the same for the Connector that goes to Discuss TVs except either choose FALSE for the value or
select Otherwise. The revised flows for Purchase Blu-Ray and Purchase Television and Blu-Ray are
shown below.
Adding these Branch Activities that branch on the System Attribute EndWait ensures Entity instances
that do not acquire Resources do not continue in the model flow.
SIMPROCESS Tutorial Manual
Page 76
Chapter 2: Advanced Tutorial
Save and run the model then look at the time customers spent waiting for help. Again, choose View
Simulation Results on the Report menu and choose the Customer Entity Type. On the Cycle Time By
State tab scroll to the Wait For Resources statistics. The Average wait for help was 1.893 minutes and
the Maximum wait was 10.584 minutes. This is certainly good but this improvement came at the cost of
1504 customers leaving the store because they did not receive timely service. (This is the sum of Total
Not Processed for the two Ask For Help Activities and the Discuss Blu-Ray Players Activity.) This
indicates a serious lack in store staffing.
When you click OK to save the changes the Attribute will be listed in the Global Attribute manager. You
can create the remaining Attributes by selecting NumCustomerServiceA and clicking the Copy button
or by clicking the Add button again. Create NumCustomerServiceB, NumCashierA, NumCashierB,
SIMPROCESS Tutorial Manual
Page 78
Chapter 2: Advanced Tutorial
NumTVs, and NumBluRays. Attribute names cannot contain any spaces or special characters. The
default Value should be 2 for NumCustomerServiceB, NumCashierA, and NumCashierB. The default
Value for NumTVs should be 950, and the default Value for NumBluRays should be 700. Once complete
the Global Attribute manager should have six Attributes defined.
Now that the Attributes are defined and specified as Model Parameters, the Resources can be modified
to use these Attributes. Select Resources from the Define menu or click the Define Resources button
on the Model toolbar. Edit each Resource and select Evl(1.0) for the Units. Evl is the evaluate function.
Click the detail button (three dots) and remove the 1.0 from the Expression field. Click on the Global
Attributes list and select Model.NumCustomerServiceA then click the Add Selection to Evl button.
This adds Model.NumCustomerServiceA to the Expression field.
Do the same for each Resource using the corresponding Model Attribute for Evl. The Units for each
Resource should now use Evl with an Attribute as the argument.
Save the model and run the model. Since you have added Attributes designated as Model Parameters
the simulation run will be preceded by a dialog that allows you to set the values for each Model
Parameter.
To change an Attribute’s value simply click on the Value cell, type in the new value, and press Enter.
IMPORTANT: You must press Enter for the new value to be saved.
When a Parameter is selected the Description (if any), Default value, and Mode displays. (The
Description comes from the Comment field on the Attribute properties.) To change a Parameter back
to its Default select the Parameter and click the Reset button. To reset all Model Parameters to their
Default values, click the Reset All button. Enter 3 for NumCustomerServiceA and
NumCustomerServiceB and run the model. Look at the Wait For Resources statistics for the Customer
Entity Type. Because you have set the Maximum Wait for Resource Time these statistics did not
change much. The Average wait dropped from just under 2 minutes to about half a minute, and the
Maximum wait was about 11 minutes, similar to what it was before.
Note, though, the Total Not Processed dropped to 9 for Discuss Blu-Ray Players and dropped to 27 and
11 respectively for each of the Ask For Help Activities. This is significant improvement.
Using Attributes
In the previous section you used Attributes to parameterize the initial quantity of the Resources.
Attributes can also be used to influence the flow of a model or to gather specialized statistics. Assume
the store has a promotion to give away free Blu-Ray players to customers that purchase a 55 inch or
larger television. Assume 25% of the customers that intend to buy purchase one of the larger
televisions. Also, you would like an Attribute to track the number of customers that do not buy anything.
As a subset of this you would also like to know the total number of customers that wanted to buy
something but did not because they had to wait too long. This information already exists but you would
prefer the information in a single value instead of having to sum up values from various Activities. Given
this information you need to create Attributes for these purposes.
Next, select the Model tab and Add a new Attribute. Name should be NoBuyCount, Mode should be
Integer, and default Value should be 0. Select Standard Report in the Report Requests section so
statistics for the Attribute will be collected. Observation Based should already be selected in the
Statistics Types section.
Also, add MaxWaitCount with the same properties as NoBuyCount. This will track the number of
customers that leave because Maximum Wait for Resource Time was reached.
Use Entity.TVType
Once you have the Attributes defined you need to modify the flow of the model to use these Attributes.
The fact that 25% of the customers buy a large television indicates a Branch Activity will be needed. In
the Purchase Television Process a Branch Activity needs to be inserted after Discuss TVs. This Branch
Activity will use the 25% probability of purchasing a large television. Use an Assign Activity to set the
value of Entity.TVType to Large. TVType is prefixed with Entity to identify it as an Entity instance
Attribute. This time add the Branch Activity to the layout before you delete any Connectors. Name the
Branch Activity (we used Purchase Large TV?) then edit the Connector that exits from Discuss TVs.
Select the End tab and choose the Branch Activity you added from the list of Activities. This changes the
ending Activity of the Connector from Order From Inventory to the just added Branch Activity.
When you click OK the Connector will terminate at the Branch Activity. Add the Assign Activity and
connect the Branch Activity to the Assign Activity and to Order From Inventory. See the flow below.
You must define the Connectors that exit from Purchase Large TV?. The Connector that goes to Assign
TV Type should have a Probability of 0.25 and the other Connector either 0.75 or Otherwise.
You need to also create an Assign action in Assign TV Type. When you edit the properties
Entity.TVType should already be displayed in the list of Attributes. If not, select it. Click the Add
button and enter Large for the Value field.
When you click OK the Attribute assignment action will be listed under Set Attributes.
This assigns the value Large to the Attribute Entity.TVType for every Entity instance that enters this
Activity. This change does not need to be made in Purchase Television and Blu-Ray since you already
know these customers are purchasing a Blu-Ray player. If they purchased a large television they simply
will not be charged for the Blu-Ray player. The point is a Blu-Ray player will be removed from inventory.
Now that the customers that purchased a large television have been identified, after the release of the
customer service representative the customer needs to select their Blu-Ray player. After the Release
Resource Activity Service is Finished add a Branch Activity and a Delay Activity for acquiring the Blu-Ray
Resource.
The Connector from the Branch Activity to the Delay Activity must have the value Large for the Attribute
Condition.
The other Connector can either have Normal for the Attribute Condition or have Otherwise selected.
The Delay Activity should have a Duration of 30 seconds and request one unit of the Blu-Ray Resource.
the very first Branch Activity (Make a Purchase? in our model) 30% of the customers are immediately
designated as customers that do not buy anything. Add an Assign Activity between Make a Purchase?
and the Dispose Activity. If you delete the Connector between these Activities to add the Assign Activity
remember to reset the Probability in the new Connector that exits the Branch Activity.
Edit the properties of the Assign Activity, select Model.NoBuyCount from the list of Attributes and click
Add. This displays the Attribute Assignment properties. The Attribute field is disabled. Select + for
Operation and leave Value at 1.0.
When OK is clicked the Attribute assignment action is added to the Assign Activity.
Every time an Entity instance enters this Activity Model.NoBuyCount will be incremented by 1.
However, this is not the only place you need to add an Assign Activity. There are customers that exit
without purchasing anything if they had to wait too long for service. In each Process you added a Branch
Activity and a Dispose Activity to remove instances of the Customer Entity Type that did not acquire
either Customer Service Rep A or Customer Service Rep B because Maximum Wait for Resource Time
was reached. Add an Assign Activity in each Process between the Branch Activity and the Dispose
Activity. The Assign Activity needs to include an Attribute Assignment action that increments
Model.NoBuyCount by 1 and an Attribute Assignment action that increments Model.MaxWaitCount
by 1. Remember to reset the Branch Connector’s branching condition if you delete and recreate the
Connector. The image below shows the modified Purchase Television Process.
These Assign Activities should have two assignment actions: Model.NoBuyCount + 1 and
Model.MaxWaitCount + 1.
The Minimum was 96, which is within the store’s policy of having 10% of the maximum inventory on
hand. Next select the Attribute tab (click on the down arrow next to the tabs and select Attribute). Click
on Electronics Store : NoBuyCount. (The owner of the Attribute is displayed with the Attribute name
following the colon. Since NoBuyCount is a Model Attribute the owner is the model.) There is only one
tab in the Results section, Attribute Value.
The statistic of interest is Maximum. Remember you are using the Attribute to count the number of
Customer Entity instances that do not make a purchase. The Average of the Attribute does not give you
that value. There were 12293 customers that did not purchase anything. Also, check the value of
Electronics Store : MaxWaitCount to see how many Customer Entity instances left without receiving
service.
Creating Distributions
Sometimes the distributions included with SIMPROCESS do not fit your data or you do not know which
distribution fits your data. SIMPROCESS allows the creation of specialized distributions based on your
data. Assume you now have better data on how many televisions and Blu-Ray players are purchased by
customers. You have already modeled a customer buying one or two televisions and one or two Blu-Ray
players. You modeled this with the uniform integer distribution which means there was a 50%
probability of buying one item and a 50% probability of buying two items. Now you can create better
distributions based on actual store data. You now know based on historical data that 90% of customers
only buy one television and the remaining 10% of customers buy two televisions. For Blu-Ray players,
75% of customers buy one Blu-Ray player, 20% buy two Blu-Ray players, and 5% buy three Blu-Ray
players.
Create Attributes
To use this data, you will need some Attributes so begin by defining some Attributes. You need an
Attribute for each Customer Entity instance that specifies how many televisions were purchased, and
you need an Attribute for each Customer Entity instance that specifies how many Blu-Ray players were
purchased. Select Global Attributes on the Define menu or click the Define Global Attributes button on
the Model toolbar. Add two Entity instance Attributes: NumTVs and NumBluRays. Set the Mode to
Integer for both and keep the default Value of 0.
You also need Attributes to track the television profit, Blu-Ray profit, and total profit. Select the Model
tab and add the Attributes TVProfit, BluRayProfit, and TotalProfit Set the Mode to Real for
each and leave the default Value at 0. Make sure you select Standard Report in the Report Requests
section.
Create Distributions
Next, you need to create distributions for how many televisions and Blu-Ray players are purchased
based on the store data. Select Distributions on the Define menu. This displays the Distribution
manager which is used to create Standard, Tabular, and Auto Fit distributions. Select the Tabular tab
and click Add to create a new Tabular distribution for buying televisions. (See Tabular Distributions in
Chapter 5 of Part A of the SIMPROCESS User’s Manual for more information.) Set the Name field to Buy
TVs. Leave Discrete selected for Type, and set Stream to 19. The table contains Probability and Value.
The Probability column contains the cumulative probability of the distribution. The probability of buying
one television is 90%, and the probability of buying two televisions is 10%. Therefore, Probability for
the first row is 0.9 and the Probability for the second row is 1.0 (the Probability for the last row is
always 1.0). The Value cell for row 1 should be 1 since the probability of buying one television is 90%.
Value for row 2 should be 2. You must press Enter after changing a cell’s value for the change to persist.
Click Add again to create a distribution for the number of Blu-Ray players purchased. Since there are
three probabilities you will need to click Add Row to add another row to the table. Enter 20 for Stream.
Use the probabilities given at the beginning of this section to complete the table.
When complete, the Distribution manager should show two distributions on the Tabular tab.
Edit the properties of the Assign Activity, select Entity.NumTVs from the Attribute list, and click Add.
The distribution Buy TVs is now in the Value list so select that distribution.
Every time an Entity instance enters the Activity a value from the Buy TVs distribution will be assigned to
Entity.NumTVs.
Next edit Order From Inventory to change the Resource request to use the Attribute Entity.NumTVs.
Edit the properties and select the Resources tab. Edit the Resource request. Select Evl(1.0) in the Units
list and then click the detail button (three dots). Add Entity.NumTVs to the Expression field and click
OK. The Units field should now have Evl(Entity.NumTVs).
After the changes are accepted the Resource request will be updated to use Evl(Entity.NumTVs). The
distribution Buy TVs could have been used directly to set the number of Units. However, you are using
the Attribute now since it will be needed for another purpose in the next section of the tutorial.
Add an Assign Activity in Purchase Blu-Ray to assign a value from the distribution Buy Blu-Rays to
Entity.NumBluRays.
The properties of the Assign Activity should include the Attribute assignment.
Edit Remove Blu-Ray Player from Shelf and change the Resource request to use Entity.NumBluRays.
Make these same changes in Purchase Television and Blu-Ray. However, the Assign Activity must also
assign a value to Entity.NumBluRays since Blu-Ray players are purchased in this Process.
Save the model and run it to make sure there are no errors. Check the TV and Blu-Ray Resource
Capacity statistics when complete. You should see a much higher level of TV inventory.
Using Expressions
SIMPROCESS Expressions allow user written code to be executed at certain events before, during, and
after a simulation. This section will introduce you to Expressions and give you an idea of the power of
Expressions. Expressions are written using the SIMPROCESS Expression Language (see Chapter 2:
Expressions in Part D of the SIMPROCESS User’s Manual for more information). The goal for this section
is to use Attributes and Expression to calculate store profit.
• Each Blu-Ray player sold generates $20.00 profit for the store. Remember that some Blu-Ray
players are free (thus, no profit).
• 55 inch or larger TVs generate $100.00 profit for the store.
• Smaller TVs generate $50.00 profit for the store.
You know how many televisions and Blu-Ray players were purchased by each customer because each
Customer Entity instance has the Attributes NumTVs and NumBluRays. For the Entity instances that go
through the Purchase Television Process, Entity.NumBluRays will always be zero, even for those that
get a free Blu-Ray player. For the Entity instances that go through Purchase Blu-Ray, Entity.NumTVs
will always be zero and no free Blu-Ray players are given away, so the value of Entity.NumBluRays is
the number of Blu-Ray players purchased. The Purchase Television and Blu-Ray Process will need to be
modified since you do not know whether a Customer purchased a large television or one of the smaller
televisions. This information was not previously needed. Add the same Activities as used in Purchase
Television to set the Attribute Entity.TVType.
In our example vertices were added to Connectors to get the unique paths. Also, Input and Output Pads
can be moved around an Activity by clicking on a Pad and dragging. Now that you know whether the
television purchased was a large television you can adjust Entity.NumBluRays to account for the free
Blu-Ray player. In this example you are assuming that the customer does not get an extra Blu-Ray player
but one of the Blu-Ray players they were going to purchase is now free. You could add another Assign
Activity after Remove Blu-Ray Player from Shelf that would subtract one from Entity.NumBluRays.
However, given the layout is already busy, use an Expression to do the same thing. Edit the properties of
Remove Blu-Ray Player from Shelf and select the Expressions tab. Select Release Entity and click
Edit. The Release Entity Expression is executed just before the Entity instance exits the Activity. You
want to wait to make this change until just before the Entity instance exits since Entity.NumBluRays
is used to acquire the appropriate number of units of the Blu-Ray Resource. When you edit an
Expression the Expression Editor displays. Type in the following exactly as you see it below. SIMPROCESS
Expressions are syntax and case sensitive.
Entity.NumBluRays := Entity.NumBluRays - 1;
The assignment operator is := and the statement must be followed by a semicolon. Since
Entity.NumBluRays is an Integer Attribute, the number that is subtracted must also be an Integer.
SIMPROCESS does not allow mathematical operations on different types of numbers (for example, you
cannot add a Real number to an Integer number). When done click OK to close the Expression Editor,
and then click OK to close the Activity properties.
Next, navigate to the top level of the model. You need to add an Expression to Pay for Items that will
calculate the profit. This time, though, simply right click on the Activity and choose Accept Entity from
the Expressions item on the contextual menu. Here you will execute Expression code when the Entity
instance enters the Activity. Enter the following:
profit : REAL;
This code first defines a local variable named profit of type REAL. An IF statement is used to calculate
TV profit based on the value of the Attribute Entity.TVType. The System Method FLOAT (see Chapter
3: System Methods in Part D of the SIMPROCESS User’s Manual for more information on System
Methods) converts the Integer value of Entity.NumTVs to a Real value. This is necessary since profit is
a REAL variable. The value of profit is then added to Model.TVProfit and Model.TotalProfit.
The same is done for the Blu-Ray players except no IF statement is needed. Curly braces surround
comments.
Save and run the model. When complete select View Simulation Results on the Report menu and
choose the Attribute tab. Select Electronics Store : TVProfit. As with NoBuyCount the statistic of
interest is Maximum. The total profit from television sales is 1,474,900. Next select Electronics Store :
BluRayProfit then Electronics Store : TotalProfit. The Maximum values are 232,580 and 1,707,480
respectively.
Adding Labels
Static and dynamic labels can be added to any layout within a model. See Background Text in Chapter 4
of Part A of the SIMPROCESS User’s Manual for a full discussion. Add a static label on the top layout that
identifies the model as being a model of an electronics store. If not already there, navigate to the top
level of the model. Select the Background Text tool from the Model toolbar and click in the top center
of the layout. This displays the Background Text properties. In the Static Label section enter Electronics
Store. Bypass the Dynamic Label Properties section and go to Font Attributes. Select the Font Name,
Size, and Color for the text entered in the Static Label section.
When you click OK the label will appear on the layout. Click and drag to reposition.
Dynamic labels are labels that change during the simulation. Animation must be turned on as well as
Update Dynamic Labels for labels to update. Both can be controlled from the System toolbar.
Meaningful dynamic labels are usually a combination of a static label and a dynamic label. The dynamic
label is the value that changes and the static label identifies the value. Add labels that show the
changing levels of television and Blu-Ray player inventory. Start with the label for the television
inventory. Again, select the Background Text tool and click on the bottom of the layout just below the
30% No Connector. Enter # for the Static Label. This will be used as a placeholder until the simulation is
run and is replaced with actual values. In the Dynamic Label Properties section enter values for Name
and Id. In our model, we entered TVInventory for Name and 0 for Id. Select Integer for Mode. Notice
that the Width field enables and defaults to 10. Width sets the maximum number of digits to display.
When Real is selected Precision also enables. Precision sets the number of digits to the right of the
decimal point. Also, when Integer or Real is selected the buttons under Set Value enable. Since
inventory is controlled by Resources click the Resource button. Select TV on the left and Capacity on the
right.
When you click OK TV:Capacity will display in the Value field. Set the Font Attributes then click OK.
The label displays on the layout as simply #. Select the Background Text tool again and click to the left of
the dynamic label. Enter TV Inventory: for Static Label, select Right under Alignment, and set the Font
Attributes. Once done it should look like the image below.
Repeat this process adding a dynamic and static label for the Blu-Ray inventory.
You can use the Align feature to improve the appearance by holding down the Control key and selecting
the labels you want to align. Once the labels are selected right click on one of the labels and select the
desired alignment option from the Align menu item under the Layout menu item on the contextual
menu.
Save and run the model with Animation and Update Dynamic Labels selected.
Any form of animation slows the simulation so turn Animation off to have the simulation complete as
quickly as possible.
• Monday through Friday 9:00 am to 10:00 am customers arrive on average every 2 minutes.
• Monday through Friday 10:00 am to 11:30 am customers arrive on average every 3 minutes.
• Monday through Friday 11:30 am to 1:30 pm customers arrive on average every 2 minutes.
• Monday through Friday 1:30 pm to 4:30 pm customers arrive on average every 3.25 minutes.
• Monday through Friday 4:30 pm to 9:00 pm customers arrive on average every 1.8 minutes.
• Saturdays and Sundays customers arrive during store operating hours at a regular rate on
average every 2.5 minutes.
You need to modify the Generate Activity to reflect this new information. There are several ways this
can be accomplished. The first way is by using a Cyclical schedule (see Cyclical Schedule in Chapter 2 of
Part A of the SIMPROCESS User’s Manual). However, since you are already familiar with the Weekly
schedule, create multiple Weekly schedules to model the arrivals. Edit the properties of the Generate
Activity and then Edit Customer Schedule. Rename Customer Schedule to Weekend Schedule. Deselect
Monday through Friday and change the mean of the exponential distribution to 2.5.
Copy Weekend Schedule and name the copy Mon-Fri 0900-1000. Deselect Sunday and Saturday and
select Monday through Friday. Change the end time to 10:00:00. Change the mean of the exponential
distribution to 2.0.
Copy Mon-Fri 0900-1000 and name the copy Mon-Fri 1000-1130. Change Start Time to 10:00:00 and
End Time to 11:30:00 for Monday through Friday. Change the mean of the exponential distribution to
3.0.
Copy Mon-Fri 0900-1000 again and name the copy Mon-Fri 1130-1330. Change Start Time to 11:30:00
and End Time to 13:30:00 for Monday through Friday. The mean of the exponential distribution does
not need to be changed.
Copy Mon-Fri 0900-1000 again and name the copy Mon-Fri 1330-1630. Change Start Time to 13:30:00
and End Time to 16:30:00 for Monday through Friday. The mean of the exponential distribution should
be changed to 3.25.
Finally, Copy Mon-Fri 0900-1000 again and name the copy Mon-Fri 1630-2100. Change Start Time to
16:30:00 and End Time to 21:00:00 for Monday through Friday. The mean of the exponential
distribution should be changed to 1.8.
This completes the schedules so you can close the Generate properties by clicking OK. These schedules
used the same stream number (10). This is because they are all for the same Entity Type (Customer) and
none of the schedules operate at the same time.
Save and run the model with the following Model Parameter values:
• Model.NumCustomerServiceA = 3
• Model.NumCustomerServiceB = 3
• Model.NumCashierA = 2
• Model.NumCashierB = 2
• Model.NumTVs = 950
• Model.NumBluRays = 700
Look at the results. As expected the number of Customer instances generated increased. A total of
54862 were generated. The minimum inventory of the TV Resource (Capacity Minimum) was 275, and
the minimum inventory of the Blu-Ray Resource was 48. The total number of customers that left
without receiving service (Electronics Store : MaxWaitCount) was 931, clearly unacceptable.
Optimization
The results obtained after updating the Entity instance generation indicates there need to be changes in
inventory levels and staffing. There were too many televisions in inventory and too few Blu-Ray players
in inventory. Also, the number of customers that left after waiting 10 minutes for service was too high.
You can run the model with various values for the Model Parameters to see what levels of inventory and
what levels of staffing are best. However, SIMPROCESS can examine the options for you to determine
the optimal maximum inventory levels and optimal staffing levels. SIMPROCESS includes OptQuest, an
optimization tool from OptTek. Chapter 4: Optimization of Part E of the SIMPROCESS User’s Manual
describes the optimization capabilities in detail. Define an optimization that will determine the optimal
inventory and staffing.
• Objectives
o Minimize Television and Blu-Ray player inventory
o Minimize employee costs
• Constraints
o The maximum number of customers that leave without service during the six-month run
cannot exceed 100.
o Television inventory cannot drop below 50.
o Blu-Ray player inventory cannot drop below 25.
o The average wait to check out cannot exceed 15 minutes.
The optimization will have two objectives. OptQuest supports multi-objective optimizations. Select
OptQuest from the Tools menu to define an optimization. This displays the OptQuest for SIMPROCESS
properties.
Select Optimization Settings is empty. This list contains the optimizations defined for the model.
Multiple optimizations can be defined for a single model. For now, type in Store Optimization and press
Enter. There is already an objective to optimize on the Objective tab but it does not have a Value to
Optimize. You want to minimize inventory so select Minimize under Set Objective. The buttons under
Set Objective Value allows you to select a value to optimize. Given that you want to minimize total
inventory there are two ways this could be approached. Since the objective can only contain one value
either you need to combine the maximum inventory of televisions and Blu-Ray players into one value or
have an objective for each value. However, since there is already another objective related to
minimizing Resource cost, use one objective for inventory. (Even though there can be more than two
objectives, results can be difficult to interpret if there are more than two objectives.) This means you
must define a Model Attribute that will combine the maximum inventories into one value. Click OK to
close the optimization properties and select Global Attributes from the Define menu. Add the Model
Attribute TotalInventory. Its Mode should be Integer.
Once complete select Model Expressions from the Define menu or click the Model Expressions button
on the Model toolbar. Edit the End Simulation Expression. Type in the following:
You now have a value that represents the total maximum inventory that you can optimize so return to
the optimization properties by selecting OptQuest on the Tools menu. Inventory Optimization should
already be selected. Click the Model Attribute button so select the Value to Optimize. Select
TotalInventory on the left and Value on the right.
When you click OK the value will be set for the objective. Select Max as the statistic type to use.
Click the Add Objective button to add another objective. Use the Resource button to set the Value to
Optimize. Select All Resources on the left and Absorption Cost on the right. This selection considers the
total cost of all Resources. You can do this because the Resources TV and Blu-Ray do not have any costs
assigned. If they did have costs assigned you could not use All Resources as the TV and Blu-Ray costs
would overwhelm any employee costs.
In the objective select Minimize under Set Objective and leave Avg selected. Avg is used since the
model will be run for more than 1 replication.
Next, choose the Decision Variables tab. The decision variables for the optimization consist of the
Model Parameters of the model.
This completes the changes required for Decision Variables so select the Constraints tab. There are the
usual buttons under Add Constraint with an additional Expression button. Your constraints are only
value constraints. The first constraint is that the number of customers over the six-month run of the
simulation cannot exceed 100. The Model Attribute MaxWaitCount tracks the number of instances of
Customer that exit without receiving service so click the Model Attribute button. Select MaxWaitCount
on the left and Value on the right.
When you click OK the constraint appears. Select Max since this Attribute is keeping a count. Enter 100
for Upper Bound. You can leave Lower Bound empty.
SIMPROCESS Tutorial Manual
Page 123
Chapter 2: Advanced Tutorial
The second constraint is the number of televisions in inventory cannot drop below 50. Click the
Resource button and choose TV on the left and Capacity on the right. On the constraint select Min and
enter 50 for Lower Bound. You can leave Upper Bound empty.
Add the third constraint for the Blu-Ray Resource. Its Lower Bound is 25.
To add the fourth constraint, click the Activity button. Select Pay for Items on the left and Entity Wait
Time on the right.
In the resulting constraint leave Avg selected since you are concerned with the average time a customer
waits to check out. Enter 0.25 for Upper Bound. Since the Simulation Time Unit in the Run Settings is
set to Hours the statistic will be collected in Hours. Fifteen minutes is 0.25 hours.
This completes the definition of the constraints. Ignore the Monitored Values and Process Alternatives
tabs for now. Select the Run Options tab. The Number of Replications per Simulation is 1. This
indicates that the results from one replication will be used by the optimization. Typically, simulations
should be run for multiple replications so change this value to 2 (this is usually not enough replications
but keep the value low so the optimization runs faster). See Run Settings in Chapter 6 of Part A of the
SIMPROCESS User’s Manual for more information on running a model for multiple replications.
Maximum Iterations is the maximum number of combinations of Decision Variable values that
OptQuest will run. Set the value to 200. There are 3 possible values each for NumCustomerServiceA,
NumCustomerServiceB, NumCashierA, and NumCashierB. There are 11 possible values for NumTVs
and 10 possible values for NumBluRays. This means there are 8910 (3 x 3 x 3 x 3 x 11 x 10) possible
combinations which means the optimization could run for up to 8910 iterations. You have specified 200
iterations. Once iteration 199 is finished you will be asked if you want to increase that number. Do not
do that as running just 200 iterations will take a good bit of time. Also, since this is a multi-objective
optimization you will not get a single best answer. Running 200 iterations should give several possible
solutions. Therefore, you should enter 3 for Number of Best Iterations to track.
Click Start to begin the optimization. You will be asked if you want to save and close the model and start
the optimization. Select Yes. The model window will close and after a brief pause the optimization
interface will appear. Optimizations run the model in the background. The optimization interface
displays the status of the optimization. See OptQuest for SIMPROCESS Interface in Chapter 4 of Part E of
the SIMPROCESS User’s Manual for an explanation of the interface. The image below shows the results
after four iterations. Only TotalInventory:Value is plotted. The values are red because the solutions
were infeasible, that is, the constraints were not satisfied.
Below is the plot after 23 iterations. Notice that the Best Objective Value became feasible in iteration 9.
If both Objective values have Plot selected the plot changes to a Pattern Frontier. When there is more
than one objective OptQuest produces a pattern frontier. The pattern frontier approach finds the set of
solutions that are optimal, rather than a single optimal solution. The frontier points are the solutions for
which no improvement can be made in one objective without making another objective worse. See the
Pattern Frontier section of Multi-Objective Optimization for a fuller description. The image below shows
SIMPROCESS Tutorial Manual
Page 127
Chapter 2: Advanced Tutorial
the Pattern Frontier after 158 iterations. There are two points at which an improvement in one objective
could not be made without making the other objective worse. Notice the Best Value column in each
table contains N/A.
The image below shows the optimization stopped after 200 iterations. The Best Value column of each
table now contains Select Iteration.
Clicking on the Best Value cell for TotalInventory:Value reveals the Best Value for two iterations, 11
and 12. The number before the colon is the iteration and the number after the colon is the value of
TotalInventory.
Clicking on the Best Value cell for AllResources:Absorption Cost reveals the values 65576.53775 and
65798.47901 for iterations 11 and 12 respectively. Selection of an iteration from any Best Value cell will
reveal the Best Value for that iteration in every table. Since the difference between the values for All
Resources:Absorption Cost is 222, and since there is a significant cost to holding inventory, select
iteration 12. It had the lower value for TotalInventory:Value (1400).
Open the model in SIMPROCESS and run it. Notice in the Model Parameters the values for each
Parameter matches the values from the optimization.
Note: The model Inventory.spm in the Demos directory has a more detailed optimization of inventory
levels, inventory reorder points, and inventory reorder quantities. It includes a two objective
optimization. See Inventory Model in Chapter 3 of the SIMPROCESS Getting Started Manual for a
description.
Summary
This tutorial was rather extensive but the goal was to take you on one possible route from building a
model to using a model for analysis. The scenarios were contrived to allow you to experience more of
the features of SIMPROCESS. You should be gaining a greater awareness of the power of SIMPROCESS.
SIMPROCESS can greatly assist in analyzing most any business process, but the capabilities of
SIMPROCESS are irrelevant if the model and/or data does not reflect reality.
We recommend you review the demonstration models in the Demos directory (see Chapter 3:
Demonstration Models in the SIMPROCESS Getting Started Manual). There are many powerful features
not covered in this tutorial that are demonstrated in these models, including interfacing with
spreadsheets and databases. Versions of this tutorial model (Electronics Store.spm) are in the
Advanced Tutorial directory in the Demos directory. Also, there are models that demonstrate
various SIMPROCESS Expression Language features in the ExpressionDemos directory. Within that
directory is the file SIMPROCESS Expression Demo Models.pdf that gives a description of each
model.