Simio Reference Guide
Simio Reference Guide
Welcome
Refer to the Appendix for the License Agreement, and Academic and Runtime Use Policies. There are links on the bottom of
each page that allow you to send us feedback about the content. This book accompanies Simio software version 12.205.21521.0
1 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
2 / 1277
Simio Reference Guide
Contents of Documentation
Welcome
Simio Product Family
Getting Started
User Interface
Simio Concepts
Object Hierarchy
Object Types
Processes
Projects and Models
Queues
Tokens and Entities
Learning Aids
SimBits
Modeling in Simio
Navigation
Project Window
Model Windows
The Facility Window
The Processes Window
Steps
The Definitions Window
Elements,Properties,States,Events,Lists,Tokens,ExternalConsole
The Data Window
Tables,Schedules,Changeovers
The Results Window
Interactive Verses Experiment,Pivot Table,Reports,Exporting
Standard Object Library
Project Library
Assigning States
Secondary Resources
Add-on Process Triggers
Reliability
Creating New Objects
Animation
Expression Editor, Functions and Distributions
Running the Model
Experiments
Controls orResponses and Constraints
Analysis - Experiment Properties
Experiment Response Chart ( SMORE Plot)
OptQuest Add-In
Scenario Subset Selection
Select Best Scenario Using KN Add-In
An Example Model with an Experiment
Model Summary Report
Custom Simio Extensions (i.e. Custom Steps and Elements)
3 / 1277
Dynamic Selection Rules
Protection
Appendix
System Requirements
Installation Instructions
Check For Updates
Academic Use Policy
Run Time Capability
End User License Agreement
4 / 1277
Simio Reference Guide
5 / 1277
Simio Reference Guide
Getting Started
Understanding the Simio Modeling Approach
Before you begin to build your first model with the instructions below, you might want to first familiarize yourself
with the basic Simio Concepts since modeling in Simio is based on an object orientated approach, which might be
different than other modeling software programs you have used in the past.
After Dropping a Source, Server, and Sink into the Facility Window
Your next step is to connect the objects. The diamond shapes on the objects are called Nodes. They represent places
that Entities can enter and leave. Although we won’t be changing anything now, to review or change Node
properties, you may click on the diamond shape and you will see its properties appear in the Properties Window in
the bottom right side of the interface. Node properties are used to specify Entity destination and Transporter
selection logic. Selecting a node in the Facility Window is a bit different from other objects because there are three
modes of selection. The first two are common to most objects, the third is unique:
• Click – Selects Node and displays its properties
• Click and drag – Moves the Node to a different screen location. Note that it is still “attached” to it associated
object if any (for example, a Server), and if that associated object is moved, the Node position will also change.
• Ctrl+Shift+Click and move – Initiates the creation of a Link between Nodes. The Link type may be preselected in
the library panel (as described in third paragraph below)or it will be prompted for when the Link is terminated by
clicking on a Node (as described immediately below).
We will now connect the objects with Paths. Press and hold the Ctrl and Shift buttons on the keyboard while clicking
the left mouse button on the Transfer Node of Source1. Move the cursor to the left Node of Server1, and click the left
mouse button again. A menu will appear to select the Link type, select Path.
Selecting the Path option after drawing a Link between two objects
6 / 1277
Now press the Ctrl+Shift buttons and click the left mouse button on the right Node of Server1. You may place mid-
points for the connection by clicking various places in the Facility Window, or you can finish the connection by
clicking on the Node of Sink1. If you change your mind about where you are placing the line before finishing the
connection and want to remove the connection altogether, then click on the right mouse button. A menu will appear
for you to select the Link type, select Path.
There is another method to use if you want to place Links. Click on the Link type of your choice in the Standard
Library and then you can left click on the Nodes of your choice. See the circled items in the following screen shot:
Double clicking on an object, such as a Path, will put you in a mode to apply that action multiple times sequentially.
For example, double clicking on the Path will allow you to connect the Source to the Server and then the Server to
the Sink without selecting it again from the library. This is the case with all of the Standard Library objects, as well as
many other items in the user interface.
Congratulations, you have built your first Simio model! If you would like to save your model/project, click on the File
tab at the top left corner of the main Simio window. Then select the Save As item from the Backstage view. Use the
Windows Explorer window to complete the saving of your file. Note: There is an alternative way to add a standard
Source, Server and Sink into the Facility Window. It was important to teach you the manual steps as a learning
process, but as a time saver for the future, you can simply select the Source/Server/Sink option from the Actions
(Add-Ins) icon on the Project Home ribbon. This will add these three objects all connected by Paths.
Now you can click on the Run button located on the Project Home tab to run your model.
See the User Interface help topic for additional information on how to navigate through Simio's User Interface.
7 / 1277
Object and Element Name Identifiers
When naming Objects within the Facility window of a model (such as Source, Server, Sink), as well as Elements within
the Definitions window (such as Properties, States, Materials), there are certain naming conventions that should be
used. In Simio sprint 156 and prior, all names were required to start with a letter and could contain letters, digits and
underscores. In Simio sprint 157+, names may begin with a number. They may still contain letters, numbers and
underscores, but may not resolve to an absolute number. For example, the Name of a Server can be '123ABC' but
may not be '123'. Note that a name such as '3e4' is not allowed as it exponential notation for 3 x 10^4.
Simio has a number of available characters that are valid, such that all Unicode uppercase and lowercase letter
categories as well as others are supported. (As an example, here is a listing of the Unicode lower case letter category
http://www.fileformat.info/info/unicode/category/Ll/list.htm).
Queues in Simio
Queues can be found in many different places throughout Simio. Some queues are animated by default, such as the
Station queues associated with the Standard Library objects, but others are not. To learn more about which queues
exist in Simio and how to animate a queue, visit the Queues help page.
Adding Plots, Gauges, Stacked Bars or Status Labels to View During an Interactive Run
Plots, Gauges, Stacked Bars or Status Labels can be added to a model so the user can have a dynamic view of how
the object's state changes over time. The Console Window is where the user can place displays that will report the
status of an object during the run. These objects can also be placed in the Facility window and the External panel and
attached to objects in the Facility window.
8 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
9 / 1277
Simio Reference Guide
User Interface
The File Tab
The File Tab in the top left corner of the interface, is where the user can open, close or save a new project. The most recent
projects can be found here as well. The New From Template option is available for opening a project template which may
consist of existing tables and/or objects. The Licensing option is available for loading, removing or changing a Simio
license. See section below on Application Settings for more information on the Settings option.
File Tab
The Ribbon
The Ribbon contains multiple ribbon tabs and within each tab there are groupings of icons, or panels. The ribbon tabs that
are visible vary depending on which window the user is viewing in the main part of the application. Below are a few of the
ribbon menus.
10 / 1277
used for viewing and editing properties of selected types of objects. The Render to Oculus icon enables or disables
rendering the active 3D view to an attached Oculus HMD device.
When the Project is selected and highlighted, the Project window is displayed. This window lists all the models that exist
within this project. By clicking on the panels on the left side of this window, the user can view the Experiments, the Symbols,
the Textures and the Path Decorators that exist within this project.
The Properties Window: Viewing and Changing the Properties of an Object
To view the properties of a particular object in the Facility window, click on the object and you will see the object's specific
properties in the Properties window. Each object has properties that control its behavior; e.g. the Source has an inter-arrival
time, the Path has a property to control entity passing, and the Server has a processing time.
Prior to Simio sprint 169, Simio provided a Show Commonly Used Properties Only checkbox at the top of the Properties
window. When this mode was enabled, the display was limited to the key set of properties that defined the core behavior
of each object. Many standard features such as failures, state assignments, secondary resource allocations, financials, and
custom add-on process logic that are provided by the Standard Library objects were not displayed. This mode is no longer
available, thus all properties for objects are displayed.
The Properties Window: Viewing and Changing the Properties of a Model
The properties of a model can be accessed by selecting the appropriate model within the Navigation window, right
clicking and choosing Model Properties.
Model Properties
The Properties Window: Viewing and Changing the Properties of the Project
The properties of the project can be accessed by selecting the project name within the Navigation window, right clicking
and choosing Project Properties. Project properties include important information such as the Date Saved and Saved in
Version.
Project Properties
11 / 1277
Right Clicking in The Facility Window
Right clicking on an object in the Facility Window brings up a menu allowing the user to add a Breakpoint to the object or
to open the Console window for that object. Depending on the type of object, the user will have different options.
For example, right clicking on a Vehicle or Worker object allows the user to Add To Transporter List. Right clicking on a
Node or group of Nodes allows the similar option to Add to Node List. Nodes also have an option for Binding to other
nodes (see External Window page for more information on binding and hierarchy).
Right clicking on a link provides options to add or remove this link from a network, change the starting or ending node or
convert this link to a different type of link. The link can be added to any networks that currently exist or the user can create
a new network from this menu. Allowing the user to change starting/ending node or convert the link to a different type of
link with a simple right click allows the user the ability to change the model logic quickly and easily. See Animating Links
page for more information.
All objects have the right click option for converting to a different object, such as Server to Combiner or BasicNode to
TransferNode. A connected object will give fewer options than an unconnected object as Simio keeps any links between
objects. See the Converting Objects page for more information.
The right click on fixed and agent objects, such as Server, Combiner, Worker, or Vehicle, for example, also provides the
option to 'Create Object From This'. This will create a new subclassed object of the object type, load its default values with
the values from the properties of this object and replace the object with an instance of the new subclassed object. The
subclassed object will be placed within project Navigation window and may placed again in the model by using the
project window. Subclassed objects that are created in the manner will then also have the option to 'Update ** Property
Defaults From This' to update any changed property values. See the Creating New Objects page for more information.
In addition to being able to set breakpoints and watch objects through the Right click menu, the options to make the
object 'Externally Visible', as well as to 'Resize to Graphic Size' are also available for selection. When an object is 'Externally
Visible'('on' as a default), it is visible within the External window and will be seen if this object is used in hierarchy. The
'Resize to Graphic Size' is available when the graphic for the object has been changed from its original size. The 'Resize to
Graphic Size' can be used to resize the object graphic(s) to the original size(s). This is useful in hiearchical models as well,
as if an object in hierarchy has been changed such that the External view of the object is different, any models with that
object in it will be sized based on the original object. The 'Resize to Graphic Size' can be then used to restore objects to
their original sizes.
If an object's symbol has been changed from its default symbol to another graphic symbol, the option to 'Apply External
View Symbol' is made available through the right click menu. This will change the new symbol back to the original symbol
as defined through the External View of the object.
12 / 1277
The Grid System
The Grid system that is available in the Facility Window, the External Window and the window that is displayed for a New
Symbol, has tick marks as well as labels to help you figure out spacing and placement. In Simio's grid system, one unit = 1
meter. Simio’s grid displays labels of tens and then as you zoom out, it displays labels by hundreds. Continue zooming out
and it will display kilometers. The zoom function is performed by right clicking within the grid and moving the mouse up
and down. Or if you have a mouse with a scroll wheel, simply spin the wheel up or down for standard zoom in or out. Using
the Alt+Scroll wheel provides 10x finer zoom than the standard scroll wheel zoom.
Arranging the Windows
It is possible to display multiple windows such as the Facility window and the Processes window at the same time. In order
to access these windows and organize them as you desire, start by right-clicking on the tab of any window. A drop down
menu will appear. In the example below, the Facility window was hidden behind the Process window because the user is
working in the Processes window, which is the default behavior. Upon right clicking at the top of the Processes model tab,
the user selects New Vertical Tab Group.
Multi-Select
Simio supports Multi-select in the Facility window, as well as the Console and External windows of the Definitions tab.
Multi-select allows users to select multiple objects for the purpose of moving, copying and/or deleting them. Ctrl+click and
drag in free space will do a box select, meaning it will select all objects within the box. Ctrl+click on any object adds (or
removes) it to the selection set. While multiple objects are selected, they may be moved, copied or deleted.
Multi-select is also very useful for editing similar properties of objects within the above specified windows. Multi-select is
also available within the Processes window for selecting Steps for the purpose of property editing. You can select multiple
objects and the intersection of their set of properties will appear in the Properties window. If the objects share values for a
property, the value will show up, otherwise the value will be blank. This feature is useful for editing multiple items, such as
selecting multiple conveyors and changing the desired speed, selecting multiple links and changing them to bidirectional
or selecting several transfer nodes and changing the transport logic to ride on a given vehicle. The Properties Spreadsheet
Window is also useful for making edits to multiple objects and is available for the Facility window objects, as well as for the
Processes window processes and steps.
13 / 1277
Simio also supports Ctrl-X (Cut), Ctrl-C (Copy) and Ctrl-V (Paste) for all of the items on the Drawing and Animation
Ribbon tabs, as well items within the Facility and Process Windows. Ctrl-D (Delete) is currently supported only within the
Facility window.
Undo / Redo
Simio supports comprehensive undo and redo capability across the product to make it easier to safely explore and to
recover from any accidents. The Undo and Redo buttons are located on the quick access toolbar on the upper left. Ctrl-Z
and Ctrl-Y also work.
ShortCut Keys
14 / 1277
Understanding the Content of the Windows
If you would like more information on where to find something in the interface, visit the Windows page to learn what can
be found in each Simio Window, such as the Facility Window, the Definitions Window, the Processes Window, etc.
Application Settings
Within the File menu is a Settings option which will open the Application Settings window as shown below. The window is
divided into separate categories.
The Graphics grouing includes the Graphics Type, which indicates the graphics driver to use for 3D display. Changes in this
setting will take effect the next time Simio is started. General selections (like DirectX) will automatically choose a specific
implementation (like DirectX9 or DirectX11). The DirectX Rendering Device indicates the type of graphics driver to use for
the 3d display. The Compressed Texture Hardware Support indicates if hardware support for compressed textures should be
used. The 'Auto' setting will disable it for known bad graphic drivers. Users can manually enable or disable the hardware
support for compressed textures. Changes to this setting will take effect the next time Simio is started. The Hardware
Instancing Draw Support setting indicates if hardware support for instanced drawing should be used. Instanced drawing
improves performance by making less draw calls for repeated geometry on the screen. The 'Auto' setting will disable it for
unsupported hardware. The Anti-aliasing Support setting indicates if hardware support for anti-aliased drawing should be
used. Anti-aliased drawing improves the visual fidelity of what is drawn at the expense of performance and memory. The
'Auto' setting will disable it for potentially weaker or unsupported hardware or graphics types (i.e., this is enabled for
DirectX11 by default and disabled for everything else). Changes to this setting will take effect the next time Simio is
started. The Hardware Skeletal Animation option indicates if hardware support for skeletal animation should be used.
Hardware skeletal animation can offload the processing needed for skeletal pose animations (like walking people) to the
GPU. The 'Auto' setting will disable it for potentially weaker or unsupported hardware or graphics types (i.e., it is enabled
for DirectX11, disabled for others). Changes to this setting will take effect the next time Simio is started.
This window also includes a Libraries grouping which allows the user to specify whether or not to Load Standard Library
and/or Load Flow Library upon opening Simio. By default, these libraries are both loaded. The Additional Libraries To Load
option may also be indicated and may include a semi-colon separated list of fully qualified path names to additional
libraries to load when opening a model.
The Simio Portal grouping includes the Simio Portal URL property, which determines the URL for the Simio Portal
installation. For example, "https://mysimioserver". Portal functionality is only available for Simio RPS Edition.
The Experimentation grouping provides a place for a user to specify a list of addresses where Simio will look to find
replication runners to be used with distributed runs in an experiment. This is useful if the replication runners you have will
not work with the automatic WS-Discovery protocol or if you are connected via VPN. To enter an address, open the repeat
group window for the Replication Runner Addresses line and type in the computer name or address and port where the
Simio Replication Runners exist.
The GUI grouping includes the option to Restore Docking Window Locations in the software. If set to true, Simio will
attempt to restore the top level docking windows to the same location they were when Simio last shut down. It also
includes the ability to Display Deprecated Steps In Processes Windows Panels. When this setting is changed, it will require
closing and re-opening Simio if the Processes window had already been opened. The option to Display Deprecated
Properties in Properties Window is also available. This grouping includes the ability to Display Deprecated Object Or
Element Types, where a change may require restarting Simio. Finally, this GUI grouping includes the Font Scale (percentage)
indicating how much to scale the fonts used in various parts of the UI. A value of 100 is the default size, while using a larger
size may help when using the UI on a projector in front of large groups.
The Workflow grouping has the option to Start In Scheduling Mode. If this option is set to true and Simio is opened with a
license that supports it (Simio RPS (Enterprise), for example), Simio will open in 'scheduling mode'. If you change this
option, you have to restart Simio for it to take effect. Users can also use the -start-in-scheduling-mode command line
option.
The Runtime grouping includes the option to Use Scheduled Breakpoints, which, if set to 'True', the breakpoints will be
scheduled onto the event calendar, instead of suspending the run directly. Enabling this may make runs with breakpoints act
differently than runs without breakpoints.
The Add-ins grouping has an option that was added to Sprint 154 for compatability reasons, which will Allow Add-ins To
Create Properties With Invalid Names (i.e., such as those with spaces). This option is set to false by default.
The Project Recovery grouping was added to Sprint 187 and includes two options. Minutes Between Recovery Save
indicates the number of minutes between automatically saving the active project for recovery. A value of '0' indicates that
no recovery saves should take place. Save For Auto-Recovery Before Run, if set to 'True', will save the active project for
recovery before the start of an interactive or experiment run. Project Recovery is used to restore potentially lost work after
an unexpected Simio shutdown, such as an unexpected computer shutdown. A notification in the bottom right corner of
Simio will be shown when autosaving. If Project Recovery is used, then when opening Simio after an unexpected Simio
shutdown, the user will be asked if the recovery file should be used. Clicking OK opens the recovery save, saves it in a new
file named [ProjectName]_Recovered, and deletes the recovery save. Clicking Cancel keeps the recovery save. Users can
explicitly delete them by deleting the contents of the %localappdata%\Simio\Recovery directory, where %localappdata%
is configured on most systems to be C:\Users\[user name]\AppData\Local. As of Sprint 200, if the user clicks Cancel on
opening the recovery save file, a dialog will then prompt for deleting the project recovery save data.
15 / 1277
Simio Reference Guide
Search Window
Searching the Model
The Search icon within the Project Home window opens up the Search window to allow the user to search for any given
text string.
When you type something into the Search window’s text box, the window will display everything that it finds that contains
that text. There are four columns in the search results:
“Value” is the actual piece of text containing the search string, with the search string highlighted.
“Item” is the name for this piece of text; i.e. “Name” if it is the name of some object, or “Time To Repair” for a
property.
“Object Name” is the object containing the piece of text.
“Project Item Name” is the top-level model containing the object.
Double-clicking on a row in the results will take the user to the window containing the item where the text is found, select
the item, and then (if possible) select the property where the text is found. If the text found is a property value and that
value is currently switched out, the user is simply taken to the item that contains that value. Currently, the Search window
will search “Simio property” values (that is, property values on Steps, Elements, Processes, Object Instances), and Object
names (where “Object” refers to any of the things a user names, such as aforementioned, but also the object in the
Definitions, and Data windows). Search is not yet supported in Schedule item text, Changeover matrices, or Lookup / Rate
table values.
The columns within the Search window can be manipulated to sort and rearrange, as well as to filter them. To use this, click
the filter glyph in a column header, and select an option from it.
When filtering, only those rows matching the filter criteria are displayed, and a filter bar appears the bottom.
The user may also right click on a column to sort, group or filter items in the column.
16 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
17 / 1277
Simio Reference Guide
When the Properties Spreadsheet window is first opened, the 'Click here to select an object type' button in the top right
may be used to select from a list of objects currently in the Facility window, Process names within the Processes window or
Steps within the Processes window.
Within the Facility window, for example, if the model has a Source, two Servers and a Sink, connected by multiple Paths, the
list of objects will include Source, Server, Sink, BasicNode, TransferNode and Path. Click on the object type to view a list of
those particular objects in a spreadsheet format. Alternatively, if you have a particular object highlighted within the Facility
window (i.e., such as a Server), if you right click on that highlighted object you will see the option to 'Open properties
spreadsheet view for all objects of this type...' which will present those objects in the window.
Similarly, within the Processes window, if the model has multiple steps, the list of possible steps may be accessed using the
'Click here to select an object type' and selecting the particular step type desired. Alternatively, right-clicking on a
particular type of step, for example an Assign step, will open the properties spreadsheet for all Assign steps in the model
for editing. Ctrl-click of multiple steps in the Processes window also allows editing of similar properties of those steps
through the Properties window on the right.
Within the Properties Spreadsheet window, you can edit single property entries for a given object or copy/paste values into
multiple columns. To select multiple entry rows, you may click a row, then use Ctrl-click to highlight additional rows –
editing of multiple rows simultaneously can continue to be done within the Properties window on the right.
The columns within the Properties Spreadsheet window can be manipulated to sort as well as to filter them. To filter, click
the filter glyph in a column header, and select an option from it.
18 / 1277
When filtering, only those rows matching the filter criteria are displayed, and a filter bar appears the bottom.
The user may also right click on a column to see the sort arrow for displaying items in the column alphabetically.
Right-clicking on a particular object's row (i.e., such as Server2 in a list of Servers) will highlight and allow you to 'navigate
to' that particular object within the Facility or Processes window.
19 / 1277
Simio Reference Guide
Converting Objects
Convert To Type
Within the Facility window, the right-click option on an object allows the user to select 'Convert To Type' to convert the
current object to a different object of a similar class. For example, a Path may be converted to any other type of 'Link' class,
such as Connector, TimePath, Conveyor, FlowConnector or Pipe.
There are several rules that Simio uses to determine how to convert the data within an object from one object to another.
Let's take the conversion from a Server to a Combiner for example. When 'Convert To Type' is used, Simio will look for a
common base class between the From (Server) and To (Combiner) object (in this case Fixed).
For each property of that base class:
1. If the from object has a different value than its default value, copy the value over to the to object.
2. If the to object has a value equal to its default (it should, it's a new object), and the to object does NOT have type
information (i.e. does NOT contain something like "Server.Whatever"), and the from object DOES have type
information, then do NOT copy the value over. Simio assumes this means that the from object has type information
for which the to object makes no sense.
3. If the to object has any type information, do NOT copy value over. Simio assumes it is there for a specific reason and
so that information is kept.
4. Otherwise, if the from value and to values are different, and they are both switched and visible, copy the value over.
20 / 1277
Simio Reference Guide
Oculus Support
Render to Oculus button found on the Project Home ribbon will enable or disable rendering the active 3D view to an
attached Oculus HMD device. Simio supports the Oculus Consumer Edition but currently does not support Oculus Touch
controls.
In order to use the software with an Oculus HMD devide, Simio must first be run in DirectX 11 or OpenGL mode. This can
be set by going to File > Settings and changing the Graphics Type (under Graphics heading). You may also have to
explicitly specify the device the Oculus is attached to in File > Settings > DirectX Rendering Device. When running under
DirectX 11, a list of possible device names can be found in the Simio3DStatus.log file in the "My Documents" directory, on
the line starting "Available rendering devices are". Simio must be restarted for any graphics changes to take place. Users
may have to go to the Oculus Home app and enable "Unknown Sources". On certain multi-GPU setups, like Optimus, users
may need to start Simio by running it under a specific GPU. Under Optimus, this can be done by right-clicking on Simio
and selecting "Run with graphics processor" and selecting the one in which Oculus is using. On more advanced GPU setups
(for example, laptops with both integrated and discrete GPUs, plus an external GPU), you may need to disable one or more
of those GPUs in windows Device Manager to get multi-gpu runtimes like Optimus correctly assigning Simio to the GPU
the Oculus is attached to.
Since the Oculus view in Simio is simply a view, no simulation modeling can be done in this mode. To move around in the
Oculus view, the desktop 3D view should be focus (users may need to click in it), and then the following keyboard controls
may be used:
W – Forward
S – Back
A – Strafe left
D – Strafe right
Q – Turn left
E – Turn right
R – Rise (in elevation)
F – Fall (in elevation)
V – Reset elevation
Users with an XInput controller plugged in ( Xbox 360, Logitech F310, etc.) may also use the following movement controls:
21 / 1277
Simio Reference Guide
Simio Concepts
The Simio Object Paradigm
Simio is a SImulation Modeling framework based on Intelligent Objects. This may be a bit different than other simulation
packages that you may be familiar with, even those that market themselves as object oriented. Simio is designed from the
ground up to support the object modeling paradigm; however it also supports the seamless use of multiple modeling
paradigms including a process orientation and event orientation. It also fully supports both discrete and continuous
systems, along with large scale applications based on agent-based modeling. These modeling paradigms can be freely
mixed within a single model.
The intelligent objects are built by modelers and then may be reused in multiple modeling projects. Objects can be stored
in libraries and easily shared. A beginning modeler may prefer to use pre-built objects from libraries; however the system is
designed to make it easy for even beginning modelers to build their own intelligent objects for use in building hierarchical
models. An object might be a machine, robot, airplane, customer, doctor, tank, bus, ship, or any other thing that you might
encounter in your system. A model is built by combining objects that represent the physical components of the system. A
Simio model looks like the real system. The model logic and animation is built as a single step. An object may be animated
to reflect the changing state of the object. For example, a forklift truck raises and lowers its lift, a robot opens and closes its
gripper, and a battle tank turns its turret. The animated model provides a moving picture of the system in operation.
Objects are built using the concepts of object orientation. However unlike other object oriented simulation systems, the
process of building an object is very simple and completely graphical. There is no need to write programming code to
create new objects. The activity of building an object in Simio is identical to the activity of building a model – in fact there
is no difference between an object and a model. This concept is central to the design of Simio. Whenever you build a
model it is by definition an object that can be instantiated into another model. For example, if you combine two machines
and a robot into a model of a work cell, the work cell model is itself an object that can then be instantiated any number of
times into other models. The work cell is an object just like the machines and robot are objects. In Simio there is no way to
separate the idea of building a model from the concept of building an object. Every model that is built in Simio is
automatically a building block that can be used in building higher level models.
Each object in Simio has its own Processes, Elements, Properties, States, and Events. It also has an External view, which
determines how the object will appear when placed into another model in the Facility Window of another model.
Therefore, each object found in Simio’s Standard Library has its own Processes, Elements, Properties, States, Events and
External View. And since the main model is also an object in itself (a fixed object type), it also has it’s own Processes,
Elements, Properties, States, and Events.
When a user is working with multiple models within a project, it is important to remain aware of which model is the current
active model. This can be found by looking in the Navigation window, found in the top right side of the interface, and
finding the highlighted model. This is the active model. This means that the windows which are displayed in the main part
of the interface are the windows associated with that active model. To view the windows for a different model, simply click
on the appropriate model in the Navigation window and you will see a different set of tabs(windows) in the main part of
the interface. The following image shows the model tabs for the active model called SubModel.
Even though each object within the standard library has its own Processes, Elements, Properties, States, and Events, the user
cannot see those components of the object. Simio hides these details to prevent the user from making any changes to the
logic of the standard objects. The standard objects were built to provide standard functionality that will meet most basic
modeling needs, so hiding the details of these objects brings simplicity. If the user would like to see the Processes,
22 / 1277
modeling needs, so hiding the details of these objects brings simplicity. If the user would like to see the Processes,
Elements, Properties, States, and Events of an object, they would need to subclass the object from the standard library into
their own Project Library. Once the object is in the Project Library, the model windows of that object can now be viewed by
making it the active model in the project, which is done by selecting the model in the Navigation window. This is where the
user could see the Processes of any standard object (from the Processes Window) or the States and Properties of each
object (from the Definitions Window). Now that the object is part of the Project Library, it can be modified (i.e. new
properties, new states, new tables, etc). If the user would like to modify a Process, they first need to select the Process from
within the Processes Window and click on the Override button in the Ribbon. By overriding a Process and making changes,
the user is changing the logic that Simio put into this object to make it work as it does in our Standard Library.
View the Object Hierarchy
Read about the different Object Types that exist in Simio and examples of each
Read about Processes, what they are and how they can be used in your model.
Read about Projects and Models and the difference between the two.
Read about Queues and see where they exist in the product.
Read about Tokens and Entities and how they differ.
23 / 1277
Simio Reference Guide
Object Hierarchy
What is an Object?
Simio employs an object approach to modeling, whereby models are built by combining objects that represent the
physical components of the systems. An object is a self-contained modeling construct that defines that construct's
characteristics, data, behavior, user interface, and animation. Objects are the most common constructs used to build
models. You've already used objects each time you built a model using the Standard Library --- the general-purpose set of
objects that comes standard with Simio.
An object has its own custom behavior that responds to events in the system as defined by its internal model. For example,
a production-line model is built by placing objects that represent machines, conveyors, forklift trucks, and aisles, while a
hospital might be modeled using objects that represent staff, patient rooms, beds, treatment devices, and operating rooms.
In addition to building your models using the Standard Object Library objects, you can also build your own libraries of
objects that are customized for specific application areas. And you can modify and extend the Standard Library object
behavior using process logic. Refer to Simio Concepts for additional information on the specifics of an object.
Object Hierarachy
One of the important and unique internal design features of Simio is the use of a three tier object structure that separates
an object into an object definition, object instance, and object realization.
Object Hierarchy
Object Definition
An object definition is a Library Object that is supplied by Simio or created by the Modeler. An object definition is just
that - a definition of how the object is to act by making use of specific Processes, Events, States, and Properties that work
together to define how the object interacts with Entities and other Objects. An object definition specifies the behavior of
that object and is shared by all instances of the object in all models in which it is used. Object definitions reside in a library,
either the Standard Library, a custom library, or a project library. New object definitions can be made by selecting New
Model and selecting the class of model to be built. Alternatively, a new object definition can be generated by ‘sub-classing’
an object from an existing library object.
24 / 1277
Vehicle Definition (Properties)
Object Instance
An Object Instance is simply an occurrence of an Object Definition within a parent object, such as a model or another
object definition. This is what you get when you place a definition into the Facility window.
In the SimBit example below, the ‘model’ (which is an object definition), contains a number of object instances within the
Facility window. Each Server (Server1, Server2, and Server3) is an Instance of the Object Definition named ‘Server’.
Similarly, Source1, Sink1, all Paths, Vehicle1, and all Input/output Nodes are all Instances of Source, Server, Path, Vehicle,
BasicNode, and TransferNode Object Definitions.
Each instance of an Object Definition is differentiated by customizing property values and/or creating Add-On processes
within the Instance. In this example, each Server has a different Processing Time property value. Also, some TransferNodes
have Ride on Transporter set to True while others are set to False. This instance data is in turn shared by all object
realizations.
SimBit 'DynamicallyCreatingVehicles'
25 / 1277
Object Realization or Object Runspace
Once a simulation run is started, Object Instances are represented with object realizations. Object realizations hold the
state values for that object instance. Each realization of an object instance is unique because of its unique combination of
state and function values.
All objects have a fixed runspace. A fixed runspace is the physical X,Y,Z location where an object instance is created once a
run is started and is located where the object instance was placed in the Facility window. Dynamic Objects are created at
this location and then are transferred to another location. Below, Vehicle1’s fixed runspace is located at the bottom left
hand corner of the screen, the stationary vehicle labeled Vehicle1.
In the case of dynamic objects, there is also a dynamic runspace created to represent the number in system for a particular
object instance. Each dynamic runspace has independent values for states and functions. You can see the three dynamic
runspace instances of Vehicle1 moving throughout the system. Each of these three vehicles have different X,Y,Z locations,
they are doing different tasks – one of them is going to pick up an entity while another is carrying an entity to its
destination – and therefore have different values for their Destination, RideStation.Capacity.Remaining function, etc.
In summary, the Vehicle Object Definition is the “Model” supplied with the Simio Standard Library. It is the collection of all
the Properties, States, Event, Processes, Elements, etc. that make a Vehicle act the way the standard Vehicle acts in your
model.
The Vehicle Object Instance is Vehicle1 that is shown in the bottom left hand corner of the Facility window. This is where
the properties such as Desired Speed, Initial Ride Capacity, Task Selection Strategy, etc. are specified. These property
values further shape this Vehicle’s behavior to represent the behavior of the vehicle the user is trying to represent.
26 / 1277
When you run the model, it will create a static runspace (or realization) to represent the states common to all Vehicle1s
(such as Population.NumberInSystem). It will also create a dynamic runspace for each of the three vehicles that are in the
system. Each one of these vehicles has different values for Location, Heading, Pitch, NumberRiders, TimeCreated, etc. that
differentiates that Vehicle from the others. These can be then referenced by Vehicle1[1], Vehicle1[2], and Vehicle1[3].
27 / 1277
Simio Reference Guide
Object Types
There are six basic classes of intelligent objects in Simio:
Fixed Intelligent Typically used to represent an entire system being modeled (e.g., the plant), or
Object component objects within a system that have a fixed location (e.g., machine, equipment,
work cells). A Fixed object has a stationary location within the Facility Window. It is
typically used to represent an entire system being modeled (e.g., the plant), or
component objects within a system that have a fixed location (e.g., machine, equipment,
work cells). Examples of fixed models include Source, Server, and Sink, in the Standard
Object Library, as well as the Link and Node.
Agent Intelligent Adds behaviors for modeling objects that can be dynamically created and destroyed,
Object are able to move in continuous space or discrete space (on a grid), and which can
detect, chase, and intercept other objects. This type of model is particularly useful for
agent-based modeling approaches in which a large number (perhaps many thousands)
of independently acting agents interact to create the overall behavior of the system. In
the current version of Simio, a user cannot add a new Agent Class object types.
However, both Entities and Transporters are derived from the Agent Class object type.
Entity Agent Adds behaviors for modeling objects that can follow a work flow in the system,
including the ability to use a network of links to move between objects, the ability to
visit, enter, and exit locations within other objects through nodes, and the ability to be
picked up, carried, and dropped off by transporter objects. An Entity object can be
dynamically created and destroyed and can move into and out of Fixed objects. Entities
can have multiple graphical symbols. An example of an Entity model is the default
ModelEntity that is automatically added with the first Fixed model of the Project.
Transporter Agent A transporter object is a special type of entity that can pickup entity objects at a
location, carry those entities through a network of links or free space, and then drop the
entities off at a destination. A transporter object also has the ability to move off of a
network while maintaining association with a node on the network (i.e., “park” at a node
in a network). Examples of a transporter model are the Vehicle and the Worker in the 28 / 1277
in a network). Examples of a transporter model are the Vehicle and the Worker in the
standard library.
Link Fixed Adds behaviors for modeling fixed objects that are pathways for entity/transporter
movement. A link object has a length which may be separated into equally spaced
locations (cells), must have a start node and end node, and is a member of one or more
networks. A Link object transfers an Entity over a pathway defined by a polyline
connecting two Node objects in the Facility Window. A Node is highlighted red when a
Link is being drawn and it is close enough to that highlighted Node that if the user
clicks, the link will be anchored at that Node. Examples of Link models include the
Connector, Path, TimePath, and Conveyor in the Standard Library.
Simio tracks the leading and trailing edge of each Entity on a link as well as provides
events to manage collisions and passing. Link control and position is determined by the
leading edge of an Entity. As soon as an Entity’s leading edge moves onto a link, the
Entity and its speed are controlled by the logic built into that Link. When the Entity’s
leading edge moves off the link (perhaps onto a connected link), the Entity is no longer
controlled by the initial Link even if the trailing edge of the Entity remains on the initial
Link. Control transfers to the subsequent Link as the Entity’s leading edge transfers.
A traveling entity is considered Accumulated on a link if the entity has reached the end
of the link and has been stopped there without being engaged to the link, or if the
entity’s leading edge has collided with the trailing edge of an entity in front of it on the
link, and the entity has accumulated behind that entity without being engaged to the
link. Once flagged as Accumulated, the entity will continue to be considered
Accumulated until either its leading edge leaves the link or the collision situation is
cleared.
Node Fixed Adds behaviors for modeling fixed objects that are intersection points between link
objects or the entry/exit points for visiting an object. Entities may be picked
up/dropped off by a transporter at a node. Users can extend/customize the crossing
logic through a node to model network flow and entity pickup/dropoff points.
Examples of Node models include the BasicNode and TransferNode in the Standard
Library.
A Node defines a point in space -- it may constrain movement but it does not represent
any physical space itself. So, for example, a transporter that stops at a node physically
remains with its full length on the incoming link until it leaves the node. The Standard
Library object nodes have an associated parking area, but by default this also does not
represent a physical location. Internally parking is represented as a station, so it may
have constrained capacity and may be animated.
The following key strokes can be used to manipulate Nodes within the Facility Window:
Click – Selects node and displays properties in the Property window.
Click and drag – Moves the Node to a different screen location. Note that it is still
“attached” to it associated object if any (for example, a Server), and if that
associated object is moved, the Node position will also change.
Ctrl+Shift+Click and move – Initiates the creation of a Link between Nodes. The
Link type may be preselected in the library panel or it will be prompted for when
the Link is terminated by clicking on a Node.
A node with its Crossing Capacity property set to 'Infinite' is not seized or released and
therefore cannot be queried for Capacity.Allocated.
29 / 1277
Simio Reference Guide
Processes
A Process in Simio is comprised of Steps, Elements, and Tokens. A Process is sequence of actions (e.g. assign state, delay by
time, seize a resource, etc.) that may span time and change the state of the model. Tokens flow through a Process executing
Steps that alter the state of one or more Elements. Simio provides an auto-layout function creating Process flows.
Processes are created and modified in the Processes Window, found by clicking on the Processes tab. Note: A process
cannot be modified while the model is running.
A Process is either enabled or disabled. The process property InitiallyEnabled allows the user to specify whether a process
is enabled when the system is initialized. A process has a state called Enabled that indicates whether the process is
currently enabled. A disabled process ignores any attempt to execute the process. A process can be enabled by using an
Assign step to set the state ProcessName.Enabled, where ProcessName is the name of the process, to 1. A process can be
disabled by using an Assign step to set the state ProcessName.Enabled to 0. Any attempt to execute a disabled process
(e.g., Execute step) will be ignored. Any triggering events for the process are canceled when it is disabled. However, when a
process is disabled, if there are active tokens currently running in the process, then those tokens will continue and finish
their processing. A disabled process (or a process that has no logic) is going to simply return its ReturnValue if asked (e.g., if
an OnEvaluatingXXXX process is asked for a value by the engine). ReturnValue is a state associated with a process that
returns the default token return value for the process.
There are certain processes within the standard Simio objects that are known as Decision Processes. They are referred to as
Decision processes because the execution engine needs to ask the model for some value and it runs this particular process
to find the answer. These processes should run to completion without the delay of the executing token. If for any reason the
token gets delayed while executing the process, then an error message will be displayed, as shown below. The error details
will inform the user which exact token was detected as being delayed. If a Decision Process contains an Execute step, the
same applies with an error being issued with any delayed token(s).
Decision Process must run to completion without any interruption; however, the user can set a Breakpoint within the process
to step through the decision logic. Process suspensions are not allowed. Decision processes within Simio include
OnEvaluatingMoveRequest, OnEvaluatingRiderAtPickup, OnEvaluatingRiderReservation, and OnEvaluatingSeizeRequest.
Processes
Processes are used to either customize the behavior of an existing object, or to create new object definitions. If the user
would like slightly different behavior from what is provided with the Standard Library objects, the modification of the
object behavior is done with Simio Processes. The second major role for process modeling in Simio is for creating new
object definitions. An object definition is simply a model for how instances of that object should behave.
There are several types of Processes in Simio. Standard Processes are automatically run by Simio at specific points in the
logic. Decision processes are 0-time Standard Processes that compute a return value used for making a decision. Event-
triggered Processes are executed whenever a user-specified Event occurs. Add-on Processes may be inserted into an object
at selected points in the logic and are discussed below.
Standard Processes
There are nine (9) standard processes that are available for a given fixed class object/model. There are different/additional
processes within other class type objects (Entity, Transporter, Node, etc.). Within the Processes window, any of these may be
selected for logic to be added. Some of the processes below are only available if the Fixed Class object property Resource
Object is set to 'True' (thus the object is used as a resource with capacity.) These processes include:
OnCapacityAllocated - This is executed when a resource's capacity is allocated (seized). The token executing the
process will be associated with the object that seized the capacity. This process is used within Standard library
objects such as Resource, Worker and Vehicle.
OnCapacityChanged - This is executed when a resource's capacity has changed. The token executing the process will
be associated with the object that changed the capacity.
OnCapacityReleased - This is executed when a resource's capacity is released. The token executing the process will be
associated with the object that released the capacity. This process is used within Standard library objects such as
Resource, Worker and Vehicle.
OnCapacityReservationCancelled - This is executed when a capacity reservation for a resource has been cancelled,
either due to a reservation timeout or because the entity owning the reservation was destroyed. The token executing
the process will be associated with the object that cancelled the reservation. This process is used within Standard
library objects such as Resource, Worker and Vehicle.
OnEvaluatingSeizeRequest - This is executed when determining whether or not the object's capacity should be
allocated (seized). The token executing the process will be associated with the object that is trying to seize the
capacity. This process is used within many of the Standard library objects.
OnNewSeizeRequest - This is executed once for each candidate resource when a token first arrives to a Seize step
(i.e., when a new seize request occurs). The token executing the process will be associated with the object that is
trying to seize the capacity. Note: When the token arrives to Seize step, it calls the process (optionally) for every
possible candidate. The OnEvaluatingSeizeRequest process is then what is used to actually reject or accept and that
process may be called multiple times whenever a queue search is done.
OnRunEnding - If running in interactive mode, then this is executed when the Stop or Reset button action occurs. If in
experiment mode, then when the ending time has been reached or calendar events have been exhausted such that
the model run is now ending and final statistics about to be reported. Additional events can be put onto the event
calendar, but they will not be processed. For example, if you place a Delay step in this process, the delay will be
scheduled, but the run will end before the end of the delay. The delay will not extend the run time. Similarly, if you
have an Execute Step in this process and the Action property is set to 'WaitUntilCompleted', anything after that step
will not be processed. This is because the "WaitUntilCompleted" action schedules another event on the event
calendar and the event calendar is not revisited.
OnRunInitialized - This is executed when this object/model is first initialized. It's important to note that the
30 / 1277
OnRunInitialized processes are executed last after all model element states and statistics have been initialized. Thus,
all Timer elements in a model have already been initialized by the time the OnRunInitialized process is being
executed. This includes any Timer elements that are embedded within objects, such as the Timer element for entity
arrivals within a Source. Thus, any state variables referenced within the Source object should be initialized to their
desired value, as an assignment within the OnRunInitialized process will not override the Timer element initialization.
OnRunWarmUpEnding - If running in experiment mode, if a warm-up period has been specified and is ending, this is
executed right before all statistics are cleared. Typical uses of this process may be to do some custom warm-up
statistics clearing. For example, you may want to clear a state variable’s value that is being used as a custom statistic
or take a snapshot of some statistic values at the end of the warm-up period before Simio clears them. See
"OnRunEnding" description above for more information about how the event calendar works with this Process.
Add-On Processes
When you place an object from the Standard Library into your Facility Window, you can have the object run Add-On
Processes at specific points in the logic. An Add-On Process is simply a logical Process that you have created to perform
some specific action such as assigning a state variable, seizing a resource, referencing information in a table, etc.
Process Scope
In general a process can only reference items that are at its own scope. Specifically, an object does not “know” anything
about the model in which it is placed, so any processes defined inside that object have the same limitation. For example, a
process defined inside a Server object can only reference things that have been defined within that Server object. One way
objects and their process can interact with the other objects is by the object defining properties which are used to pass in
information from outside the object. For example, Server has a Property called Process Time which may reference or “pass
in” things like tables and functions that are defined outside of Server.
Add-on processes may appear that they are being defined at the scope of the referencing object (e.g. a Server), but they
are not. An add-on process is actually part of the containing model and has that scope. So for example, if the Processing
add-on process is defined for Server1 that is placed in model Brewery, the scope of that add-on process is Brewery. This is
important to note because if the same code that is defined in an add-on process is later moved into the object definition, it
may no longer work because the scope would change from the containing model to that of the object definition itself.
Simplifying Logic within Processes
A process can be structured such that all the logic that is to be done at a given point in the simulation is done within that
particular process. However, users may find that some of the logic at different points in the model is similar to other areas
of logic. The Execute step may be used to move from one given process into another process. When the Execute step is
used, a new token enters that process and continues through the steps. Within the original process (where the Execute step
is called), the original token may continue or it may wait for the executing process to be completed. See the Execute step
for additional information.
If you use a custom token with custom states, the states of the receiving token in the called process get set to match, much
like passing function arguments. If you set the ReturnValue of the token in the executed process, that value will be set
(returned) to the token that started the execute, much like a function return value. This allows the user to pass information
between the processes, much like you would with a function. See the Tokens page for more infomation.
31 / 1277
Simio Reference Guide
Costing
Costing in Simio
Activity-based costing ( ABC) is a method of assigning costs to products or services based on the resources that they
consume. ABC identifies activities within the business and records the cost required to fulfill each activity. An activity cost
driver is any factor that affects the costs associated with an activity including capital costs, resource consumption costs, and
waiting or inventory holding costs. Activity-based costing allows managers to determine the costs to perform an activity as
well as non-allocated costs such as those associated with unallocated (idle) resource time.
Simio’s costing capability includes the ABC features described above plus the ability to specify costs in many different
currencies and use a user-specified exchange rate to express cost statistics in the currency of choice.
Cost Centers & Cost Hierarchy
Cost centers are used to define identifiable areas of responsibility where costs are incurred or allocated. Cost centers may
be linked in a hierarchical structure for cost accounting and reporting purposes, whereby costs are automatically rolled up
through the cost center hierarchy. For example 'MechanicLabor' and 'ElectricianLabor' may both be allocated to the
'MaintenanceLabor' cost center. In turn costs associated with the 'MaintenanceLabor' cost center may be combined with
costs in the 'MaintenanceSupplies' cost enter and allocated to the 'MaintenanceTotal' cost center.
Each Standard Library object that supports costing has a Parent Cost Center property that can be specified. If none is
specified, the costs associated with that object will be allocated to the parent object (which may be the base ‘model’)
containing the object. Cost centers may also be defined within the Elements panel of the Definitions window. A cost center
may have an initial cost value in addition to an initial cost rate.
When cost hierarchy is used, it is important to note what each cost center represents to avoid double counting specific
costs. To continue the above example, it would be inappropriate to add together the costs from 'MaintenanceLabor' and
'MaintenanceTotal' because that would be double counting the 'MaintenanceLabor' costs.
Cost Drivers
Capital Costs
Capital costs are the initial one-time setup costs of adding an object to a system. Capital costs are included in the
following Standard Library objects: Source, Sink, Server, Combiner, Separator, Workstation ( Deprecated), Resource,
Vehicle, Worker, and Conveyor.
For Vehicles and Workers, the capital cost is incurred for each object in the population that is added to the system. For
example, if the Vehicle named ForkTruck has an Initial Number in System of ‘2’, capital cost will be incurred for each of the
two ForkTruck vehicles.
For statistics reporting, capital costs are allocated to both the object and the parent cost center associated with the object.
They are shown on the Results page under the Category ‘Costs’ and Data Item ‘Capital Costs’. In the example shown below,
capital costs are specified for four objects, including Source, Server, Sink and Resource, each with its own cost value. As you
can see, each object itself incurs the capital cost, and then all costs are ‘rolled up’ to the parent cost center, which is the
Model.
Buffer Costs
Buffer costs are the costs associated with holding an entity in an input or output buffer at a given object, such as a Server.
The Standard Library objects that include buffer costs are Source (output buffer costs only), Sink (input buffer costs only),
Server / Separator / Combiner / Workstation ( Deprecated) (both input and output buffer costs).
32 / 1277
Buffer costs include both a Cost per Use and Holding Cost Rate.
Cost per use for a buffer is the cost to hold an entity in a buffer, irrespective of the waiting time. It is important to note that
this cost will be incurred at the associated object each time an entity passes through the buffer, even if there is no waiting
time. Cost per use is allocated to the entity moving through the buffer, the buffer’s associated location and the Parent Cost
Center.
Holding cost rate for a buffer is the cost per unit time to hold an entity in the buffer. The holding cost is then allocated to
the associated object, as well as to the Parent Cost Center. Holding costs are also allocated to the entity that is in the
buffer.
For statistics reporting, buffer costs are shown on the Results page under the Category ‘Costs’ and Data Item ‘CostPerItem’
for the associated DataSource ‘InputBuffer’ or ‘OutputBuffer’ (or ‘Population’ for Entities). In the example shown below,
buffer costs are specified for three objects, including Source, Server, and Sink, each with its own buffer cost data. Cost per
use was specified for all objects, and holding cost rate was specified for the input buffer of the Server. As you can see, each
object itself incurs the buffer costs, the entities that go through the system incur the cost (which will be different for each
entity, given the waiting times at the buffers are different) and then all costs are ‘rolled up’ to the parent cost center, which is
the Model.
Resource Costs
Resource costs are the costs associated with utilizing a resource. Resource costs in Simio are included in the Server /
Combiner / Separator / Workstation ( Deprecated) fixed objects, as well as the Resource / Worker / Vehicle objects.
These costs are broken down into three categories: Cost per Use, Idle Cost Rate, and Usage Cost Rate.
A resource cost per use is incurred with each entity that utilizes the resource. Reporting the resource usage cost could be
confusing though. It is important to understand that a resource is a cost driver and its usage costs are charged, or accrued,
to the cost of the users/owners of the resource (i.e., charged to the tasks using the resource and then rolled up at those
locations where the task is performed).
So, for example, if an entity goes into a Server and utilizes a Worker as a secondary resource during processing, then the
Server will incur costs of its internal resource (shown as Data Item ‘UsageCostsCharged’ under the DataSource ‘Resource’).
Additionally, a ‘CostPerItem’ for the DataSource ‘Processing’ includes the cost per use of the Server resource, as well as the
Worker resource. These costs are then rolled up to the parent cost center’s Total Cost as well. Costs are incurred to the
entity that ‘owned’ the resources as well, as shown below.
33 / 1277
Idle cost rate for resources is cost per unit time that is charged to the cost of the parent object for each unutilized (idle)
scheduled capacity unit. This cost is also allocated to the cost of the parent cost center. This cost is NOT allocated to any
entities in the system.
Usage cost rate for resources is the cost per unit time to use the resource. This cost rate will apply only during the time that
the resource is in a utilized state and will be charged to the cost of the entity using the resource. This cost will also be
charged to the resource and included in the ‘UsageCostCharged’ (along with the CostPerUse value). As all other costs, this
is also ‘rolled up’ to the parent cost center’s Total Cost. It's important to note that changeover times using Sequence
dependent setup (resource state of 'Setup' or 'OffShiftSetup') are not included in utilized time or cost calculations.
In the example below, there was only Idle Cost Rate and Usage Cost Rate, both of 1 USD per hour. The Server was used for
6 minutes of the hour (10%). Notice how the Server incurs both the IdleCost and UsageCostCharged under the ‘Resource’
Data Source. However, only the usage costs are incurred to the cost per item of both the entity and processing area of the
Server. The Server’s total cost (both idle and usage) are then rolled up to the parent cost center.
In the above example, the UsageCostCharged for the resource is allocated to the Server because the resource is utilized
within the Server object. The UsageCostCharged is the cost charged to the users of the resource, not directly to the
resource. Only idle costs are charged directly to the resource. Usage costs are not charged in the resource’s reported total
cost unless the entity is actually located inside the resource (such as a Server) causing the costs to be rolled up into the
Server’s costs.
It is important to keep in mind that for Workers and Vehicles that are ‘moving’ resources, the usage costs (both cost per
use and usage cost rate) are only incurred for ‘non-transport’ tasks. For these objects, an additional category of costs,
Transport Costs, is used for transport tasks, as described below.
Workstation ( Deprecated) Usage Cost Rate - For workstations (deprecated), the usage cost rate is broken down into three
separate cost rates, including Setup Cost Rate, Processing Cost Rate and Teardown Cost Rate, based on which delay the
entity is incurring.
Transport Costs
Transport costs are included with the Worker and Vehicle objects. Both a Cost Per Rider and Transport Cost Rate may be
specified.
Cost per rider is the cost to load and transport an entity using a transporter of this type, irrespective of the transportation
time. This cost is allocated to an entity when it is loaded onto the transporter.
Transport cost rate is the cost per unit time to transport an entity using a transporter of this type. This includes only the time
when the entity is on the vehicle and does not include any time when the vehicle is moving to the entity’s location for
pickup.
Both cost per rider and transport cost rate are incurred to the worker / vehicle, as well as to the entity. Total cost of the
34 / 1277
Both cost per rider and transport cost rate are incurred to the worker / vehicle, as well as to the entity. Total cost of the
vehicle includes all of the ‘CostPerItem’ values and is then rolled up to the parent cost center.
In the below example, two entities have required transport from one object to another. The worker has both a cost per rider
(1 USD ) and a transport cost rate (10 USD per minute). Note that the ‘CostPerItem’ of the worker is shown under the
‘RideStation’ Data Source. Total cost is then calculated and ‘rolled up’ to the parent cost center ( Model).
Material Costs
Material costs are specified with the Material element and include the Cost Per Unit. This cost per unit of material is
charged if a quantity of the material is consumed.
There is no material cost directly specified within the Financials section of any of the Standard Library objects. The
Workstation (deprecated) object includes the option to specify material consumption. If materials are consumed at the
workstation and the cost per unit property is specified for the material (via the Material element), then that cost will be
associated with the workstation.
In the below example, the workstation includes a capital cost and consumes material that has an associated Cost Per Unit.
The entity using the material incurs a ‘CostPerItem’ charge. The ‘CostPerItem’ shown under the Processing Costs for the
Workstation also include those material costs. Capital cost is then allocated to the workstation, along with the material cost
for a TotalCost of the object. This cost is then ‘rolled up’ to the parent cost center. Note that within the parent cost center,
the TotalCost for the object ( Model) is displayed, as well as the MaterialCostCharged. Material costs are included in the
TotalCost.
Currency Support
Simio’s costing features includes a default currency which can be specified in any number of country’s currency units. The
default is USD ( United States dollars). Exchange rates can also be specified between two countries’ currency units. More
information about default currency and exchange rates can be found on the Financials page of the help.
35 / 1277
Simio Reference Guide
Disable Grid Grid Data Providers may choose to persist information from one invocation of the provider to
Data Cache the next. In most cases, this is the desired behavior, and this value should be set to 'False'. In
severely memory-constrained situations, it may be useful to prevent this caching by setting this
value to 'True'.
Save Project As Indicates if upon saving to a multi-file storage (like the simproj format) the project logic should
Multiple Files all be contained in a single file, or be broken apart into individual files (such as a file per object
36 / 1277
Multiple Files all be contained in a single file, or be broken apart into individual files (such as a file per object
definition and a file per table).
Show When this project loads, associated documentation for it (a pdf file of the same name in the
Documentation same directory) should be opened as well.
on Load
Models
A model describes the logic, external interfaces, data structure, and presentation/animation for a class of objects. A model
may be added to a library and then instances of that model embedded in another model. Thus, a user will be able to easily
create a library that is a collection of models developed for some particular application domain or modeling effort.
The first model in your project is typically your main model. When you create your main model Simio also creates a default
model entity with no logic, and a corresponding default entity object. This default entity object is created but not yet
placed. The first entity object that you place in your model is this default entity object. You can use this entity model across
multiple models, or add additional entity models as needed. You can also add custom logic to the entity model.
Model properties can be found within The Facility window page under the Model Level Properties section.
You can create sub-models by adding additional models to your project. You can then add logic to your sub-model, define
the user view, properties, processes, and then drag objects for this model into your main model.
You can also subclass versions of the Standard Library or other Library objects. This allows you to start with an object and
then make changes to customize the logic for your own needs. To add additional models to your project, select the Project
in the Navigation window to open the Project window. You can then add a new models to your project either from scratch,
by subclassing another model, or by copying a model from a library. See the Project Window and Creating New Objects
help pages for additional information on how to add models. You can then add to or modify the logic of your subclassed
model to create your own custom version of the model. When you select your main model back in the Navigation window,
you'll see the new models in your Project Library on the bottom left side of the UI in the Libraries panels, and you can then
drag these objects into your main model.
37 / 1277
Simio Reference Guide
Queues
Queues in Simio
Queues, or lines of entities waiting to be processed, can be found in many different places around Simio. This provides
tremendous flexibility in allowing the user to queue entities up at different points throughout the model. It also creates
ease in modeling blocking. When placed in the Facility Window, the standard library objects all have their Input Buffer
queue, their Processing queue and their Output Buffer queue automatically animated.
Entities can be removed from certain queues with the use of the Remove Step.
Animating Queues in Simio
You can animate a queue in Simio with either a Detached Queue that is not tied to any particular object, or animate with a
Queue that is attached an object. An Attached Queue will move around the window with the object. The icon used to
animate a detached queue is found on the Animation Tab of the ribbon.
To draw a detached queue, do not have any object selected and select the Detached Queue icon in the Animation Tab of
the ribbon. Left click in the Facility Window to add the vertices of the queue and right click to add the final vertex.
To draw an attached queue, first select the object that you wish to attach the queue with and then select the Queue icon
from the ribbon of the Symbols Tab. Left click in the Facility Window to add the vertices of the queue and right click to add
the final vertex. Once the Queue is drawn in the Facility Window, when the Queue is still selected, choose the appropriate
Queue State in the Properties Window, found in the Definitions Tab. The Queue States are listed alphabetically by the
Object they are associated with.
When animating an attached queue, Simio provides a short cut. When the object is selected, instead of clicking on the
center of the Queue icon in the ribbon, select the down arrow to display the Quick Create drop down. This menu provides
some appropriate queue choices for the user to select for animating this queue. The choices are the queues that are
available for the selected object. If the user selects something from this Quick Create menu, and then draws the queue in
the Window, the properties of the queue are automatically populated. For example, if the user selects InputBuffer.Contents
from the drop down shown below and then draws a queue in the Window, the Attached To property will be the name of the
object that was selected and the Queue State property will be InputBuffer.Contents and this will animate the entities that
are currently in the InputBuffer of the selected object.
Note that the orientation properties for a queue, if specified, take precedence over any other given orientation for the
queue (for example, the direction specified by an “Oriented Point” queue).
Listed below are the properties of Queue ( Animated):
Property Description
Attached Only visible for queues that are attached to an object, such as a Server, Worker, Vehicle or Node.
To The object to which the queue is attached.
Queue Name of the queue state holding entities that are displayed by this object.
State
38 / 1277
Visibility An expression that is evaluated per object in the queue to determine if that object is visible or not.
Expression To reference an object in the queue for which the expression is being evaluated, use the
"Candidate" keyword.
For example, the expression "Candidate.MyEntity.MyState > 1" assumes all objects in the queue
will always be of type 'MyEntity' and will only show those that have a 'MyState' value greater than
1.
X An expression indicating the direction an object should be oriented alont the X axis.
Direction
Y An expression indicating the direction an object should be oriented alont the Y axis.
Direction
Z An expression indicating the direction an object should be oriented alont the Z axis.
Direction
Roll An expression indicating the degrees of clockwise roll from upright an object should be oriented.
39 / 1277
Node Queue Animation
Queue Appearance
40 / 1277
Queues that can be found in Simio:
Network Element
VisitRequestQueue – An entity is inserted into this queue of the model’s ‘Global’ network (by the Ride Step) when it is
waiting to reserve a ride on a Transporter in the system. When a Transporter (i.e., the standard library Vehicle object)
becomes idle, it searches the ‘Global’ network’s VisitRequestQueue (using the PlanVisit Step) to possibly select a
reservation request from that queue. This queue on any other network element is not currently used.
Entity Object
VisitRequestQueue - This queue is on the Entity object but is currently only used by a Transporter object (which is a sub-
class of entity). This queue is holding all the entity objects whose pickup reservations the Transporter has selected and
accepted to perform. Visit requests are initiated from either a Ride or Move step. Thus, when a Transporter object selects a
pickup reservation request from the ‘Global’ network’s VisitRequestQueue using the PlanVisit Step, that request is moved
from the network VisitRequestQueue to the individual Transporter object’s VisitRequestQueue. The Transporter then can
actually set its destination to one of the pickup reservations in its VisitRequestQueue using the SelectVisit Step. Examples
include: Vehicle1.VisitRequestQueue
BatchQueue - If an Entity is the parent of a batch, then all of its batch members are held in this queue owned by the Entity.
41 / 1277
BatchQueue - If an Entity is the parent of a batch, then all of its batch members are held in this queue owned by the Entity.
Examples include: ModelEntity.BatchMembers
Any Object That Is Declared As A Resource Object
AllocationQueue - Objects that are waiting to seize the Object wait in this queue. This queue’s static ranking rule as well as
the resource object’s dynamic selection rule determine the next object to seize the object. Examples include:
Server1.AllocationQueue, [email protected], Resource1.AllocationQueue
Station Element
EntryQueue - Entities waiting to enter the Station, if capacity is not available, wait in this queue owned by the Station
element. Examples include: Server1.Processing.EntryQueue
Note: Entities will never go into the EntryQueue of the ParkingStation of a node, because a node’s ParkingStation always
has a capacity of ‘Infinity'. Note: Entities will never go into the EntryQueue of the RideStation of a Transporter, because the
Pickup step used by the Transporter doesn’t initiate a transfer into the Ride station unless ride capacity is available.
Contents - Where entities exist while they are in the Station. This queue is owned by the Station element. Examples include:
Server1.Processing.Contents, Vehicle1.RideStation.Contents
Material Element
AllocationQueue - Objects waiting to consume a quantity of the material wait in this queue owned by the Material Element.
Node Object
RidePickupQueue - Entities waiting to get picked up by a Transporter at this location wait in this queue. Thus, if the
ReservationMethod on the Ride Step was not ‘FirstAvailableAtLocation’, then an entity is going to be in two queues at once
while waiting for a ride pickup, as a reservation request in a network/transporter VisitRequestQueue and as a location-
specific pickup request in a node RidePickupQueue. Examples include: [email protected],
TransferNode1.RidePickupQueue
BatchLogic Element
ParentQueue - Entities wait here to collect a batch of members. This queue is owned by the BatchLogic element.
MemberQueue - The queue of entities waiting to be added as a member of a batch. This queue is owned by the BatchLogic
element.
RoutingGroup Element
RouteRequestQueue - Entities waiting to be routed to a destination in the routing group wait in this queue. It is owned by
the routing group element.
Storage Element
Queue - Objects in the Storage are held and ranked in this queue owned by the Storage Element.
Note: Currently, the Insert and Remove steps can only be used to insert/remove objects from a storage element queue.
Examples include: Storage1.Queue
Link Object
EntryQueue - Entities waiting to enter the Link wait in this queue, which is owned by the Link object. Examples include:
Conveyor1.EntryQueue
Contents - Entities that are physically located on the link. Entities are ranked in the queue based on the order of entry onto
the link (* It is important to note that on paths that allow passing and entities with varying speeds, this may not indicate the
order of those entities currently on the link, but only how they entered the link). Examples include: Conveyor1.Contents
42 / 1277
Simio Reference Guide
If we walk through the simple example of an entity that enters a standard Server object, we can demonstrate the role of an
Entity and a Token within Simio. In this first example, there are processes that are executed by both the Processing and
43 / 1277
Entity and a Token within Simio. In this first example, there are processes that are executed by both the Processing and
After Processing Add On Process triggers of the Server object. The Entity instance that exists within the Facility Window
arrives to the Input Node of a Server object. It exits the link, crosses the Input Node and then immediately is transfered
into the InputBuffer station of the Server, assuming there is capacity available in the Input Buffer. If there is available
capacity in the Server, the capacity is allocated and then the Processing trigger executes the Process1 process. A Token that
is associated with the entity is created in Process1, which flows through the Assign step. After the Process1 is complete, the
Entity object moves to the Processing station of the Server. When the Server finishes its processing time delay, but before
the capacity of the Server is released, the Process2 process is executed. The Entity object remains in the Processing station
of the Server object and a new Token is created within the Process2 process. This Token flows through the Assign Step that
exists within this process. The Token finishes its job when it reaches the End of the Process2 process. At this point, the Entity
then moves from the Processing station of the Server to the OutputBuffer station of the Server, assuming there is capacity
available in the Output Buffer. And finally, the Entity is transfered to the Output Node of the Server object where it is
routed out with the routing out logic of the Output node. As you can see, the Entity travels physically in the Facility Window
between stations and nodes and the Tokens that are associated with the entity are created to flow through the Processes
and perform the logic of the Steps.
It is important to note that within the Server logic, an Execute step is used for each of the Add On Process Trigger
processes. Within each Execute step, the Action is 'WaitUntilCompleted'. Thus, when the token associated with the entity is
created within a process, the entity will remain physically where it is for the entire process, even when delay steps are
involved.
Example 2 - Processes via Triggering Event
In this second example, the process will be triggered using a Triggering Event. Triggering events may be a user defined
Event or Timer.Event, or may be related to an action within an object, such as [email protected] or
[email protected]. If the process is triggered by a user defined event (i.e., Event1) or monitor event (i.e.,
Monitor1.Event), the token going through the process is associated with the 'model' and not a specific entity. Therefore, as
long as the model is running, the token will continue through all the steps in the process. If, however, the triggering event is
based on an entity entering or exiting another object (i.e., [email protected]), the token going through the process is
associated with a particular entity. If that associated entity is destroyed for whatever reason while the token is still in the
process (i.e., in a Delay step), the token will also be destroyed and will not continue through the remaining process steps.
This example shows the happenings of the entity and associated token with a small example of Source, Server, Sink.
Entities are created at Source1, move to Server1 and are processed, then move to Sink1 and are destroyed. Suppose when
an entity exits Server1, you would like to have a token delay for a period of time and then increase a state variable. As
shown above, Process1 is triggered by an entity leaving the Server. The Triggering Event is '[email protected]'.
Therefore, the token that goes through Process1 is associated with the entity that exited and not the model. When the
entity leaves Server1 and moves to Sink1, it is then destroyed. If the token is still in the process's Delay step when its
associated entity is destroyed, it will also be destroyed by default. If you would like to have the token continue processing,
enter the Advanced Options section and click on the '+' sign of Token Actions. The On Associated Object Destroyed
44 / 1277
enter the Advanced Options section and click on the '+' sign of Token Actions. The On Associated Object Destroyed
property allows users to specify what happens to the token when an associated entity is destroyed. By default, the value for
this property is 'EndProcess'. However, by changing this value to 'ContinueProcess', the token will not be destroyed when its
associated entity is and will instead continue its process until the end.
45 / 1277
Simio Reference Guide
46 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
47 / 1277
Simio Reference Guide
A Sample SimBit Solution is a small Simio model which provides an example of how to use certain features of the
software. Each SimBit .spfx file has a matching .pdf file that provides a detailed description of the model. The files can be
found in [public documents]\Simio\SimBits. The SimBits help page provides a list of all the available SimBits in various
categories. SimBits can be searched by clicking on the Sample SimBit Solutions button in the Support ribbon of the Simio
software, which will take you to a page where Basic and Advanced searches may be performed.
There are a number of Example models that are available with the installation of the software. Example models can be
found in [public documents]\Simio\Examples. See the Examples page for a listing of each and accompanying
documentation. The Examples button in the Support ribbon opens a dialog for selecting one of our example models.
The Books button provides options for opening one of multiple books available for learning Simio. Rapid Modeling
Solutions: Introduction to Simulation and Simio is an introduction to the concepts of simulation and basics of Simio. The
Planning and Scheduling with Simio book introduces the use of Simio RPS ( Enterprise) Edition for planning and scheduling.
The Process Improvement Principles book introduces 25 process improvement principles that can be applied by managers
to improve design and operation of production systems. We have examples associated with this book included in the
Examples section. The Deliver on Your Promise book is a non-technical review of questions about why scheduling is
challenging, how scheduling solutions have evolved and how simulation-based technology can boost your business. The
Reference Guide is a printable guide that explains each Simio feature in detail. The API Reference Guide is an advanced
guide to explain the details of Simio's Application Programming Interface. There are also a number of publications and
textbooks that are listed on-line.
Simio features and concepts are demonstrated in a number of Videos found on the Simio website. The Introductory Topics
include a 20-minute video about Simio and the 11 module Introduction to Simulation and Scheduling videos. The
Intermediate Topics link includes the 8-hour Introduction to Simio video set that introduces the basics of Simio. A
matching e-book is also available under the Books button. Both of these video sets include certification opportunities.
Special topics, such as WonderWare MES Integration can also be found in this section. The Simio YouTube Channel option
provides links to a number of videos available for a range of topics, from Simio and Feature Overviews to Student Projects
and Example Models.
The Training button provides links to our training course schedule and various learning resources, as well as teaching
resources for academics and an interactive map of universities with Simio grants. Simio offers public training classes
through our worldwide network of training partners, as well as customized and on-site training. Our teaching resources
include information about products available, grant application link, teaching materials and our semi-annual student
competition.
The Expression Reference Guide button opens an html document which will be opened in the default browser. This
document lists the Simio built-in functions and keywords, states and elements. It also lists the functions, states, events and
elements for those objects that have been placed in your model.
The My Software section of the Support ribbon contains information specifically related to your Simio license. It includes
the Version of Simio which you are currently running, in the format Simio 5.80.****. The License Type displays the type of
license within our Simio Product Family you are currently running. Finally, the Expiration date displays the date of
maintenance agreement expiration.
The Release Notes icon opens the Simio Release Notes.pdf file (found in in the install folder (by default \Program
Files\Simio)). This file provides information regarding new features in each sprint release.
The Compatability Notes icon opens the Simio Compatability Notes.pdf file (also found in in the install folder (by default
\Program Files\Simio)). This file lists any known problems and work-arounds as well as any compatability issues converting
between releases.
The Shared Items link opens the SI Shared Items area of the Simio User Forum at
http://www.simio.com/forums/viewforum.php?f=36. This area of the forum provides access to objects, libraries and other
items that users have shared.
The Simio Home Page link opens the http://www.simio.com/index.html. Start here to find out anything about Simio.
The Help icon provides a link to the searchable help on all aspects of Simio.
The User Forum icon takes the user to the Simio User Forum where you may search the various forums for answers, post
48 / 1277
The User Forum icon takes the user to the Simio User Forum where you may search the various forums for answers, post
problems and suggestions and interract with Simio employees and the world-wide Simio user base. The direct link to the
Simio User forum can be found at http://www.simio.com/forums/. Users can become a Simio Insider to have full access to
the User Forums where other users share information about how they use the software and the models they are creating.
This is an opportunity for the global Simio community to communicate and collaborate.
The Email button allows you to Email a Question to Simio Support, Email This Project to Simio Support or Email Sales
for additional product information.
49 / 1277
Simio Reference Guide
SimBits
SimBits - General Information
A SimBit is a small Simio model which provides an example of how to use certain features of the software. Each SimBit
.spfx file has description that explains the details of the model. The model *.spfx files can be found in [public
documents]\Simio\SimBits.
SimBits can be searched by clicking on the Sample SimBit Solutions icon in the Support ribbon. By default, the model will
open in a new Simio window. Alternatively, if you'd like to open the SimBit in the currently active Simio window, hold down
the Shift key when you click onto the name of the SimBit that you'd like to open.
Below is a categorization of the SimBits based on their functionality. Some models can be found under multiple
categories.
Add-On Process Logic
AnimatePathDensity
ChangingQueuesWhenServerFails
CheckingNextEntityAheadOnLink
ChooseAlternateSequence
CreateDiscreteEntitiesBasedOnFlow(from project Flow Concepts)
CustomUnbatching
DashboardsWithinExperiments
DisableFailureTimers
DiscreteLookupTable
ElectricVehicle
FillingEmptyingTank(from Project Flow Concepts)
Financials
FindAMinimumStateValue
HourlyStatistic
InventoryReplenish
KeepQueueTimeForLast10Entities
MergingConveyorsControlledByGate
MultipleServerFailures
NotifyStep
PickupDropOffFlow
ResourceSelectionConcepts
ResourceStatesWhenOffShift
RotatingVehicleExample
SequentialProcessingByBatchSpecifiedInTable
ServerBlockingApproaches
ServerUsingTaskSequenceWithWorkers
50 / 1277
SimpleTank
SingleWorkerCompletesProcessAndMovesToNode
TankCleanInPlaceTrigger
TrackingTankContentsByProductTypeUsingTableStates
TransferLine
TravelWithSteeringBehavior
UsingaMonitor
UsingAStorageQueue
VehicleDoingSimultaneousLoading
WorkerUsesWorkSchedule_InterruptWorkingOffShift
Animation
AnimatePathDensity
AnimatedPeople
SimpleElevatorObject
Arrival Logic
AppointmentArrivals
DisableFailureTimers
LeveledArrivals
RandomValueFromTable
SearchTables
ScheduledMaterialArrivalsWithDeviation
SourceWithRateTable
SourceWithCustomEntityTypeProperty
UsingButtonsToAffectSystem
UsingTheStipulateStepForNodeLists
UsingTheStipulateStepForResourceAllocation
Buffering
AddAndRemoveServerCapacity
CONWIP
HourlyStatistic
KeepQueueTimeForLast10Entities
MultiServerSystemWithJockeying
NotifyStep
OneQueueForMultipleServers
OverflowWIP
ServerBlockingApproaches
ServerQueueWithBalkingAndReneging
SimpleLeastSlackSelectionRule
51 / 1277
SourceWithBalkingIfBlocked
UserDefinedListState
Building New Objects / Hierarchy
CombinerNode
CommunicationBetweenObjects
ElectricVehicle
FacilityModelWithinModel
HierarchyWithTables
HourlyStatistic
MassFlowProcessing
MoveableOperator
ProcessModelWithinModel
ResourceSelectionConcepts
SourceWithCustomEntityTypeProperty
UpdateStateInModelFromObject
VisitAllServersInAnyOrder
WorkersArriveLateToShift
Changeover Logic
ServerWithSequenceDependentSetup
Combining and Separating Entities
BatchingProcessUsingScanOrWaitStepToControlBatchSize
CombineMatchingMembers
CombineMultipleEntityTypesOntoPallets
CombinerNode
CombinerReleasingBatchEarly
CombineThenSeparate
CustomUnbatching
ReferenceBatchedEntity
RegeneratingCombiner
SeparatorMakesCopies
UsingAStorageQueue
Continuous Systems
InfectionPropagationUsingContinuousAndFlow
Conveyor Systems
EntitiesEnteringAlongConveyor
ExamplesOfConveyors
MergingConveyorsControlledByGate
TransferLine
52 / 1277
SortingConveyorSystem
Custom Reports
DashboardReportInteractiveLogs
Custom Statistics
DashboardReportInteractiveLogs
DashboardReportTallies
DashboardsForSchedulingExamples
HourlyStatistic
KeepQueueTimeForLast10Entities
RecordDistanceTraveled
TallyStatisticsInTables
UsingaMonitor
UserDefinedListState
WorkersArriveLateToShift
Dashboard Reports
DashboardReportInteractiveLogs
DashboardReportTallies
DashboardsForSchedulingExamples
DashboardsWithinExperiments
Data Tables
CONWIP
EntityFollowsSequenceWithTable
EntityFollowsSequenceWithRelationalTables
HierarchyWithTables
ImportExportTables
InitializeObjectPropertiesFromATable
LeveledArrivals
RandomValueFromTable
ResourceSelectionConcepts
RoutingWithoutPaths
RelationalTablesInRepeatingProperty
ScheduledMaterialArrivals
ScheduledMaterialArrivalsWithDeviation
SearchTables
SearchTableUponEnteringObject
SequentialProcessingByBatchSpecifiedInTable
ServersUsingTaskSequenceWithDataTables_FlowLine
ServersUsingTaskSequenceWithDataTables_JobShop
53 / 1277
ServersUsingTaskSequenceWithDataTables_LoopbackBranches
TableReferenceInRepeatingProperty
UsingAddRowAndOutputTable_Enterprise
UsingRelationalTables
UsingRelationalTablesToDefineNodeLists
UsingRelationalTablesToDefineTaskResourceLists
UsingTheStipulateStepForNodeLists
UsingTheStipulateStepForResourceAllocation
Decision Logic – Paths
BidirectionalPaths
ChangingQueuesWhenServerFails
CustomRoutingGroup
EntityFollowsSequence
EntityFollowsSequenceMultiple
EntityFollowsSequenceWithTable
EntityStopsOnLink
FindAMinimumStateValue
LogicBasedOnEntityProperty
LogicBasedOnEntityState
ObjectReferenceOnEntity
PathSelectionRule
SelectServerWithShortestLine
ServerBlockingApproaches
ServerWithTransferInConstraints
SimpleElevatorObject
TravelWithSteeringBehavior
VisitAllServersInAnyOrder
VehicleFleetManagement
Decision Logic – Processing
AddAndRemoveServerCapacity
DiscreteLookupTable
CustomRoutingGroup
EntityFollowsSequenceWithTable
FindAMinimumStateValue
InterruptibleOperator
InterruptingAcrossMultipleServers
InterruptingServerWithMultipleCapacity
ObjectReferenceOnEntity
54 / 1277
RemoveFromAllocationQueue
RoutingWithoutPaths
ServerBlockingApproaches
SourceServerSinkApproaches
UsingRelationalTablesToDefineNodeLists
UsingTheStipulateStepForNodeLists
UsingTheStipulateStepForResourceAllocation
WorkersArriveLateToShift
Discrete States
CommunicationBetweenObjects
FindAMinimumStateValue
LogicBasedOnEntityState
StringStates
CommunicationBetweenObjects
VisitAllServersInAnyOrder
UserDefinedListState
WorkersArriveLateToShift
Entity Characteristics
AnimatedPeople
CustomRoutingGroup
DefineEntityProperties
FindAMinimumStateValue
LogicBasedOnEntityState
ObjectReferenceOnEntity
RequestRideFromSameTransporter
SeizingSameResourceFromList
SelectEntityColorFromStringList
SelectEntityTypeFromTable
TurnaroundMethod
VehicleFleetManagement
Failures
MultipleServerFailures
File Management
DbReadWrite
ExcelReadWrite
FileSecurity
WritingToAFile
Flow Library
55 / 1277
FlowConcepts
InfectionPropagationUsingContinuousAndFlow
TankCleanInPlaceTrigger
TrackingTankContentsByProductTypeUsingTableStates
Functions
ExamplesOfFunctions_DynamicObjects
ExamplesOfFunctions_StaticObjects
InfectionPropagationUsingContinuousAndFlow
StringStates
Input Analysis
InputAnalysis
Level States
InfectionPropagationUsingContinuousAndFlow
MassFlowProcessing
SimpleTank
Lookup and Rate Tables
DiscreteLookupTable
LearningCurveWithLookup
SimpleLeastSlackSelectionRule
Materials
InventoryReplenish
ServerWithMaterialConsumption
ServerWithMaterialConsumptionAndReplenish (from Project ServerWithMaterialConsumption)
Movement In Free Space
FreeSpaceMovement
MultiTask Server
DashboardsWithinExperiments
MultiTaskServer_SpecificTime (from Project ServerUsingTaskSequence)
MultiTaskServer_ProcessName (from Project ServerUsingTaskSequence)
MultiTaskServer_Submodel (from Project ServerUsingTaskSequence)
ServersUsingTaskSequenceWithDataTables_FlowLine
ServersUsingTaskSequenceWithDataTables_JobShop
ServersUsingTaskSequenceWithDataTables_LoopbackBranches
ServerUsingTaskSequenceWithWorkers
UsingRelationalTablesToDefineTaskResourceLists
Resources
MultipleServerFailures
ResourceSelectionConcepts
56 / 1277
ResourceStatesWhenOffShift
SelectingResourceFromList
SelectingResourcesAsAGroup
SingleWorkerCompletesProcessAndMovesToNode
UsingRelationalTablesToDefineTaskResourceLists
RPS ( Enterprise)
UsingTheStipulateStepForNodeLists
UsingTheStipulateStepForResourceAllocation
Schedules / Changeovers
ResourceSelectionConcepts
ResourceStatesWhenOffShift
ResourcesWithWorkSchedules
ServerFollowsCapacitySchedule
ServerFollowsDailySchedule
ServerFollowsOddSchedule
WorkerUsesWorkSchedule
WorkerUsesWorkSchedule_InterruptWorkingOffShift
Sequence Tables
ChooseAlternateSequence
EntityFollowsSequence
EntityFollowsSequenceMultiple
EntityFollowsSequenceWithTable
SortingConveyorSystem
UsingRelationalTablesToDefineNodeLists
Supply
InventoryAndMaterials
Vehicles
DynamicallyCreatingVehicles
ElectricVehicle
ExamplesOfFunctions_DynamicObjects
RecordDistanceTraveled
RotatingVehicleExample
SeizingVehicle
SelectSpecificVehicle
SingleVehicleUsage
VehicleDoingSimultaneousLoading
VehicleFinishesAndParksWhenOffShift
VehicleFixedRoute
57 / 1277
VehicleFleetManagement
VehicleMovingBackward
VehiclesPassingOnRoadway
VehicleStopsWhenServerOffShift
VehicleVisitsServiceCenter
VehicleWithVariableRideCapacity
Worker
DashboardsWithinExperiments
MoveASeizedObject
RelationalTablesInRepeatingProperty
RequestRideFromSameTransporter
ServerUsingTaskSequenceWithWorkers
SingleWorkerCompletesProcessAndMovesToNode
TableReferenceInRepeatingProperty
WF_AdditionalResource
WF_Authorization
WorkersArriveLateToShift
WorkerUsedForMultipleTasks
WorkerUsesWorkSchedule
WorkerUsesWorkSchedule_InterruptWorkingOffShift
58 / 1277
Simio Reference Guide
AddAndRemoveServerCapacity - SimBit
Problem:
I would like to make an additional server “active” whenever the current servers have a certain number of entities waiting. In
other words, there are multiple servers and if any server with capacity reaches a “maximum input buffer level”, I want to
“open” a new server.
Categories:
Buffering, Decision Logic -- Processing
Key Concepts:
AssociatedStationLoad, Active Symbol, Add-On Process, Assign Step, Condition Based, Contents, Current Capacity, Decide
Step, InProcess, InputBuffer, Load, Monitor, NodeList, On Exited, Processing, Status Label
Assumption:
Assume that capacity can be added instantaneously with no set-up/transition time.
Technical Approach:
We want the maximum number of entities in a server’s input buffer to be six. When a seventh entity arrives, a new server
should come on-line or be activated. There are monitors that watch all the Server Input Buffers and when the seventh entity
arrives, an event is fired that triggers a process to change the server capacities. When the server has completed processing,
capacity is reduced to zero again until it is needed in the future.
Details for Building the Model:
Simple System Setup
Place a Source, 6 Servers in parallel, and a Sink in the Facility Window.
Name the Servers: a1 through a6.
Connect the Source to each Server and each Server to the Sink with Paths.
Setting Up the Selection Logic
From within the Definitions window, create a Node List that contains the Input Nodes for all 6 Servers.
In the Output@Source1 node, change the Entity Destination Type property to ‘Select From List’ and select the Node
list that was just created.
Set the Selection Goal to ‘Smallest Value’ and use the default Selection Expression
‘Candidate.Node.AssociatedStationLoad’. This expression will select the least congested possible destination. Please
refer to the documentation for more details on the AssociatedStationLoad function.
Set the Selection Condition property to ‘Candidate.Server.CurrentCapacity > 0’. This ensures that Entities do not get
routed to a Server with a capacity of zero.
Creating the Monitor Elements:
In the Definitions window, select the Elements panel and add 5 Monitor elements (we do not need to monitor server
a6).
Set up the properties of each Monitor Elements as follows:
Monitor Type is ‘CrossingStateChange’
State Variable Name is ‘a1.InputBuffer.InProcess’ (or a2, a3,a4, a5)
Threshold Value is ‘6’
Crossing Direction is ‘Positive’
This means that when the Input Buffer threshold value of 6 is crossed in the positive direction (going from 6-7) the
Monitor will be triggered. ( If the Crossing Direction would be ‘Negative’ it would be triggered when it went from 6-
5, which is not what we want to have happen.)
Increasing Server Capacities:
From within the Processes window, create a new Process ( Create Process ribbon button) and rename it
‘UpdateServerCapacities’
59 / 1277
‘UpdateServerCapacities’
Place a single Assign step. Open the Repeating Property Editor in Assignments ( More).
For the first assignment, set the State Variable Name to ‘a6.CurrentCapacity’ and the New Value to
‘( [email protected] > 0 || ((a1.Capacity > 0) && (a2.Capacity > 0) && (a3.Capacity > 0) &&
(a4.Capacity > 0) && (a5.Capacity > 0)))’
Add another assignment: State Variable Name is ‘a5.CurrentCapacity’ and New Value is
‘( [email protected] > 0 || ((a1.Capacity > 0) && (a2.Capacity > 0) && (a3.Capacity > 0) &&
(a4.Capacity > 0)))’
Similarly, add: State Variable Name ‘a4.CurrentCapacity’ with New Value ‘( [email protected] > 0
|| ((a1.Capacity > 0) && (a2.Capacity > 0) && (a3.Capacity > 0)))’
And finally: State Variable Name ‘a3.CurrentCapacity’ and New Value ‘( [email protected] > 0 ||
((a1.Capacity > 0) && (a2.Capacity > 0)))’
These expressions are checking 2 things: (1) If it is processing an Entity, an Entity is waiting to be processed, or an Entity is
routing to be processed, then let it remain operating OR (2) all the Servers before that one are working. Because we used a
logical expression it will return a 1 if true, and a 0 if false – which is what we want to set our capacities to.
Note: It is important that these expressions are in this exact order - descending order. Otherwise, the logic will not evaluate
correctly.
Now that the Process has been created, we have to trigger it – this is done back in the Monitor Element. From the
Definitions window, set the On Change Detected Process to ‘UpdateServerCapacities’ for each Monitor element.
Therefore, once the Monitor is triggered (i.e. when the seventh Entity arrives) it will fire this process, which checks all
of the conditions and then sets the capacities accordingly.
Decreasing Capacities:
From within the Facility window, create a process in a3’s Exited Add-On Process Trigger
From the Processes window, place a Decide step in this new process. Set Decide Type to ‘ConditionBased’ and
Expression to ‘[email protected] == 0’.
On the True segment, place an Assign step. Set the State Variable Name to ‘a3.CurrentCapacity’ and leave the New
Value ‘0.0’.
This process will check to see if there are any entities processing, waiting to be processed, and routing to the server
for processing. If there are not, then it assigns the Server’s capacity to 0.
Repeat this for Servers a4, a5, and a6.
60 / 1277
Simio Reference Guide
AnimatedPeople - SimBit
Problem:
I would like to use animated people (i.e. walking people) and change the animation of the person in the model.
Categories:
Animation, Entity Characteristics
Key Concepts:
Active Symbol, Assign Step, Current Animation Index
Assumption:
This model assumes the user is using the animated people symbols that are available in the Simio Project Symbol library
available with the Simio installation ( Library\People\Animated). To ensure you only get symbols of people that move, click
on the Apply Symbol button. Then change the Action filter to Animated.
Technical Approach:
This model demonstrates how to use the animation features available with some of the animated symbols provided in the
Simio Symbol Library. Once an animated symbol is placed in the Facility window, right click onto the symbol and select List
Animations of Active Symbol to see what options are available for animation of this symbol.
When an entity is selected, there are two properties on the entity which control the animation for the symbol. The Current
Animation Index returns the numeric index or string name of the current animation of the current active symbol. By default,
the value of this property is ‘ModelEntity.Animation’, which is a String State on the ModelEntity object.
The other property on the ModelEntity that controls animation is the Default Animation Action property. This indicates if
and how Simio will animate objects that don’t have an explicit animation set via the Current Animation Index expression.
The possible values for this property are None, Moving and MovingAndIdle. ‘None’ means that no action will be taken.
‘Moving’ indicates actively moving entities will be animated with any available forward movement animations from the
active symbol. ‘MovingAndIdle’ indicates actively moving entity and idle objects will be animated with any available
forward movement or idle animations from the active symbol.
Details for Building the Model:
Simple System Setup
Place four Source objects and four Sink objects. Connect the first three Source objects to the first three Sink objects
with a Path.
Place a TransferNode between Source4 and Sink4 and connect Source4 to the TransferNode with a Path and connect
the TransferNode to Sink4 with a Path.
Randomly Assign Animation Example ( Source1)
Drag an entity into the Facility window from the Project Library. Rename this entity ‘Person1’.
With this entity selected, select one of the Male icons from the Project Symbols drop down menu in the ribbon
(under Library\People\Animated).
With the male entity selected, right click and select List Animations of Active Symbol to see what options are available
for animation of this symbol. Notice the options for “Walk” and “Run”. Click OK to close the window.
Select Source1 and open the Before Exiting Repeat Property Editor window. Click Add and enter the State Variable
Name, ‘ModelEntity.Animation’. Set the New Value to ‘Random.Discrete(“Walk”, .6, “Run”, 1) so that 60% of the
entities will walk and the other 40% will run.
Assign Numeric Value to Current Animation Index Property Example ( Source2)
Place another entity into the Facility window from the Project Library. Rename this entity ‘Person2’.
With this entity selected, select one of the Female icons from the Project Symbols drop down menu in the ribbon.
With the Female entity selected, right click and select List Animations of Active Symbol to see what options are
available for animation of this symbol. Notice that number 13 is “Walk Pushing”. Click OK to close the window.
With the Female entity selected, expand the Animation property category and find the Current Animation Index
property. This property will accept either an expression that returns the numeric index or string name of the current
61 / 1277
property. This property will accept either an expression that returns the numeric index or string name of the current
animation of the active symbol. Put the value of '13' into this property so that the entities will “Walk Pushing”.
Click onto Source2 and change the Entity Type property to ‘Person2’ so that it produces this new entity type.
Simio Determines Animation Based on Speed Example ( Source3)
Place an entity into the Facility window from the Project Library. Rename this entity ‘Person3’.
With this entity selected, select a Male from the Project Symbols drop down menu in the ribbon.
Click onto Source2 and change the Entity Type property to ‘Person3’ so that it produces this new entity type.
With Source3 selected, open the Before Exiting Repeat Property Editor window. Click Add and enter the State
Variable Name, ‘ModelEntity.DesiredSpeed’. Set the New Value to ‘Random.Uniform(.1,3)’ and Units to ‘Meters per
Second’ so that some entities travel slow and others fast. Simio will determine which animation to use, based on the
speed. Notice that some entities will walk, while others will run.
Change the Allow Passing property on the path between the Source and Sink to be 'False', so that slower walking
people cause others to slow down as well.
Change Animation in Logic Example ( Source4)
Select Source4 and open the Before Exiting Repeat Property Editor window. Click Add and enter the State Variable
Name, ‘ModelEntity.Animation’. Set the New Value to ‘Random.Discrete(“Run”, .5, “Dance”, 1) so that 50% of the
entities will run and the other 50% will dance.
Click onto TransferNode1 and create a new State Assignment in the On Entering property.
In the Repeat Group, set the State Variable Name to ‘ModelEntity.Animation’ and the New Value to '“Walk”'. When
the entity enters this TransferNode, it will change from its current animation of “Dance” or “Run” to “Walk”. Note that
you can do this using an Add-On Process Trigger with an Assign step as well.
Embellishments:
Change the active animation to try different options, such as a sitting female symbol or a male symbol that is texting.
*IMPORTANT NOTE: Animation options, such as “Walk”, “Run”, “Dance”, etc. are case-sensitive.
62 / 1277
Simio Reference Guide
AnimatePathDensity - SimBit
Problem:
I would like to animate the travel density of each path by changing the width of each path so that the width is equal to the
percentage of travelers that have traveled this path.
Categories:
Add-On Process Logic, Animation, Building New Objects/Heirarchy
Key Concepts:
Add-On Process, Assign Step, Custom Object, NumberEntered, On Entered, Size.Width, State Assignments
Technical Approach:
The model demonstrates how to animate the travel density of a path by changing the width so that the width is equal to
the percentage of travelers that have traveled this path. The model demonstrates how to do this using the standard Path
object and an Add On Process and also by customizing the Path object and using this subclassed Path to accomplish the
same goal.
The first demonstration contains three standard paths connecting a Source and a Sink object. Each path has a different
value set for its Selection Weight property, indicating the percentage of entities that should travel on each path. Upon
entering each path, the Path.Size.Width state is set to the percentage of travelers that have entered into this Path divided
by the total traffic in the system.
The second demonstration is the same as the first, except that a custom path object is used that contains the width update
inside its own logic instead of having the width updated with an Add On Process in the model.
Enhanced Technical Approach:
Facility Window:
Place a Source object and a Sink object and connect them with three standard Paths.
In the properties window for Path1, under Routing Logic, set Selection Weight to ‘6’.
In the properties window for Path2, under Routing Logic, set Selection Weight to ‘1’.
In the properties window for Path3, under Routing Logic, set Selection Weight to ‘3’.
Definitions Window:
Go to the States panel and create a new Real State named TotalTraffic_Example1.
Processes Window:
Create a new process and name it Path_Entered.
Place an Assign Step and set the State Variable Name to ‘TotalTraffic_Example1’ and the New Value to
‘TotalTraffic_Example1 + 1’
Place another Assign Step. Set the State Variable Name to ‘Path1.Size.Width’ and the New Value to
‘Path1.NumberTravelers.Entered/TotalTraffic_Example1’
Add two more assignments to this Assign Step, assigning the same values to Path2 and Path3. For example:
Path2.Size.Width should be set to ‘Path2.NumberTravelers.Entered/TotalTraffic_Example1’
Facility Window:
Select each Path (hold CTRL and click onto each Path). Under the Add-On Process Triggers property category, enter
the name of the process ( Path_Entered) into the Entered property. Therefore, each time a Modelentity enters any
path, this new process is executed.
To create a custom Path object (functionality not available with Simio Express Edition):
Go to the Definitions Window and create a second Real State, named ‘TotalTraffic_Example2’
In the Facility window, right click onto the Path in the Standard Library and select Subclass.
Click onto the new Path object in the Navigation Window.
Go into the Definitions window of the MyPath object. Go to the Properties panel and create a new State
Property by selecting this from the Standard Property drop down in the Ribbon. Name this new property
63 / 1277
Property by selecting this from the Standard Property drop down in the Ribbon. Name this new property
‘TotalTraffic’.
Go into the Processes window of the MyPath object
Find the OnEntered process and with this selected, click onto Override in the Ribbon to override the default
logic.
Place an Assign Step after the EntityMovementRate Assign Step and before the IfPassingAllowed Decide step.
Set the State Variable Name to ‘TotalTraffic’ and the New Value property to ‘TotalTraffic + 1’
Place another Assign Step after this. Set the State Variable Name to ‘Size.Width’ and the New Value property to
‘NumberTravelers.Entered/TotalTraffic’
When you use this new MyPath object in the main model to build the second example, you will need to put the name
of the state variable ‘TotalTraffic_Example2’ into the State Property on each instance of the MyPath that you place
into the Facility window. This will tell this object which State Variable to update in order to keep track of the total
traffic in this system.
64 / 1277
Simio Reference Guide
AnimatingQueuesWithVehiclesAndWorkers -
SimBit
Problem:
I would like to show entities in different queues based on an expression and match the animation speed of an animated
entity in an attached queue with the Vehicle/Worker.
Categories:
Animation, Data Tables, Entity Characteristics, Vehicles, Worker
Key Concepts:
Animated Symbol, Before Creating Entities, Bidirectional Path, Data Table, Entity Property, Initial Desired Speed, Initial
Node ( Home), Match Attached Animation Speed , ModelEntity, Queue, Queue State, People, Priority, RandomRow, Real
Property, Ride On Transporter, RideStation.Contents Queue, Sink, Source, Symbol, Table Row Referencing, Vehicle, Visibility
Expression, Worker
Technical Approach:
The Vehicle picks up multiple entities and they are shown in different queues based on the Visibility Expression on the
queues. A Worker transports an animated entity, and the animation speed is automatically set to match the Worker’s speed.
Details for Building the Model:
Top Model
Place a Source ( Source1), Sink ( Sink1), and Vehicle ( Vehicle1) on the Facility window.
Use a Path to connect Source1 to Sink1, and use a second path to connect Sink1 to Source1.
Place two ModelEntity instances from the Project Library on the bottom left into the Facility window.
Select DefaultEntity and change its Initial Priority to ‘2’. Leave the other Entity’s Initial Priority as ‘1.0’.
Double click DefaultEntity and change its name it to ‘Red’. Change the other Entity’s name to ‘Blue’.
Select the Red Entity, open the Color dropdown on the Symbol Ribbon and select the Red box. Then click the top of
the Red ModelEntity. Click the Red box in the Color dropdown again and select the side of the Red ModelEntity
(must be in 3D mode to view side - press ‘3’ key). Change the Blue entity’s symbol color to blue.
Open the Data Tab and click Add Data Table ( Table1). Add an Entity Property Column ( Object Reference dropdown)
and a Real Property Column ( Standard Property dropdown). Change the column Name to ‘WhichType’ and
‘HowMuch’, respectively.
In column Which Type input ‘Blue’, ‘Red’ and in column How Much input ‘60’, ‘40’.
On Source1, set Entity Type to ‘Table1.WhichType’. Under Table Row Referencing-> Before Creating Entities set Table
Name to ‘Table1’ and Row Number to ‘Table1.HowMuch.RandomRow’.
On Output@Source1, set Ride On Transporter to ‘True’ and Transporter Name to ‘Vehicle1’.
Select Vehicle1 and change its Initial Ride Capacity to ‘4’, Initial Desired Speed to ‘.5 meters per second’, and Initial
Node (Home) to ‘Input@Sink1’.
Select the Vehicle1 RideStation.Contents queue. Set the Visibility Expression to ‘Candidate.ModelEntity.Priority == 1’.
Select Vehicle1. In the Draw Queue dropdown (in the Symbols Ribbon) select RideStation.Contents. To draw the
queue, click and release in the model space just below the right side of Vehicle1, click and release in the space jest
below the left side of Vehicle1, and then right click to stop drawing the queue.
Select that queue and set the Visibility Expression to ‘Candidate.ModelEntity.Priority == 2’.
To move the queue, first press the ‘3’ key to go to 3D mode. Then select the queue and hold the ‘Shift’ key to move
the queue vertically. Move the queues so both are directly above the vehicle. Press ‘2’ to go back to 2D mode.
Bottom Model
Place a Source ( Source2), Sink ( Sink2), Worker ( Worker1), and ModelEntity on the Facility window.
Connect the Source to the Sink using a Path and set its Type to ‘Bidirectional’.
Select the ModelEntity, then click Apply Symbol in the Symbols Ribbon. Scroll down to the ‘Animated’ categories
and select a person.
65 / 1277
Double click the ModelEntity and rename it to ‘Person’.
On Source2, set Entity Type to ‘Person’ and Interarrival Time to ‘Random.Exponential(3)’.
On Output@Source2, set Ride On Transporter to ‘True’ and Transporter Name to ‘Worker1’.
On Worker1, set Initial Desired Speed to ‘.2 meters per second’ and Initial Node (Home) to ‘Input@Sink2’.
Select Worker1 and click Apply Symbol in the Symbols Ribbon. Scroll down to the ‘Animated’ categories and select a
person.
Select Worker1’s RideStation.Contents queue. Hold the Shift key to lower the queue. Then press the ‘2’ key to switch
to 2D mode. Use the green circle ends of the queue to adjust its placement. By default, the queue option for Match
Attached Animation Speed is turned on. This will cause the entity in the queue to be animated (walking) with the
worker instead of gliding.
66 / 1277
Simio Reference Guide
AppointmentArrivals - SimBit
Problem:
I would like to model arrivals that occur at a specific time, such as scheduled appointments.
Categories:
Arrival Logic
Key Concepts:
Arrival Mode, Arrival Table, Arrival Time Deviation, Data Table, Floor Label, Status Plot
Technical Approach:
Scheduled arrivals are put into a Data Table in a DateTime property column. In this example, appointments are scheduled
every 15 minutes from 8:00am until 4:30pm. The Source object reads the arrival data table to see when to create an entity.
However, since the Source’s Arrival Time Deviation property has a non-zero value, there will be some deviation from when
the entities are actually created from the time listed in the table. This simulates that some people arrive early to their
appointment and some people arrive late. Because the Source’s Arrival No-Show property is set to .05, there is a 5%
chance of each arrival being a no-show, which simulates the scenario when someone doesn’t show up at all for their
scheduled appointment. The plots and floor labels show how the status of the Average Number of entities waiting to be
served and the Average Time that each entity waits to be served.
Details for Building the Model:
Simple System Setup
Click on the Data tab and create a new Data Table by clicking on Add Data Table in the Schema ribbon and name
this new table DailyAppointments. Create a Date Time column by selecting DateTime in the Property drop down in
the Schema ribbon. Name this new column AppointmentTime.
Enter data into the table, beginning at 8:00am on the day the simulation begins and every 15 minutes for the
rest of the day, with the last appointment occurring at 4:30pm.
Place a Source, Server and Sink into the Facility window and connect them with Paths. Alternatively, go to the Project
Home ribbon and select the Source, Server, Sink option from the Actions (under Add-Ins) drop down.
Select the Source object and set the following properties:
Arrival Mode to ‘Arrival Table’
ArrivalTimeProperty to ‘DailyAppointments.AppointmentTime’ – pointing to the DateTime column you
created.
ArrivalTimeDeviation to ‘Random.Uniform(-5,5)’ and the Units to ‘Minutes’
Arrival No-Show Probability to ‘.05’
Select the Server object and set the Processing Time property to ‘Random.Triangular(10, 16, 22)’
Click onto the Run ribbon and change the starting time of the simulation run to be 8:00am and the ending time to be
5:00pm on the same day. The date should match the date that was entered into the Data Table.
Embellishments:
Place a Status Plot that displays statistics of interest, such as the expression
‘Server1.InputBuffer.Contents.AverageNumberWaiting’ or ‘Server1.InputBuffer.Contents.AverageTimeWaiting’.
Arrival Tables can also use a numeric property column that lists the amount of time the arrival should occur after the start
of the simulation run. For example, if the Arrival table had a Numeric column and had the entries of .25, .5, an arrival would
be generated at .25 hours after the start of the simulation run and again at .5 hours after the start of the simulation run. This
is just an alternate way to model scheduled arrivals.
67 / 1277
Simio Reference Guide
BatchingProcessUsingScanOrWaitStepToControlBatchSize
- SimBit
Problem:
I want to model a single server that must process entities in batches. For example, an oven that cures a quantity of arriving
items all at once.
Categories:
Combining and Separating Entities
Key Concepts:
Batching, Scan Step, Wait Step, Monitor, Polled Waiting, Event Driven Waiting
Assumptions:
A system consists of a single server that must process entities in batches. For example, an oven that cures a quantity of
arriving items all at once. The time between entity arrivals to the system is sampled from an exponential distribution,
EXPO(1.1) minutes.
The maximum size of a batch that can be processed depends on the server’s capacity. In this example, that capacity is set
to 10, with a minimum batch size requirement of 8 items before the process can be started. Thus, the processing of the next
batch cannot be started unless there are at least that many entities waiting in the server’s input buffer. The process delay
itself is batch size dependent and is 3 minutes plus 0.6 minutes for each item in the batch. Once processing of a batch is
completed, the individual entities that were processed together then exit the server.
Details for Building the Model:
Facility Window Setup
Add a Source, Server, and Sink to the Facility window. Connect the Source to the Server and the Server to the Sink
using Connector links.
Place a ModelEntity object from the Project Library into the Facility window. The name may be left as ‘DefaultEntity’.
Source Properties
Specify the Interarrival Time as ‘Random.Exponential(1.1)’ minutes.
Server Properties
Specify the Initial Capacity as ‘10’. This is the maximum batch size constraint.
Specify the Processing Time as ‘3 + 0.6 * Server1.Capacity.Allocated’ minutes.
Go to Add-On Process Triggers and create add-on processes to be executed for Run Initialized and Evaluating Seize
Request.
Definitions-> States
Add a global boolean state variable named 'Server1HoldForBatching' (initial value of 'True'). This variable will be
used in conjunction with the server’s Evaluating Seize Request add-on process to indicate whether entities arriving to
the server can currently seize it.
Definitions-> Elements
If using a Wait step approach (event driven waiting) to model the batch size control at the server, then add a Monitor
element to the model named ‘Server1StatusChanged’ that fires an event whenever discrete state changes are
detected for the state variables Server1.AllocationQueue or Server1.ResourceState.
Processes Window -> The server’s Evaluating Seize Request triggered process
Refer to the example model for guidance. The purpose of this process logic is to reject an entity’s attempt to seize
the server (by assigning the executing token’s ReturnValue state to False) if the value of the boolean state variable
Server1HoldForBatching is 'True'.
Processes Window -> The server’s Run Initialized triggered process
Refer to the example model for guidance. The purpose of this process logic is, when the server is initialized, to create
a single control token that waits at either a Scan or Wait step until the minimum acceptable number of entities is
waiting to seize the server and the server is idle. Once that condition is true, the token is released from the Scan or
Wait step and momentarily sets the Server1HoldForBatching flag to 'False' before then executing an Allocate step to
allocate the server’s capacity (up to a maximum of 10). The token then sets the Server1HoldForBatching flag to 'True'
and loops back to the Scan or Wait step to wait until it can start the processing of the next batch.
68 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
69 / 1277
Simio Reference Guide
BidirectionalPaths - SimBit
Problem:
I have bidirectional links in my system, but my entities get stuck at a node trying to get from one link to the other in
opposite directions.
Categories:
Decision Logic -- Paths
Key Concepts:
Allow Passing, BasicNode, Bidirectional Path, Deadlock, Path, Prefer Desired Direction, Traffic Direction Rule
Assumptions:
Entities are able to pass each other at ‘bypass’ areas along various bidirectional paths.
Technical Approach:
The path network is set up with multiple bidirectional paths. The paths are separated at various points along the path with
a small triangle of unidirectional paths so that entities may sit/wait for passing in the opposite direction to occur.
Details for Building the Model:
Simple System Setup
Place a Source ( Source1) and Sink ( Sink1) at the left and right sides, respectively, of the Facility window.
Then, place a second Source ( Source2) at the right side, below Sink1. Place a second Sink ( Sink2) on the left, below
Source1.
Place two ModelEntity objects. Change the names to 'Red' and 'Green' and change the symbol color of Red to match
the name. Change Entity Type of Source1 to ‘Green’ and Entity Type of Source2 to ‘Red’.
Specifying the Destination Locations
Within Source1’s output node ( Output@Source1), change the Entity Destination Type to ‘Specific’ and the Node
Name to ‘Input@Sink1’. Similarly, within Source2’s output node ( Output@Source2), change the Entity Destination
Type to ‘Specific’ and the Node Name to ‘Input@Sink2’. These destinations need to be specified because with the
network of paths, the option ‘Continue’ for Entity Destination Type could cause entities to continually loop around the
paths.
Adding Nodes, Paths and a Bidirectional Path
Place a BasicNode1 to the right of Source1/Sink1. Place a second BasicNode2 to the left of Source2/Sink2.
Using Paths, connect Source1 to BasicNode1 and Source2 to BasicNode2. Then connect BasicNode1 to Sink1 and
BasicNode2 to Sink2. For the Paths connecting the Sources to the BasicNodes, set Allow Passing to ‘False’.
Add a path connecting BasicNode1 and BasicNode2. Change the path’s Type to ‘Bidirectional’, Allow Passing to
‘False’ and Speed Limit to ‘.1’.
Positioning the Nodes
Place 6 basic nodes in the middle of the Facility window between the Source1/Sink2 and Sink1/Source2. BasicNode1
and BasicNode2 are closest to the Sources/Sinks, while two are near each other about 1/3 of the way between
BasicNode1 and BasicNode2. The other two are near each other about 2/3 of the way between BaasicNode1 and
BasicNode2. See the diagram below for placement.
71 / 1277
Simio Reference Guide
ChangingQueuesWhenServerFails - SimBit
Problem:
A system consists of two parallel servers. If one of the servers fails, then entities waiting to get processed at that server are
redirected to the other server if that server is operational.
Categories:
Buffering
Key Concepts:
Buffer Logic, Balking, Reneging, Jockeying, Reliability Logic, Failure, Processing Count Based
Technical Approach:
Balking and reneging behavior is specified for the input buffer of each server. An arriving entity balks entering the input
buffer of a server if the server is currently failed and the other server is operational. The balked entity is then redirected to
the operational server. Also, if a server fails, then any entities already waiting in its input buffer are automatically removed
from the queue (reneged) and redirected to the other server if that server is operational.
Details for Building the Model:
Facility Window Setup
Add a Source, two Servers, and a Sink from the Standard Library. Connect the Source to each of the Servers and the
Servers to the Sink using Paths. Place a BasicNode next to each Server. Connect the BasicNode at Server1 to the
input node at Server2 and the BasicNode at Server2 to the input node at Server1 using Paths.
For Server1, go to Reliability Logic and specify the server’s Failure Type as 'Processing Count Based', the Count
Between Failures as 'Random.Uniform(20,30)' and the Time To Repair as 'Random.Uniform(5,10)' minutes.
For Server2, go to Reliability Logic and specify the server’s Failure Type as 'Processing Count Based', the Count
Between Failures as 'Random.Uniform(30,45)' and the Time To Repair as 'Random.Triangular(5,10,15)' minutes.
For Server1, go to Buffer Logic -> Input Buffer -> Balking & Reneging Options and specify the Balk Decision Type as
'Conditional'. Specify the Balk Condition Or Probability as 'Server1.Failure.Active && !Server2.Failure.Active'. This will
cause an arriving entity to balk entering the input buffer of Server1 if that server is failed but Server2 is operational.
Send balked entities to the Balk Node Name that redirects them to Server2. Then open the Renege Triggers repeat
group and add event-based triggers that will remove entities waiting in Server1’s input buffer and redirect them to
Server2 if Server1 is failed but Server2 is operational. Refer to the example model for guidance on specifying the
renege trigger properties.
For Server2, go to Buffer Logic -> Input Buffer -> Balking & Reneging Options and specify similar balking and
reneging behavior that was described above for the input buffer of Server1. Refer to the example model for
guidance on specifying the renege trigger properties.
Place a ModelEntity instance from the Project Library and add an additional symbol from the Symbols ribbon. Select
the new symbol (value 1) and change the color from the default green to red.
For both Server1 and Server2, go to State Assignments and open the On Balking and On Reneging repeat groups.
Assign the ModelEntity.Picture of an entity that is balking at entering or reneging from the input buffer of the server
to the value '1' (i.e., the red colored symbol). Refer to the example model for any further guidance on specifying
these animation related state assignments.
Defining the Node Selection List from the Source
Within the Definitions window, select the Lists panel. Create a Node list named 'ServerNodeList' and add
'Input@Server1' and 'Input@Server2' to the list.
Go back to the Facility window and change the Source’s Interarrival Time to 'Random.Exponential(.15)' and Maximum
Arrivals ( Stopping Conditions section) to '200'.
For the Source’s output node, change the Entity Destination Type to 'Select From List', the Node List Name to
'ServerNodeList', and the Selection Condition to '!Candidate.Server.Failure.Active'. This will send new entities created
by the Source to the first of the parallel servers that is not currently failed.
See also:
72 / 1277
ServerQueueWithBalkingAndReneging.spfx
73 / 1277
Simio Reference Guide
CheckingNextEntityAheadOnLink - SimBit
Problem:
I want to know the traffic that is in-front of an entity on a link.
Categories:
Add-On Process Logic
Key Concepts:
Add-On Process, Decide Step, Delay Step, Floor Label, NextEntityAheadOnLink, Path, TransferNode
Technical Approach:
A process is created which triggers when an entity enters a path. In the process, entity is delayed to maintain the desired
fixed distance from the next entity ahead of it on the link. A floor label is used to display information on the ModelEntity.
Details for Building the Model:
Simple System Setup
Add a Source, TransferNode and Sink from the Standard Library. Connect the Source to TransferNode and
TransferNode to Sink using Paths.
In the Properties window for Path2, under Add-On Process Triggers, click Entered and select ‘[ Create New]’. This will
create a new process named Path2_Entered within the Processes window.
Place an instance of ModelEntity from the Project Library named ‘DefaultEntity’. Highlight the Entity and attach a
Floor Label from the Symbols ribbon. Edit the Floor Label from the Appearance ribbon. Add ‘Entity { ID } is following
{ NextEntityAheadOnLink} at { NetworkDistanceTo.NextEntityAheadOnLink}’ as Label Text.
Defining the Process
Under Path2_Entered, add a Decide step into the process. Set the Decide Type to ‘ConditionBased’ and Expression to
‘ModelEntity.NetworkDistanceTo.NextEntityAheadOnLink < 10 & &
ModelEntity.NetworkDistanceTo.NextEntityAheadOnLink != 0’.This will evaluate the entity, if any, in front of the
current entity and will return a ‘True’ if the distance is less than 10 (meters, which is the default distance units).
From the Decide step’s True exit, add a Delay Step with the Delay Time of ‘2’ and Units of ‘Seconds’. The Delay step
should then connect back to the Decide step for re-evaluation.
74 / 1277
Simio Reference Guide
ChooseAlternateSequence - SimBit
Problem:
I have a model that normally process parts in the sequence Server1, Server2, Server3, Inspect, Sink but based on the result
of the inspection, it sometimes must be diverted to Adjust and then restart at Server2.
Categories:
Add-On Process Logic, Sequence Tables
Key Concepts:
Sequence Table, By Sequence, Entity Destination Type, Add-On Process, SetRow Step
Assumption:
The source produces one type of entity. The entity will follow a primary sequence of: Source – Server1 – Server2 – Server3
– Inspect – Sink.
But if it fails inspection (30% of the time) it will divert to an alternate sequence of Adjust and then resume its normal
sequence from Server2.
Technical Approach:
Separate Sequence Tables are created for the entity to follow its normal sequence and sometimes divert to another route.
We will create one main sequence table which is identical to the first sequence specified above. We will create an
additional sequence to switch to if the entity fails and has to go to the Adjust server. In order to make decisions at the
inspection, add-on processes will be created.
Details for Building the Model:
Simple System Setup
Place a Source and a Sink in the Facility window. In between them, place four Servers that are relatively next to each
other and place Server5 parallel to Server4.
Connect an Output Node of Source to an Input Node of Server1, an Output Node of Server1 to an Input Node of
Server2, an Output Node of Server2 to an Input Node of Server3, an Output Node of Server3 to an Input Node of
Server4, and an Output Node of Server4 to the Sink with a Path. An Output Node of Server 4 to an Input Node of
Server5 and an Output Node of Server 5 to an Input Node of Server2 must be connected with a Path also.
Rename Server4 to Inspect and Server5 to Adjust. Place one Model Entity object in a Facility window. Rename Model
Entity to ‘Part’.
Setting up the Sequence Tables
In the Data Window, select the Tables panel and add two Sequence Tables. Name them ‘NormalSequence’ and
‘AdjustmentSequence’.
For the NormalSequence, set the following sequence: Input@Server1 – Input@Server2 – Input@Server3 –
Input@Inspect – Input@Sink1
For the AdjustmentSequence, set the sequence: Input@Adjust.
Setting up Add-On Process
In the Facility window, by clicking Inspect object and under Add-On Process Triggers by double clicking After
Processing, a process will be created by default in a Processes window.
Repeat these steps with Adjust object in order to create After Processing Add-On Process as well.
Setting up Process Logic
In a Processes Window in the Inspect_AfterProcessing process, place a Decide step to represent the inspection and
the likelihood of passing. Change its Decide Type is going to be ‘ProbabilityBased’ with Expression set to ‘0.7’. The
True exit represents “Passed” and requires no action – we will leave that unchanged. The False exit represents “Failed”
and requires using SetRow step to change to an alternate Sequence (set Table Name to ‘AdjustmentSequence’ and
leave Row Number at its default (the start of the sequence)). Here we have also added an Assign step to set the
ModelEntity.Picture to ‘1’ so we can identify it as a red failed part in the model.
75 / 1277
ModelEntity.Picture to ‘1’ so we can identify it as a red failed part in the model.
In the Adjust_AfterProcessing process, we need to restore the part to its normal look and processing. Place SetRow
step with Table Name of ‘NormalSequence’. Set the Row Number to ‘2’ to allow entity to resume with Server2 object
and follow its normal sequence. Also add an Assign step to set the ModelEntity.Picture back to ‘0’ so it will again be
green.
Finalizing the Model
Change the Initial Sequence of the Entity to ‘NormalSequence’.
Add Additional Symbol to the entity and color it red.
Change the Interarrival Time on the Source to ‘Random.Exponential(.3)’ to give a more balanced system.
76 / 1277
Simio Reference Guide
CombineMatchingMembers - SimBit
Problem:
I want to batch multiple entities together for subsequent processing. Only entities with identical state values can be
batched together.
Categories:
Combining and Separating Entities
Key Concepts:
BatchMembers Queue, Combiner, Matching Rule, MemberInputBuffer, ModelEntity, ParentInputBuffer, Priority, Queue
Assumptions:
We will batch 4 parts together into each container and as many as 5 batches can be worked on concurrently.
Technical Approach:
Use the existing state named ‘ModelEntity.Priority’ and use an Add-On Process in the Source to assign it. Use a Combiner
of capacity 5 to do the batching of 4 Parts into a Container.
Details for Building the Model:
Simple System Setup
Add two Sources, a Combiner, a Server and a Sink to the Facility Window.
Connect the Sources to the Combiner, the Combiner to the Server and Server to the Sink with Paths.
Adding Multiple Entity Types
Drag two ModelEntity objects from the Project Library into the Facility Window and change the Name of each.
Specify two different entity types, ‘Parts’ and ‘Containers’.
Designate each Source object to generate a different part type by changing the Entity Type property on one to be
‘Parts’ and the other to be ‘Containers’.
Changing the Entity Priority
Within the ‘Parts’ Source object , enter the State Assignments, Before Exiting repeating editor and add a State Variable
Name ‘ModelEntity.Priority’ with a New Value of 1 or 2 using the ‘Random.Discrete( 1, .5, 2, 1)’ distribution function.
Using the Combiner
The Combiner is batching four members ( Parts) to one parent ( Container) and only batches members together that
have matching priority value (e.g. each batch will have either four entities with priority of 1 or four entities with
priority of 2). This is done by specifying the Batch Quantity to ‘4’, Matching Rule to ‘Match Members’ and Member
Match Expression to ‘ModelEntity.Priority’.
As mentioned in Assumptions, the Combiner has a Capacity of ‘5’, meaning up to 5 batches may be processing at a
time, with Processing Time set to ‘Random.Uniform(1,5)’.
Enhancing the Animation
Move the queue that displays parents waiting for a match.
Add a queue that displays members waiting for a match by selecting a Detached Queue from the Drawing tab and
changing the Queue State to ‘Combiner1.MemberInputBuffer.Contents’.
77 / 1277
Simio Reference Guide
CombineMultipleEntityTypesOntoPallets -
SimBit
Problem:
Use a Combiner object to pack quantities of multiple entity types onto pallets.
Categories:
Combining and Separating Entities
Key Concepts:
Combiner, Batch Quantity, Matching Rule
Assumptions:
The following quantities and entity types are required to be packed onto each pallet:
Once the target batch quantities have been collected and placed on a pallet, a processing time of
Random.Triangular(.1,.2,.3) minutes is required to finish the packing process.
Technical Approach:
A Combiner object is used to collect the required batch quantities and attach the member entities to parent pallet entities.
Details for Building the Model:
Simple System Setup
Place 5 Sources, 1 Combiner, and 1 Sink in the Facility window.
Place 5 ModelEntity objects into the Facility window, one next to each Source.
Use Paths to connect Source1 to the ParentInput@Combiner, the 4 other Sources to the MemberInput@Combiner,
and the Combiner to the Sink.
Rename the Entities: ‘Pallet’, ‘A’, ‘B’,’C’, and ‘D’.
Change Entity Type of Source1 to ‘Pallet’ and Entity Type of the other Sources to ‘A’, ‘B’, ‘C’, ‘D’ respectively, so each
entity type is created by a different Source.
For Source1 that is creating the pallet entities, specify the Arrival Modee as 'On Event', Initial Number Entities as '1',
and the Triggering Event Name as '[email protected]'. This will cause the source to automatically create a
new pallet whenever the previous pallet has left the combiner.
Select the Pallet entity, and in the Symbol ribbon, click the Draw Queue drop down and select BatchMembers. Click
near the Pallet entity, then click somewhere else to create the queue. Right-click to end queue building. Make it long
enough to show 7 entities.
Mutli-select Entities A—D by holding Ctrl when selecting the entities. Then change the Dynamic Label Text to
‘ModelEntity.EntityType.Name’.
Combiner Setup
In the Batching Logic properties, specify the following Batch Quantity and Matching Rule information:
78 / 1277
Then, in the Process Logic properties, specify ''Random.Triangular(.1,.2,.3)' minutes as the Processing Time.
Embellishments:
Change the symbol or color of each Entity Type.
Change the arrival rates at the member entity Sources to see how that affects queue length in the member input buffer of
the Combiner.
79 / 1277
Simio Reference Guide
CombinerNode - SimBit
Problem:
I want to create a user-defined node that can batch entities based on entity priority.
Categories:
Building New Objects / Hierarchy, Combining and Separating Entities
Key Concepts:
Batch Step, BatchLogic Element, BatchMembers Queue, Expression Property, Decide Step, Discrete State, EndTransfer
Step, Node Class, OnEntered, OnEnteredParking, Path, Park Step, Search Step, State Variable, Station Element, Transfer
Step, UnPark Step
Technical Approach:
A node object is created that has process logic which stops entities at the node to batch them into the user-defined Batch
Size and then sends them out through the node. The process logic first checks if the entity needs to be batched. If so, the
entity is transferred to the ParkingStation until the batch is complete. If a parent already exists in the batch logic for that
priority, the entity becomes a member. After all the members of the batch arrive, the batched entity is transferred from the
ParkingStation back to the beginning of the node process. Since the entity is batched, the batched entity is transferred to
the outbound link.
Details for Building the Model:
Creating the Node Object and Defining the Properties, States and Elements
On Project Home ribbon, click the New Model dropdown list and select Node Class. A new Node will be created in
the Navigation window.
In the Node Model Properties (right click on the object and select Properties), change the Model Name to
'CombinerNode'.
In the Definitions Window, select Properties window. From the Standard Property list, select Expression. In the
Properties window, change the Name to ‘BatchSize’, set Default Value as ‘2’, Display Name to ‘Batch Size’, Category
Name to ‘Process Logic’, and Description to ‘Total number in group, including parent.’
Click Properties ( Inherited). Select CapacityType. Change Visible to ‘False’. Also do this for InitialCapacity,
WorkSchedule, RankingRule, and DynamicSelectionRule. Changing the visibility will hide these properties in the
CombinerNode Properties window since we will not be using them.
Click the States button on the Definitions panel, and select Real from the States ribbon to add a new state. Change
the Name to ‘Batched’ and the Initial State Value to ‘0’.
Select the Elements button from the Definitions panel, and add a BatchLogic element from the Elements ribbon. Set
Batch Quantity to ‘BatchSize – 1’. BatchSize typically represents the number of ‘member’ entities to batch with a
single parent entity. Set Matching Rule to ‘MatchMembersAndParent’, Member Match Expression to
‘ModelEntity.Priority’, and Parent Match Expression to ‘ModelEntity.Priority’.
Creating Process Logic for the CombinerNode
In the Processes window, click Select Process and select OnEntered.
Add the following steps in order to the OnEntered process: Decide, Park, Search, Decide, Batch, Assign and UnPark.
Batch, Park, and UnPark are under All Steps.
Select the first Decide Step; set Decide Type to ‘ConditionBased’ and Expression to ‘Batched==0’. When all entities
first enter the node, this condition will be true and they will continue out the True exit (you will see shortly when the
condition will be false).
The Park step is used so that entities will sit and graphically wait at the node until the batch is made (otherwise, they
will be shown at the node on top of each other). No property changes are necessary for this step.
Set the Search step Collection Type to ‘QueueState’, Queue State Name to ‘BatchLogic1.ParentQueue’, Match
Condition to ‘ModelEntity.Priority==Candidate.ModelEntity.Priority’, Search Expression to ‘1’. This step is used to
determine if there is already a ‘parent’ entity (one entity of that same priority value). The value of the Search
Expression is returned in the Token.ReturnValue for the process. If no items are found (no parent yet), the return value
will be 0.
80 / 1277
For the second Decide step, set Decide Type to ‘ConditionBased’ and Expression to ‘Token.ReturnValue<1’ to check
the above returned information.
Within the Batch step, set Batch Logic Name to ‘BatchLogic1’ and Category to ‘Parent’.
Set the Assign step State Variable Name to ‘Batched’ and New Value to ‘1’.
The UnPark step is used once the batch is made to move the newly batched entity from the parking area of the
station (the entity then goes back ’into’ the node and goes through the OnEntered process, which is why we set the
Batched variable to 1, so that newly batched entities will exit the False exit of the Decide step, as shown below).
Add an Assign step to the False branch of the first Decide step. Set the State Variable Name to ‘Batched’ and New
Value to ‘0’.
Add a Transfer step after the Assign step; set From to ‘CurrentNode’ and To as ‘OutboundLink’. This will cause only
newly batched entities to leave the node on the outbound link.
Add a Batch step to the False branch of the second Decide step. Set Batch Logic Name to ‘BatchLogic1’ and
Category to ‘Member’. All entities except the first entering ‘parent’ will go here and be batched with the parent entity.
Click on Select Process on the Process ribbon and select OnEnteredParking. Add an EndTransfer step so that when
the entities are parked, their transfer into the parking station is complete.
Simple System Setup
Click Model in the Navigation window. Add two Sources and a Sink from Standard Library. From the Project library
(below Standard and Flow Libraries on the left), place a CombinerNode in the Facility window. Connect the Sources
to the CombinerNode and the CombinerNode to the Sink using Paths.
Place two instances of ModelEntity from the Project Library. Select one Entity instance and in the Symbol ribbon,
click Draw Queue and select BatchMembers. Draw a line near the Entity and do the same for the other Entity. Set
one entity's Initial Priority to ‘1’ and the other's Initial Priority to ‘2’. Select one entity, click the Color dropdown in the
Symbols Ribbon, select Red, and click the top of the entity.
Set Source1 Entity Type to ‘DefaultEntity’ and Source2 Entity Type to ‘ModelEntity1’.
Select the CombinerNode and set Batch Size to ‘5’.
81 / 1277
Simio Reference Guide
CombinerReleasingBatchEarly - SimBit
Problem:
Use Combiner to pack items onto pallets, but with a max wait time to collect the full batch quantity. A pallet is released
early with a batch quantity less than the target quantity if the max wait time expires.
Categories:
Combining and Separating Entities
Key Concepts:
Combiner, Batch Quantity, Release Batch Early Triggers
Assumptions:
At the Combiner, a target quantity of 5 items is to be packed onto each pallet, but with a max wait time of 1 minute to
collect the full batch quantity. If the max wait time expires, then a pallet is released early with whatever batch quantity was
collected during the waiting time.
Technical Approach:
A Combiner object is used to collect the required batch quantities and attach the member entities to parent pallet entities.
Details for Building the Model:
Simple System Setup
Place 2 Sources, 1 Combiner and 1 Sink in the Facility window.
Place 2 ModelEntity objects into the Facility window, one next to each Source.
Use Paths to connect Source1 to the ParentInput@Combiner1 and Source2 to MemberInput@Combiner1, as well as
to connect the Combiner’s output node to the input node of the Sink.
Rename the ModelEntity objects: ‘Pallet’ and ‘Item’.
Change Entity Type of Source1 to ‘Pallet’ and Entity Type of Source2 to ‘Item’.
For Source1 that is creating the pallet entities, specify the Arrival Mode as ‘On Event’, Initial Number Entities as ‘1’, and
the Triggering Event Name as ‘[email protected]’. This will cause the Source to automatically create a new
pallet whenever the previous pallet has left the Combiner.
Select the Pallet entity, and in the Symbols ribbon, click Apply Symbol and select the Pallet symbol to make the entity
look like a pallet. Then click the Draw Queue drop down and select BatchMembers. Click near the Pallet entity, then
click somewhere else to create the queue. Right-click to end queue building. Make it long enough to show 5 entities.
Combiner Setup
In the Batching Logic properties, specify the Batch Quantity as ‘5’.
Got to the Batching Logic -> Other Batching Options -> Release Batch Early Triggers repeat group and add a time-
based trigger with a Wait Duration of ‘1’ minute.
82 / 1277
Simio Reference Guide
CombineThenSeparate - SimBit
Problem:
I have two different entity types entering the system. I need to batch them together, process the combined batch and then
un-batch them before exiting the system.
Categories:
Combining and Separating Entities
Key Concepts:
Combiner, Separation Mode, Separator, Split Batch
Assumptions:
Parts are batched, then processed through a Server and then separated.
Technical Approach:
Two sources create the two different entity types and then lead into a Combiner object that batches two entities together.
The batched entities are processed by a Server and then sent to a Separator to be un-batched again before exiting the
system.
Details for Building the Model:
Simple System Setup
Place two Sources in the Facility Window. Also place a Combiner, a Server, a Separator and two Sinks into the
Facility Window.
Connect the Sources to the Combiner, the Combiner to the Server, the Server to the Separator and the Separator to
each Sink using a Path.
Defining Multiple Entity Types
Place two ModelEntity objects into the Facility Window by dragging them from Project Library window. Change the
Name property to ‘Entity1’ and ‘Entity2’, respectively.
Within each Source, change the Entity Type property to generate either ‘Entity1’ or ‘Entity2’.
Using the Combiner
The Combiner Batch Quantity should be set to ‘1’ so that the entity at the Parent input node waits for 1 entity at the
Member input node and then batches together.
Separating Entities
The Separation Mode property in the Separator object is set to ‘Split Batch’ and the Split Quantity is set to ‘1’.
Embellishments:
The same requirements could be modeled without a Server object. The processing time of the Server from the above
approach could instead be put in the Processing Time of the Combiner object.
83 / 1277
Simio Reference Guide
CommunicationBetweenObjects - SimBit
Problem:
One object wants to “watch” another’s behavior and react to it.
Categories:
Building New Objects / Hierarchy, Discrete States
Key Concepts:
Assign Step, ContinueProcess, Monitor, Process Triggering Event, Real State Variable, State Property, Status Label, Timer
Element
Assumptions:
We have two fixed objects (the Subject and the Observer), each of which has a state ( SubjectRate and ObserverRate). The
Subject changes SubjectRate randomly. The Observer wants to change ObserverRate to match SubjectRate.
Technical Approach:
Both of the two fixed objects are process models (e.g. no facility logic or objects). The Observer is defined with a State
Property, ObserverRate, that allows a State Property from another object, SubjectRate, to be passed in. The Observer then
uses that state property for both setting up a monitor and getting the value for ObserverRate.
Details for Building the Model:
Defining the Subject
Define a new fixed object Subject with a discrete state variable with Name ‘SubjectRate’.
In the Definitions Window, within the Elements panel, add a Timer element with Name ‘Timer1’ to fire an event with
Interval of ‘1’ hour.
In the Processes Window, add a process with Name ‘SubjectUpdatesValue’ whose Triggering Event is ‘Timer1.Event’.
Add an Assign step where the State Variable Name is ‘SubjectRate’ and the New Value is ‘Random.Triangular( 0, 1, 2)’.
Defining the Observer
Define a new fixed object Observer with a discrete state variable with Name ‘ObserverRate’.
In the Definitions Tab of Observer, select the Properties panel and add a State Property with Name ‘SubjectRate’.
This will allow the value of this property, when placed in a Facility Window of a model, to be assigned to the
SubjectRate of the Subject.
In the Definitions Window, within the Elements tab, add a Monitor element to fire a process when the State Variable
Name ‘SubjectRate’ changes.
In the Processes Window, add a process with Name ‘ObserverFollowsSubject’ whose Triggering Event is
‘Monitor1.Event’.
Add an Assign step where the State Variable Name is ‘ObserverRate’ and the New Value is ‘SubjectRate’.
Defining a new model and using Subject and Observer objects
Open a new model and place one Subject and one Observer within the Facility Window.
In the properties window for the Observer, enter ‘Subject1.SubjectRate’ in the SubjectRate property.
Discussion:
If you watch the trace you will see that every hour the following sequence will occur:
Timer1 triggers an event which triggers the process SubjectUpdatesValue
SubjectRate changes value which triggers the monitor on SubjectRate
The monitor triggers the process ObserverFollowsSubject
ObserverRate changes value to match SubjectRate
85 / 1277
Simio Reference Guide
Conwip - SimBit
Problem:
I would like to model a CONWIP system (constant level of WIP). The system should begin with 10 entities in the system
and as soon as one entity leaves the system, another should arrive.
Categories:
Buffering, Data Tables
Key Concepts:
Create Step, Data Table, Limit, Numeric Property, OnRun Initialized Process, Real State Variable, Search Step, Source,
Status Label, Table Station Element Property, Transfer Step
Assumptions:
This model contains 5 servers and the initial 10 entities are placed evenly at each server(i.e. 2 entities at each Server to
begin). When a new entity arrives, it will be randomly sent to one of the 5 servers.
Technical Approach:
Upon initialization, the model looks in a Data table to find any initial WIP that should exist in the system and It creates
those entities and transfers them to the appropriate station. The Source is set to create an arrival whenever an entity enters
the Sink.
Details for Building the Model:
Simple System Setup
Place a Source and a Sink into the Facility window. Also place a Model Entity from the Project Library into the
Facility window, which will be called DefaultEntity.
Place 5 Servers in between the Server and Sink. These Servers are in parallel.
Connect everything with Paths.
Click on the Source object and set the Arrival Mode property to ‘OnEvent’. Set the Event Name property to
‘[email protected]’. This tells the Source object to only produce arrivals when the event [email protected]
occurs. This creates a pull system where arrivals occur whenever an entity enters the Sink is about to exit the system.
Create Data Table
The Data Table will contain the number of entities that should be in the system upon initialization and where they
should be located.
Go to the Data window and click the Add Data Table icon in the ribbon to add a new table.
Add a column that is an Integer property by selecting Integer property from the Standard Property drop down in the
ribbon. The column can be renamed to InitialWIP.
Add another column that is a Station property by selecting Station from the Element Reference drop down in the
ribbon. The column can be renamed to Station.
Populate this table by putting the value of 2 in each row of the first column and then selecting Server1.InputBuffer for
the first row, Server2.InputBuffer for the second row, etc – for the second column.
Add Process Logic
From within the Processes window, create a new process by selecting OnRunInitialized from the Select Process drop
down in the ribbon.
Place a Search step into this process, followed by a Create step in the Found segment of the Search Step, and
finally, a Transfer step in the Created segment of the Create step.
In the Search step, set the Collection Type property to ‘TableRows’ and select the name of the Data Table that
you created above. Within the Advanced Options section of the Search step, change the value ‘1’ in the Limit
property to 'Infinity'. This will allow the Search to find all rows in the table.
In the Create step, the Create Type property should be set to ‘NewObject’ and the Object Instance Name should
be set to ‘Default Entity’. The Number of Objects property should be set to ‘InitialWIP.InitialWIP’, where
InitialWIP is the name of the Data Table and InitialWIP is the name of the Integer column in the Data Table.
86 / 1277
This tells the Create Step to create the number of entities that are listed in the Integer column of the Data
This tells the Create Step to create the number of entities that are listed in the Integer column of the Data
Table.
In the Transfer step, set From to ‘FreeSpace’ (since entities are created in Free Space by default) and the To
property to ‘Station’. The Station Name property should be set to ‘InitialWIP.Station’, where InitialWIP is the
name of the Data Table and Station is the name of the Station property in the table.
Embellishments:
If you would like to see the current number of entities in the system, you can add a Status Label to the Facility window and
set the expression to DefaultEntity.Population.NumberInSystem.
87 / 1277
Simio Reference Guide
CustomRoutingGroup - SimBit
Problem:
I would like arriving entities from two different locations to select between servers based on the closest server available.
Entities from one of the sources have priority over the other, however, when a busy server becomes available.
Categories:
Decision Logic – Paths, Decision Logic - Processing, Entity Characteristics
Key Concepts:
Buffer Capacity, Entity Destination Type, InputBuffer, Lists, NodeList, Picture, Priority, RoutingGroup Element, State
Assignments
Technical Approach:
In this example, we will have two Sources feeding entities into one of three Servers. The buffer capacities of the Servers are
zero, so entities will wait at the Sources to proceed forward. To ensure that entities from the Source1 object have priority
over those from Source2, we will create a custom RoutingGroup that both Sources will reference. The RoutingGroup will
have a Route Request Ranking Rule of ‘Smallest Value First’ based on the entity priority value.
Details for Building the Model:
Simple System Setup
Place two Sources, three Servers and a Sink. Connect each of the Sources to each of the Servers with Paths (6 paths),
then connect each of the 3 Servers to the Sink.
Place a ModelEntity from the Project Library into the Facility window. While the entity is highlighted, click on the
Add Additional Symbol button to add a symbol. Change the symbol for the value 1 to be the color blue.
Create Node List and Routing Group Element
From within the Definitions window, click on the Lists panel and add a Node type list ( NodeList1) to include the
three Servers – Input@Server1, Input@Server2, Input@Server3.
Also from within the Definitions window, click on the Elements panel and add a RoutingGroup element named
'RoutingGroup1'. Specify the Node List Name to be ‘NodeList1’. Under the Advanced Options, change the Route
Request Ranking Rule to be ‘Smallest Value First’ and the Route Request Ranking Expression leave as ‘Entity.Priority’.
When multiple entities are waiting to move from this routing group, they will be ranked based on their priority
instead of first in first out.
Editing the Source Objects
Within each of the Sources, change the Interarrival Time to ‘Random.Exponential(0.18)’ minutes.
Within Source1, add State Assignments of State Variable Name ‘ModelEntity.Picture’ to ‘0’ and State Variable Name
‘ModelEntity.Priority’ to ‘1’.
Within Source2, add State Assignments of State Variable Name ‘ModelEntity.Picture’ to ‘1’ and State Variable Name
‘ModelEntity.Priority to ‘2’.
Within the output TransferNode of each of the Sources, change the Entity Destination Type to ‘Use Custom Routing
Group’. Specify the Routing Group Name as ‘RoutingGroup1’. Change the Selection Goal to ‘Smallest Distance’.
Note that by using the same RoutingGroup element for both Source objects, if an entity has to wait for a Server
object to become available, the entities from BOTH Source objects are evaluated together and will be ranked based
on their priority values. Therefore, waiting entities from Source1 (green color) will move to a Server before waiting
entities at Source2 (blue color).
Editing the Server Objects
Within each of the Servers, change the Input Buffer under Buffer Capacities to ‘0’. Therefore, no entities will wait at
the Server for processing; they will wait at the Source objects. This is because of the buffer capacity in conjunction
with the Blocked Destination Rule at the Source output nodes as ‘Select Available Only’.
88 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
89 / 1277
Simio Reference Guide
CustomUnbatching - SimBit
Problem:
I have two entity types ( P1 and P2) batched to a parent entity type ( Crate). I need to unbatch the P2 entities, change their
dimensions and send them to a different sink.
Categories:
Add-On Process Logic, Combining and Separating Entities
Key Concepts:
Add-On Process, Assign Step, Combiner, Decide Step, Match Condition, Priority, Selection Weight, Sink, Source,
TransferNode, Transfer Step, UnBatch Step
Technical Approach:
A mix of five P1 and P2 entities are batched to the Crate entity at the Combiner. When the batched entities reach
TransferNode1, the P2 entities are unbatched, transferred to TansferNode1 from Free Space, and resized using Add-On
Process logic. Then the P2 entities are sent to a separate Sink using Path Selection Weight.
Details for Building the Model:
Simple System Setup
Place three Sources in the Facility window. Also place a Combiner, a TransferNode and two Sinks into the Facility
window.
Using Paths, connect Source1 to the ParentInput@Combiner1 node. Connect Source2 and Source3 to the
MemeberInput@Combiner1 node. Then connect the Combiner to the TransferNode and the TransferNode to both
Sinks.
Place three ModelEntity objects into the Facility window from Project Library window. Change the ModelEntity
Name to ‘Crate’, ‘P1’ and ‘P2’, respectively.
Select the Entity named ‘Crate’ and in the Symbol Ribbon, click Draw Queue dropdown and select BatchMembers.
Then draw a line above the ‘Crate’ entity. Right click to stop drawing the queue. This line will show all entities
batched to the ‘Crate’ entity.
Change the P2 Entity Initial Priority to ‘2’ in the ModelEntity properties.
Change the Entity Type of Source1 to ‘Crate’, Entity Type of Source2 to ‘P1’ and Source3 to ‘P2’. Change the
Interarrival Time of Source1 to ‘Random.Exponential (.6)’ minutes.
Set the Combiner Batch Quantity to ‘5’.
Select the path between the TransferNode and the Sink1. Change its Selection Weight to ‘ModelEntity.EntityType ==
P2’.
On the path between the TransferNode and the Sink2, set its Selection Weight property to ‘ModelEntity.EntityType !=
P2’.
UnBatching Entities Add-On Process Logic
Create a process on the Entered Add-On Process Trigger in the TranferNode1 properties. This process will be
triggered whenever an entity enters this TransferNode.
Place a Decide step. Set the Decide Type property to ‘ConditionBased’ and set the Expression to
‘ModelEntity.BatchMembers == 0’. Crate entities will have 5 batched members and P2 entities will have 0
batched members once it is unbatched and re-enters the node.
On the True branch leaving the Decide step, place an Assign step. Set the State Variable Name to
‘ModelEntity.Size.Width’ and the New Value to ‘ModelEntity.Size.Width * 2’.
On the False branch of the Decide step, place an UnBatch step. Set the Desired Quantity property to
‘Entity.BatchMembers’ and the Match Condition to ‘Candidate.ModelEntity.Priority==2’.
In the Member segment leaving the UnBatch step, place a Transfer step. Set the From property to ‘FreeSpace’,
the To property to ‘Node’ and the Node Name property to ‘TransferNode1’. This will send all unbatched P2
entities to the same TransferNode and trigger this process again for re-sizing the entity.
Embellishments:
90 / 1277
Select the path between the TransferNode and the Sink1 and change the Allow Passing property to ‘False’. That will show
all unbatched entities separated trough the path instead of all of them in just one entity.
Change the path Speed Limit to ‘0.5’ for the path between the Combiner and the TransferNode and the paths between the
TransferNode and Sink1 and Sink2.
Note: The UnBatching Process Logic in this model can be replaced with a Separator object, but the goal of this SimBit is
to show the features of the UnBatch step.
91 / 1277
Simio Reference Guide
DashboardReportInteractiveLogs - SimBit
Problem:
For an existing project, I want to be able to graphically display the resource utilization as well as display a vehicle’s pickup
and drop off times in chart format. We will accomplish this by creating a Dashboard Report from an existing SimBit
project VehicleVisitsServiceCenter.
Categories:
Dashboard Reports, Custom Statistics
Key Concepts:
Dashboard Reports, Interactive Logging, Log Observations, Resource State Log
Assumption:
This SimBit will illustrate how to create a Dashboard Report of log files generated within the VehicleVisitsServiceCenter
project. In order to create a Dashboard Report for Interactive Logs, you must have the Simio RPS ( Enterprise) Edition.
Technical Approach:
A dashboard with a grid of vehicle pickup times and a pie chart of resource utilization percentages will be created.
Details for Building the Model:
System Setup
Load the VehicleVisitsServiceCenter Simio project.
For Server1, Server2 and MyVehicle1, under the Advanced Options change the Log Resource Usage property to ‘True’.
From the Run ribbon, under Advanced Options, make sure Enable Interactive Logging is turned on.
Fast Forward the model to completion.
Creating the Dashboard Report
Select Results, Logs, Resource Usage Log and Transporter Usage Log and make sure there is a log table that is
populated with data. If not, verify the above steps.
Select Results, Dashboard Reports, Dashboard Report Create.
In the Add Dashboard window, select an name for the dashboard (ex: Pick Ups).
Select Transporter Usage Log from the pull down list on the left of the window.
Click on Grid in the Dashboard ribbon. This will create a Grid of items in the Transporter Usage Log and insert it into
the dashboard.
From the Transporter Usage Log, drag Resource over top of the Columns data item to the right. Follow that by
dragging From Node, Start Time, To Node, End Time and Entity onto the Columns data items. This identifies which
columns will appear on the grid.
For the Start Time and End Time items, click on the right of the item to change the modifier to Date-Hour-Minute-
Second.
Right click in the Grid area, select Edit Names and change the Dashboard item name to Pick Ups.
Now select Resource State Log from the pull down list on the left side of the window.
Click on Pies in the Dashboard ribbon. This will create a pie chart of items in the Resource State Log and insert it into
the dashboard.
From the Resource State Log, drag Duration over the Value data item, State over the Argument data item and
Resource over the Series data item.
Right click in the Pie area, select Edit Names and change the Dashboard item name to Resource States.
Select the Pie item and drag it below the Grid item.
Click the Save button in the upper left corner of the ribbon to save the dashboard. Close the
DashboardDesignerForm.
Various Dashboard Reports can be displayed in the results tab by selecting a dashboard from the Select pull down
list.
Embellishments:
92 / 1277
Add a Pivot grid using the data in the Resource State Log using the Duration as the Value data item, State as the Column
data item and Resource as the Row data item. This will display a chart of the amount of time the resource was in each
state.
93 / 1277
Simio Reference Guide
DashboardReportTallies - SimBit
Problem:
For an existing project, I want to be able to graphically display the time in the system for each entity in a model, once the
model has completed. We will accomplish this by creating a Dashboard Report from an existing SimBit
TallyStatisticsInTables.
Categories:
Dashboard Reports, Custom Statistics
Key Concepts:
Arguments, Bar, Chart, Data Items, Data Source, Edit Filter, Ignore Empty Points, Line, Log Observations, Series, Stacked
Bar, Tally Observation Log, Tally Statistic Element, TallyStatistic, Values, Dashboard Reports
Assumption:
The SimBit TallyStatisticsInTable must be opened with a Simio Team1, Professional or RPS ( Enterprise) license to create the
Dashboards. This model uses 4 Tally Statistics to record the Time In System for passed and failed PartsA and PartsB.
Technical Approach:
Create a Dashboard with 3 charts:
1. The total number of each part type that passed and failed.
2. The number of parts that passed each hour for each part type and total. Filter out failed parts.
3. The Time in System for each part type over time.
Details for Building the Model:
System Setup
Load the TallyStatisticsInTables SimBit.
Under Definitions tab> Elements view> TallyStatistic PartA_Passed, change the Log Observations property (under
Advanced Options) to ‘True’. Do the same for the other 3 Tally Statistics.
Fast Forward the model to completion.
In Results window, Logs view, Tally Observation Log and make sure there is a log table that is populated with data. If
not, verify that Log Observations is set to ‘True’ on all the Tally Statistics.
Creating the Dashboard Report
In Results select Dashboard Reports view, and click on Dashboard Report in the Dashboards ribbon.
In the Add Dashboard window, name the dashboard (ex:Tallies).
Chart1 ( Top left)
In the DashboardDesignerForm, click on Chart within the Home ribbon. This will create a Chart dashboard
item and insert it into the dashboard.
Select Tally Observation Log from the Data Source drop down list on the left of the window.
From the Tally Observation Log list of options, drag Value over top of the Value data item to the right.
Click on the down arrow that appears when you hover over Values ( Sum) and select Count. Count counts the
number of rows for each argument in a series.
Drag Time over top of the Argument data item.
Drag DataSource onto the Series data item.
Right Click in the Chart Item and select Edit Names. Change the Dashboard Item Name to ‘Number Finished’.
To remove the X axis value go to Design ribbon and click X-Axis Settings (make sure the Chart item is still
selected). Uncheck ‘Show X-axis’.
To change the Y axis title click Y-Axis Setting in the Design ribbon. Make sure ‘Show Title’ is selected, then
select ‘Custom Text’. In the textbox change the title to ‘Count’.
To add the point labels above each bar, select the graph icon next to Value( Count) in Data Items section. Go to
the Point Label Options tab. In Content select ‘Value’ and select OK.
94 / 1277
Chart2 ( Top Right)
Click on Chart within the Home ribbon. This will create a Chart dashboard item and insert it into the
dashboard.
Select Tally Observation Log from the Data Source drop down list on the left of the window.
From the Tally Observation Log list of options, drag ObjectType over top of the Value data item to the right. It
should automatically be set to Count. ( Any column can be used for Count)
Drag Time over top of the Argument data item.
Drag DataSource onto the Series data item.
On the Time Argument, change the time from Year to Date-Hour in the Time dropdown (2nd More).
Click on the icon to the right of the ObjectType( Count) data item. Change the chart type to Stacked Bar in the
Series Type tab.
To filter the chart to only passing parts, right click the chart and select Edit Filter. Click the plus sign to add a
filter. Click 'enter a value' and open the dropdown. Select ‘PartA_Passed’. Click the plus sign again and set the
'enter a value' to ‘PartB_Passed'. In the top left, click on ‘And’ and select ‘Or’.
Change the chart name in the Design ribbon > Edit Names. Change the Name to Number Passed.
To remove the Y-axis title go to Y-axis Settings in the Design ribbon and uncheck ‘Show Title’.
Change the format of the x-axis values in the Time Argument dropdown ( Data Items section) by selecting
‘TimeOnly’ in the Format ( Default) dropdown.
Chart3 ( Bottom)
Click on Chart within the Home ribbon. This will create a Chart dashboard item and insert it into the
dashboard. To change the dashboard layout, hold the Title bar of the 2nd chart and move it to the right of only
the 1st chart (a blue vertical line will appear on right).
Select Tally Observation Log from the Data Source drop down list on the left of the window.
Select the 3rd chart. From the Tally Observation Log list of options, drag Value over top of the Value data item
to the right.
Click on the icon to the right of the Value( Sum) data item. Change the chart type to Line in the Series Type tab.
In the Common Options tab check Ignore Empty Points. This option will draw the lines even if the Time stamps
are different.
Drag Time over top of the Argument data item. Click on the dropdown on the Time data item (right side) and
change the modifier from Year to Exact Date. Change the X-axis format in the Time Argument
dropdown>Format>Hours>Short. Make sure the arrow to the left of the Time Data Item is pointing up so that
our timeline is in the right order. (you can click once on the arrow to change from up to down or down to up).
Drag DataSource onto the Series data item.
Right Click in the Chart Item and select Edit Names. Change the Name to Time In System.
Change the Y axis title in the Design ribbon>Y-Axis Settings. Select Custom Text under Show Title and set the
title to ‘Hours In System’.
Click the Save button in the upper left corner of the ribbon to save the dashboard. Close the
DashboardDesignerForm.
Various Dashboard Reports can be displayed in the results tab by selecting a dashboard from the Select pull down
list.
Embellishments:
When you Filter a chart, only columns in DATA ITEMS sections can be used. If you want to filter on a column but not show
it on the chart, drag the column name to HIDDEN DATA ITEMS.
Add a Range Filter to the dashboard. This will allow you to apply filtering to your dashboard items. A Range Filter displays
a chart with selection thumbs that allow you to filter out values displayed on the argument axis.
1Legacy product
95 / 1277
Simio Reference Guide
DashboardsForSchedulingExamples - SimBit
Problem:
Show results in graphical format using Dashboards with an RPS ( Enterprise) version. The model is based on the Scheduling
Discrete Part Production Example.
Categories:
Custom Statistics, Dashboard Reports
Key Concepts:
Cards, Chart, Constraint Log, Cross-Data-Source-Filtering, Dashboard Reports, Grid, Interactive Logging, Log
Observations, Material Log, Multiple Master Filter, Pies, Resource State Log, Resource Usage Log, Single Mater Filter
Assumptions:
Familiar with the Resource and Material Logs and what information is reported for each column. ( Sometimes easier if you
open another Simio with the logs shown because you see the logs when you open the Dashboard Editor.)
Technical Approach:
Create 3 Dashboards:
1. A dispatch list for each Resource and a graph with the percent breakdown in each state. Includes the ability to show a
single or multiple Resources.
2. Graph the Stock Level of each Material over the simulation run, but only show 1 Material at a time.
3. A detailed list of the resources used (and when) for each Order and a graph of the different constraint types for each
order. Includes the ability to show between 1 and all the orders.
Details for Building the Model:
Simple System Setup
Load the Discrete Part Production Example.
Make sure all Resources and Servers have Log Resource Usage set to ‘True’.
Turn on Interactive Logging in Run ribbon> Advanced Options> click Enable Interactive Logging.
Fast Forward through the model. If the model already has results, then a preview of the dashboard items will show as
you create the Dashboard.
Create the Dashboards
Go to Results>Dashboard Reports View.
Dispatch List Dashboard
In the Dashboard ribbon, click the Dashboard Report button in the Create section. In the Add Dashboard popup
window, name the Dashboard ‘Dispatch List Sim’ and press OK.
In the Dashboard Designer Form Window, on the Home ribbon click on the Cards, Pies and Grid buttons to add
those items to the Dashboard. Move an item by holding the top title bar of the item and dragging to desired
location in relation to other items (dark blue highlighted area).
Cards
Select the Cards item on the dashboard. In the Data Source dropdown (left side of window) select the
‘Resource Usage Log’.
Drag ‘Duration ( Hours)’ to the Actual spot under DATA ITEMS ( Cards section). Drag ‘Resource’ to Series.
Click the Gear symbol to the right of ‘Duration ( Hours)’ in the DATA ITEMS section. In the Layout Options tab,
select one of the templates and uncheck ‘Actual Value’. This will show only the Resource Name on the card. The
example Dashboards use the ‘Compact’ template with the Min Width to ‘140’ and Max Width to ‘Auto’. Click
OK.
On the Data ribbon, select Multiple Master Filter and Cross-Data-Source-Filtering. Multiple Master Filter sets
the Cards to control the data shown in the other dashboard items. Cross Data Source Filtering will apply the
Master Filter to Dashboards Items that use a different Log but a full name of the data source field matches.
96 / 1277
Right click in the Cards item and select Edit Names. Change the Dashboard Item Name to ‘Resource’.
Pies
Select the Pies item. In the Data Source dropdown select ‘Resource State Log’.
Drag ‘Duration’ to Value, ‘State’ to Argument, and ‘Resource’ to Series.
On the Design ribbon, click Edit Names and change the Dashboard Item Name to ‘Resource State’.
Grid
Select the Grid item and in the Data Source select ‘Resource Usage Log’.
Drag ‘Resource’ to New Column, then ‘StartTime’ to the 2nd New Column, then ‘EndTime’, ‘Entity’, and
‘Duration’.
If the column was added in the wrong order, under DATA ITEMS select and hold the column and move
to desired location. A yellow bar will appear between the other columns you are placing the selected
column between.
To change the format of the datetime columns, hover on the StartTime item under DATA ITEMS and open the
right side drop down arrow. Open the 2nd More and select Date-Hour-Minute. Do the same for EndTime.
On the Design ribbon, click Edit Names and change the Dashboard Item Name to ‘Operations’.
Click the Save button on the Home ribbon and Close the Dashboard creator window.
Materials Dashboard
In the Dashboard ribbon, click the Dashboard Report button in the Create section. Name the Dashboard ‘Materials
Sim’.
In the Dashboard Designer Form Window Home ribbon add a Cards item and Chart item. Move an item by holding
the top title bar of the item and dragging to desired location in relation to other items. Resize each item’s by moving
the edges.
Cards
Select the Cards item on the dashboard. In the Data Source dropdown (left side of window) select the ‘Material
Usage Log’.
Drag ‘Quantity’ to the Actual spot under DATA ITEMS ( Cards section). Drag ‘Material’ to Series.
Click the Gear symbol to the right of ‘Duration ( Hours)’ in the DATA ITEMS section. In the Layout Options tab,
select one of the templates and uncheck ‘Actual Value’. This will show only the Resource Name on the card. The
example Dashboards use the ‘Compact’ template with the Min Width to ‘140’ and Max Width to ‘Auto’. Click
OK.
On the Data ribbon, select Single Master Filter. Single Master Filter will filter the data in other items based on
the Card selected. Only 1 card can be selected at a time.
Right click in the Cards item and select Edit Names. Change the Dashboard Item Name to ‘Material’.
Chart
Select the Chart item and in the Data Source select ‘Material Usage Log’.
Drag ‘Stock Level’ to Value, ‘Time’ to Argument, and ‘Material’ to Series.
Under DATA ITEMS, on ‘Stock Level’ dropdown (hover on Stock Level, right side arrow), select Max. If there are
multiple entries to the Material Log at the same time grouping for the same resource, the Graph will show the
Max value.
On the graph symbol next to ‘Stock Level’ select the Step Line graph in Series Type tab.
On the Time Argument dropdown, change the format/grouping to Date-Hour-Minute-Second in the 2nd
More dropdown.
Another option for datetime is to choose Exact Date from the Time dropdown for the grouping and
choose a format from the Format dropdown below ExactDate.
On the Design ribbon, click Edit Names and change the Dashboard Item Name to ‘Stock Level’.
Click the Save button on the Home ribbon and Close the Dashboard creator window.
Order Details Dashboard
In the Dashboard ribbon, click the Dashboard Report button in the Create section. In the Add Dashboard popup
window, name the Dashboard ‘Order Details Sim’ and press OK.
In the Dashboard Designer Form Window, Home ribbon click on the Cards, Chart, and Grid buttons to add those
items to the Dashboard. Move an item by holding the top title bar of the item and dragging to desired location in
relation to other items (dark blue highlighted area).
Cards
Select the Cards item on the dashboard. In the Data Source dropdown (left side of window) select the
‘Resource Usage Log’.
97 / 1277
‘Resource Usage Log’.
Drag ‘Duration’ to the Actual spot under DATA ITEMS ( Cards section). Drag ‘Entity’ to Series.
Click the Gear symbol to the right of ‘Duration ( Hours)’ in the DATA ITEMS section. In the Layout Options tab,
select one of the templates and uncheck ‘Actual Value’. This will show only the Resource Name on the card. The
example Dashboards use the ‘Compact’ template with the Min Width to ‘140’ and Max Width to ‘Auto’. Click
OK.
*If you do not want Duration to show on the Cards, you could have used any of the columns from the Resource
Usage Log for the Actual Cards.
On the Data ribbon, select Multiple Master Filter and Cross-Data-Source-Filtering.
On the Design ribbon, click Edit Names and change the Dashboard Item Name to ‘Orders’.
Chart
Select the Chart item. In the Data Source dropdown select ‘Constraint Log’.
Drag ‘Duration’ to Value, ‘Constraint Type’ and ‘Facility Location’ to Argument, and ‘Entity’ to Series. The Facility
Location is always Model for this model, but does change for other scheduling models.
On the Design ribbon, click Edit Names and change the Dashboard Item Name to ‘Constraints’.
Grid
Select the Grid item and in the Data Source select ‘Resource Usage Log’.
Drag ‘Entity’ to New Column, then ‘StartTime’, ‘EndTime’, ‘Resource’, and ‘Duration’.
To change the format of the datetime columns, hover on the StartTime item under DATA ITEMS and open the
right side drop down arrow. Open the 2nd More and select Date-Hour-Minute. Do the same for EndTime.
Right click in the Grid item and select Edit Names. Change the Dashboard Item Name to ‘Operations’.
Click the Save button on the Home ribbon and Close the Dashboard creator window.
Embellishments:
In the Dashboard window, Automatic updates should be selected (it is by default).
Change the Dashboard by going to Results>Dashboard View and selecting the Dashboard in Select dropdown and
clicking Edit.
On the Dispatch List dashboard, when you select a Card, the Pie and Grid data is filtered to only the selected Resource.
Hold the Ctrl key to select multiple Resource Cards. To reset the selection, right click the Cards items and select Clear
Master Filter.
98 / 1277
Simio Reference Guide
DashboardsWithinExperiments - SimBit
Problem:
Within an existing model, I'd like to experiment on the number of workers required and display experiment graphical
information within a Dashboard Report. This will be accomplished by creating an Experiment and corresponding
Dashboard Report from an existing SimBit ServerUsingTaskSequenceWithWorkers.
Categories:
Add-On Process Logic, Dashboard Reports, MultiTask Server, Worker
Key Concepts:
Active Symbol, Add-On Process, Assign Step, BasicNode, Dashboard Reports, Decide Step, Experiment, InputBuffer,
ObjectList, Picture, Process, Process Type, Request Move, Server, Started Task, Status Label, Task Sequence, Worker
Assumptions:
The SimBit ServerUsingTaskSequenceWithWorkers must be opened with a Simio Team1, Professional or RPS ( Enterprise)
license to create the Experiment Dashboards. The original SimBit was modified slightly to work with the controls in the
experiment. Those changes are noted below. This model uses 3 Controls (model properties) and includes 4 Responses
within the Experiment.
Technical Approach:
Create 3 Dashboards:
1. The average response result values across all scenarios. This will include all 4 responses on same graph.
2. The individual replication values and average value for each response and each scenario.
3. Pie charts showing resource states across all scenarios, with data from the experiment statistic summaries.
Details for Building the Model:
System Setup
Load the ServerUsingTaskSequenceWithWorkers SimBit.
Within the Definitions window, delete the Transporter list of Nurses, as we will use the population of one of the
nurses for experimentation. Within the Facility window, delete Nurse2 and change the Nurse1 name to Nurse.
Enter the Server1, Server2 objects, Processing Tasks and change the first 3 tasks (that require Nurse) from Object Type
‘Select From List’ to ‘Specific’. Enter the second task ( LabWork) and change the Condition or Probability to be a
property named ‘LabWork_Probability’ (right click, Set Referenced Property > Create New Referenced Property).
Within the Doctor object, go to the Initial Number in System property, right click, Set Referenced Property > Create
New Referenced Property to ‘NumberOfDoctors’. Do the same with the Nurse object with a property named
‘NumberOfNurses’.
Finally, add a Sink named LeaveWithoutBeingSeen. Then,enter Source1 and specify a Renege Triggers under the
Buffer Logic to include a Wait Duration of ‘40’ minutes and Renege Node Name ‘Input@LeaveWithoutBeingSeen’.
Entities will leave the system early if the wait is too long (this will be a response in experiment as well).
Experimentation
Within the Model properties, there will now be 3 model properties, NumberOfDoctors, NumberOfNurses and
LabWork_Probability that can be changed.
Go to the Project Home ribbon and select New Experiment. Those 3 properties will automatically appear under
Controls.
Add 4 Responses to the experiment. This will include:
Name is ‘DoctorUtilization’ – Expression is ‘Doctor.Population.Capacity.ScheduledUtilization’
Name is ‘NurseUtilization’ – Expression is ‘Nurse.Population.Capacity.ScheduledUtilization’
Name is ‘PatientTimeInSystem’ – Expression is ‘DefaultEntity.Population.TimeInSystem.Average’
Name is ‘LeaveWithoutBeingSeen’ – Expression is ‘LeaveWithoutBeingSeen.InputBuffer.NumberEntered’
Add various scenarios to the experiment, including combinations for 1 or 2 Doctors, 1 or 2 Nurses and a couple with
no lab work (assume the hospital is analyzing having lab work done afterwards at separate area). Run the experiment
with default Analysis parameters for confidence level, etc. 99 / 1277
with default Analysis parameters for confidence level, etc.
Dashboard Reports
Click on the Dashboard Reports tab and click Create to create a new report. Note that there are 4 Data Sources
available for reporting. We will use the Response Results Summaries (includes Min, Max, Median, Average, etc. if
desired), Response Results Details and Experiment Statistic Summaries.
For the first report ( Response Averages By Scenario), select the Response Results Summaries Data Source.
Within the Home ribbon, select a Chart and a Filter Elements > List Box.
Within the Data Items for the Chart, place the ResponseName in the Series area. This will provide a bar in the
chart then for each of the Responses in the experiment. Place the ScenarioName in the Arguments area which
will then list the Scenarios along the X-axis. Place the Mean within the Values section. This will graph the mean
of each of the responses along the Y-axis. Users could alternatively select Minimum or Maximum for the Value,
depending on the information desired.
Within the Data Items for the List Box, place the ResponseName in the Dimensions.
Save the first dashboard.
For the second report ( Response Details Per Scenario), select the Response Result Details.
Within this report, we’d like to see the individual values per scenario for each response, along with the average
value. Because we don’t have the average value within the Response Results Details, we will add a new
Calculated Fields entry. This is done by right clicking on the Response Result Details name and selecting Add
Calculated Field. Name the new field AverageValue and use the expression builder to generate the Expression
‘Aggr( Avg([ Value]))’.
Within the Home ribbon, select a Chart and two Filter Elements > List Box.
Within the Data Items for the Chart, place the ScenarioName in the Series. Place the Replication field in the
Arguments, as the replication value will be shown along the X-axis (instead of the Scenario as in the report
above). Place both the Value field and the new AverageValue calculated field within the Values. This will then
give us a data point for each replication value as well as the average over the # of replications run.
To customize the chart further, go to the Design ribbon, select the placement of the Legend (for
value/averagevalue) and change the Series Type to be a Line.
Within the Data Items for the first List Box, place the ResponseName in the Dimensions. Go to the Design
ribbon and select Radio item type. This will allow the end user to only select one of the responses at a time
(instead of checking multiple ones). Right click to Edit Name to ‘Response’.
Within the Data Items for the second List Box, place the ScenarioName in the Dimensions. Change this one to
a Radio item type as well. Right click to Edit Name to ‘Scenario’.
Save the second dashboard.
For the third report ( Resource States by Scenario), select the Experiment Statistic Summaries.
Within this report, we’d like to review the resource states information within the pivot grid. Users may wish to
review the pivot grid formatting ( Object Type, Object Name, Data Source, Category, Data Item, etc.) to
determine the exact fields to display and use as filters.
Within the Home ribbon, select a Pie and Filter Elements > List Box.
Within the Data Items for the Pie, place the Scenario in the Series. This will then display a separate pie for each
scenario. Place the Data Item within the Argument. Data Item includes the values for Time Busy, Time Idle,
Time Starved, Time Processing, etc. based on the type of resource. Place the Average value in the Values data
item.
o IMPORTANT: Still within the Pie, place the Category and Statistic within the Hidden Data Items under
Dimensions. These categories will not be shown (hidden) but will be used to filter the experiment statistics to
show only the Resource State category and Percent statistic. With the Pie graphic selected, go to the Data
ribbon and select Edit Filter (or right click and select Edit Filter). Add a Filter that is ‘[ Category] Equals
Resource State’ and another that is [ Statistic] Equals Percent’. This will filter the entire report to only show
Resource State information, which by default, will include the Data Items needed.
Within the Data Items for the List Box, place the Object Name in the Dimensions. Go to the Design ribbon and
select Radio item type. This will allow the end user to only select one of the responses at a time (instead of
checking multiple ones).
Follow the same step as shown above ( IMPORTANT:…) by placing the Category under the Hidden Data Items
and adding the same filter ( Statistic filter not required).
1Legacy product
101 / 1277
Simio Reference Guide
DbReadWrite - SimBit
Problem:
I want to use SQL Server Expess to read data into Simio and to write data from Simio.
Categories:
File Management
Key Concepts:
DBConnect Element, DBRead Step, DBWrite Step, DBQuery Step, DBExecute Step, Database, SQL Server Express
Assumptions:
Database connectivity must already be setup, or this model will not run! See Appendix for example.
There are two approaches described below, one model using DbRead, and DbWrite, and another model using DbQuery
and DbExecute.
Approach Using DbRead and DbWrite
Technical Approach:
DbConnect Element is used to connect with the SQL Server Express database. The OnRunInitialized process is used to
delete existing data from the database table. An Add-On process is used within an object where data is read using
DbRead step. The position is defined where data must be written in the database using Assign step. Then using DbWrite
step, data is written into database.
Details for Building the Model:
Simple System Setup
Within the Facility window, place a Source, a Server and a Sink and connect them using Path objects.
Within the Sink’s input node, double-click on the Entered Add-On Process to create a new process named
‘Input_Sink1_Entered’. We will add steps within that process shortly.
Within the Definitions window, click on the States panel and add a String state with the Name ‘StringState1’. Set the
Initial State Value to ‘DefaultEntity.11.’
Add a Real state with the Name ‘RealState1’. Change the Initial State Value to ‘-1’.
Add two DateTime states with the Name of ‘DateTimeState1’ and ‘DateTimeState2’. Set their Initial State Value
properties to ‘10/1/12’ and ‘11/1/12’, respectively.
Add two Integer states with the Name of ‘IntegerState1’ and ‘RowID’. Leave the Initial State Value of both to the
default ‘0’.
Add a Boolean state with the Name ‘SimpleDbSteps’ that has an Initial State Value of ‘True’.
Within the Definitions window, click on the Element panel and select the DbConnect element from the User Defined
button pull down.
In the property window for DbConnect1, enter the Connection String as ‘Server=localhost\SQLExpress;
Database=Test; Uid=username; Pwd=password’. Click on Provider Name and set it as ‘SqlClient Data Provider’. The
current settings in this property require that you rename the username and password value 'test' to the values you
have configured in the SQL Server Express database.
102 / 1277
Within the Processes window, click on Select Process in the Process ribbon and select the OnRunInitialized process.
Add a DbExecute step from the User Defined panel to the process. Specify the DbConnect as ‘DbConnect1’, the SQL
Statement as ‘Delete From TestReadWrite where Id>@1’. Within the Items repeat group, enter the Expression ‘RowID’.
Next, within the Input_Sink1_Entered process, add the Decide, DbRead, Assign and DbWrite steps.
Within the Decide step, keep Decide Type as ‘ConditionBased’ and add Expression as ‘RowID > 0’.
For the DbRead properties, the DbConnect is ‘DbConnect1’, created above. Assign the Table Name to
‘TestReadWrite’. Click on Columns repeating property editor and add 5 items as shown below
Column – State
String1 – StringState1
Integer1 – IntegerState1
Real1 – RealState1
DateTime1 – DateTimeState1
DateTime2 – DateTimeState2
Within the Where repeating property editor, add Where Column value ‘Id’ and Where State value ‘RowID’.
Within the Assign step, enter the State Variable Name as ‘RowID’ and New Value as ‘RowID+1’.
For the DbWrite properties, the DbConnect is ‘DbConnect1’ and the Table Name is ‘TestReadWrite’. Click on Columns
repeating property editor and add 6 items as shown below
Column – Expression
Id -- RowID
String1 – Entity.Name
Integer1 – Entity.ID
Real1 – TimeNow
DateTime1 – String.FromDateTime( Entity.TimeCreated, "yyyy/MM/dd HH:mm:ss")
DateTime2 – String.FromDateTime( TimeNow, "yyyy/MM/dd HH:mm:ss")
From Animation ribbon, select and place 6 Status Labels in the Facility window.
For first label, enter the Expression ‘StringState1’. Repeat the same for the other 5 states defined above (not needed is
the SimpleDbSteps Boolean state). In the case of the DateTime states, use the Expression
‘DateTime.ToString( DateTimeState1)’ and ‘DateTime.ToString( DateTimeState2)’.
For the DbQuery step, the DbConnect is ‘DbConnect1’. For the SQL Statement, enter ‘Select String1, Integer1, Real1,
DateTime1, DateTime2 from TestReadWrite where Id = @6’. Within the States repeating property editor, add 6 State
values:
State
StringState1
IntegerState1
RealState1
DateTimeState1
DateTimeState2
RowID
For the DbExecute step, the DbConnect is ‘DbConnect1’. The SQL Statement value is ‘Insert into TestReadWrite ( Id,
String1, Integer1, Real1, DateTime1, DateTime2) values (@1, '@2', @3, @4, '@5', '@6')’. Within the Items repeating
property editor, add 6 Expression values:
Expression
RowID
Entity.Name
Entity.ID
TimeNow
103 / 1277
String.FromDateTime( Entity.TimeCreated, "yyyy/MM/dd HH:mm:ss")
String.FromDateTime( TimeNow, "yyyy/MM/dd HH:mm:ss")
Appendix:
Instructions to Install SQL Server Express
105 / 1277
Simio Reference Guide
DefineEntityProperties - SimBit
Problem:
I have multiple kinds of entities going through a working system. Each type of entity has its unique processing time and
rejection rates.
Categories:
Entity Characteristics
Key Concepts:
Expression Property, Numeric Property, Path, Selection Weight
Assumptions:
One Source produces only one type of entity. Reject rates are based on the ratio of the total number of entities that need
to be reworked to the total number of entities coming out of the server. ( So there is a possibility that some entities will
never reach the sink.)
Technical Approach:
Add processing time and rejection rates as properties to ModelEntity, so each type of entity can define its unique
processing time and rejection rates. The processing time of the Server is referencing the processing time property of
ModelEntity, the weights of the paths represent rejection and success based on the rejection rate property of ModelEntity.
Details for Building the Model:
Simple System Setup
Place two Sources, a Server and a Sink from the Standard Library into the Facility Window.
Use Path to connect two Sources’ output nodes to the input node of Server separately ( Path1, Path2), connect the
output node of the Server to its input node ( Path3), and also the Server’s output node to the Sink ( Path4).
Add two ModelEntity objects from the Project Library into the Facility Window, name one of them PartA, the other
one PartB.
Set Source1’s Entity Type to ‘PartA’, Source2’s Entity Type to ‘PartB’. Set the Interarrival Time of both of these two
Sources to ‘Random.Exponential(.5)’.
Generating Entity Properties
Go to Navigation Window, click on the current project DefineEntityProperties, and then go to ModelEntity. Open the
Definitions Window and select the Properties panel.
Click on Standard Property Ribbon, choose Real Data type, and create a Numeric Property. Name it ‘RejectRate’, its
Display Name is ‘Reject Rate’, Description is ‘Ratio of rejections (0-1)’, and Default Value is ‘0.0’.
Again, go to Standard Property, choose Expression Data type, and create an Expression Property. Name it
‘ProcessingTime’, its Display Name is ‘Processing Time’, and Default Value is ‘0.0’, Unit Type is ‘Time’, Default Units is
‘Minutes’.
In order to make those created properties to be used by customer more conveniently, we can save them to a
separate category of properties which we will call ‘Custom’. For the property ‘RejectRate’, go to Properties Window,
click on Category Name, and create a new category with the name of ‘Custom’, this will save ‘RejectRate’ to a new
property category which is ‘Custom’. Do the same thing for the property ‘ProcessingTime’.
Using Entity Properties
Go back to Model Window and open the Facility Window. Go to Server1, set ProcessingTime to
'ModelEntity.ProcessingTime. This will let the Server’s processing time use each Entity’s specific processing time
according to their entity type.
Click on Path3, which connects the output node of the Server to its input node. Then go to the Properties Window,
right click on Selection Weight and choose Set Referenced Property, and then choose Create New Referenced Property,
and create a new referenced property with the name ‘ModelEntity.RejectRate’. This will let entities be rejected and
go through Server again based on their reject rates corresponding to their entity types.
Click on Path4, which connects the output node of the Server to the Sink, then set its Selection Weight to ‘1-
ModelEntity.RejectRate’. 106 / 1277
ModelEntity.RejectRate’.
Specify Data on Each Entity Instance
For entity PartA and PartB, click on either one of them and go to Properties Window, there will be two properties we
just defined: Reject Rate and Processing Time.
Here we can specify reject rate and processing time on each instance of different types of entities. Set PartA’s Reject
Rate to ‘0.1’, Processing Time to ‘0.2’ ( Minutes); set PartB’s Reject Rate to ‘0.5’, Processing Time to ‘0.1’ ( Minutes).
107 / 1277
Simio Reference Guide
DisableFailureTimers - SimBit
Problem:
I want my model to stop running when all entities have finished processing, but the failures in the system keep the
simulation running.
Categories:
Add-On Process Logic, Arrival Logic
Key Concepts:
Calendar Time Based Failure, EventCount, Failure, Maximum Arrivals, Server
Assumption:
Only one Source is generating entities and once the maximum arrivals have been created, the simulation should stop
running.
Technical Approach:
When the number of entities that have been created at the Source reaches the maximum value of entities to be created, the
Timer state for the calendar time based failure associated with the server is disabled. This is done through an add-on
process.
Details for Building the Model:
Simple System Setup
Place a Source, a Server and a Sink from the Standard Library into the Facility window. Use Paths to connect the
Source to the Server and the Server to the Sink.
Within the Source’s Advanced Options, change the Maximum Arrivals to ‘25’ so we can determine how long it takes
to process 25 entities through the sytem.
Change the Ending Type in the Run Ribbon to Unspecified ( Infinite).
Server Failure
Within the Server, under the Reliability Logic section of properties, change the Failure Type to ‘Calendar Time Based’.
Change the Uptime Between Failures to ‘10’ and the Units to ‘Minutes’. Change the Time to Repair to ‘1’ and the
Units to ‘Minutes’.
Turning Off Failures When Entities Stop
Within the Processes window, create a new process named Process1. Add a Decide step that will have the Decide
Type as ‘ConditionBased’ and the Expression as ‘Source1.EntityArrivals.EventCount == Source1.MaximumArrivals’.
This will evaluate the entities exiting the source with the maximum arrivals value to see if all of the entities have been
created.
From the True exit of the Decide step, add an Assign step. Assign the State Variable Name
‘Server1.CalendarTimeBasedFailures.Enabled’ to the New Value of ‘0’. This means the failures are no longer enabled,
but are disabled. This will ensure that no additional events continue on the event calendar to keep the simulation
running after the entities have all completed processing.
Within the Facility window, within the Source’s output node, change the Exited Add-On Process Trigger to ‘Process1’
so that when an entity exits the node, this process is run.
Enhancements:
Within every Server, there are multiple types of failures that can be defined. In this example, we demonstrate turning off
the Calendar Time Based Failures. If you review the ‘MyServer’ object in the Navigation window, you will see in the
Definitions window, Elements panel, there are multiple Timer elements that are initially disabled. These are enabled if
Failure Type corresponding to that Timer is used. Therefore, you can disable any of these types of failures by simply using
the corresponding Timer name.
108 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
109 / 1277
Simio Reference Guide
DiscreteLookupTable - SimBit
Problem:
The entities in my model have different processing times depending on a priority that is assigned to the entities in the
middle of the model. The processing times and entity priorities are mapped in a table.
Categories:
Add-On Process Logic, Decision Logic – Processing, Lookup and Rate Tables
Key Concepts:
Lookup Table, Linear Interpolation, ModelEntity, Path, Priority, Selection Weight
Technical Approach:
The system has three servers in parallel, followed by one server in series. Depending on which server processes the entity, it
is assigned a different value to the state variable, ModelEntity.Priority. The fourth server uses this state variable and reads a
Lookup Table to determine the processing time.
Details for Building the Model:
Simple System Setup
Place a Source, Sink and 4 Servers in the Facility Window. The first three Servers are in parallel and they all lead to
the fourth Server that is in series.
The three paths leading from the Source to the first three Servers each have a different link Selection Weight of ‘.5’, ‘.3’
and ‘.2’. This means that 50% (.5/(.5+.3+.2)) of the entities go to one server, 30% go to another and 20% to another.
Changing the Entity Priority on Paths
Within the State Assignments properties of the paths leading to Server4 (from Server1, Server2 and Server3), enter
the On Entering repeating editor. Add a new assignment to specify the State Variable Name is ‘ModelEntity.Priority’,
where the New Value is ‘ 1’ for those departing Server 1 on path 4, ‘2’ for those from Server2 on path 5 and ‘3’ for
those entities from Server3 on path 6.
Adding a Lookup Table
Click on the Data tab and select the Lookup Tables panel. Click the Lookup Table button to create a new table.
Change the Name of the table in the Properties Window to ‘ProcessingTimes’.
Enter three rows of data in the table, mapping the numbers 1, 2, 3 to the values 3,5,6.
Utilizing a Table within a Server for Processing Times
In the Processing Time property of Server 4 in the Facility Window, use the following syntax to reference the table
‘ProcessingTimes[ ModelEntity.Priority]’.
110 / 1277
Simio Reference Guide
DynamicallyCreatingVehicles - SimBit
Problem:
I have a system where a transporter carries parts from machine to machine. When the system gets moderately busy and I
have more than 4 parts in the system, I would like to bring in another vehicle to help with the work. Similarly, if the system
becomes extremely busy and there are more than 8 parts in the system, I would like to bring in a third vehicle.
Categories:
Vehicles
Key Concepts:
Add-On Process, Create Step, Decide Step, Label, Monitor, On Associated Object Destroyed, On Entered, Process
Triggering Event, Real State Variable, Ride on Transporter, Sink, Source, Transfer Step, Vehicle
Assumptions:
A second vehicle is only created the first time the number of parts in the system goes above 4. And even if the number of
parts becomes less than 4, the second vehicle remains part of the model, it is not destroyed. There is similar logic for the
creation of the third vehicle.
Technical Approach:
Two different monitor elements watch a Model State that keeps track of the number of parts in the system. The first
monitor fires an event when the number of parts in the system goes over 4. This event triggers a process that checks to see
how many vehicles are currently in the system and if there is only one, it creates a new vehicle object. Similarly, the second
monitor fires an event when the number of parts in the system goes over 8 and a third vehicle is created (if there are only 2
in the system at the time). The reason the process checks to see how many vehicles are in the system before it creates a new
one is because the monitor element will fire the event each time the State positively crosses the threshold value (4 or 8). So
there might be 5 parts in the system, but then it goes down to 4 and up again to 5. We do not want to create a new vehicle
every time it goes above 4, just the first time.
Details for Building the Model:
Simple System Setup
Add a Source, three Servers, a Vehicle and a Sink to the Facility Window.
Connect the objects together with Paths. Create two paths between each Server object, each one traveling in
opposite directions. Our example has a Bi Directional path between the input and output nodes of Server 3 so the
transporter can travel around the object.
In our example, the Interarrival Time of the Source object is set to ‘Random.Exponential(.3)’ minutes and the
Processing Time of Server1 is set to ‘Random.Triangular(.05, .06, .08)’ minutes.
The Vehicle’s Desired Speed is set to ‘0.5’ Meters per second and the Initial Node (Home) is set to ‘Output@Server1’.
Keeping Track of the Number in System
A new discrete model State is created, called ‘Number In System’. This is done by clicking on the Definitions tab,
selecting the States panel and adding a new state using the Discrete State button on the ribbon tab. This state is
incremented with an Assign Step that is within a process which is triggered by an Add On Process trigger in the
Source object, called Created Entity. This process is triggered right after an entity has been created by the Source.
The state Number in System is decremented with an Assign Step that is within a process which is triggered by an Add
On Process trigger in the Sink object, called Entered.
Creating the Monitor Elements
Go to the Definitions tab and select the Elements panel. Click on the Monitor icon in the General Ribbon group. The
Monitor Type is ‘CrossingStateChange’ and the State Variable Name is ‘NumberinSystem’, or whatever name you
gave to your model State variable. The Threshold Value is ‘4’ and the Crossing Direction is ‘Positive’. This monitor will
fire an event whenever the state variable crosses from 4 to 5.
Add a second Monitor element which is very similar to the first. The only difference with this monitor is that the
Threshold Value is set to 8.
111 / 1277
Processes that Create the New Vehicle
Select the Processes tab in the Project Model tabs. Click on the Create Process icon in the Process Ribbon group.
In the Properties window of this new Process, set the Triggering Event to ‘Monitor_Over4.Event’ (exact name will
depend on what you named your monitor). This indicates that when that event is fired, it will trigger this process to
execute.
Place a Decide step in the Process. The Decide Type is condition based and the Expression is set to
‘Vehicle1.Population.NumberInSystem < 2’, which will ensure that we only create a new vehicle if there is only one in
the system.
Place a Create step in the True segment leaving the Decide step. The Create Type is ‘NewObject’ and the Object
Instance Name is ‘Vehicle1’ (the name of your vehicle).
When a vehicle is created, it is created in Free Space. So it needs to be transferred to a node that is on the network.
Place a Transfer step on the Created segment leaving the Create step. From is set to ‘FreeSpace’, To is set to ‘Node’
and Node Name is set to ‘Output@Server1’.
A similar process should be created for the monitor that is watching for more than 8 parts in the system. The only
difference in this process is that the Expression in the Decide step is ‘Vehicle1.Popultion.NumberInSystem < 3’.
112 / 1277
Simio Reference Guide
ElectricVehicle - SimBit
Problem:
I have an electric vehicle that it is used for the transportation of the entities in the system. The vehicle is sent to a charging
station when the battery level decreases to a certain threshold.
Categories:
Add-On Process Logic, Building New Objects / Hierarchy, Custom Object, Vehicles
Key Concepts:
Assign Step, Bidirectional Path, CrossingStateChange, Decide Step, Dynamic Label Text, Execute Step, Level State Variable,
Monitor, Movement, Movement.Rate, Off Shift, Override, Rate, Ride On Transporter, Subclass, Vehicle
Assumptions:
The electric vehicle battery consumption is directly related to the distance travelled, and it loses its charge at a rate of 1%
per meter travelled. When the Battery level reaches 20% remaining, the vehicle will finish unloading is current entity and
travel to the charging station. The vehicle charges at a rate of 5% per minute.
Technical Approach:
A Vehicle is subclassed from the Vehicle in the Standard Library and has additional process logic to track the battery level.
A Monitor watches the battery level and triggers a process to make the vehicle go off shift and send it to the charging
station when the battery level is low. When the Vehicle is done charging, the Vehicle goes back on shift and resumes
transporting entities.
Details for Building the Model:
Simple System Setup
In the Facility Window place a Source, a Server and a Sink. Also place one BasicNode above the Server, and a
second BasicNode, renamed ‘Charger’, to the right of the first BasicNode.
Place a ModelEntity from the Project Library into the Facility window.
Using Paths to connect the Source to the Server and the Server to the Sink. Connect BasicNode1 to the Source, the
Server, the Sink, and BasicNode ‘Charger’. Also connect the Server’s input node to Server’s output node. Select all the
paths change the Type property to ‘Bidirectional’.
Within the Source, change the Interarrival Time property to ‘10’ minutes. Within the Server, change the Processing
Time property to ‘5’ minutes.
Creating a Sub-Classed Object MyVehicle
Create a new vehicle called MyVehicle that is subclassed from Vehicle by right-clicking on Vehicle in the Standard
Library and selecting Subclass.
Select MyVehicle in the Navigation window and in its Definitions window, States panel, add a Level State Variable
with Name ‘BatteryRemaining’ and change the Initial State Value property to ‘100’. This will track the current battery
level, which will start with a full battery.
In the Elements panel, add a Monitor element with the Name ‘MovementRateChanged’ and change the State
Variable Name property to ‘Movement.Rate’ and the Triggered Process Name property to
‘OnMovementRateChanged’. Every time the Vehicle starts and stops, the OnMovementRateChanged process is
triggered.
Add another Monitor element with the Name ‘MonitorBatteryRemaining’ and change the State Variable Name
property to ‘BatteryRemaining’. Change the Monitor Type property to ‘CrossingStateChange’. Set the Initial Threshold
Value property to ‘100’ and change the Triggered Process Name to ‘FullChargeDetected’. This will trigger the
FullChargeDetected process every time the BatteryRemaining state increases to 100.
Within the Processes window of the MyVehicle object, click Create Process to add a new process and change its
Name to ‘StartChargingBattery’.
Add a Decide step and change the Condition property to ‘HomeNode==CurrentNode’.
On the True branch leaving the Decide step, place an Assign step. Set the State Variable Name property to
‘BatteryRemaining.Rate’ and its New Value to ‘300’. When the Vehicle is at the Charger node, the battery level
will increase at a rate of 300 per hour. 113 / 1277
will increase at a rate of 300 per hour.
Create a new process named ‘FullChargeDetected’. This process is triggered when the BatteryRemaining variable
reaches 100.
Add an Assign step and set the State Variable Name ‘BatteryRemaining.Rate’ to New Value of ‘0’.
Add another Assign step to the right of the previous Assign step, and set the State Variable Name to
‘CurrentCapacity’ and the New Value to ‘1’. This will change the current state of the Vehicle to ‘Onshift’. Now
that the vehicle is fully charged and on shift, it will travel to the next entity waiting for transport.
Create a third process named ‘OnMovementRateChanged’.
Add an Assign step, and change the State Variable Name property to ‘BatteryRemaining.Rate’ and the New
Value to ‘- Movement.Rate’. The will decrease the battery level at the same rate the vehicle is travelling.
Add an Execute step for the Process Name of ‘StartChargingBattery’.
Right click the process “OnRiderUnloaded” and select Override to allow the process to be modified.
On the right side of the Fire step, add a Decide step and change the Condition property to 'BatteryRemaining
< 20 && RideStation.Contents == 0'.
On the True branch leaving the Decide step, place an Assign step. Set the State Variable Name to
‘CurrentCapacity’ and the New Value to ‘0’. This will change the current state of the Vehicle to ‘Offshift’ if the
BatteryRemaining is below 20 and there are no entities left on the Vehicle. The Vehicle is set to go to its Home
Node ( Charger) when it goes off shift.
Vehicle Setup
Place a MyVehicle object from the Project Library to the Facility window and change the Name to ‘ElectricVehicle’.
Expand the Animation property and set the Dynamic Label Text property to
‘Math.Round( MyVehicle.BatteryRemaining, 1)’. That will show a label next to MyVehicle object with the current
BatteryRemaining state value.
Change the Initial Desired Speed property to ‘0.5’ Meters per Second.
Under Routing Logic, change the Initial Node (Home) property to ‘Charger’. Also change the Idle Action property to
‘Remain to Place’ and the Off Shift Action property to ‘Park At Home’.
Transferring the Entity
Within the Source output node, specify the Entity Destination Type of ‘Specific’ and the Node Name of
‘Input@Server1’. Change the Ride on Transporter to ‘True’ and the Transporter Name to ‘ElectricVehicle’.
Within the Server output node, specify the Entity Destination Type of ‘Specific’ and the Node Name of ‘Input@Sink1’.
Change the Ride on Transporter to ‘True’ and the Transporter Name to ‘ElectricVehicle’.
These previous steps tell the entity where to go next and on what vehicle (otherwise, it may leave the node on any of
the connected bidirectional paths).
Animation
Change the color of the top of the Entity object in order to identify it when it is being transported by the vehicle.
Change the symbol of the BasicNode Charger to identify where the charger is.
114 / 1277
Simio Reference Guide
EntitiesEnteringAlongConveyor - SimBit
Problem:
I have multiple types of entities that enter onto a single conveyor from multiple merge points. Entities then travel down the
single conveyor for later processing.
Categories:
Conveyor Systems
Key Concepts:
BasicNode, Conveyor
Assumptions:
There are three types of entities that enter the system. Each entity type has a unique entry area onto which it will later
merge onto a single conveyor system. When arriving at its merge point, the entity must wait for adequate space on the
conveyor before merging. At any merge point, entities enter based on a first in first out basis.
Technical Approach:
Use three Source objects to model the arriving entity types. Use three BasicNodes to model the merge points on the main
conveyor system. Finally, use Conveyor objects to model the entry conveyors for each part type from the respective sources
to the merge points, as well as for the main conveyor system.
Details for Building the Model:
Simple System Setup
Place three Source objects and a Sink in the Facility Window.
Place three BasicNodes into the Facility Window. These nodes will represent the merge points from each individual
part type entering onto the main conveyor.
Defining the Conveyor System
Connect each Source object to a BasicNode using the Conveyor object.
Then, starting at the leftmost BasicNode, connect it to the next BasicNode, and then again to the next with a
Conveyor. Connect the rightmost BasicNode to the Sink object. This will represent the entities leaving the conveyor
system.
Specifying Conveyor Characteristics
For each of the six (6) conveyor objects, the default Conveyor characteristics will be used. This includes the Conveyor
Speed of ‘2, as well as the Accumulating property of ‘True’. We would like all of our conveyors to be accumulating,
therefore if a given merge point is blocked, entities will begin to accumulate on their respective entering conveyor.
Defining Multiple Entity Types
Place three ModelEntity objects from the Project Library and change the Name them ‘PartA’, ‘PartB’ and ‘PartC’.
Change the entity symbols, so that you can graphically see the difference in the parts on the conveyors. We used the
Simio symbol library to select various “box” symbols for each of the entity types.
Within the three Source objects, specify the Entity Type as ‘PartA’, ‘PartB’ and ‘PartC’. Therefore, each source will
generate a different part type.
Changing the Conveyor Animation
In order to graphically make the conveyor paths look like conveyors, click on the conveyor path and select one of the
path decorators from the Path Decorators ribbon (i.e., conveyor, single lane, track, etc.).
EntityFollowsSequence - SimBit
Problem:
I have an entity that needs to be processed in a particular order by a series of machines.
Categories:
Decision Logic – Paths, Sequence Tables
Key Concepts:
By Sequence, Entity Destination Type, ModelEntity, Sequence Table, Table Transfer Node Property
Assumptions:
The source only produces one type of entity. This entity will follow the Sequence: Server 3 - Server 2 - Server 1 – Sink 1.
Technical Approach:
A Sequence Table is created and the entity is set to follow this Sequence in its Routing Logic. Each Output TransferNode is
set to pass the entity to its next destination By Sequence.
Details for Building the Model:
Simple System Setup
Add a Source, Sink and three Servers to the Facility Window. Update the Processing Time of each Server to be
‘Random.Triangular(0.5, 0.8, 1.2)’.
Adding a Sequence Table
In the Data Window, select the Tables panel and add a Sequence Table with Name ‘MySequence’. Add the
Destinations in the following order: Input@Server3 -> Input@Server2 -> Input@Server1 -> Input@Sink1.
Assigning the Sequence to the Entity
In the Facility Window, place an entity from the Project Library into the model.
Change the Routing Logic Initial Sequence property of the DefaultEntity to ‘MySequence’.
Modifying the TransferNodes
For each of the objects in the system, including Source and all three Servers, click on the TransferNode, change the
Entity Destination Type property (under Routing Logic) to ‘By Sequence’.
Double-click on the Path to connect the Source object to all three Servers, and then connect all the Servers to each
other and to the Sink object.
Embellishments:
There are many ways to make this model more specific. Try changing the Default entity’s Travel Logic to a desired speed or
the Source’s Interarrival Time rate.
116 / 1277
Simio Reference Guide
EntityFollowsSequenceMultiple - SimBit
Problem:
*Enhancement of EntityFollowsSequence.spf*
I have multiple sources; each producing their own specific entity type. Each entity type needs to be processed in a
particular order by a series of machines.
Categories:
Decision Logic – Paths, Sequence Tables
Key Concepts:
By Sequence, Entity Destination Type, ModelEntity, Sequence Table, Table Transfer Node Property, TransferNode
Assumptions:
Each source only produces one type of entity.
• Source 1 produces Part A ( Green) which follows the Sequence: Server 1 – Server 2 – Sink 1.
• Source 2 produces Part B ( Red) which follows the Sequence: Server 3 – Server 2 – Server 1 – Sink 1.
• Source 3 produces Part C ( Blue) which follows the Sequence: Server 2 – Sink 1.
Technical Approach:
A Sequence Table is created for each entity type and each entity is set to follow this Sequence in its Routing Logic. Each
output TransferNode, except those at Source 2 and Source 3, is set to pass the entity to its next destination ‘By Sequence’.
The output TransferNodes at Source 2 and Source 3 have been excluded because an entity will travel from these nodes to
the TransferNode at Source 1, which already has ‘By Sequence’ in its Routing Logic.
Details for Building the Model:
Simple System Setup
Add three Sources, three Servers and a Sink to the Facility Window. Update the Processing Time of each Server to be
‘Random.Triangular(0.5, 0.8, 1.2)’.
Adding a Sequence Table
In the Data Window, select the Tables panel and add three Sequence Tables named ‘SequenceA’, ‘SequenceB’ and
‘SequenceC’. Set the Destinations in each table in the following orders:
SequenceA : Input@Server1 -> Input@Server2 -> Input@Sink1
SequenceB : Input@Server3 -> Input@Server2 -> Input@Server1 -> Input@Sink1
SequenceC : Input@Server2 -> Input@Sink1
Assigning the Sequences to the Entities
Place three DefaultEntity objects from the Project Library into the Facility Window. Change the Name of each to
‘PartA’, ‘PartB’ and ‘PartC’.
Change the Routing Logic Initial Sequence property of each PartA, PartB, and PartC to ‘SequenceA’, ‘SequenceB’, and
‘SequenceC’, respectively.
Modifying the TransferNodes
For each output TransferNode, except those at Source2 and Source3, change the Entity Destination Type property to
‘By Sequence’. Entities created at Source2 and Source3 will connect through the output TransferNode at Source1.
Double-click on the Path to connect the Source1 object to all three Servers, and then connect all the Servers to each
other and to the Sink object.
Embellishments:
There are many ways to make this model more specific. Try changing any entity’s Travel Logic Speed Limit to a desired
117 / 1277
There are many ways to make this model more specific. Try changing any entity’s Travel Logic Speed Limit to a desired
speed or the Source’s Interarrival Time rate.
118 / 1277
Simio Reference Guide
EntityFollowsSequenceWithRelationalTables -
SimBit
Problem:
*Enhancement of EntityFollowsSequenceMultiple.spf*
I have a single source producing multiple types of entities. Each entity type needs to be processed in a particular order by a
series of machines. The service times at each server are dependent upon the entity type.
Categories:
Data Tables
Key Concepts:
Before Creating Entities, By Sequence, Data Table, Dynamic Object Property, Entity Destination Type, Expression Property,
ModelEntity, Numeric Property, RandomRow, Relational Table, Sequence Table, Server, Source, String Property, Table
Foreign Key Property, Table Key, Table Row Referencing, Table Transfer Node Property
Assumptions:
The Source produces three types of entities:
Part A ( Green) which follows the Sequence: Server 1 – Server 2 – Server 3 – Sink 1.
Part B ( Red) which follows the Sequence: Server 3 – Server 2 – Server 1 – Sink 1.
Part C ( Blue) which follows the Sequence: Server 2 – Sink 1.
Technical Approach:
A single Sequence Table is created to keep track of the Sequences and Process Times for each entity type. A Data Table is
created to specify product mix and point to the proper section of the Sequences table using the Foreign Keys feature. The
Table Assignment properties of the Source will be used to select a random entity type from the Data Table while the entity
is being created. Each TransferNode is set to pass the entity to its next destination ‘By Sequence’.
Details for Building the Model:
Simple System Setup
Add a Source, a Sink and three servers to the Facility Window. Also, place three ModelEntity objects from the Project
Library into the window.
Setting up the Data Table
Go to the Data tab, select the Tables panel and add a Data Table named ‘JobTable’ with the following Properties and
in the following order:
( Entity Object Reference) PartType : PartA, PartB, PartC
( Integer) ProductMix : 10, 20, 30
( String) SequenceType : A,B,C
When the SequenceType column is selected, make this the primary key of this table by clicking the “Set Column as
Key” icon in the Ribbon.
Setting up the Sequence Tables
Also the Data Window within the Tables panel, add a Sequence Table named ‘Sequences’. For the order of
Destinations in each table, please refer to EntityFollowsSequenceMultiple.pdf.
Add a Foreign Key property to this Sequence Table by clicking on the Foreign Key icon in the Ribbon. The Name of
this property should be set to 'SequenceType'. The TableKey property should be set to 'JobTable.SequenceType'.
Add an Expression Property to the Sequence Table with the Name set to ‘ProcessTime’. Set the ProcessTime
according to the following:
119 / 1277
SequenceA: Input@Server1 = Random.Uniform(0.5, 0.9), Input@Server2 = Random.Triangular(0.5, 1.1, 1.2),
Input@Sink1 = 0.0
SequenceB: Input@Server3 = Random.Triangular(0.5, 0.8, 1.2), Input@Server2 = 1.5, Input@Server1 = 1, Input@Sink1
= 0.0
SequenceC: Input@Server2 = Random.Triangular(0.5, 1.2, 1.6), Input@Sink1 = 0.0
Creating Multiple Entities from Single Source:
In the Facility Window, Source object, expand the Table Row Referencing section.
Set the Table Name property to ‘JobTable’, and the Row Number to ‘JobTable.ProductMix.RandomRow’.
Finalizing the Model
Change the Arrival Logic Entity Type property of the Source to ‘JobTable.PartType’.
Change all Processing Times of the Servers to 'Sequences.ProcessTime’.
For each TransferNode, change the Entity Destination Type property to ‘By Sequence’.
Embellishments:
There are many ways to make this model more specific. Try changing any entity’s Travel Logic Speed Limit to a desired
speed, the Source’s Interarrival Time rate, or any Server’s Capacity.
See Also:
EntityFollowsSequenceMultiple.spf, EntityFollowsSequenceWithTable.spf ( Uses simple (not relational) table to accomplish
the same thing) and UsingRelationalTables.spf
120 / 1277
Simio Reference Guide
EntityFollowsSequenceWithTable - SimBit
Problem:
*Enhancement of EntityFollowsSequenceMultiple.spf*
I have a single source producing multiple types of entities. Each entity type needs to be processed in a particular order by a
series of machines. The service times at each server are dependent upon the entity type.
Categories:
Data Tables, Decision Logic – Paths, Decision Logic – Processing, Sequence Tables
Key Concepts:
Before Creating Entities, By Sequence, Data Table, Dynamic Object Property, Entity Destination Type, Expression Property,
ModelEntity, Numeric Property, On Created Entity, RandomRow, Sequence Table, Server, Source, Table Row Referencing,
Table Sequence Property, Table Transfer Node Property
Assumptions:
The Source produces three types of entities:
• Part A ( Green) which follows the Sequence: Server 1 – Server 2 – Server 3 – Sink 1.
• Part B ( Red) which follows the Sequence: Server 3 – Server 2 – Server 1 – Sink 1.
• Part C ( Blue) which follows the Sequence: Server 2 – Sink 1.
Technical Approach:
A separate Sequence Table is created for each entity type to keep track of the Sequences and Process Times for each entity
type. A Data Table is created to help the Servers determine how long to process an entity based on its type. The Data
Table will be read by setting the Table Name property of the Source. The Source will also reference the Data Table after an
entity has been created to get reference to the appropriate Sequence Table based on the assigned row from the Job Table.
Each TransferNode is set to pass the entity to its next destination ‘By Sequence’.
Details for Building the Model:
Simple System Setup
Add a Source, a Sink and three servers to the Facility Window. Also, place three ModelEntity objects from the Project
Library into the window.
Setting up the Sequence Tables
In the Data Window, select the Tables panel and add three Sequence Tables named ‘SequenceA’, ‘SequenceB’, and
‘SequenceC’. For the order of Destinations in each table, please refer to EntityFollowsSequenceMultiple.
Add an Expression Property to each Sequence Table with the Name ‘ProcessTime’. Set the ProcessTime according to
the following:
SequenceA: Input@Server1 = Random.Uniform(0.5, 0.9), Input@Server2 = Random.Triangular(0.5, 1.1, 1.2),
Input@Sink1 = 0.0
SequenceB: Input@Server3 = Random.Triangular(0.5, 0.8, 1.2), Input@Server2 = 1.5, Input@Server1 = 1, Input@Sink1
= 0.0
SequenceC: Input@Server2 = Random.Triangular(0.5, 1.2, 1.6), Input@Sink1 = 0.0
Setting up the Data Table
• Add a Data Table named ‘JobTable’ with the following Properties and in the following order:
( Entity Object Reference) PartType : PartA, PartB, PartC
( Expression) ProcessTime : SequenceA.ProcessTime, SequenceB.ProcessTime, SequenceC.ProcessTime
( Integer) ProductMix : 10, 20, 30
( Sequence) PartSequence : SequenceA, SequenceB, SequenceC
Creating Multiple Entity Types from Source:
121 / 1277
In the Facility Window, expand the Table Row Referencing in the Properties Window of the Source object.
Under the Before Creating Entities subcategory, set the Table Name to ‘JobTable’ and the Row Number to
‘JobTable.ProductMix.RandomRow’
Under the On Created Entity subcategory, set the Table Name to ‘JobTable.PartSequence’ and leave the Row Number
empty.
Finalizing the Model
Change the Arrival Logic Entity Type property of the Source to ‘JobTable.PartType’.
Change all Processing Times of the Servers to ‘JobTable.ProcessTime’.
For each TransferNode, change the Entity Destination Type property to ‘By Sequence’.
Embellishments:
There are many ways to make this model more specific. Try changing any entity’s Travel Logic Speed Limit to a desired
speed, the Source’s Interarrival Time rate, or any Server’s Capacity.
See Also:
EntityFollowsSequenceMultiple.spf
122 / 1277
Simio Reference Guide
EntityStopsOnLink - Simbit
Problem:
I have a system where the entities in the system must stop moving on their links when a particular event occurs.
Categories:
Decision Logic -- Paths
Key Concepts:
Add-On Process, Allow Passing, Calendar Time Based Failure, Current Symbol Index, Current Symbol Index, Event, Failure,
Failure.Active, Fire Step, ModelEntity, On Failed, On Repaired, ParentObjectMovement, Path, Real State Variable, Resume
Step, Server, Subscribe Step, Suspend Step, Time To Repair, Uptime Between Failures, Wait Step
Assumptions:
Entities that are currently moving on links will stop mid-stream when a particular event occurs. In this example, that event is
a server failure. Once the failure has been fixed, all entities resume their movement.
Technical Approach:
The Subscribe step for the Model Entity is used to tie together the events of the model, such as failure and repair of the
Server, with events for the entity itself, such as suspending and resuming movement on a link. Two properties for the entity
are used to define the event names. When those events occur in the model, all currently moving entities have their
movement stopped or started.
Details for Building the Model:
Simple System Setup
Add a Source, Sink and Server to the Facility Window. Add a ModelEntity to the Facility Window. Connect the
Source to the Server and the Server to the Sink using Paths. Change the Allow Passing property of each Path to
‘False’.
Adding the Server Failure
In the Reliability Logic section of the Properties window for Server1, add a failure by changing the Failure Type to
‘Calendar Time Based’.
Set the Uptime Between Failures property to ‘2’ and Units to ‘Minutes’, and the Time to Repair property to ‘1’ and
Units to ‘Minutes’.
Model Entity: Suspending and Resuming the Entity Movement
In the Definitions Window of the Model Entity, add two new properties, ‘SuspendMyselfEvent’ and
‘ResumeMyselfEvent’. These two properties will then be edited in the Model Entity’s properties window to tie the
events in the model to the model entity.
In the Processes Window of the Model Entity, use the Create Process button to create two new processes called
SuspendMyself and ResumeMyself. We will add steps to these processes shortly.
Also in the Processes Window of the Model Entity, use the Select Process button to select the OnCreated process.
Within that process, add two Subscribe steps. In the first Subscribe step, right click on Event Name and Set
Referenced Property to ‘SuspendMyselfEvent’. Set the Process Name to ‘SuspendMyself’. In the second Subscribe
step, right click on Event Name and Set Referenced Property to ‘ResumeMyselfEvent’. Set the Process Name to
‘ResumeMyself’.
Within the SuspendMyself process, add a Suspend step and change the Suspend Type to ‘ParentObjectMovement’.
This will stop the movement of all entities currently created when this process is triggered.
Within the ResumeMyself process, add a Resume step and change the Resume Type to ‘ParentObjectMovement’. This
will resume all entity movement of all entities when this process is triggered.
Model: Firing the Events to Stop Entity Movement
Go to the Model and open the Processes window. Add two new processes called SuspendAll and ResumeAll. These
processes will be triggered when the Server fails and is repaired.
123 / 1277
In the Definitions window, add two new events, ‘SuspendEverybody’ and ‘ResumeEverybody’. These events will be
fired from the Processes just defined.
In the Processes window of the model, within the SuspendAll process, add a Fire step with the Event Name
‘SuspendEverybody’. Within the ResumeAll process, add a Fire step with the Event Name ‘Resume Everybody’.
Move to the Facility window and highlight Server1. Within the Add-On Process Triggers, change the Failed property
to ‘SuspendAll’ and the Repaired property to ‘ResumeAll’. This will fire the events to suspend and resume entities
when the Server is failed and repaired, respectively.
Model: Specifying the Model Entity Properties for the Events
Click on ModelEntity1 that is placed in the Model. In the General section of properties, you will notice the two new
properties we added above called SuspendMyselfEvent and ResumeMyselfEvent. These are also referenced in the
Subscribe steps for the ModelEntity.
Change the SuspendMyselfEvent property to ‘SuspendEverybody’ and the ResumeMyselfEvent property to
‘ResumeEverybody’. These will then feed into the Subscribe steps such that when those events are fired within the
model, the associated processes in the ModelEntity will be triggered.
Model: Stopping Incoming Entities
All of the above steps will stop entities that have been created and are moving in the system. To also stop incoming
entities (as the Source will continue to generate entities), the following steps can be followed.
In the model’s Definitions window, States panel, add a new Discrete State with Name of ‘MovementSuspended’. The
Initial State Value property should remain as ‘0’. This state will be evaluated when incoming entities enter the system
to determine if movement is suspended or not.
Within the Facility window, highlight the transfer node of Source1 and add an Add-On Process Trigger to the Entered
property by double-clicking on Entered. This will create a new process called ‘Output_Source1_Entered’.
Within the Process window, you will see the new process called ‘Output_Source1_Entered. Within this, add a Decide
step where the Decide Type is ‘ConditionBased’ and the Expression is ‘MovementSuspended==1’. From the True exit,
add a Wait step, to wait for the Event Name ‘ResumeEverybody’. From the False exit, there will be no steps.
Finally, within the SuspendAll process (in this Processes window), add an Assign step (after the Fire step) where you
assign the State Variable Name ‘MovementSuspended’ to the New Value of ‘1’. And similarly, in the ResumeAll
process (in this Processes window), add an Assign step (after the Fire step) where you reset the State Variable Name
‘MovementSuspended’ to the New Value of ‘0’.
Embellishments:
Entities may be suspended and resumed based on any number of happenings in a model, including time and/or a state
variable reaching a given value. You may also cause an event to occur by placing a Button in the Facility window and/or
Console window.
124 / 1277
Simio Reference Guide
ExamplesOfConveyors - SimBit
Problem:
I would like to understand how various conveyor configurations behave.
Categories:
Conveyor Systems
Key Concepts:
Accumulating, Auto Align Cells , BasicNode, BasicNode, Calendar Time Based Failure, Cell Location, Conveyor, Cross
Logic, Entity Alignment, Failure, Fixed Number Cells , Initial Capacity, Largest Value First, Number of Cells, On Event Arrival
Mode, Time To Repair, Uptime Between Failures
Technical Approach:
A “Master Source” creates the Entity arrivals for all other sources. This allows all sets of conveyors to depict their behavior
on the exact same arrivals. The sets of conveyors are then used to depict transfers between different conveyor
configurations.
Details for Building the Model:
Standard – all defaults left untouched.
Simply entities traveling on our standard conveyor
Accumulating – all defaults left untouched.
Entities will form a queue on the first conveyor if Processing Station is not completely clear. A new entity will not be
able to enter the Processing Station until the occupying entity’s trailing edge has entered the exit conveyor.
Non-Accumulating – The entry conveyor has Accumulating set to ‘False’.
If an Entity cannot immediately gain access to the Server, the entire conveyor will temporarily stop movement. When
the Entity in the Processing Station completely exits the Server, the next Entity will enter and the conveyor will begin
moving again.
Changing Speeds from Fast to Slow – The second conveyor’s Desired Speed has been set to ‘0.5 m/s’.
The first entity will enter the second conveyor and begin moving at the speed of the slower conveyor. If Entities are
created with a small enough interarrival time, the second entity will collide with the first entity and move on the first
conveyor at the speed of the second conveyor.
Changing Speeds with a Non-Accumulating Conveyor – The first conveyor has Accumulating set to ‘False’ and the second
conveyor’s Desired Speed has been set to ‘0.5 m/s’.
The first entity will enter the second conveyor and begin moving at the speed of the slower conveyor. If Entities are
created with a small enough interarrival time, the second entity will collide with the first entity and the speed of the
faster conveyor will be set to the speed of the slower conveyor. All other entities entering the faster conveyor will
move at the speed of the slower conveyor until all queued entities have completely left the first conveyor.
Changing Speeds From Faster Cell Aligned to Slower Cell Aligned – Each conveyor has Entity Alignment set to ‘Cell
Location’, Cell Spacing Type is set to ‘Fixed Number Cells', Number of Cells is set to ‘8’ and Auto Align Cells is set to ‘No’
Entities travel down the cell aligned conveyor on a chain dog. When the entity gets to the next cell aligned conveyor,
it has to wait until a chain dog from that conveyor comes by to pick it up. Because the second conveyor is slower, this
will cause entities to form a queue on the first conveyor and the entities will disengage from their chain dogs. Once a
chain dog from the second conveyor picks up a waiting entity, the other waiting entities will step along the first
conveyor, starting with the entity farthest along the conveyor, as chain dogs become available.
Changing Speeds From Slower Cell Aligned to Faster Cell Aligned – Each conveyor has Entity Alignment set to ‘Cell
Location’, Cell Spacing Type is set to ‘Fixed Number Cells', Number of Cells is set to ‘8’ and Auto Align Cells is set to ‘No’
Entities travel down the cell aligned conveyor on a chain dog. When the entity gets to the next cell aligned conveyor,
it has to wait until a chain dog from that conveyor comes by to pick it up. Because the second conveyor is faster,
125 / there
1277
it has to wait until a chain dog from that conveyor comes by to pick it up. Because the second conveyor is faster, there
will never be any queuing because a chain dog will always arrive to pick up a waiting entity before the next entity
arrives at the end of the link.
Faster Cell Aligned Non-Accumulating to a Slower Cell Aligned – Each conveyor has Entity Alignment set to ‘Cell
Location’, Cell Spacing Type is set to ‘Fixed Number Cells, Number of Cells is set to ‘8’ and Auto Align Cells is set to ‘No’,
and the first conveyor has Accumulating set to ‘False’
Entities travel down the cell aligned conveyor on a chain dog. When the entity gets to the next cell aligned conveyor,
it has to wait until a chain dog comes by to pick it up and disengages itself from the first conveyor. If a second entity
reaches the end of the conveyor before the first is picked up, it will stop the movement of the entire conveyor. When
the waiting entity enters the slower conveyor, the entire first conveyor moves at the slower rate. After the entity is
completely off of the first conveyor it will run at full speed.
Moving Onto Failing Cell Aligned from Cell Aligned – Each conveyor has Entity Alignment set to ‘Cell Location’, Cell
Spacing Type is set to ‘Fixed Number Cells', Number of Cells is set to ‘8’ and Auto Align Cells is set to ‘No’. The second
conveyor has Calendar Time Based with an Uptime Between Failures of ‘0.1 minutes’ and a Time To Repair of ‘0.1 minutes’
This situation is similar to moving onto a slower cell aligned conveyor. Entities will form a queue and after the first
entity completely exits the first conveyor, the waiting entities will step forward when chain dogs become available.
Merging Conveyors With Different Speeds – The two merging conveyors have their Desired Speeds set to ‘3 m/s’ and ‘4
m/s’, and they are merging onto a conveyor moving at 2 m/s.
If there is a queue at the merge point, entities will take turns merging based on a FIFO Entry Ranking Rule.
Merging Cell Aligned Conveyors With Different Speeds – Same setup as above but Each conveyor has Entity Alignment set
to ‘Cell Location’, Cell Spacing Type is set to ‘Fixed Number Cells', Number of Cells is set to ‘8’ and Auto Align Cells is set to
‘No’
Entities will merge based on a FIFO Entry ranking rule, but when it is an entities turn to merge, it must first wait for an
available chain dog. Similar to other accumulating cell aligned conveyors, the remaining waiting entities will step
their way to the end of the conveyor when chain dogs become available.
126 / 1277
Simio Reference Guide
ExamplesOfFunctions_DynamicObjects -
SimBit
Problem:
I would like to understand some of the functions available to use with dynamic objects (entities, transporters, etc).
Categories:
Functions
Key Concepts:
Capacity.Allocated, CurrentLink, DestinationNode, Distance, Dynamic Object, Floating Label, FrontTraffic, Function, ID,
IsRiding, Location.X, Math.Round(), NumberCreated, NumberDestroyed, NumberInSystem, Ride on Transporter,
RideStation.Capacity.Remaining, CurrentTransporter, Round, SlipSpeed, TransferNode, Vehicle
Assumptions:
The functions shown in this model are not the entire list of available functions. To see all the available functions and to get
additional information on all functions, see the Functions page.
Status Labels are used to display the expressions for the population functions. Status Labels are added to the Facility
window from the Animation Ribbon. Floating Labels are used to label these functions. Floor Labels are used to display the
titles of each section. Rectangles and Polylines were also used to create the displays in this model. Floating Labels, Floor
labels, Rectangles and Polylines are all added to the Facility window from the Drawing Ribbon. The functions that are
attached to the entity and the Transporter are attached Floor Labels that contain both text and expressions.
Technical Approach:
The attached Floor Labels were added to this model by first placing a Vehicle (from the standard library) into the Facility
window. Also place a ModelEntity (from the project library) into the Facility window.
Click on each object and select Floor Label from the Attached Animation category in the Ribbon. Draw an attached Floor
Label and then click on the Edit button in the Ribbon to edit the text. Text is typed into the Label Text window directly. An
expression can be entered into this label by surrounding it with curved brackets { }. Because the expressions are attached to
the object, the object qualifier does not need to be part of the expression. For example, to display
Vehicle1.Capacity.Allocated in a label that is attached to Vehicle1, the expression should read { Capacity.Allocated}.
Details for Building the Model:
Examples of Functions Available for a Dynamic Object
Vehicle1.Capacity.Allocated – Returns the current number of capacity units of Vehicle1 that have been allocated
(have been seized) Note: These are resource capacity units, not ride capacity units.
Vehicle1.CurrentLink – If Vehicle1’s leading edge is currently on or at the end of a link, this function returns a
reference to the link.
Vehicle1.DestinationNode – Returns a reference to the Vehicle1’s current destination node or returns ‘Nothing’ if it
does not have a destination assigned.
Vehicle1.ID – Returns the unique ID number of Vehicle1.
Vehicle1.RideStation.Capacity.Remaining – Returns the current available carrying capacity of this transporter.
Vehicle1.SlipSpeed – If the entity (or vehicle) is currently on a link, then this function returns the minimum of the
link’s current speed or the speed of the next entity immediately ahead on the same link. If there is no traffic ahead on
the link, then this function simply returns the link’s current speed.
DefaultEntity.ID – Returns the unique ID number of this entity.
DefaultEntity.DestinationNode – Returns a reference to the entity’s current destination node or returns ‘Nothing’ if
it does not have a destination assigned
DefaultEntity.FrontTraffic.Distance – If the entity object is currently on a link, then this function returns the distance
from the entity’s leading edge to the trailing edge of the next entity immediately ahead on the same link. If there is
no traffic ahead on the link, then this function returns the distance from the entity’s leading edge to the end of the
link. Note: The FrontTraffic function can be used alone and it will return True (or 1) if there is an entity ahead of it on
the link. In addition to the Distance function, there is also a FrontTraffic.ID function that will return the ID of any front
127 / 1277
the link. In addition to the Distance function, there is also a FrontTraffic.ID function that will return the ID of any front
traffic and FrontTraffic.Speed that will return the current speed of an entity that is traveling ahead on the link. See
Functions, States and Events for Link Objects for more information.
DefaultEntity.IsRiding – Returns ‘True’ (or ‘1) if the entity is currently riding on a Transporter.
DefaultEntity.CurrentTransporter – If the entity object is currently riding on a transporter, then this function returns
a reference to that transporter.
DefaultEntity.Location.X – Returns the X coordinate of the object’s current location. Therefore, this changes as the
entity moves along the link. Location.X and Location.Y are also available.
Examples of Functions Available a Population of Dynamic Objects
DefaultEntity.Population.NumberInSystem – Returns the current number of objects of this object’s type that are
currently in the system.
DefaultEntity.Population.NumberCreated – Returns the total number of objects of this object’s type that have been
created.
DefaultEntity.Population.NumberDestroyed – Returns the total number of objects of this object’s type that have
been destroyed.
See Also:
The SimBit titled ExamplesOfFunctions_StaticObjects for examples of functions that are available for static objects.
128 / 1277
Simio Reference Guide
ExamplesOfFunctions_StaticObjects - SimBit
Problem:
I would like to understand some of the functions available to use with static objects.
Categories:
Functions
Key Concepts:
AssociatedStationLoad, Average, AverageTimeWaiting, Capacity.Allocated, Capacity.Remaining, Contents,
CurrentDirection, EventCount, InputBuffer, LastRecordedValue, Load, Location.X, NumberEntered, NumberOccurences(),
NumberTravelers, NumberWaiting, OutputBuffer, Path, PercentTime(), Processing, ResourceState, Server, Sink,
TimeInSystem, TimeOnLink, TotalTime()
Assumptions:
The functions shown in this model are not the entire list of available functions. To see all the available functions and to get
additional information on all functions, see the Functions page.
Status Labels are used to display the expressions. Status Labels are added to the Facility window from the Animation
Ribbon. Floating Labels are used to label the functions. Floor Labels are used to display the titles of each section.
Rectangles and Polylines were also used to create the displays in this model. Floating Labels, Floor labels, Rectangles and
Polylines are all added to the Facility window from the Drawing Ribbon.
Details for Building the Model:
Examples of Functions Available for a Source
Source1.Location.X – Returns the X coordinate of the Source’s current location. The location function is available for
all static and dynamic objects. Other options available are Location.Y and Location.Z
Source1.EntityArrivals.EventCount - Returns the number of events that have been fired by the Timer since its last
reset. The EventCount function is available with any Timer element.
Source1.OutputBuffer.Contents – Returns the number of entities currently in the OutputBuffer station. There are
other functions available to use with the Contents queue, such as AverageNumberWaiting and
MaximumTimeWaiting. See the Functions page for information on Queue State functions.
Examples of Functions Available for a Path
Path1.CurrentDirection – Returns the current direction of traffic on this link. The value returned is
Enum.TrafficDirection.Forward, Enum.TrafficDirection.Reverse or Enum.TrafficDirection.None. (1, 2 or 3). This function
is available for all Link objects.
Path1.TimeOnLink.Average – Returns the average time the traveler was on this link. Maximum and Minimum are
also available.
Path1.NumberTravelers – Returns the current number of travelers on this link. There are other functions available to
use with this function: NumberTravelers.Accumulated, NumberTravelers.Average, NumberTravelers.Minimum,
NumberTravelers.Maximum, NumberTravelers.Entered, NumberTravelers.Exited. See Functions, States and Events for
Link Objects Help page for additional information on these functions.
Examples of Functions Available for a Sink
Sink1.InputBuffer.NumberEntered – Returns the total number of entity objects that have entered this station.
NumberExited is also available.
Sink1.TimeInSystem.Average – Returns the average of the observations recorded. In this example, this is the
average time in system of the entity objects that enter into this Sink object. TimeInSystem is a TallyStatistic element
and Average is a function available to all TallyStatistic elements. Other functions available for TallyStatistics are
NumberObservations, HalfWidth, LastRecordedValue, Maximum and Minimum. The value is multiplied by 60 to
convert from hours to minutes and is rounded to 1 significant digit using the Math.Round function.
Sink1.TimeInSystem.LastRecordedValue – Returns the last recorded value for this TimeInSystem TallyStatistic
within the Sink object. The TimeInSystem is referring to the TimeInSystem of the entities that enter this Sink object.
TimeInSystem is a TallyStatistic element and LastRecordedValue is a function available to all TallyStatistic elements.
129 / 1277
TimeInSystem is a TallyStatistic element and LastRecordedValue is a function available to all TallyStatistic elements.
Other functions available for TallyStatistics are NumberObservations, HalfWidth, Average, Maximum and Minimum.
The value is multiplied by 60 to convert from hours to minutes and is rounded to 1 significant digit using the
Math.Round function.
Examples of Functions Available for a Server
Server1.Capacity.Remaining – Returns the current unallocated capacity of this object. Other related functions are
Capacity.Allocated, Capacity.Initial, Capacity.Maximum, Capacity.Minimum, Capacity.Previous, Capacity.Remaining,
Capacity.AllocatedTo(owner) ( Returns the number of capacity units of this object currently seized and owned by the
executing token’s associated object.)
Server1.Capacity.Allocated – Returns the current number of capacity units of this object that are allocated (have
been seized).
Server1.InputBuffer.Contents.AverageTimeWaiting – Returns the average time that an entity waited in the
Contents queue state of the InputBuffer(in hours). In other words, the average time that an entity spent in the
InputBuffer of Server1. There are other functions available to use with the Contents queue, such as
AverageNumberWaiting and MaximumTimeWaiting. The value is multiplied by 60 to convert from hours to minutes
and is rounded to 1 significant digit using the Math.Round function. See the Functions page for information on
Queue State functions.
Server1.InputBuffer.Contents.NumberWaiting – Returns the current number of entities waiting in the InputBuffer
of Server1.
Server1.Processing.Contents – Returns the current number of entities that are in the Processing station of Server1.
Server1.ResourceState.PercentTime(1) – Returns the percent time that this Resource list state had the value of 1. In
other words, the percentage of the total simulation time that Server1 was in the Resource State of 1 ( Processing). *
Server1.ResourceState.TotalTime(0) – Returns the total time that this Resource list state had the value of 0. In other
words, the total amount of time that Server1 was Starved or Idle. *
Server1.ResourceState.NumberOccurences(3) – Returns the number of times that Server entered into the Resource
list state of 3. In other words, it returns the number of times that Server1 entered the Failed state. *
Server1.ResourceState == 1 - Returns the value of 0 if Server1 is not currently in ResourceState of 1 and returns a
value of 1 when Server1’s ResourceState is currently = 1. *
[email protected] – For an external input node, this function returns the current 'load' on the
station locations inside the node's associated object that may be entered using the node. The associated station
'load' is defined as the sum of current entities en route to the node intending to enter the stations, plus the current
entities already arrived to the node but still waiting to enter the stations, plus the current entities occupying the
stations.
* NOTE: Default Server ResourceState Values: 0 – Starved, 1 – Processing, 2 – Blocked, 3 – Failed, 4 - OffShift, 5 -
FailedProcessing, 6 - OffshiftProcessing, 7 - Setup, 8 - OffshiftSetup
See Also:
The SimBit titled ExamplesOfFunctions_DynamicObjects for examples of functions that are available for dynamic objects.
130 / 1277
Simio Reference Guide
ExcelReadWrite - SimBit
Problem:
I want to use MS Excel to read data into Simio and also to write data from Simio.
Categories:
File Management
Key Concepts:
Add-On Process, ExcelRead Step, ExcelWrite Step, Assign Step, ExcelConnect Element, String State Variable, Integer State
Variable
Technical Approach:
ExcelConnect element is used to connect with the Excel sheet. An add-on process is used where row and column position
are defined using Assign step from where data has to be read in Excel file. Then using ExcelRead step, data is read and
using ExcelWrite step, data is written into Excel.
Details for Building the Model:
Simple System Setup
Within the Facility window, add a Source, a Server and a Sink from Standard Library. Connect the objects using Paths.
Within the Source object, change the Maximum Arrivals (under Stopping Conditions) to ‘30’.
Within the output node of the Source, within the Add-On Process Triggers section, double-click on the Entered
property to create a new process named ‘Output_Source1_Entered’.
Within the Definitions tab, click on the States panel. Add a String State and three Integer State and name them
‘StringState’, ‘RowIntegerState’, ‘ColumnIntegerState’, ‘IntegerState’.
Next, click on Element panel and within the Element Ribbon, select on User Defined button to select ExcelConnect
element. In the property window for ExcelConnect1 created, enter the Excel Workbook name ‘ExcelReadWrite.xlsx’.
Within the Processes window, in the Process named Output_Source1_Entered, add two Assign steps from Common
Steps panel and ExcelRead and ExcelWrite Step from User Defined panel of steps.
For the first Assign step, assign the State Variable Name ‘ColumnIntegerState’ and New Value ‘ColumnIntegerState
+1’. For the sSecond Assign step, assign State Variable Name ‘RowIntegerState’ and New Value ‘RowIntegerState +1’.
For the ExcelRead step, select ‘ExcelConnect1’ from the list for the ExcelConnect property. Click on Worksheet and
enter ‘Sheet1’. For Row , enter ‘RowIntegerState’ and for Starting Column, enter ‘1’. Then click on States to open
repeating property editor. Add. a State ‘StringState’ and another State ‘IntegerState’.
For the ExcelWrite step, again select ‘ExcelConnect1’ for the ExcelConnect property. Add the Worksheet value of
‘Sheet2’. For Row, enter ‘RowIntegerState’ and for Starting Column, enter ‘ColumnIntegerState’.Then click on Items to
enter the repeating property editor. Add an Expression named ‘TimeNow’, one named ‘StringState’ and one named
‘IntegerState’.
Within the Facility window, click on the Animation ribbon. Select Status Label and draw two Status Labels in Facility
window. For the first Status Label, enter the Expression ‘StringState’. For second Status Label, enter the Expression
‘IntegerState’.
131 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
132 / 1277
Simio Reference Guide
FacilityModelWithinModel - SimBit
Problem:
You have a facility in which many of the operations are similar. You wish to make a single “object” that encompasses 3 serial
processes into a single process for simplicity.
Categories:
Building New Objects / Hierarchy
Key Concepts:
BasicNode, Expression Property, External View, ExternalNode, Server, To Parent External Node, Bind To External Input
Node, Bind To External Output Node, Externally Visible
Assumptions:
The similar processes that will be made into an object include a single Server ( ProcessA ), which then moves entities to one
of 2 more Servers ( Process B ), followed by a fourth Server ( ProcessC).
Technical Approach:
Within the first model, called ProcessABC, we will define the processing necessary for this single object. It includes
ProcessA, ProcessB_1 and ProcessB_2, and ProcessC. All logic for these Servers will be assumed unchangeable except for
the Processing Time property for each. Therefore, when this ProcessABC model is placed into the Facility Window of
another model, the user must only specify the four processing times for the various Servers. The External Window is used to
define the view of the model, including the input and output nodes.
Details for Building the Model:
Simple System Setup
Rename Model to ProcessABC by clicking on MySimioProject, highlighting the Models panel and clicking on Model.
Pressing F2 (or clicking again on Model) will put you in rename mode.
Place 4 Servers within the Facility Window of ProcessABC and rename them to ProcessA, ProcessB_1, ProcessB_2
and ProcessC. Connect them with Paths – ProcessA to both ProcessB_1 and ProcessB_2, and then both ProcessB_1,
ProcessB_2 connected to ProcessC.
Defining the Properties of a Hierarchical Model
Highlight each Server and use the Processing Time property to indicate that the data for this processing time be
given in the parent object. This is done by highlighting the Processing Time property (it will turn blue) and using the
right click to select “Set Referenced Property” and then select “Create New Referenced Property”. This will open a
dialog to specify the name of the property in the parent ProcessABC that the user will be able to edit (i.e.,
ProcessTimeA ). Once you do this, the field will have the name of the property with a small green arrow in front of it.
This means that the value will be “inherited” from the parent object ProcessABC when it is placed in a model. Do this
will all four Servers.
Defining the External View of Model
From the Facility window, right click on the Input Node of ProcessA and select Bind To New External Input Node. You
will be prompted to name the new External Node. Keep the default name of Input_ProcessA. This is the node where
entities will enter into this object. They will automatically enter this object and go directly into ProcessA.
Similarly, right click on the Output Node of ProcessC and select Bind To New External Output Node. You will be
prompted to name the new External Node. Keep the default name of Output_ProcessC. This is the node where
entities will exit this object. They will automatically exit this object when they enter into the Output node of ProcessC.
Using the Model within Another Model
Open a new model and within its Facility Window, place a ProcessABC object from the Project Library.
Select the Source and Sink objects from the Standard Library and place them in the Facility Window.
Connect the Source1 to ProcessABC and then ProcessABC to the Sink1 using Paths. Notice when you highlight
ProcessABC, you have access to all the processing times, namely ProcessTimeA, ProcessTimeB_1, ProcessTimeB_2
and ProcessTimeC. When you run this new model, the logic behind ProcessABC then includes all logic specified
133 / 1277
and ProcessTimeC. When you run this new model, the logic behind ProcessABC then includes all logic specified
within that model.
Discussion:
Notice that when you placed the Server objects into the ProcessABC model, they automatically appeared as part of the
External View of that object. If you right click on each Server ( ProcessA, ProcessB, etc) in the Facility window of model
ProcessABC, you’ll see that the option, Externally Visible is selected by default. This means that these objects will be visible
in the External View of this object (will be seen when this object is placed inside another model). If you unselect Externally
Visible from the right click menu of an object, it will no longer appear in the External View of that object.
134 / 1277
Simio Reference Guide
FreeSpaceMovement - SimBit
Problem:
I would like to learn how an Entity and a Vehicle can travel in Free Space.
Categories:
Add-On Process Logic, Movement In Free Space, Vehicles
Key Concepts:
Add-On Process, FreeSpace, Initial Network, ModelEntity, Transfer Step, Travel Step
Assumption:
Moving in Free Space means that an entity is moving within the Facility window but it is not moving on a Link.
Technical Approach:
This project contains three models and each model demonstrates a concept in free space movement.
The model named FreeSpaceTravelWithNoDestinationSet contains a DefaultEntity with its Initial Network property set to
‘No Network ( Free Space)’. The entity does not have a destination set when it travels so Simio will send the entity to the
closest External Input Node. In this model there are three possible External Input Nodes for it to travel to; Input@Server1,
Input@Server2 or Input@Sink1. Moving these objects around before or during the run will show that the entity will always
choose the node that is closest to its current location.
The model named TransferIntoFreeSpace_UseTravelStep contains a DefaultEntity with its Initial Network property set to
the default value of ‘Global’. This allows the entity to travel on the Path leaving the Source. When the entity enters
BasicNode1, the Add On Process uses a Transfer Step to transfer the entity into Free Space and then the Travel Step tells
the entity to move to the location where BasicNode2 is currently located. After the entity arrives at that location, another
Transfer Step transfers the entity from Free Space into BasicNode2. Since it is still on the Global network, it will then follow
the Path leaving BasicNode2 and travel to Sink1.
The model named VehicleTravelInFreeSpace contains a DefaultEntity and a Vehicle that both have their Initial Network
property set to ‘No Network ( Free Space)’. This demonstrates how a vehicle can travel in free space.
Details for Building the FreeSpaceTravelWithNoDestinationSet Model:
Place a Source, two Servers, and a Sink into the Facility window. Leave some space between the objects so you can
see the entity moving in Free Space.
Place a ModelEntity object from the Project Library into the Facility window.
Select the DefaultEntity instance in the Facility window and change the Initial Network property to ‘No Network
( Free Space)’.
The entity does not have a destination set and because there are no links, the entity does not know where to go. In this
situation, Simio will find the closest External Input Node and send the entity there. In this model, the External Input Nodes
are Input@Server1, Input@Server2 and Input@Sink1. Whichever node is closest to the entity will be selected as its
destination. Move the objects around to see how the destination changes depending on the distance between the entity
and the input nodes.
Details for Building the TransferIntoFreeSpace_UseTravelStep Model:
Place a Source, a Sink and two Basic nodes into the Facility window. Connect the output node of the Source to
BasicNode1 with a Path. Connect BasicNode2 to the input node of Sink1 with a Path.
Select BasicNode1 and create a new Add On Process by selecting ‘Create New’ in the dropdown of the Entered Add
On Process trigger property of this node. This will create a new process that will appear in the Processes window.
Place a Transfer Step into the process. Set the From property to ‘CurrentNode’ and the To property to
‘FreeSpace’.
Place a Travel Step. Set the Destination Type to ‘Specific Object’, set the Destination Object to ‘BasicNode2’,
and set the Units (under Maximum Movement Rate) to ‘Meters per Second’.
Place another Transfer Step and set the From property to ‘FreeSpace’, the To property to ‘Node’ and the Node
Name property to ‘BasicNode2’.
135 / 1277
By default, the DefaultEntity is set to travel on the Global network. This allows it to travel on all Links. Therefore, it travels
on the Path leaving the Source and arrives at BasicNode1. At that point, we need to tell the entity to go into FreeSpace.
We do that with a Transfer Step, transferring the entity from the current node into Free Space. The Travel Step is used only
when an entity is in Free Space and it tells the entity where to move. When the entity arrives at BasicNode2, it is still in Free
Space so it cannot travel on the Path into the Sink. So we need another Transfer Step that transfers the entity from Free
Space into BasicNode2. At this point, it’s still on the global network and therefore it travels on the Path into the Sink.
Details for Building the VehicleTravelInFreeSpace Model:
Place a Source, a Sink and a Transfer node into the Facility window.
Place a Vehicle into the Facility window.
Set the Vehicle’s Initial Network property to ‘No Network ( Free Space)’. Set the Initial Node (Home) property
to ‘TransferNode1’ and the Idle Action property to ‘Go To Home’.
Place a ModelEntity into the Facility window from the Project Library (bottom left of screen).
Set the Initial Network property to ‘No Network ( Free Space)’.
Select the Output@Source1 node and set the Entity Destination Type property to ‘Specific’ and the Node Name
property to ‘TransferNode1’.
Select TransferNode1 and set the Entity Destination Type property to ‘Specific’ and the Node Name property to
‘Input@Sink1’. Set the Ride On Transporter property to ‘True’ and the Transporter Type property to ‘Specific’ and the
Transporter Name property to ‘Vehicle1’.
This is a simple model demonstrating that a Vehicle can travel in Free Space.
Embellishments
Instead of a Vehicle object, use a Worker object to show that a Worker can also travel in Free Space. A Travel Step can also
be used with a Vehicle or Worker object.
136 / 1277
Simio Reference Guide
FileSecurity - SimBit
Problem:
I would like to password protect my model.
Categories:
File Management
Key Concepts:
Add-On Process, Data Table, Dynamic Object Property, Expression Property, Numeric Property, On Creating Entities,
Password Protect, RandomRow, SetRow Step, Source, String Property
Assumptions:
The password to open the object named MyModel is ‘simio’.
Technical Approach:
A password will be added to MyModel by using the Protection feature.
Details for Building the Model:
Adding a Password to MyModel
Click on MySimioProject in the Navigation window and select the Models panel.
Highlight the model that you would like to password protect and click on the Protect button in the Edit ribbon.
Enter ‘simio’ or a desired password into the field.
Upon reopening the project file, the correct password will have to be entered to gain access.
You can later unprotect the model by selecting the Unprotect button if desired.
Embellishments
This method of protection can also be used for any model object in the Navigation window.
137 / 1277
Simio Reference Guide
Financials - SimBit
Problem:
I would like my model to calculate costs, such as capital costs of objects, usage costs, holding costs and the cost of
transporting an Entity on a Vehicle.
Categories:
Add-On Process Logic, Decision Logic – Paths, Entity Characteristics, Servers, Vehicles
Key Concepts:
Add-On Process, Assign Step, Bidirectional Path, Cost Center, Financials, InputBuffer, ModelEntity, Entered, Pivot Grid,
Processing, Ride on Transporter, Selection Weight, Server, Vehicle
Technical Approach:
This model gives examples of how to use a few different costing features in Simio. One object demonstrates the Capital
Cost property, another uses the Holding Cost property which calculates the cost to hold an Entity in the Input Buffer of this
object. The model also shows how the user can manually apply costs with an Assign step. It also contains a Vehicle which
has costs associated with each Entity that rides on the Vehicle. All the costs in this model are rolled up into one of four Cost
Centers.
Details for Building the Model:
Simple System Setup
Place a Source object and change the Interarrival Time property to ‘Random.Exponential(.8)
Place a Server object and change the Name of the Server to 'InspectionA', connect the Source to the Server with a
Path.
Place a Sink object and name it FailedInspection. Connect the Server 'InspectionA' to this FailedInspection Sink with
a Path. Set the Selection Weight property to ‘.3’.
Place a second Server object and Name it 'Paint'. Connect the Paint Server to the InspectionA Server with a Path and
set the Selection Weight property to ‘.7’
Place a Sink object and Name it 'Sink1'. Connect the Paint Server to this Sink with a Path. Change the Type property
on the Path to ‘Bidirectional’.
Place a Vehicle object. Set its Initial Home property to ‘Output@Paint’ and change its Name to 'Car'.
Click on the TransferNode of the Paint Server ( Output@Paint) and within the Transport Logic section of properties,
change Ride on Transporter to ‘True’ and Transporter Name to ‘Car’.
Configure Costing of InspectionA
Select InspectionA ( Server) and open the Financials property category. View the drop-down selection list for the
Parent Cost Center property by clicking on the down arrow that appears when this property is selected.
Create a new Cost Center by selecting ‘Create New’ from the drop-down. Name this new Cost Center
‘InspectionCostCenter’. All the costs incurred at this Server will be rolled up to this new Cost Center.
Configure Costing of Paint
Select Paint ( Server) and change the Processing Time property to ‘Random.Triangular(.2, .3, .4)’. Open the Financials
property category. View the drop-down selection list for the Parent Cost Center property by clicking the down arrow
that appears when this property is selected.
Create a new Cost Center by selecting ‘Create New’ from the drop down. Name this new Cost Center
‘PaintCostCenter’. All the costs incurred at this Server will be rolled up to this new Cost Center.
Set the Capital Cost property to ‘1,000’ USD. This is a one-time cost of $1,000 to just own this Server.
Expand the Buffer Costs subcategory and expand the Input Buffer category. Set the Holding Cost Rate (under
Input Buffer) to ‘200’ USD per Hour. This is a $200 cost for each hour that an Entity if held in the Input Buffer
of this Server.
Configure Costing of Vehicle
Select the Vehicle object and set the Parent Cost Center property to a new Cost Center named ‘TransportationCosts’.
Expand the Transport Costs property category and set the Cost Per Rider property to ‘10’ USD. This cost will138
be / 1277
Expand the Transport Costs property category and set the Cost Per Rider property to ‘10’ USD. This cost will be
incurred each time a rider is loaded onto the Vehicle.
Configure Costing of Failed Inspections
Create a new Cost Center element by going into the Definitions window/Elements panel. Click on the Cost Center
element icon in the ribbon. Name this new Cost Center, ’CostOfFailedParts’.
Select the Path that connects the Server InspectionA to the Sink called FailedInspection. Double-click on the Add-On
Process trigger property Entered to create a new Add-On process.
Place an Assign Step in the process and set the State Variable Name to ‘CostOfFailedParts.Cost’ and the New
Value to ‘CostOfFailedParts.Cost + 150’. Therefore, each time an Entity enters this path and therefore executes
this process, $150 will be added to the Cost Center CostOfFailedParts. This is an example of how to assign cost
manually within process logic.
Configure Costing of Production:
Production cost is comprised of costs incurred by Painting and Inspecting, so this Cost Center is a roll up of those two Cost
Centers.
Create a new Cost Center element by going into the Definitions window/Elements panel. Click on the Cost Center
element icon in the ribbon. Name this new Cost Center ‘ProductionCost’.
Select ‘InspectionCostCenter’ and ‘PaintCostCenter’ and change their Parent Cost Center to ‘ProductionCost’.
Configure Cost on the Entity:
Place a ModelEntity object into the Facility window. Expand the Financials property category and set the Initial Cost
Rate property to '100' USD per Hour. This is the cost per hour for this Entity.
Explanation of Results
Set the Ending Type of the model to ’10 hours’, on the Run tab of the ribbon menu. Run the model until the end. Click
on the Results Tab to view the Pivot Grid.
If you view the Model object type category, you will see the breakdown of costs into each of the 4 cost centers;
CostOfFailedParts, InspectionCostCenter, PaintCostCenter, TransportationCosts. You will also see a grand total of
costs at the Model object level.
To see details of the CostOfFailedParts cost, find the results for the Path2 (or the name of the Path where the Add On
Process is located which assigns the cost). Note the Total Number Entered in the Throughput category. It is 235.
Multiply this by the cost for entering that path ($150), you get the total of $35,250, which is the total cost of the
CostOfFailedParts cost center.
To see the details of the InspectionCostCenter, find the results for the InspectionA Server.
You’ll first notice costs in the Input Buffer station of this object. This comes from the cost on the Entity object.
The cost of the Entity, when it is located at this Server’s InputBuffer, is rolled up into the InspectionCostCenter.
Note the Average Number in Station (.0479) and multiply this by the Cost Rate on the Entity object ($100) and
also by the total simulation time (10 hrs). This is a total of $47.8816, which is shown in the Total Cost of this
InputBuffer.
Also notice that there are costs for the Processing station of this Server. This cost comes from the cost on the
Entity object. The cost of the Entity, when it is located at this Server’s processing station, is rolled up into the
InspectionCostCenter. Note the Average Number in Station for processing (.2619) and multiply this by the Cost
Rate on the entity object ($100) and also by the total simulation time (10 hrs) and this gives $261.9343, which is
shown in the Total Cost of this processing station.
To see the details of the PaintCostCenter, find the results for the Paint Server. We had put a $1,000 value in the
Capital Cost for this object and this is shown in the Capital Cost Data Item of this object.
We also put $200 USD per Hour in the Holding Cost for the Input Buffer of this object. The cost of the Entity
also needs to be included, which is $100 USD. Note the Average Number in Station is .0270. Multiply $300
times .0270 and then by the 10 simulation hours and you get the total cost of this Input Buffer station, $80.8547.
There is also cost in the Processing Station, which is the cost of the Entity at this object. Note the Average
Number in Station is .2777. Multiply that by 10 simulation hours and $100 entity cost and you get the $277.7135
shown in the total for this station.
To see the details of the TransportationCosts, see the Vehicle object type results. There are two costs being rolled into
this cost center.
The first is the Transport Cost that we defined, which is $100 for every rider. Note the Number Entered in the
Throughput category of the RideStation is 555. Multiply this by $100 and you get a total of $5550.00.
The other cost if the cost of the Entity. Note the Average Number In Station of this RideStation is .04622.
Multiply this by $100 ( Entity cost) and by the 10 simulation hours and you get 46.2. Once added to $5550, the
139 / 1277
Multiply this by $100 ( Entity cost) and by the 10 simulation hours and you get 46.2. Once added to $5550, the
total cost of $5596.25 (shown in the results) is reached.
140 / 1277
Simio Reference Guide
FindAMinimumStateValue - SimBit
Problem:
I have 3 servers and want to keep track of the total processing time allocated to server (including entity at the server and
those en route) with a state variable. I want to then find the minimum value to the various servers to even out the load to
each throughout the simulation.
Categories:
Add-On Process Logic, Decision Logic -- Processing, Discrete States, Entity Characteristics
Key Concepts:
Add-On Process, Assign Step, Data Table, Find Step, SetNode Step, State Variable, Status Label
Assumptions:
We assume that the method for allocating entities to the various servers is based on the smallest processing time sent to
any given server. Each entity will be assigned a processing time when it is created.
Technical Approach:
Use a state on the entity to assign the entity processing time upon its creation. Use a state variable (vector) that stores the
total processing time for each given server based on the entity at the server and those en route to the server. Use the Find
step to determine which of the three servers has had the least amount of processing time allocated to it. The first value
within the state variable will refer to the first server, Server1, and so on. We will also store the input node for each of the
three servers within a table, so that we can use the SetNode step to set the appropriate destination after the Find step.
Details for Building the Model:
Adding the ModelEntity ProcessingTime
Within the Navigation window, click on the ModelEntity and go to the Definitions tab, States panel.
Add a real state variable named ProcessingTime, which will be referred to as ModelEntity.ProcessingTime in the
model.
Within the Navigation window, click on the Model and go to the Facility window.
Add a Source, three Servers and a Sink to the Facility window.
Connect the Source to each of the three Servers and each Server to the Sink with Paths.
Within the Definitions window, States panel, add an integer type variable named ‘Index’. This will be used within the
Find step itself. This variable will remain as Dimension Type of ‘Scalar’.
Add a real state variable named ‘ServerProcessingTime’. Change the Dimension Type to ‘Vector’ and the Rows to ‘3’.
These values are then referenced ServerProcessingTime[1], ServerProcessingTime[2] and ServerProcessingTime[3].
After the Find step, from the ‘Found’ exit, place an Assign step and a SetNode step. Within the Assign step, set the
State Variable Name to ‘ServerProcessingTime’ and the Row to ‘Index’. Input the New Value as
‘ServerProcessingTime[ Index] + ModelEntity.ProcessingTime’. Remember that the value ‘Index’ will be either 1, 2 or 3
(starting to ending index) based on the search type and expression specified. Therefore, with this Assign step, we are
increasing the value of whichever minimum variable was found by the entity’s processing time that was assigned in
the Source.
Within the SetNode, we will be leaving the Destination Type as ‘Specific’ and now need to determine how to specify
the Node Name for the corresponding server to where we’d like the entity to move.
Because the variable ‘Index’ will return a value between 1-3, we will set up a data table that will have corresponding
input nodes for the three Servers. We’ll then index into the table within the SetNode step. To do this, go to the Data
window, Tables panel and add a Data Table named ‘Table1’. Add an Object Reference type column of type Node.
Change the Name of the column to ‘WhichServer’. Input the three input nodes for the servers, such as Input@Server1,
Input@Server2 and Input@Server3. We can then reference the correct row by the variable ‘Index’.
Go back to the Processes window and within the SetNode step, set the Node Name to ‘Table1[ Index].WhichServer’.
This will set the entity destination to the appropriate server. Because the Entity Destination Type on the
Output@Source1 node is ‘Continue’, the entity will use its node destination to know where to go next.
Within each of the three servers, change the Processing Time property to ‘ModelEntity.ProcessingTime’ to use the
value that was assigned to each individual entity.
Within the Before Exiting section of the State Assignments of each server, we will decrease the state variable vector
for the particular server. Set the State Variable Name to ‘ServerProcessingTime’. For Server1, the Row would be ‘1’, for
Server 2, the Row would be ‘2’ and so on. The New Value should be ‘ServerProcessingTime[1] –
ModelEntity.ProcessingTime’ (for Server1, with the value in brackets reflecting the server number). This will then
decrease the state variable after the entity is processed.
Enhancements:
Add a Status Label next to each of the Servers that references the state variable vector for each (such as
ServerProcessingTime[1], etc.). This way, you can see that the incoming entity is sent to the one with the minimum value of
that vector. Additionally, on the DefaultEntity placed in the Facility window, attach a status label that shows the
ModelEntity.ProcessingTime value as it moves through the system.
142 / 1277
Simio Reference Guide
FlowConcepts - SimBit
This SimBit project includes eight models that demonstrate the use of the Simio Flow Library. Models included in this
SimBit:
1.SimpleFlow – Demonstrates flow from a FlowSource object, through a FlowConnector object, to a FlowSink object.
2.FillingEmptyingTank – Demonstrates filling and emptying a tank object.
3.TransferringFromOneTankToAnother – Demonstrates transferring from one tank object to another.
4.MergedFlow – Demonstrates merging two different entity flows.
5.SplitFlow – Demonstrates splitting a single entity flow into two entity flows.
6.CreateDiscreteEntitiesBasedOnFlow – Demonstrates the use of monitors and events to create discrete entities
when a tank reaches a certain flow level.
7. SimpleFiller – Demonstrates the use of the ContainerEntity and Filler objects to illustrate a filling operation of
combining discrete containers with continuous flow.
8. SimpleEmptier – Demonstrates the use of the Emptier object to illustrate full container entities with multiple
products emptying into multiple flow streams based on their product type to flow sink objects.
Model 1: SimpleFlow
Problem:
I want to create an entity flow from a FlowSource object, through a FlowConnector , to a FlowSink object. In addition, I
want to monitor the flow volume and stop the flow at 5 cubic meters of total volume.
Categories:
Flow Library
Key Concepts:
FlowSource, FlowSink, FlowConnector
Assumptions:
Flow rate and stopping condition are in units of cubic meters.
Technical Approach:
Create entity flow using a FlowSource and send it directly to the FlowSink through a FlowConnector. Terminate the flow
using the Maximum Volume stopping condition on the FlowSource.
Details for Building the Model:
Simple System Setup:
Place a FlowSource and FlowSink from the Flow Library in the Facility window.
Connect the source and sink using a FlowConnector.
Set the Maximum Volume property of the FlowSource object to ‘5’ cubic meters.
Place a Status Label and set its Expression property to
‘[email protected]’.
Place a Status Label and set its Expression property to ‘[email protected]’.
Place a ModelEntity from the Project Library into the model and change the color to whatever color you’d like the
flow to be.
Model 2: FillingEmptyingTank
Problem:
I want to fill a tank until the tank reaches the high mark. Once reaching the high mark, the tank should empty until it
reaches the low mark, at which point it should repeat the fill-empty cycle.
Categories:
143 / 1277
Flow Library, Add-On Process Logic
Key Concepts:
FlowSource, FlowSink, Tank, FlowConnector, Assign Step
Assumptions:
Flow is in units of cubic meters.
Technical Approach:
When the tank reaches the high point, stop the flow from the source and start the flow out of the tank. When the tank
reaches the low point, start the flow from the source and stop the flow out of the tank.
Details for Building the Model:
Simple System Setup
Place a FlowSource, at Tank, and a FlowSink from the Flow Library in the Facility window.
Connect the FlowSource to the Tank input and the Tank output to the FlowSink.
Set the Initial Volume Capacity of the Tank object to ‘10’ cubic meters.
Set the Low Mark, Mid Mark, and High Mark properties of the Tank object to ‘2’, ‘5’, and ‘8’ cubic meters, respectively.
Create an add-on process for the Above High Mark property of the tank. This process should use two Assign steps to
assign ‘[email protected]’ to ‘False’ (shutting off the flow though the output node of the
FlowSource) and ‘[email protected]’ to ‘True’ (enabling the flow out of the tank).
Create an add-on process for the Below Low Mark property of the tank. This process should also use Assign steps to
assign ‘[email protected]’ to ‘True’ (enabling the flow though the output node of the
FlowSource) and ‘[email protected]’ to’ False’ (shutting off the flow out of the tank).
Add the Status Labels displaying the volume in the Tank and the maximum flow rate and flow enabled state of the
output FlowNodes of the FlowSource and Tank objects. Keep in mind that ‘False’ is a value of 0, while ‘True’ is a value
of 1 within the enabled state labels.
Model 3: TransferringFromOneTankToAnother
Problem:
I would like to fill a tank until it reaches its high point. Once this happens, I’d like to transfer the contents into another tank
at a much higher rate. When the second tank reaches its high point, empty it.
Categories:
Flow Library, Add-On Process Logic
Key Concepts:
FlowSource, FlowSink, FlowConnector, Tank, Regulator, Assign Step
Assumptions:
Flow is in units of cubic meters and flow rates are in units of cubic meters per hour.
Technical Approach:
Add up two tanks and set the flow rates for the output node of the first tank and the input to the second tank to be higher
than the input to the first tank (and the output from the source). Control the flow between the tanks and to the sink using
the add-on processes for the tank levels.
Details for Building the Model:
Simple System Setup
Place a FlowSource, two Tanks, and a FlowSink from the Flow Library in the Facility window.
Connect the FlowSource to one of the Tank inputs, that Tank’s output to the other Tank’s input, and the second Tank’s
output to the FlowSink (all using FlowConnectors).
Set the Initial Volume Capacity for both Tank objects to ‘10’ cubic meters and set the first tank’s low medium and high
marks to ‘1’, ‘5’, and ‘9’ cubic meters, respectively. Set the second tank’s low, medium, and high marks to ‘0’, ‘5’, and ‘8’
cubic meters, respectively.
144 / 1277
Set the Initial Maximum Flow rate parameters for the Output@Tank1 and the Input@Tank2 to be ‘1500’ cubic meters
per hour.
Set the Initial Maximum Flow rate parameters for the Output@Tank2 and the Input@FlowSink1 to be ‘200’ cubic
meters per hour.
Set the Above High Mark add-on process for Tank1 to enable flow to Tank2 by assigning the
‘[email protected]’ to ‘True’ and set the Below Low Mark add-on process to disable the flow by
setting the same property to ‘False’.
Set the Above High Mark add-on process for Tank2 to enable flow to the sink by assigning the
‘[email protected]’ to ‘True’ and set the Below Low Mark add-on process to disable the flow by
setting the same property to ‘False’.
Add status labels for the current volume in the tanks.
Place 3 ModelEntity objects in the Facility window and change the color of each to be different. Within the output
flow nodes of the tanks, change the Initial Output Entity Type to be ‘ModelEntity2’ and ‘ModelEntity3’, respectively, to
show different flow colors on all the three connectors.
Model 4: MergedFlow
Problem:
I want to merge two flows into a single flow.
Categories:
Flow Library
Key Concepts:
FlowSource, FlowSink, FlowConnector, FlowNode
Assumptions:
All entity types may merge together. Flow will be merged proportionally based on the inflow rates from the various
sources.
Technical Approach:
Create two separate entity flows and merge them into a single flow at a FlowNode.
Details for Building the Model:
Simple System Setup
Place two FlowSource objects and a FlowSink object in the Facility window.
Place a FlowNode between the two FlowSource objects and the FlowSink object.
Connect each FlowSource object to the FlowNode using FlowConnectors.
Connect the FlowConnector to the FlowSink.
Set the Initial Maximum Flow Rate properties for FlowNode1 and the Input@FlowSink1 to be ‘200’ cubic meters per
hour.
Set the Flow Control Mode for FlowNode1 to be ‘Merge Flow’.
Place three ModelEntity instances in the Facility window and specify that each of the two FlowSources use a different
entity type by setting the Entity Type property.
Set the Initial Output Entity Type property for FlowNode1 to be the third entity type.
Add status labels for the flow volumes ( FlowNode.FlowRegulator.CurrentVolumeFlowOut).
Model 5: SplitFlow
Problem:
I want to split a single flow into two flows and use the flow connector link weights to determine the proportion of flow set
to each link.
Categories:
Flow Library
Key Concepts:
145 / 1277
FlowSource, FlowSink, FlowConnector, FlowNode
Assumptions:
The link weights of the outgoing FlowConnectors to the FlowSinks will be used to proportionally allocate flow in each
direction.
Technical Approach:
Use the Split Flow option on the FlowNode to allocate flow proportionally to a number of FlowSink objects.
Details for Building the Model:
Simple System Setup
Place a FlowSource object and two FlowSink objects in the Facility window.
Place a FlowNode between the FlowSource and the two FlowSink objects.
Connect the FlowSouce to the FlowNode and connect the FlowNode to the two FlowSink objects using
FlowConnectors.
Set the Flow Control Mode property for FlowNode1 to ‘Split Flow’ and change the Split Allocation Rule to
‘Proportional Based On Link Weights’.
Set the Selection Weight properties for FlowConnector2 and FlowConnector3 to ‘.65’ and ‘.35’, respectively.
Create status labels for the flow rates using the Expression: ‘Math.If( TimeNow > .05,
FlowConnector2.CurrentVolumeFlowOut /TimeNow, "N/A")’.
Model 6: CreateDiscreteEntitiesBasedOnFlow
Problem:
I want to create a discrete entity based on the amount of flow coming out of a tank. This model is an enhancement of the
FillingEmptyingTank model in this project.
Categories:
Flow Library, Add-On Process Logic
Key Concepts:
FlowSource, FlowSink, FlowConnector, Tank, Monitor
Assumptions:
A discrete entity is created for every 1 cubic meter of volume transferred out of the tank.
Technical Approach:
A monitor is used to detect changes in the volume transferred out of the tank. The monitor crossing value is changed every
time a cubic meter is transferred, so that the crossing value is increased each time a discrete entity is created. The Source
for discrete entities is based on an event triggered by the monitor to generate the entities at the appropriate times.
Details for Building the Model:
Simple System Setup
Place a FlowSource, at Tank, and a FlowSink from the Flow Library in the Facility window.
Connect the FlowSource to the Tank input and the Tank output to the FlowSink.
Set the Tank properties similar to that of the Tank in the FillingEmptyingTank model (described above).
Add the Tank1_AboveHighMark and Tank1_BelowLowMark add-on processes like the FillingEmptyingTank model.
Add a Source and Sink from the Standard Library to the Facility window. Place an additional ModelEntity in the
window as well and name it ‘ModelEntity2’.
Connect the Source1 to the Sink1 with a Conveyor. Change the Initial Desired Speed to ‘3’ and the Units to ‘Meters
per Minute’.
Within the Definitions window, Elements panel, add a Monitor element with the Name ‘TransferMonitor’. This will
monitor the tank based on the current volume flow out of the tank.
146 / 1277
Change the Monitor Type to CrossingStateChange. The State Variable Name that we will be monitoring is based on
the function ‘[email protected]’. Change the Initial Threshold Value to ‘1’. This
monitor will automatically cause an event when the tanks output volume crosses the threshold in the positive
direction. You’ll see that we will be also changing the threshold value within the process.
Within the Processes window, add a new process. The Triggering Event for the process will be the
‘TransferMonitor.Event’. Within this process, add an Assign step, where the State Variable Name is
‘TransferMonitor.CurrentThresholdValue’ and the New Value is ‘Math.ceiling( TransferMonitor.CurrentThresholdValue)
+ 0.999999’. This will increase the threshold of the monitor from its initial value of 1 (at the start of the simulation) by
1 each time a discrete entity is generated. This will cause the monitor to be fired for every volume out change of 1
cubic meter. Use 0.999999 instead of 1 to make sure the entity is created before the lower mark process is triggered.
Within the Source in the Facility window, change the Entity Type to ‘ModelEntity2’, the Arrival Mode to ‘On Event’ and
the Triggering Event Name to ‘TransferMonitor.Event’. Therefore, a discrete entity will only be generated when the
TransferMonitor.Event is fired.
Model 7: SimpleFiller
Problem:
I want to have liquid volume arrive to a filling operation and fill containers until they are full.
Categories:
Flow Library
Key Concepts:
ContainerEntity, Filler, FlowSource, FlowConnector
Assumptions:
Flow rate is in units of cubic meters and will fill containers until they are full.
Technical Approach:
Create entity flow using a FlowSource and send it directly to the Filler through a FlowConnector. Create ContainerEntities
using a Source that move into the Filler to be filled with liquid volume.
Details for Building the Model:
Simple System Setup
Place a FlowSource and Filler from the Flow Library in the Facility window and connect them using a FlowConnector.
Place a ContainerEntity in the Facility window from the Flow Library as well.
From the Standard Library, place a Source and connect the Source with the ContainerInput node of the Filler using a
Path.
Place a Sink to the right of the Filler and connect the output from the Filler with the Sink with a Path.
Within the Source, change the Entity Type to ‘ContainerEntity1’ to create container type entities instead of model
entities.
Model 8: SimpleEmptier
Problem:
I want to have full containers of a mixed liquid (2 product types) that I’d like to empty and send to their respective
locations.
Categories:
Flow Library
Key Concepts:
ContainerEntity, Emptier, FlowSource, FlowConnector, Processing Count Based
Assumptions:
Flow rate is in units of cubic meters and product will flow from the emptier based on product type.
Technical Approach:
Full container entities are created using a Source and sent directly to the Emptier. Two flow streams exit the FlowNode of
the Emptier to multiple FlowSinks. The Flow Control Mode of the Emptier’s output FlowNode is Single Flow ( No Splitting)
such that the product is only split based on the Selection Weights of the flow connectors.
147 / 1277
Details for Building the Model:
Simple System Setup
Place a Source and a Sink from the Standard Library in the Facility window.
Place an Emptier and two FlowSink objects from the Flow Library in the Facility window. Connect the Source to the
Emptier and connect the ContainerOutput of the Emptier to the Sink using Paths.
Connect the FlowOutput of the Emptier to each of the FlowSinks using FlowConnectors.
Place a ContainerEntity in the Facility window from the Flow Library, as well as two ModelEntity objects from the
Project Library.
ModelEntity and ContainerEntity Setup
Change the Name of one of the ModelEntity objects to ‘Red’ and the other to ‘Green’. Change the Red entity color
triangle to the color red using the Symbols ribbon.
Edit the ContainerEntity object Initial Contents by adding two rows to the repeating property editor. First, the Entity
Type should be ‘Green’ with a Quantity of ‘.1’. The second initial content should be of Entity Type ‘Red’ with a Quantity
of ‘.1’. Given that the Initial Volume Capacity is the default value of ‘0.2’, this will fill the container when the entity is
first created.
Within the Source, change the Entity Type for arriving to be ‘ContainerEntity1’.
Emptier Configuration
Within the Emptier, we will also define Reliability Logic, such that the Emptier fails every x ContainerEntities that it
processes. Change the Failure Type to ‘Processing Count Based’, with the Count Between Failures as ‘20’ and the Time
to Repair as ‘Random.Uniform(.5,1) and Units as ‘Minutes’.
On the FlowOutput node of the Emptier, specify the Initial Maximum Flow Rate of ‘60’ (default Units of ‘Cubic Meters
per Hour’). In the Output Flow Control section, change the Flow Control Mode to ‘Single Flow ( No Splitting)’ so that
the flow will not be automatically split by volume between the two flow connectors. We’d like the flow out to be
based only on product. This will then be done ‘By Link Weight’ as the Outbound Link Rule.
Click on the FlowConnector to FlowSink1 and specify the Selection Weight as ‘Is.Red’. If this expression evaluates to
‘True’ or a value of ‘1’, then the product can flow through this connector. On the second FlowConnector to FlowSink2,
change the Selection Weight to ‘Is.Green’. Therefore, when the product is emptied from the containers at the
Combiner, the Red product will flow to FlowSink1, while the Green product will flow to FlowSink2.
148 / 1277
Simio Reference Guide
HierarchyWithTables - SimBit
Problem:
I have a model that references data from tables and I would like to place this model inside of another model. Therefore, I
would like to have a “submodel” reference data in a table.
Categories:
Building New Objects / Hierarchy, Data Tables
Key Concepts:
Add-On Process, BasicNode, Contents, Data Table, Expression Property, Expression Property, ExternalNode, Foreign Key,
Key column, Numeric Property, Numeric Property, On Entered, Processing, Queue, Repeating Group Property, Resource,
Search Step, Server, SetRow Step, String Property, Submodel, Token, TransferNode, Externally Visible, Bind To External
Output Node, Bind To External Input Node
Technical Approach:
The model is the placed into another model is a SimBit named “SearchTableUponEnteringObject”. That model contains
three Servers in parallel. An entity travels to one of the three Servers, seizes a certain number of Resources, delays for a
certain amount of time and then releases the Resources. The number of Resources and the delay duration are different for
each Server. This information is stored in a table. To find the appropriate row in the table, the token must search the table
and find the row that contains the information for that particular Server. The search uses the ID of the Server object to find
the appropriate row in the table.
In Simio, all tables exist at the top level, e.g. in the main model. Any “outside” data that is referenced inside an object or
submodel must be passed into the submodel via properties defined on that submodel. The mechanism for passing in sets
of data like found in Tables is to define a Repeat Group property. This Repeat Group is then used to store the information
from the top level model. A Search step in the submodel can be used to search the Repeat Group property to find the
appropriate row of information.
Details for Building the Model:
Update the Submodel
Facility window
Delete the Source object and replace it with a Basic Node and connect this to the first Transfer Node with a
connector. The Basic Node is the entry point into this model. We no longer need a Source object because entities will
be created in the top level model and enter this submodel through the new Basic Node.
Delete the Sink object.
Definitions window
Create a new Repeating Group property from the Properties panel by clicking the ‘Repeat Group’ icon in the ribbon.
Name this property ‘Data’. Type ‘Custom Properties’ into the Category Name property of this Data property so this
new property is in its own category, for easier reading.
Ensure that this new property is selected/highlighted in the window and then selecting ‘Expression property’ from the
Standard Property drop down in the ribbon. This will create a new Expression Property within the Repeat Group
property. Name this Expression property ‘Hours’.
Click back onto the Data Repeat Group property in the window and select Object from the Object Reference
property drop down to create an Object Reference property within the Repeat Group. Name this ‘ServerName’.
Add a final property to the Repeat Group and this property should be an Integer Property, found under the Standard
Property drop down. Name this property ‘NumberOfResources’.
Now, using the Search feature on the Project Home tab, find all the references to the ServerData table and change
these references to the new “Data” repeat group instead. You’ll often need to right click on a property name, select
‘Set Referenced Property’ and then select Data from the list of properties that appear.
The Data Table named ServerData is no longer needed so this can be deleted.
Create an External View
By Default, all the objects in the Facility window are set to be Externally Visible, which means that they will be part of
the External View of this object. If you have placed any status labels or floor labels, you might consider not149having
/ 1277
the External View of this object. If you have placed any status labels or floor labels, you might consider not having
these be part of the External View. To remove them from the External View, right click on the object in the Facility
window and select Externally Visible, so that it is no longer highlighted. Similarly, consider not having the static
Resource object be visible in the External View. Right click on this object and select Externally Visible.
To create the entry point into this model, you will need to create an External Node. Select the Basic Node at the
beginning of this model and right click. Select Bind To New External Input Node. Set the name to ‘Input’.
Similarly, select the Transfer Node at the end of this model and right click. Select Bind To New External Output Node.
Set the name to ‘Output’. This creates an exit point for entities to travel out of this model.
Rename the model by right clicking on the object within the Navigation window in the top right of the Simio
interface. Select Rename from the right click drop down menu and name the model ‘SearchTable’.
Create the Main, Top Level Model
Create a new Model, either within the same project or in another project. If you create a new model in another project,
you’ll need to load this submodel into the project by using the “Load Library” icon on the Project Home tab.
Facility window
Place a Source and a Sink and place two instances of the submodel in parallel between the Source and the Sink.
Connect the Source and the Sink to both submodel instances with Paths. Change the Interarrival Time of the Source
to ‘Random.Exponential(3)’.
Data window
Create two new Data Tables by clicking ‘Add Data Table’ from the ribbon. Name one table ‘ServerData’ and the
other table ‘ServerNames’.
In ServerData, add three columns; a String Property column named “Name”, an Integer Property column named
“NumberOfResources” and an Expression Property column named “Hours”.
Click on the Name column and select ‘Set Column as Key’ from the ribbon
Place the following data into the Table:
Server1,3,.1
Server2,2,.05
Server3,1,.02
In ServerNames, add two columns; an Object Reference column named “ServerNames”, and a Foreign Key column
named ServerName (click Foreign Key from ribbon). Set the Table Key property of the Foreign Key column to
'ServerData.Name'.
Place the following data into the Table:
Server1, SearchTable1.Server1
Server2, SearchTable1.Server2
Server3, SearchTable1.Server3
Server1, SearchTable2.Server1
Server2, SearchTable2.Server2
Server3, SearchTable2.Server3
Facility window
Back in the Facility window, click on one of the instances of SearchTable and find the new Data property. Open the
Repeat Group by clicking of the ellipse on the far right and hit Add when the new window pops up.
Right click on Hours and set this to ‘ServerData.Hours’.
Type in ‘ServerData.NumberOfResources’ into the NumberOfResources property.
Right click on ServerName and set this to ‘ServerNames.ServerNames’.
After closing the Repeat Group editor window, right click onto the Data property, select ‘Set Referenced
Property’ and select ‘ServerNames’. This is telling the Data property to look to the ServerNames table.
Repeat the above steps for the second instance of the submodel.
See Also:
Open the SimBit named “SearchTableUponEnteringObject.spfx” to see details of how that model was built.
150 / 1277
Simio Reference Guide
HourlyStatistic - SimBit
Problem:
I want to know the average number of Entities in a Server’s Input Buffer per hour of the simulation.
Categories:
Add-On Process Logic, Buffering, Building New Objects / Hierarchy, Custom Statistics
Key Concepts:
Add-On Process, Hourly Statistic, TallyStatistic, Tally Step, Subclass, Custom Object, Timer, MyServer
Assumptions:
We are only concerned with Hourly Statistics.
Technical Approach:
We will create a timer that will fire every hour and trigger a process to record the average value for that particular hour.
Details for Building the Model:
Simple System Setup
Place a Source, a Server, and a Sink in the Facility Window.
Connect the Source to the Server, and the Server to the Sink with Paths.
Creating the States and Elements
In the Elements panel of the Definition tab, add a TallyStatistic and a Timer.
Name the TallyStatistic ‘HourlyAverage’ and the Timer ‘HourlyTimer’.
Keep the defaults for TallyStatistic.
Change the Time Offset to ‘1 hour’ in the Timer.
In the States panel of the Definitions tab, add two Real States.
Rename the states to ‘AverageAtBeginning’ and ‘TimeAtBeginning’.
Creating the Assignment Process
In the Processes tab, click ‘Create Process’ to add a new process to the model.
Rename this Process CalculateHourlyAve.
Set the Triggering Event to ‘HourlyTimer.Event’.
Place a Tally Step in the process.
Set the Tally Statistic Name to ‘HourlyAverage’.
Leave the Value Type as ‘Expression’ and set the Value to
‘( Server1.InputBuffer.Contents.AverageNumberWaiting * Run.TimeNow - AverageAtBeginning *
TimeAtBeginning)/( HourlyTimer.TimeInterval)’.
Server1.InputBuffer.Contents.AverageNumberWaiting returns the Average Number Waiting for the entire run, if you
multiply by Run.TimeNow you will get the total number of Entities that had to wait in the Input Buffer for the entire
run. Next we then subtract AverageAtBeginning (which we save each time) multiplied by the TimeAtBeginning to get
the total number of Entities that had to wait in the Input Buffer BEFORE this interval started. By subtracting the total
number waiting before this interval from the total number waiting, you get the total number waiting DURING this
interval. Finally, to get the Average over that interval, we divide the Number Waiting during the interval by the
TimeInterval of the timer (which in this case is 1 hour).
Place an Assign Step in the process.
Assign the State Variable Name ‘AverageAtBeginning’ the New Value of
‘Server1.InputBuffer.Contents.AverageNumberWaiting’.
Add another assignment that assigns ‘TimeAtBeginning’ the New Value of ‘Run.TimeNow’.
As seen in the previous Tally Step, these values will be used to determine the “old” number waiting for the entire run
that will be subtracted from the “new” number waiting to get the number waiting for that interval.
151 / 1277
Embellishments:
This methodology is easy to implement when dealing with a small number of servers, but could become quite tedious
when trying to implement on a large scale – a separate TallyStatistic and AverageAtBeginning State would be needed for
each Server.
To avoid having to do all of these manual assignments, we can move all of this logic (the Timer, Tally, States, and Process)
into a sub-classed Server. Everything is essentially the same except instead of Tallying/Assigning
‘Server1.InputBuffer.Contents.AverageNumberWaiting’ we only need to use the expression
‘InputBuffer.Contents.AverageNumberWaiting’ because the process is referring to its Parent Object.
With all of the logic contained inside the MyServer, you just have to place the object in the Facility window and each
MyServer will calculate the Average Number Waiting itself. This is demonstrated within the UsingCustomServer found in
the Navigation window.
Also, the technique of Subtracting the old Total from the current Total Divided by a Time Interval will work for any length
interval – it does not have to be 1 hour. That is why we divide by ‘HourlyInterval.TimeInterval’.
152 / 1277
Simio Reference Guide
ImportExportTables - SimBit
Problem:
I would like to import data from a .csv file into a data table in Simio.
Categories:
Data Tables
Key Concepts:
Before Creating Entities, Connector, Data Table, Export Table, Expression Property, Import Data, Numeric Property,
Random.Discrete(), Server, Source, Table Row Referencing
Assumptions:
This example model is a simple source, server, sink model and the server gets its processing time by reading the data in this
imported table.
Technical Approach:
It is recommended that before you import a table that you create an empty table that has the appropriate properties
(columns) and then export this table to a .csv file. After filling this table with data, the user can import this table into the
empty table that was created in Simio.
Details for Building the Model:
Simple System Setup
Place a Source, Server and a Sink the Facility Window. Connect the Source to the Server and the Server to the Sink
with Paths.
Assigning Table Row Number
Within the Source object, within the Table Row Referencing / Before Creating Entities section, enter a Table Name of
‘Table1’ and the Row Number equal to ‘Random.Discrete(1, .25, 2, .5, 3, .75, 4, 1)’. This will assign the token a row
number from a discrete distribution to assign the values 1, 2, 3 and 4 with equal probability.
Adding a Data Table and Exporting Blank Table
In the Data Window, select the Tables panel and click on the Add Data Table icon from the ribbon. The main part of
the window will appear blank, but you will see a new tab created with the name of the new table ( Table1, by default).
To add a column to this table, select Expression from the Standard Property drop down. Change the Unit Type to
‘Time’ and the Default Units to ‘Minutes’ so that our processing times may be specified in minutes.
Click on the Export icon from the Table tab in the ribbon. Save the .csv file to the computer.
Importing Data to a Data Table
Open the .csv file in an editor, such as Excel, and add the appropriate data, keeping the column name untouched.
To import the data, the spreadsheet must first be ‘bound’ to the model. Click on the ‘Create Binding’ button in the
Content ribbon, select CSV file then select the appropriate File Name. Then, select Binding Options from the Content
ribbon and select Manual to manually import the data into the table. The Import button will then be available to
import the data from the spreadsheet into Simio.
Using the Data Table in the Server
In the Facility Window, set the Processing Time property of the Server to read ‘Table1.ExpressionProperty1’ (assuming
you kept the default name, ExpressionProperty1, of the expression property in the table).
153 / 1277
Simio Reference Guide
InfectionPropagationUsingContinuousAndFlow
- SimBit
Problem:
I want to know how to model a continuous system or how to model System Dynamics. I want to know how to model a
system of infection propagation.
Categories:
Continuous Systems, Flow Library, Functions, Level States
Key Concepts:
Assign Step, Decide Step, Delay Step, FlowConnector, Functions, Level State Variable, OnRun Initialized Process, System
Dynamics, Tank
Technical Approach:
There are two models in this project, demonstrating two different ways to model this system. The model named,
“UsingFlowObjects” demonstrates how to model the system with objects from the standard flow library. There are four
Tank objects, connected together with Flow Connectors. The contents in the first tank represent the total population, which
is susceptible. The second tank represents the number of people exposed to the infection. The flow nodes in between these
tanks are set to allow flow at the rate of RateExposed, which is a function that calculates the rate of exposure. The third
tank represents the number of people who are infectious. The flow nodes in between Exposed and Infectious allow flow at
the rate of RateInfectious, which is a function that calculates the rate of infection. The fourth tank represents the number of
people who have recovered. The flow nodes between Infectious and Recovered allow flow at the rate of RateRecovered,
which is a function that calculates the rate in which people recover.
The model named, “UsingLevelStates” demonstrates how to model the system using Level State variables and one simple
process. Instead of having Tank objects represent the number of people in each stage, this model uses Level State variables
(continuous variables). There are four of these variables, representing Susceptible, Exposed, Infectious and Recovered. A
process is called upon Run Initialized it assigns a new value to these level state variables and then delays for one hour, after
which the rates of the variables are updated again. Similar to the model using Flow Objects, this model also uses Functions
to calculate rates.
Details for Building the Model – UsingFlowObjects:
Adding Properties and Functions
Go to the Definitions window and into the Properties panel. Create the following new Numeric properties, which will
allow the user to input information into the model regarding the population size and infection rates.
TotalPopulation – set the Default Value to ‘10000’, Unit Type to ‘Volume / Cubic Meters’.
Infectifity – set Default Value to ‘6’.
ContactRateInfectious – set Default Value to ‘1.25’.
AverageIncubationTime – set Default Value to ‘10’ and Unit Type to ‘Time / Hours’.
AverageIllnessDuration – set Default Value to ‘15’ and Unit Type to ‘Time / Hours’.
Click onto the Functions panel. Create three new functions.
RateExposed –set the Expression to ‘Infectious.FlowContainer.Contents.Weight * ContactRateInfectious *
Infectifity * Susceptible.FlowContainer.Contents.Weight / TotalPopulation’. Set the Return Type to ‘Number’ and
the Unit Type to ‘VolumeFlowRate’.
RateInfectious – set the Expression to ‘Exposed.FlowContainer.Contents.Weight / AverageIncubationTime’. Set
the Return Type to ‘Number’ and the Unit Type to ‘VolumeFlowRate’.
RateRecovered – set the Expression set to ‘Infectious.FlowContainer.Contents.Weight / AverageIllnessDuration’.
Set the Return Type to ‘Number’ and the Unit Type to ‘VolumeFlowRate’.
Adding Tanks to the Facility Window
In the Facility window, place four Tank objects from the Flow Library into the Facility window. Rename Tank1 to
‘Susceptible’, Tank2 to ‘Exposed’, Tank3 to ‘Infectious’ and Tank4 to ‘Recovered’. Connect Susceptible to Exposed with
a Flow Connector, Exposed to Infectious together with a Flow Connector and Infectious and Recovered together with
a Flow Connector. 154 / 1277
a Flow Connector.
Select all four Tanks by holding down CTRL and clicking onto each Tank. Enter ‘TotalPopulation’ into the Initial
Volume Capacity property of the tanks.
Click onto the Susceptible Tank and click into the Initial Contents property to indicate that there are initial contents in
this Tank. In the Repeating Property Editor, click Add to add a new row. The Entity Type property is ‘DefaultEntity’
and the Quantity property should be set to ‘TotalPopulation – 1’.
Click onto the Infectious Tank and click into the Initial Contents property to indicate that there are initial contents in
this Tank. The Entity Type property is ‘DefaultEntity’ and the Quantity property should be set to ‘1’.
Holding down the CTRL key, select the Output@Susceptible and the Input@Exposed and set the Maximum Flow
Rate Equation to ‘RateExposed’. This rate will be dynamically updated every hour because the Update Interval on
these nodes is set to ‘1’ hour, by default.
Holding down the CTRL key, select the Output@Exposed and the Input@Infectious and set the Maximum Flow Rate
Equation to ‘RateInfectious’. This rate will be dynamically updated every hour because the Update Interval on these
nodes is set to ‘1’ hour, by default.
Holding down the CTRL key, select the Output@Infectious and the Input@Recovered and set the Maximum Flow
Rate Equation to ‘RateRecovered’. This rate will be dynamically updated every hour because the Update Interval on
these nodes is set to ‘1’ hour, by default.
Details for Building the Model – UsingLevelStates:
Adding States, Properties and Functions
Go to the Definitions window and into the States panel. Create the following new Level State Variables by clicking
onto Level in the ribbon.
Pop_Susceptible
Pop_Exposed
Pop_Infectious
Pop_Recovered
Click into the Properties panel within the Definitions window. Create the following new Numeric properties, which
will allow the user to input information into the model regarding the population size and infection rates.
TotalPopulation – set the Default Value to ‘10000’.
Infectifity – set the Default Value to ‘6’.
ContactRateInfectious – set the Default Value to ‘1.25’.
AverageIncubationTime – set the Default Value to ‘10’ and the Unit Type to ‘Time / Hours’.
AverageIllnessDuration – set the Default Value to ‘15’ and the Unit Type to ‘Time / Hours’.
Click onto the Functions panel. Create three new functions.
RateExposed – set the Expression to ‘Pop_Infectious * ContactRateInfectious * Infectifity * Pop_Susceptible /
TotalPopulation’. Set the Return Type to ‘Number’.
RateInfectious – set the Expression to ‘Pop_Exposed / AverageIncubationTime’ and the Return Type to
‘Number’.
RateRecovered – set the Expression to ‘Pop_Infectious / AverageIllnessDuration’ and the Return Type to
‘Number’.
Adding Steps in Processes Window
In the Processes window, open the Select Process drop down from the ribbon and select OnRunInitialized. This will
create a new process that is triggered at the beginning of the run.
Place an Assign Step into this process. This Assign step will have two assignments.
Set State Variable Name to ‘Pop_Susceptible’ and New Value to ‘TotalPopulation – 1’.
Add another assignment in this step by opening the Repeat Group for Assignments ( More) and set State
Variable Name to ‘Pop_Infectious’ and New Value to ‘1.
Place another Assign Step in this process. This Assign step will have four assignments.
Open the Repeat Group for Assignments ( More) and set State Variable Name to ‘Pop_Susceptible.Rate’ and
New Value to ‘-RateExposed’.
Click Add to add another assignment. Set State Variable Name to ‘Pop_Exposed.Rate’ and New Value to
‘RateExposed-RateInfectious’.
Click Add to add another assignment. Set State Variable Name to ‘Pop_Infectious.Rate’ and New Value to
‘RateInfectious-RateRecovered’.
Click Add to add another assignment. Set State Variable Name to ‘Pop_Recovered.Rate’ and New Value to
‘RateRecovered’.
155 / 1277
Place a Delay step after the second Assign Step and set the Delay Time to ‘1’ (hour). Drag the segment leaving the
Decide Step so that it connects to the beginning of the second Assign step. This will tell the process logic to delay
for one hour and then update the Assignments in the second Assign step. It will therefore update the assignments
every hour.
156 / 1277
Simio Reference Guide
InitializeObjectPropertiesFromATable - SimBit
Problem:
I have objects in my model that should get their initial property values from information in a Data Table.
Categories:
Data Tables
Key Concepts:
Auto-Set Table Row Reference, Data Table, Set Referenced Property
Technical Approach:
There are two Servers in this model and each Server will get some initial property values from a Data Table. The Data
Table contains two rows; one for each Server that exists in the model. The Table contains four properties (columns): an
object instance property which contains the name of each Server, an expression property which contains the Processing
Time of each Server, another expression property which contains the Capital Cost of each Server, and another object
instance property that contains the name of a Worker object that this Server should seize during processing. In order for
each Server to know which row to look at in the Table, the first object instance property (column) that contains the name of
the Server, must have its Auto-set Table Row Reference property set to ‘True’. This tells Simio that the object contained in
this column will automatically have a row reference set to this table and therefore we can reference the data contained in
this table in the properties of each Server instance in the model.
Details for Building the Model:
Simple System Setup
Place a Source and Sink into the Facility window. Place two Server objects, in parallel and connect the Source to both
Servers with Paths and connect each Server to the Sink with paths.
Place four Basic Nodes in the center of the model so that they form a diamond shape. BasicNode1 is right below
Server1, BasicNode2 is right above Server2, BasicNode3 is at the left point of the diamond and BasicNode4 is on the
left point of the diamond. Connect these nodes together with Paths so the Worker can travel from node to node in a
circular pattern.
Place two Worker objects into the Facility window. Set the Initial Node property of Worker1 to ‘BasicNode3’ and its
Idle Action property to ‘GoToHome’. Set the Initial Node property of Worker2 to ‘BasicNode4’ and its Idle Action
property to ‘GoToHome’.
Create the Data Table
Go to the Data Window and click Add Data Table to create a new Table.
From the Object Reference drop down in the ribbon, select Object to create a new column. Rename this
column ‘ServerName’.
From the Standard Property drop down in the ribbon, select Expression to create a new column. Rename this
column ‘ProcessingTime’. In the Properties of this new column, set the Unit Type property to ‘Time’ and the
Default Units property to ‘Minutes’.
From the Standard Property drop down in the ribbon, select Expression to create a new column. Rename this
column ‘Capital Cost’.
From the Object Reference drop down in the ribbon, select Object to create a new column. Rename this
column ‘Worker’.
Fill in the following data into the new Table:
Row 1: Server Name = ‘Server1’, ProcessingTime = ‘Random.Triangular(.3, .4, .6)’, CapitalCost = ‘2000’, Worker
= ‘Worker1’.
Row 2: Server Name = ‘Server2’, ProcessingTime = ‘.5’, CapitalCost = ‘1000’, Worker = ‘Worker2’.
Click onto the first column, ServerName, so that you see its properties appear in the property window on the lower
right side of the interface. Under the Advanced Options property category, set the Auto-set Table Row Reference
property to ‘True’.
Configure Server to Read Table
157 / 1277
Go to the Facility window and select Server1. Expand the Financials Property category and right click into the Capital
Cost property of this Server and select ‘Set Referenced Property’. From the options available, find Table1.CapitalCost
and select this so that the Capital Cost property now gets its value from Table1.CapitalCost.
Right click into the Processing Time property of this Server and select ‘Set Referenced Property’. From the options
available, find Table1.ProcessingTime and select this so that the Processing Time property now gets its value from
Table1.ProcessingTime.
Expand the Secondary Resources property category and expand the Resource for Processing sub-category. Right
click into the Object Name property and select ‘Set Referenced Property’. From the options available, find
Table1.Worker and select this so that the Object Name property now gets its value from Table1.Worker.
Set the Request Move property to ‘To Node’ and set the Destination Node property to ‘BasicNode1’. Visually seeing
the Worker move to the Server will help validate that the Server is getting the correct information from the Table.
Exactly repeat the above four bullet points for Server2, except for the Destination Node property, set this to
‘BasicNode2’ instead so that the Worker moves to the node above Server2.
Embellishments:
Notice that this SimBit contains floor labels that display the property values of each Server to visually validate to the user
that each Server is getting the correct information from the Data Table.
158 / 1277
Simio Reference Guide
InterruptibleOperator - SimBit
Problem:
I would like to model a system with 2 Servers and a movable operator that needs to be present at the server for processing
and be able to interrupt the processing of a lower priority job for a higher priority job.
Categories:
Decision Logic -- Processing
Key Concepts:
Add-On Process, Allow Passing, Assign Step, BasicNode, Bidirectional Path, Current Symbol Index, Filter Expression, Initial
Desired Speed, Interrupt Step, Interrupted Process Action, Largest Value First, ModelEntity, Processing, After Processing,
Path, Priority, Ranking Expression, Ranking Rule, Release Step, Request Move, ResumeDelay, Seize Step, Server, Time
Offset, Value Expression, Vehicle
Assumptions:
The interrupted part is allowed to remain in the processing station until the operator returns. Upon processing for the
second time the job only requires the remaining processing time, no set-up or tear-down time.
Technical Approach:
Upon the arrival of a high priority job, the server will attempt to seize the operator. If the operator is already seized, the job
that is being processed is interrupted. The server releases the operator which is then seized by the high priority job’s server.
After the operator is finished processing all the high priority jobs, it is then released and re-seized by the low priority job.
Once the operator returns, the only processing time remaining on that entity is the remaining processing time that was not
executed before the interruption.
Details for Building the Model:
Simple System Setup
Drag in 2 Sources, 2 Servers, and 2 Sinks to the Facility View. Arrange them in two Source-Server-Sink sets and place
a Basic Node next to each Server.
Connect the Source-Server-Sink sets with unidirectional Paths and change Allow Passing to 'False' in the Paths going
from Source to Server. Connect the Basic Nodes with a bidirectional Path. Click on BasicNode1 and attach
ParkingStation.Contents queue, because this will be the Initial Node.
Defining a Vehicle
Drag a standard Vehicle into the Facility window. Change its Desired Speed to ‘0.1 Meters per Second’. Set the Initial
Node to ‘BasicNode1'. Set its Ranking Rule to ‘Largest Value First’, with a Ranking Expression of ‘ModelEntity.Priority’.
Altering Entities
Drag two ModelEntities into the Facility window and name them ‘HighPriorityJob’ and ‘StandardJob’.
Change the color of HighPriorityJob to red and set its Initial Priority to ‘3.0’.
Add an additional symbol to StandardJob and change the second symbol’s color to yellow. Set their Desired Speed
properties to ‘0.2 Meters per Second’.
Defining Fixed Objects
Change the Entity Type property in Source2 to ‘StandardJob’. Set the Interarrival Time to ‘Random.Exponential(30)’
minutes and Entities Per Arrival to ‘2’.
Change the Time Offset, as well as the Interarrival Time, in Source1 to ‘Random.Exponential(50)’.
Both Server1 and Server2 should have their Initial Capacity property set to ‘Infinity’, Processing Time property set to
‘Random.Triangular(10,20,30)’, and Input Buffer Capacity property set to ‘1’.
Adding Process Logic for Seizing and Releasing the Vehicle
In Server2, create a process in the Processing add-on process trigger. Add a Seize step in this process. Have this step
seize Vehicle1. Click on the “…” button to open the Repeating Property Editor. Click the Add button and choose
‘Vehicle1’ for the Object Name. Change Request Move from ‘None’ to ‘ToNode’ and the Destination Node to
159 / 1277
‘Vehicle1’ for the Object Name. Change Request Move from ‘None’ to ‘ToNode’ and the Destination Node to
‘BasicNode2’.
Also in Server2, create a process in the After Processing add-on process trigger. Add a Release Step that releases
Vehicle1. Click the “…” button next to Releases in the Property window to open the Repeating Property Editor. Click
the Add button and select ‘Vehicle1’ from the drop down list next to Object Name.
Similarly, you can do the exact same thing for Server1 (or you can re-use the process named Server2_AfterProcessing
and eliminate this step, if preferred). Add a Release Step that releases Vehicle1. Click the “…” button next to Releases
in the Property window to open the Repeating Property Editor. Click the Add button and select ‘Vehicle1’ from the
drop down list next to Object Name.
Adding Process Logic for Interruption
To set the Interrupting logic, create a process in Server1’s Processing add-on process trigger. Place an Interrupt Step
to interrupt the activity taking place at the other server ( Server2). Select the Process Name to
‘Server2.OnEnteredProcessing’ from the drop down list. Change the Interrupted Process Action to ‘ResumeProcess’.
On the Original segment leaving the Interrupt step, place a Seize step that seizes Vehicle1. Open the Repeating
Property Editor in the Seizes property. In the Editor, select ‘Vehicle1’ from the drop down list next to Object Name.
Change the Request Move to ‘ToNode’ with Destination Node ‘BasicNode1’.
On the Interrupted segment leaving the Interrupt step, place an Assign step that changes the picture of the
interrupted entity. Set the State Variable Name to ‘ModelEntity.Picture’, the New Value to ‘1’.
Add an additional Assignment to increase the interrupted Entity’s priority by opening the Repeating Property Editor
of the Assign Step. Add a new Item with State Variable Name set to ‘ModelEntity.Priority’ and set its New Value to ‘2’.
This gives the interrupted entity higher priority than an uninterrupted StandardJob so that it can resume processing
on this particular job but still lower Priority than a HighPriorityJob so it can be interrupted if need be.
After the Assign on the interrupted segment, add a Release step and select Vehicle1 in the Repeating Property
Editor. This releases the vehicle from Server2 and allows it to be seized by a HighPriorityJob.
Place a Seize step, seize Vehicle1 in the Repeating Property Editor. Set Request Move to ‘ToNode’ with Destination
Node set to ‘BasicNode2’. This puts the interrupted server back in the vehicle’s queue list of objects that are trying to
seize it, so that as soon as it become free it will return to Server2 to complete processing.
Finally, add an Assign step changing the picture back to the original green color to signify processing has resumed.
To do this, set the State Variable Name to ‘ModelEntity.Picture’ with a New Value of ‘0’.
See Also:
InterruptingAcrossMultipleServers and InterruptingServerWithMultipleCapacity.
160 / 1277
Simio Reference Guide
InterruptingAcrossMultipleServers - SimBit
Problem:
I have multiple entities with different priorities and multiple servers. If all servers are busy, I want to be able to interrupt the
processing at a server processing a lower priority entity.
Categories:
Decision Logic -- Processing
Key Concepts:
Add-On Process, Allow Passing, BasicNode, Blocked Destination Rule, Candidate, Condition Based, Connector, Decide
Step, Entity, Entity Destination Type, Filter Expression, Interrupt Step, Largest Value First, Last Seized, On Creating Entities,
On Entered, OnEnteredProcessing, Path , Priority, Ranking Rule, Real State Variable, Release Order, Release Step,
ResourceState, Save Remaining Time, Select Available Only, Selection Rule, Smallest Value First, Source, Transfer Step,
TransferNode, Value Expression
Assumptions:
All entities wait at one spot for an available server. All interrupted entities wait in the same FIFO queue.
Technical Approach:
All entities go to a single node with routing logic to select an available server. If all servers are busy and the entity that is
attempting to enter the server has a higher priority than at least 1 entity being processed, then the lower priority entity is
interrupted (with its remaining processing time saved) and routed back to the entry node.
Details for Building the Model:
Simple System Setup
Place 3 Sources, 3 Servers, 3 Entities, a Sink, a BasicNode and a TransferNode into the Facility Window. Position the
Sources so that they are aligned vertically and align the Servers similarly.
Rename the entities ‘LowPriority’, ‘MediumPriority’, and ‘HighPriority’.
Change the color of HighPriority to red and its Initial Priority to ‘3.0’. Change the color of MediumPriority to yellow
and its Initial Priority to ‘2.0’. Also, add an additional symbol and change its color to a slightly different shade of
yellow. For LowPriority, keep the Initial Priority at ‘1.0’ and the color green, but add an additional symbol and change
its color to a light green.
Rename the TransferNode 'Dispatch' and position it in between the Sources and the Servers. All Sources will be sent
here first and then to a Server.
Rename BasicNode1 ‘ReRoute’. Position this node above the set of Servers. This node will act as the exit point for the
interrupted jobs that have to be removed.
Draw paths going from the Sources to Dispatch (node), as well as from ReRoute to the Dispatch. Set the Allow
Passing property to ‘False’ for these paths to allow them to queue up at the Dispatch area.
Connect Dispatch to the Servers using Connectors and connect the Servers to the Sink with Paths.
Modifying Library Objects
Add a Discrete State to the ModelEntity called ‘ProcessingTime’. To do this, click on ModelEntity in the Navigation
window. Click on Definitions Tab, then States. Add a Discrete State, and then change the name to ‘ProcessingTime’.
Go back to the Navigation window and change to the Model for the following steps.
To select nodes and servers from a list, go to the Definitions tab and then to Lists panel. Add a Node List with name
of ‘ServerInputNodes’ with the nodes Input@Server1, Input@Server2, and Input@Server3.
Add an Object List and name it ‘ServerList’ with the objects Server1, Server2 and Server3.
Rename the Sources ‘LowPrioritySource’, ‘MediumPrioritySource’, and ‘HighPrioritySource’.
Modify the LowPriority Source so that it has an Entity Type of ‘LowPriorityJob’, Time Offset of
‘Random.Exponential(.5)’ and Interrarrival Time of ‘Random.Exponential(1)’.
Modify the MediumPrioritySource so that is has an Entity Type of ‘MediumPriorityJob’, Time Offset of
‘Random.Exponential(2)’, and Interrarrival Time of ‘Random.Exponential(2)’.
Modify the HighPrioritySource so that is has an Entity Type of ‘HighPriorityJob’, Time Offset of
‘Random.Exponential(3)’, and Interrarrival Time of ‘Random.Exponential(3)’.
Assigning Processing Time
Within the Processes window, create a New Process and name it ‘AssignProcessingTime’.
161 / 1277
Place an Assign step in the process and set the State Variable Name to ‘ModelEntity.ProcessingTime’, New Value is
‘Random.Triangular(.8,1.5,3)’ and Units is ‘Minutes’.
Enter this process name in the all three Sources’ Created Entities Add-On Process Trigger property.
Set all of the Servers’ Processing Time properties to ‘ModelEntity.ProcessingTime’. Also, change their Input Buffer
properties to ‘0’.
Dispatch Routing Logic
Dispatch needs to route jobs based on their priorities and only to servers with open processing stations. Change the
Ranking Rule to ‘Largest Value First’, the Entity Destination Type to ‘Select From List’, the Node List Name to
‘ServerInputNodes’ and the Blocked Destination Rule to ‘Select Available Only’.
Within the Dispatch node, double click on the Entered property of the Add-On Process Triggers to create the
Dispatch_Entered process.
Interruption Process Logic
Go to the Processes window and within the Dispatch_Entered process, follow the below steps.
Place a Decide step to determine if any Server is available. Change the Decide Type to ‘Condition Based’, and
Expression to
‘Server1.Capacity.Remaining==1||Server2.Capacity.Remaining==1||Server3.Capacity.Remaining==1||ModelEntity.Priority==1.5’.
If a Server is available, the Server*.Capacity.Remaining will return a value of 1 and the entity can be processed as
usual. Or, if the entity that entered the node has a Priority of 1.5, that means it’s a LowPriority Entity and should
interrupt anything.
From the False exit, add an Interrupt step and change the Process Name to ‘Server1.OnEnteredProcessing’, the
Selection Rule to ‘Smallest Value First’ and the Filter Expression to ‘Candidate.Entity.Priority < Entity.Priority’. Leave
the Value Expression as the default value ‘Candidate.Entity.Priority’.
In the Interrupt step, Advanced Options, add 2 more processes in Process Names ( More): including Process Name of
‘Server2.OnEnteredProcessing’ and Process Name of ‘Server3.OnEnteredProcessing’. Change the Save Remaining
Time property to ‘ModelEntity.ProcessingTime’.
On the Interrupted exit, place an Assign step and change the State Variable Name to ‘ModelEntity.Picture’, New Value
to ‘1’ and make another assignment under Assignments ( More) of State Variable Name called ‘ModelEntity.Priority’,
and New Value of ‘ModelEntity.Priority + .5’. This will make sure that if its an entity that has already been interrupted,
it keeps its priority the same (and doesn’t bump it up to the next level of entity priority).
Next, place a Release step and change the Object Type to 'FromList', Object List Name to ‘ServerList’ and Release
Order to ‘LastSeizedFirst’.
Lastly, add a Transfer step after the Assign step and change the From to ‘CurrentStation’, To to ‘Node’ and Node
Name to ‘Reroute’.
Embellishments:
In this model all interrupted entities wait on the same path with a FIFO selection method. This is because they are waiting
on the same path and only the first entity is being evaluated at the Transfer Node, all the other entities are still waiting to
arrive to the node. This means that if a LowPriorityJob is in front of a MediumPriorityJob, MediumPriorityJob would have
to wait for the LowPriorityJob to be processed before being considered. To correct this, add another path from ReRoute to
Dispatch with Allow Passing set to ‘False’. Change the Outbound Link Rule in the BasicNode to ‘By Link Weight’. Set the
Link Weight for one Path to ‘ModelEntity.Priority == 1.5’ and ‘ModelEntity.Priority == 2.5’ for the other. This will now allow
both types of entities to be present at the Node at the same time, correcting the selection logic.
See Also:
InterruptibleOperator and InterruptingServerWithMultipleCapacity.
162 / 1277
Simio Reference Guide
InterruptingServerWithMultipleCapacity -
SimBit
Problem:
I have a server with capacity of three and I would like a higher priority job to be able to interrupt the processing of one of
the lower priority jobs currently being processed, and move the interrupted job back into the input buffer to complete
processing later.
Categories:
Decision Logic -- Processing
Key Concepts:
Add-On Process, Assign Step, Before Exiting, Candidate, Capacity.Remaining, Decide Step, Entity, Filter Expression, From
Current Station, Interrupt Step, Largest Value First, On Entered, OnEnteredProcessing, Priority, Ranking Rule, Release Step,
Save Remaining Time, Selection Rule, Server, Smallest Value First, Source, State Assignments, Transfer Step, Value
Expression,Table Row Referencing
Assumptions:
All entities have the same Processing Time distribution and the remaining process time will be saved.
Technical Approach:
When the entity arrives to the Server, it looks at the server and sees if there is any remaining capacity. If not, the entity will
interrupt any entity with a lower priority than itself. If the arriving entity has the same or lower priority than the three entities
being processed it will enter the Input Buffer and wait for one of the entities to finish processing.
Details for Building the Model:
Simple System Setup
Drag in a Source, Server, and Sink. Connect them all with Connectors.
Drag in three Entity Instances and rename them ‘LowPriorityJob’, ‘MediumPriorityJob’, and’ HighPriorityJob’.
Change the color of HighPriorityJob to red and its Initial Priority to ‘3.0’, MediumPriorityJob to yellow and its Initial
Priority to ‘2.0’, and add an additional symbol to LowPriorityJob and change the additional symbol to a light green,
but leave its Initial Priority ‘1.0’.
Set Interarrival Time in Source1 to ‘Random.Exponential(.6)’ minutes.
Creating Multiple Entities from One Source
Add a Data Table in the Data tab and name it ‘JobMix’. Add a Real Property called ‘Percentage’ and an Entity Object
Reference Property called ‘EntityType’. Fill in the table so that it looks like:
Percentage----EntityType
70 -------------LowPriorityJob
30 -------------MediumPriorityJob
10 -------------HighPriorityJob
In Source1, set Entity Type to ‘JobMix.EntityType’.
Expand the Table Row Referencing->Before Creating Entities properties and set the Table Name to ‘JobMix’ and Row
Number to ‘JobMix.Percentage.RandomRow’.
Assigning Process Time to Entities
In the ModelEntity’s Definitions tab, add a Discrete State called ‘ProcessingTime’.
Then, within the model Facility window, in the Source, create a new process in the Created Entity add-on process
trigger and add an Assign step. In the step set State Variable Name to ‘ModelEntity.ProcessingTime’ and New Value
to ‘Random.Triangular(1,2,3)’.
Modifying Server1
163 / 1277
Drag Server1’s Input Buffer below and resize it so that it is approximately 4 servers long so that you can see the
activity.
Change the Server’s Initial Capacity to ‘3’.
Set the Ranking Rule to ‘Largest Value First’ with a Ranking Expression of ‘Entity.Priority’.
Change to Processing Time to ‘ModelEntity.ProcessingTime’.
Process Logic for Interrupting
On the Server, add an Add On Process Trigger to Entered to interrupt processing.
Place a Decide step to determine if the Server is Available. The Decide Type is ‘ConditionBased’ with the Expression
‘Server1.Capacity.Remaining > 0’. If this is True, interruption is not necessary and no further action is needed.
If it is False, it means that the Server is full and if the Entity has a higher Priority than any one entity on the Server
then we need to interrupt processing. So we place an Interrupt step on the False Branch with the following changes:
In General Options, change Process Name to ‘Server1.OnEnteredProcessing’, Selection Rule to ‘Smallest Value First’
( This interrupts the entity with the smallest priority), Value Expression to ‘Candidate.Entity.Priority’, and Filter
Expression to ‘Candidate.Entity.Priority < Entity.Priority’ ( Ensures that the entity the Server is considering interrupting
has a lower priority than the one that just entered the Server).
In Advanced Options, set Save Remaining Time to ‘ModelEntity.ProcessingTime’. The Server will now use remaining
processing time the next time it evaluates ModelEntity.ProcessingTime.
On the “Interrupted” branch, place an Assign step to change to picture of the interrupted entity. State Variable Name
is ‘ModelEntity.Picture’ and New Value is ‘1’. ( The “Original” branch is for the higher priority Entity so it will be
processed as usual, so therefore no steps are needed.)
After the Assign, place a Release step releasing Server1. Click on the “…” button and select ‘Server1’ from the Object
Name drop down list.
Then, place a Transfer step to transfer the entity back into the input buffer. Configure the Transfer Step so that From is
set to ‘CurrentStation’, To to ‘Station’, and Station Name to ‘Server1.InputBuffer’.
Enhancement:
Interrupted entities will not necessarily be processed ahead of other waiting entities. To make that happen:
After entities are interrupted, add an assignment to set ‘ModelEntity.Priority’ to ‘ModelEntity.Priority + 0.1’. This will
raise their priority to bring them to the front of the InputBuffer.
Modify the Filter Expression on the Interrupt step to read ‘( Candidate.Entity.Priority+.2) < Entity.Priority’. This will
prevent an interrupted entity from immediately interrupting another entity of the same nominal priority.
See Also:
InterruptibleOperator and InterruptingAcrossMultipleServers
164 / 1277
Simio Reference Guide
InputAnalysis - SimBit
Problem:
Because I am lacking enough real-world data for my model, I want to use Input Analysis and Response Sensitivity to
determine whether my models arrival rates or processing time have the biggest impact on the model responses ( Time In
System and Number In System).
Based on the limited number of real-world data inputs for Arrival Times and Processing Time in my model, I want to use
Input Analysis and Sample Size Error to determine which inputs have the biggest contribution to my output errors on the
model responses.
Categories:
Input Analysis
Key Concepts:
Input Parameters, Data, Analysis, Experiment, Response Sensitivity, Sample Size Error
Technical Approach:
There are two models in the project, each demonstrating a different aspect of Input Analysis. .Both models include a
simple 2 Source-Server-Sink logic to illustrate this input analysis features. Three Input Parameters are defined which will be
used to measure the effect of the changes in Arrival Rates and Processing Time on the Number in System and Time in
System.
In the first model, titled “ResponseSensitivity”, the input parameters include the distribution type, but no information on the
number of data samples for the data sets. In this model, the Response Sensitivity analysis within the experiment will be
used.
The second model, titled “SampleSizeError”, includes the same input parameters, but additional information regarding the
sample sizes for the distributions. It is assumed that each of the Input Parameter distributions have been derived based on
a sample size of 100. In this model, the Sample Size Error analysis within the experiment will be used.
Details for Building the Model - ResponseSensitivity:
Simple System Setup
Place two Sources, a Server and a Sink object in the Facility window. Connect each Source to the Server and the
Server to the Sink object using a Path.
Defining Input Parameters
In the Data window, select the Input Parameters panel button and add 3 Distribution parameters. Name them
‘Arrival1’, ‘Arrival2’, and ‘ProcessingTime’ respectively. For Arrival1, change the Distribution Type to ‘Exponential’ with
a Mean of ‘10’. Set the Unit Type to ‘Time’ and the Units to ‘Minutes’. Do the same for Arrival2 but change the Mean
to ‘12’.
For ProcessingTime, set the Distribution Type to ‘Triangular’ with a Minimum, Mode and Maximum set to ‘8’, ‘10’ and
‘12’ respectively. Change the Unit Type to ‘Time’ and change the Units to ‘Minutes’.
In the Facility window, on the Server object, change the Processing Time to ‘ProcessingTime’. On Source1 change the
Interarrival Time to ‘Arrival 1’. On Source2 change the Interarrival Time to ‘Arrival2’.
Defining the Experiment – ResponseSensitivity
In the Navigation window, right click on Model and select ‘New Experiment’.
In the Experiment window, click on the Design ribbon and select Add Response.
Name the Response ‘TimeInSystem’ and on this response add the Expression as
‘DefaultEntity.Population.TimeInSystem.Average’, change the Unit Type to ‘Time’ and the Display Units to ‘Minutes’.
Add another Response. Name this ‘NumberInSystem’. Change the Expression to
‘DefaultEntity.Population.NumberInSystem.Average’.
In the Experiment Properties window, change the Default Replications to ‘100’.
Analyzing the Results – ResponseSensitivity
165 / 1277
From the Experiment window, Design ribbon, select Run. Once the runs have completed, click on the Input Analysis
tab and then select Response Sensitivity on the panel.
A Tornado Chart with be displayed which will show each inputs sensitivity coefficient for each response. You can
select which response to view from the pull-down list in the upper left corner. Select TimeInSystem from the pull-
down list if it isn’t already displayed. What can be inferred here is that an increase in the ProcessingTime has the
most impact on the TimeInSystem of the entities.
Select NumberInSystem from the pull-down list and you can infer the same. However, for the NumberInSystem, there
is very little difference between an increase in ProcessingTime and a decrease in Arrival1. Click on the Bar Chart tab
at the bottom of this window. Here you can see the percentage of impact each input has on each response.
Details for Building the Model - SampleSizeError:
Simple System Setup
Place two Sources, a Server and a Sink object in the Facility window. Connect each Source to the Server and the
Server to the Sink object using a Path.
Defining Input Parameters
In the Data window, select the Input Parameters panel button and add 3 Distribution parameters. Name them
‘Arrival1’, ‘Arrival2’, and ‘ProcessingTime’ respectively. For Arrival1, change the Distribution Type to ‘Exponential’ with
a Mean of ‘10’. Set the Unit Type to ‘Time’ and the Units to ‘Minutes’. Change the Number of Data Samples to ‘100’
and set Include in Sample Size Error Analysis to ‘True’. Do the same for Arrival2 but change the Mean to ‘12’.
For ProcessingTime, set the Distribution Type to ‘Triangular’ with a Minimum, Mode and Maximum set to ‘8’, ‘10’ and
‘12’ respectively. Change the Unit Type to ‘Time’ and change the Units to ‘Minutes’. Change the Number of Data
Samples to ‘100’ and set Include in Sample Size Error Analysis to ‘True’.
In the Facility window, on the Server object, change the Processing Time to ‘ProcessingTime’. On Source1 change the
Interarrival Time to ‘Arrival 1’. On Source2 change the Interarrival Time to ‘Arrival2’.
Defining the Experiment – SampleSizeError
In the Navigation window, right click on Model and select ‘New Experiment’.
In the Experiment window, click on the Design tab and select Add Response.
Name the Response ‘TimeInSystem’ and on this response add the Expression as
‘DefaultEntity.PopulationTimeInSystem.Average’, change the Unit Type to ‘Time’ and the Display Units to ‘Minutes’.
Add another Response. Name this ‘NumberInSystem’. Change the Expression to
‘DefaultEntity.Population.NumberInSystem.Average’.
Change the Default Replications on this experiment to ‘100’.
Analyzing the Results – SampleSizeError
From the Experiment window, select the Design tab and select Run.
Once the runs have completed, select the Input Analysis tab and click on Sample Size Error panel button.
You must first click on Run Analysis button within the Sample Size Error ribbon. Once the runs have completed, a
chart will appear that will display the Contribution to Uncertainty for Scenario1. This shows which inputs have the
biggest contribution to the response. What can be inferred here is that Arrival1’s uncertainty has the biggest impact
on the TimeInSystem. The SMORE plot below the chart illustrates the standard confidence interval for the mean (in
tan) and the expanded half width due to input uncertainty in blue. As we can see from this graph we have more input
uncertainty than experimentation uncertainty in this example.
The second bar chart, Benefit of Additional Samples, shows the relative benefit of collecting additional data for each
input parameter. In many cases, such as in this example, the bar chart will appear similar to the relative Contribution
to Uncertainty bar chart. We would not expect this to be the case if the Number of Data Samples properties of the
Input Parameters were widely different.
166 / 1277
Simio Reference Guide
InventoryAndMaterials - SimBit
Problem:
My system consumes materials stored in inventories at different locations. I want my simulation model to show material
consumption from site-specific inventories.
Categories:
Supply
Key Concepts:
Bill of Materials, Inventory Element, Material Element, Task Sequence
Assumptions:
The processing at the Servers and Combiner will use Task Sequences to concurrently complete the defined tasks at the
object and consume the respective material from the identified inventory. All inventories are located at the object at which
the consumption takes place.
Technical Approach:
Two Sources independently feed unique entity types to two Servers respectively, where at the Servers, a Task Sequence is
used to facilitate material consumption. Each Server has two tasks, which occur simultaneously as indicated by the Sequence
Number. Both tasks consume a material which has an associated inventory located at the Server. The entities are then
combined via a Combiner where a task sequence is used to facilitate material consumption. The Combiner has one task
that consumes one material which has an associated inventory located at the object. Status Labels are placed in the Facility
window to show the QuantityInStock of each inventory and the aggregate (i.e. total) QuantityInStock of the materials, as
well as static text to show the initial QuantityInStock value for the materials.
Details for Building the Model:
Simple System Setup
Place two Sources, two Servers, one Combiner, and one Sink in the Facility window.
Place two ModelEntities in the Facility window.
Set one Source property Entity Type to the first ModelEntity, and the respective property on the other Source to the
second ModelEntity.
Connect the objects via Paths
Output@Source1 to Input@Server1; Output@Server1 to ParentInput@Combiner1
Output@Source2 to Input@Server2; Output@Server2 to MemberInput@Combiner1
Output@Combiner1 to Input@Sink1
Adjust the size of the ModelEntity which will eventually enter the Combiner at the parent node such that the other
entity can fit on the “parent” entity.
Select the “parent” entity and draw a BatchMembers queue (via the Draw Queue icon) on or near the “parent” entity;
entering 3D mode (via striking the ‘3’ key) and using the Shift key while moving the queue (with a click-drag motion)
will move the queue such that it can be placed on top of the model entity symbol.
Establishing Materials and Inventories
Using Elements, create materials and inventories that are related as indicated by the properties of the elements.
Create four Material elements and five Inventory elements within in the Definition tab, Element View.
Set each Material Location Based Inventory property to ‘True’.
Set the inventory properties as indicated by the table below.
167 / 1277
Creating Processing Tasks within the Servers and Combiner
Using Task Sequences, set up a task sequence for each object that requires materials for processing.
Select Server1 and set property Process Type under Process Logic to ‘Task Sequence’.
Select the repeat group symbol (small box in right of property field with “…”) in the Processing Tasks field to open
the task sequence editor.
Create two tasks via the Add button.
Keep all defaults for the tasks, except change Material Name and Inventory Site Type in the Materials
Requirements section such that the values for one task are ‘Material1’ and ‘ParentObject’, respectively and the
values for the other task are ‘Material2’ and ‘ParentObject’, respectively.
Select Server2 and repeat the process described for Server1, but instead, values for one task are ‘Material1’ and
‘ParentObject’ and the values for the other task are ‘Material3’ and ‘ParentObject’.
Select Combiner1 and add a task that consumes Material Name ‘Material4’ using Inventory Site Type ‘ParentObject’.
Creating Status Labels
Using the functions associated with Inventory and Material Elements, create status labels that reflect the MaterialName,
InventoryName, and QuantityInStock at each object where there is material stored. In addition, create status labels to show
the initial and current aggregate (i.e. total) QuantityInStock of each material.
Near Server1 in the Facility window, create a grid of Status Labels (2 by 3), as shown in the SimBit, and write the
following expressions in the respective Status Label Expression property as indicated in the table below, where the
first column resolves to the material name of the related inventory, the second column resolves to the inventory that
holds the specified material at the specified site, and the third column resolves to the QuantityInStock of the
specified inventory.
Add a Status Label with static text, like ‘Material QIS @ Server1’, above the Status Labels created in the
previous step for clarity.
Draw a rectangle (using Drawing ribbon) to place under the Status Labels to visually indicate the relatedness
of the Status Labels created in the previous steps.
Repeat the above steps for Server2 and Combiner1, using the appropriate expressions for each site-material pair.
Create a grid of Status Labels (4 by 2), as shown in the SimBit, and write the following expressions in the respective
Status Label Expression property as indicated in the table below, where the first column resolves to material name
and the second column resolves to the current aggregate (i.e. total) QuantityInStock of the specified material.
Add a Status Label with static text, like ‘Material Aggregate QIS’, above the Status Labels created in the
previous step for clarity.
Draw a rectangle (using Drawing ribbon) to place under the Status Labels to visually indicate the relatedness
of the Status Labels created in the previous steps.
Create a grid of Status Labels (4 by 2), as shown in the SimBit, and write the following expressions in the respective
Status Label Expression property as indicated in the table below, where the first column resolves to the material name
and the second column resolves to the static text. 168 / 1277
and the second column resolves to the static text.
Add a Status Label with static text, like ‘Material Initial QIS’, above the Status Labels created in the previous
step for clarity.
Draw a rectangle (using Drawing ribbon) to place under the Status Labels to visually indicate the relatedness
of the Status Labels created in the previous steps.
Notes:
This model is constrained by the available materials, which are required for processing. Because this model does not
include material replenishment (i.e. production), the initial QuantityInStock of the materials and inventories can be used to
identify the constraints. Each processing object (i.e. Server or Combiner) has a material constraint (e.g. Server1 is
constrained by Material2, which is entirely stored in Inventory3, with 40 units initially available). The constraint of the entire
model is the most rigorous material constraints of the processing objects (i.e. Combiner1 is the system constraint, where
Combiner1 is constrained by Material4, which is entirely stored in Inventory5, with 20 units initially available).
Embellishments:
This example shows material consumption from location-based inventory. Material and inventory are not restricted to
consumption, they can also be produced. Enhance the model by producing material when it’s below a specified level.
169 / 1277
Simio Reference Guide
InventoryReplenish - SimBit
This SimBit project includes three models that demonstrate the use of inventory replenishing policies for both 'Continuous’
and ‘Timer’ Review Period.
Models included in this SimBit:
1. MinMax – Demonstrates how to incorporate a reorder point (minimum value) and order-up-to-level (maximum)
replenishment policy. When the inventory falls to the reorder point, then inventory is replenished to the order-up-to-
level.
2. OrderUpTo – Demonstrates how to incorporate an order-up-to replenishment policy. When the inventory falls below
the order-up-to-level, then inventory is replenished to the order-up-to-level.
3. ReorderPointReorderQty – Demonstrates how to a reorder point and reorder quantity replenishment policy. When
the inventory falls to or below the reorder point, then inventory is replenished with the amount specified in the
reorder quantity.
Model 1: MinMax
Problem:
I have a system that has an inventory replenishment policy that reorders inventory once the inventory in stock reaches a
specific value, evaluated either continuously or on a timer.
Categories:
Add-On Process Logic, Materials
Key Concepts:
Add-On Process, Inventory Element, Material Element, MaterialOrderDetail, OnReplenishmentOrder, Produce Step,
QuantityProduced, Timer Element
Assumptions:
For a Continuous Review Period, inventory is replenished instantaneously.
Technical Approach:
There are two types of Review Period within Inventory Element logic. The inventory logic also includes an On-
Replenishment Order Process Add-on Process Logic that employs a Produce step.
Details for Building the Model:
Simple System Setup
Place a Source, Server, and Sink in the Facility window. Connect the Source to the Server and the Server to the Sink
with Paths. Rename the Source as BurgerSource, the Server as BurgerServer, and the Sink as BurgerSink. Place a
ModelEntity and set the name as Hamburger.
Set the Interarrival Time on BurgerSource to ‘Random.Exponential(2).
Set the Process Type on the BurgerServer to ‘Task Sequence’. Select the three little dots and Add a sequence. Adjust
the Processing Time to ‘Random.Triangular(1,2,3). Go to the Material Requirements dropdown and change the
Material Name to ‘HamburgersMaterial’ and the Inventory Site Type to ‘ParentObject’.
Place a second Source, second Server, and second Sink in the Facility window. Connect the Source to the Server and
the Server to the Sink with Paths. Rename the Source as HotdogSource, the Server as HotdogServer, and the Sink as
HotdogSink. Place a second ModelEntity and set the name as Hotdog.
Set the Interarrival Time on HotdogSource to ‘Random.Exponential(2). Change the Entity Type to ‘Hotdog’.
Set the Process Type on the HotdogServer to ‘Task Sequence’. Select the three little dots and Add a sequence. Adjust
the Processing Time to ‘Random.Triangular(1,2,3). Go to the Material Requirements dropdown and change the
Material Name to ‘HotdogsMaterial’ and the Inventory Site Type to ‘ParentObject’.
Creating Elements
Go to the Definitions window and add two Material Elements, one with the Name ‘HamburgersMaterial’ and the
other with the Name ‘HotdogsMaterial’. Change Location Based Inventory for both Material Elements to ‘True’. This
170 / 1277
other with the Name ‘HotdogsMaterial’. Change Location Based Inventory for both Material Elements to ‘True’. This
ensures Inventory Elements can be stored at separate and specific locations within the model.
Create a Timer Element and change the Name to ‘BurgerTimer’. Change the Time Interval to ’10' minutes.
Create an Inventory Element and change the Name to ‘HamburgersInventory’. Next, change the Material Name to
‘HamburgersMaterial’, this allows the Inventory Element to store the ‘HamburgersMaterial’ Material Element in it.
Then, change Site Object Name to ‘BurgerServer’, this ensures Simio stores the inventory in a physical location. Adjust
the Initial Quantity to ‘8’. Set the Review Period to ‘Timer’, this sets the frequency of the inventory review, which
determines whether a replenishment order is required. Set the Review Timer Name to ‘BurgerTimer’ to recall the
Timer Element created earlier. Adjust the Replenishment Policy to ‘Min/Max’. This type of replenishment policy orders
up to the Max when the inventory is less than or equal to the Min. Change the Reorder Point to ‘3’, when the
HamburgerInventory drops to 3 or less, then when the BurgerTimer goes off, a replenishment order will be placed.
Set the Order-Up-To-Level to ‘10’, this is the level that the HamburgerInventory is replenished to when a
replenishment order is placed. Lastly, double-click On Replenishment Order Process to create the process that
restocks the inventory level. In the Processes window, first place a Delay step with a Delay Time of ‘1’ minute to
signify the time to restock the Material. Then place a Produce step into your process. Set the Material Name to
‘HamburgersMaterial’, this specifies the material to be produced. Next, adjust the Inventory Site Type to
‘AssociatedObject’, this places the inventory in the BurgerServer. Lastly, change the Quantity to
‘Token.MaterialOrderDetail.Quantity’, this recalls the Max order-up-to value that was defined in the
HamburgerInventory and has the process order the corresponding amount.
Create a second Inventory Element and change the Name to ‘HotdogsInventory’. Then, change the Material Name to
‘HotdogsMaterial’ and the Site Object Name to ‘HotdogServer’. Set the Initial Quantity to ‘8’. Set the Review Period
to ‘Continuous’, this has the model constantly checking the inventory level. Adjust the Replenishment Policy to
‘Min/Max’ and set the Reorder Point to ‘3’ and the Order-Up-To-Level to ‘10’. This ensures as soon as the
HotdogsInventory reaches 3, it will immediately replenish. Lastly, double-click On Replenishment Order Process to
create the replenishment process. In the Process window, first place a Delay step with a Delay Time of ‘1’ minute to
signify the time to restock the Material. Then drag a Produce step into the newly created process. Set the Material
Name to ‘HotdogsMaterial’, the Inventory Site Type to ‘AssociatedObject’ and the Quantity to
‘Token.MaterialOrderDetail.Quantity’.
Enhancements (done within this model):
Create Status Labels to show the current inventory in each Server.
Create Status Plots to show the inventory level in each Server over time.
Model 2: OrderUpTo
Problem:
I have a system that has an inventory replenishment policy that reorders inventory to a specified level evaluated either
continuously or on a timer.
Categories:
Add-On Process Logic, Materials
Key Concepts:
Add-On Process, Inventory Element, Material Element, MaterialOrderDetail, OnReplenishmentOrder, Produce Step,
QuantityProduced, Timer Element
Assumptions:
For a Continuous Review Period, inventory is replenished instantaneously.
Technical Approach:
There are two types of Review Period within Inventory Element logic. The inventory logic also includes an On-
Replenishment Order Process Add-on Process Logic that employs a Produce step.
Details for Building the Model:
Simple System Setup
Click on the Folder icon in the Navigation window in the upper-right hand corner of your Simio window. Select the
MinMax model and press ‘Ctrl C’ on your keyboard to copy the model and then press ‘Ctrl V’ on your keyboard to
paste the model. Right click on the new model and rename it ‘OrderUpTo’.
Go into your OrderUpTo model and go to the Definitions window. Select HamburgersInventory and adjust the
Replenishment Policy to ‘Order-Up-To’. Repeat the same step for HotdogsInventory. These steps ensure that the
171 / 1277
Replenishment Policy to ‘Order-Up-To’. Repeat the same step for HotdogsInventory. These steps ensure that the
inventory levels are replenished to 10 regardless of what the current inventory level is, and the inventory is evaluated
on a 10-minute Timer for HamburgerInventory and continuously for HotdogInventory.
Model 3: ReorderPointReorderQty
Problem:
I have a system that has an inventory replenishment policy that reorders a specific amount of inventory once the current
inventory level reaches a certain level.
Categories:
Add-On Process Logic, Materials
Key Concepts:
Add-On Process, Inventory Element, Material Element, MaterialOrderDetail, OnReplenishmentOrder, Produce Step,
QuantityProduced, Timer Element
Assumptions:
For a Continuous Review Period, inventory is replenished instantaneously.
Technical Approach:
There are two types of Review Period within Inventory Element logic. The inventory logic also includes an On-
Replenishment Order Process Add-on Process Logic that employs a Produce step.
Details for Building the Model:
Simple System Setup
Click on the Folder icon in the Navigation window in the upper-right hand corner of your Simio window. Select the
MinMax model and press ‘Ctrl C’ on your keyboard to copy the model and then press ‘Ctrl V’ on your keyboard to
paste the model. Right click on the new model and rename it ‘ReorderPointReorderQty’.
Go into your OrderUpTo model and go to the Definitions window. Select HamburgersInventory and adjust the
Replenishment Policy to ‘Reorder Point/ Reorder Qty’. Repeat the same step for HotdogsInventory. These steps
ensure that the inventory levels are replenished by 10 when the current inventory level reaches 3, and the inventory is
evaluated on a 10-minute Timer for HamburgerInventory and continuously for HotdogInventory.
172 / 1277
Simio Reference Guide
KeepingWorkerReserved - SimBit
Problem:
I would like for the same vehicle or worker to perform both transport and processing tasks for a particular entity as it
moves through the system.
Categories:
Animation, Entity Characteristics, Decision Logic -- Processing, Worker
Key Concepts:
Connector, Keep Reserved If, Path, Ride On Transporter, Secondary Resources, Server, Sink, Source, Worker
Assumption:
The worker or vehicle can only have a ride capacity of ‘1’ to be reserved, otherwise a runtime warning will be issued.
Technical Approach:
The nurse (worker) will be used to transport entity from Source to first Server and then be used for processing at the Server.
Upon completion of processing, the same nurse (worker) will transport the entity to the next Server and again be used for
processing and transport to the Sink. The Keep Reserved If property within the TransferNode (for transport tasks) and
within the Server (for processing tasks) will be set to ‘True’ (or value of ‘1’).
Details for Building the Model:
Simple System Setup
Place a Source, two Servers and a Sink within the Facility window. Connect Source1 to Server1, Server1 to Server2
and Server2 to Sink with Paths. Connect the Sink back to the Source with a Path.
Within the Source1, change the Interarrival Time to ‘Random.Exponential(.3)’ minutes.
Connect the input node of each Server to the output node of the same Server with Connectors. This will allow the
Worker to travel both to/from the Servers.
Place a ModelEntity from the Project Library and rename it ‘Patient’.
Place a Worker in the Facility window and rename it ‘Nurse’. Change the Park While Busy property to ‘True’. Specify
the Initial Node (Home) location as Output@Source1 and the Idle Action to ‘Go To Home’ so that any idle workers
will return to the Source. Specify the Initial Number in System as ‘3’ so that there are 3 Nurses.
Using the Worker for Transport Tasks
Within the output nodes of the Source, Server1, and Server2, change the Ride On Transporter to ‘True’ and the
Transporter Name to ‘Nurse’. Within the Source1 and Server1 output nodes, specify the Keep Reserved If property as
‘True’. This will cause the Nurse, upon dropping off the entity at its destination location, to be ‘reserved’ so that it may
immediately be used then for processing at the server.
Using the Worker for Processing Tasks
Within the Server1 and Server2, change the Processing Time to ‘Random.Triangular(.2,.3,.4)’ minutes and the Input
Buffer capacity to ‘0’.
Within the Secondary Resources section of properties, specify the Object Name as ‘Nurse’. Specify the Keep Reserved
If property as ‘True’. This will cause the Nurse, upon completion of the processing task, to be ‘reserved’ so that it may
immediately be used then for transport to the next location.
Enhancement:
In this example, there are status label graphics attached to both the ModelEntity and Worker objects. Use the Entity.ID
function to return information specific to the entity (i.e, String.Format("P#{0}", Entity.ID )) or the Entity.Population.Index
function for information on the specific Worker ( String.Format("Nurse#{0}", Entity.Population.Index)).
173 / 1277
Send comments on this topic to Support
174 / 1277
Simio Reference Guide
KeepQueueTimeForLast10Entities - SimBit
Problem:
I want keep an updated value for the total queue time for the last ten (10) entities in a Server queue.
Categories:
Add-On Process Logic, Buffering, Custom Statistics, Entity Characteristics
Key Concepts:
Add-On Process, Before Processing, Create Step, Decide Step, Destroy Step, Entered, Insert Step, ModelEntity, Real State
Variable, Remove Step, Search Step, Status Label, Status Plot, Storage Element, Storage Queue
Assumption:
The total queue time of entities in the queue is only calculated once there are ten values accumulated. From then, the
calculation is done on the ten most recent entities in the queue. If the entity does not wait at all, a value of zero is recorded
and is included in the total.
Technical Approach:
When an entity enters the Server, its ModelEntity.TimeInQueue is set to the current simulation time. Once the entity has
been allocated the Server capacity, a copy of that entity is created that will be stored in a storage queue so that statistics
may be calculated. Once ten copy entities are in the storage, the queue is searched and time in queue time calculated. Each
time a new entity enters (after the first 10), the first entity is then removed from the storage and system.
Details for Building the Model:
Simple System Setup
Place a Source, a Server and a Sink from the Standard Library into the Facility window. Use Paths to connect the
Source to the Server and the Server to the Sink.
Adding a New State to ModelEntity
Within the Navigation window, click on ModelEntity. Within the ModelEntity Definitions window, click on the States
panel and add a new Real type State with the Name ‘TimeInQueue’. This will be referenced as
ModelEntity.TimeInQueue in the main model.
Go back to the Model and within the Facility window, place a ModelEntity from the Project Library. While this object
is highlighted, click on the Symbols ribbon and place a Status Label (attached) to the entity. This should
automatically say Attached To ‘DefaultEntity’ and then add the Expression ‘TimeInQueue’ This way, when each entity
instance moves through the system, you can see its time in queue calculation.
Define a New State and Element for the Model
Within the Definitions window, Elements panel, add a new Storage type element with the Name ‘Storage1’. This will
be used to ‘store’ all the 10 entity copies for waiting time calculations.
Also within the Definitions window, click on the States panel and add a new Real type state with the Name
‘TotalWait’.
Adding Logic to the Server To Calculate Queue Times
Within the Server, add a new process to the Entered Add-On Process Trigger named ‘Server1_Entered’. Within the
Processes window, add an Assign step to this process. The State Variable Name should be
‘ModelEntity.TimeInSystem’ and the New Value should be ‘Run.TimeNow’. This will “mark” the time that the entity
entered the queue for the server with the current simulation time which will be re-calculated later.
Go back to the Facility window and again within the Server, add a process name to Before Processing of
‘Server1_BeforeProcessing’. Within this process add the following steps:
Create step with Create Type of ‘CopyAssociatedObject’ and Object Instance Name of ‘DefaultEntity’.
From the Created exit of the Create step, add an Assign step. The State Variable Name should be
‘ModelEntity.TimeInQueue’ and the New Value should be ‘Run.TimeNow – ModelEntity.TimeInQueue’. This re-
calculates the state to be the actual waiting time.
175 / 1277
Next, add an Insert step with the Queue State Name of ‘Storage1.Queue’. Add a Decide step with the Decide
Type of ‘ConditionBased’ and an Expression of ‘Storage1.Queue.NumberWaiting == 10’. This will allow us to
only calculate the total wait time once there are ten entities in the queue.
Add a Search step to the process from the True exit of the Decide step. The Collection Type is ‘QueueState’, the
Queue State Name is ‘Storage1.Queue’ and the Search Expression is ‘Candidate.ModelEntity.TimeInQueue’. The
sum of this expression for the found items in the queue will be stored in the ReturnValue state of the original
executing token (i.e., Token.ReturnValue). The Limit in Advanced Options should be set to ‘10’ so that we get
the sum of all ten items in the queue.
From the Original exit of the Search step, add an Assign step that will assign the State Variable Name
'TotalWait' to the New Value ‘Token.ReturnValue’ (as discussed above).
Now that the calculation is done, we will remove the first entity in the queue so that when the next entity copy
enters, the calculations will be done correctly. This is done by using another Search step to get a pointer to the
correct entity. The Collection Type is ‘QueueState’ and the Queue State Name is ‘Storage1.Queue’. Note that the
Limit remains the default value of ‘1’, as we want a pointer to the first entity found in that queue.
From the Found exit of the Search step, add a Remove step with the Queue State Name of ‘Storage1.Queue’
and then from the Removed exit of the step, place a Destroy step, with Destroy Type of ‘AssociatedObject’
which will dispose of the copied entity/token that is no longer needed.
176 / 1277
Simio Reference Guide
LearningCurveWithLookup - SimBit
Problem:
I have a machine that increases its efficiency subject to a learning curve function.
Categories:
Lookup and Rate Tables
Key Concepts:
Lookup Table, Learning Curve, Linear Interpolation, Server, Status Plot
Assumptions:
The Server starts at 20% effective. After 12 hours the Server is 90% effective and after 18 hours the Server is 100% effective.
At 100% efficiency, the Server’s Processing Time is 10 minutes.
Technical Approach:
The Server’s learning curve will be represented by a Lookup Table. The Processing Time property of the Server will
reference this Lookup Table.
Details for Building the Model:
Simple System Setup
Add a Source, Server, and Sink to the Facility Window.
Using a Lookup Table
In the Data Window, select the Lookup Tables panel and add a Lookup Table with the Name property of
‘LearningCurve’. Add the following ( X, f( X )) pairs in the table: (0, 0.2), (12, 0.9), (18, 1). This lookup will be used within
the Processing Time of the Server as the efficiency.
Specifying the Server Processing Time
Update the Processing Time of the Server to ‘10/LearningCurve[ Run.TimeNow]’. Run.TimeNow is a function that
returns the current simulation time.
Embellishments:
To make this model more specific, try changing the Default entity’s Travel Logic to a desired speed, the Source’s Interarrival
Time rate or the Speed Limits on the Paths.
177 / 1277
Simio Reference Guide
LeveledArrivals - SimBit
Problem:
I would like to model a system where parts of different types arrive in a certain order.
Categories:
Arrival Logic, Data Tables
Key Concepts:
AvailableRowCount, Before Creating Entities, Before Exiting, Condition, Data Table, Dynamic Object Property, Entity Type,
Math.If(), Real State Variable, Source, State Assignments, Table Row Referencing
Assumption:
This is a simply Source, Server, Sink model that simply demonstrates controlling the order of arriving entities.
Technical Approach:
The Source reads information from a Data Table to determine which entity type to create for each arrival.
Details for Building the Model:
Simple System Setup
Place a Source, a Server and a Sink into the Facility window and connect them with Paths.
Place 4 ModelEntity objects into the Facility window and name them PartA, PartB, PartC and PartD.
Ensure that the color of each entity is different to help with model verification. To change the color of an entity,
select the entity and then select a color from the Color drop down in the Symbols ribbon and click back onto
the entity. It should then change colors.
Create Data Table
The Data Table will contain the order in which the different entities should arrive.
Go to the Data window and click the Add Data Table icon in the ribbon to add a new table.
Add a column that is an Entity property by selecting Entity from the Object Reference drop down in the ribbon. The
column can be renamed to Parts.
Fill the table with any orders you’d like – in this example, they arrive in the order A A A A B B B C C D and this
pattern repeats.
Add Table Referencing To Source object
Go to the Definitions window and create a new State variable. From within the Definitions window, click on the
States panel along the left side of the interface and then click on Real in the ribbon to create a new Discrete
State.Name it ‘RowNumber’. Change the Initial State Value to ‘1’.
From within the Facility window, click on the Source and expand the Table Row Referencing category. Next, expand
the Before Creating Entities category and set the Table Name to ‘Table1’ and the Row Number to ‘RowNumber’ (the
new State). This is telling the Source object to set a reference to the Data Table before an entity is created.
Set the Entity Type property of the Source to be Table1.Parts, where Table1 is the name of the Data Table and Parts is
the name of the column within the table. This will tell the Source to look in this table to determine which type of
entity to create.
Expand the State Assignments property category and open the Repeating Property editor of the Before Exiting
property (by clicking on the ellipse in the text box). Click Add to create a new Assignment and set State Variable
Name to ‘RowNumber’ and New Value to ‘Math.If( RowNumber == Table1.AvailableRowCount, 1, ( RowNumber + 1)
)’ This checks to see if the current value of RowNumber is equal to the total number of rows in the table (i.e. are we at
the last row?). If True, it sets the value of RowNumber back to 1 so it reads at the beginning of the table again. If
False, RowNumber is incremented by 1.
Embellishments:
Change the pattern of arrivals or try adding additional information into the Data Table and using it in the model.
178 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
179 / 1277
Simio Reference Guide
LogicBasedOnEntityProperty - SimBit
Problem:
I have entities that need to be sent to certain destinations based on their entity type.
Categories:
Decision Logic -- Paths
Key Concepts:
Numeric Property, Path, Selection Weight
Assumptions:
Each source only produces one type of entity. Source1 produces ModelEntity1 ( Green) and Source2 produces ModelEntity2
( Red).
Technical Approach:
An Integer Property will be added to the Default Entity. The Property will be set as unique for each entity instance. The
Property will then be referenced in order to make a decision.
Details for Building the Model:
Simple System Setup
Add two ModelEntity objects from the Project Library and two Sources, a Server, and two Sinks from the Standard
Library to the Facility Window.
Adding an Integer Property to the Default Entity
Highlight ModelEntity in the Navigation window (not the Model) and select the Definitions tab and Properties
panel.
Add a new integer property by clicking on Standard Property > Integer.
Change the Name property to ‘EntityType’. You can also change its default value here if you like.
Defining the Entity.Type
In the Facility Window of the Model, in the ModelEntity1 and ModelEntity2 instances, you will see the new EntityType
property you just created.
Set the EntityType Property to ‘1’ and ‘2’, respectively.
Creating the Logic Decision
To make the decision, you will take advantage of the Selection Weight property on the outgoing links from Server.
For one link, change the Selection Weight to the expression ‘ModelEntity.EntityType==1’. For the other, change the
Selection Weight to the expression ‘ModelEntity.EntityType==2’.
Discussion:
This procedure of using a Property works well for entities that will not change during the run (e.g. ModelEntity2 always has
a value of 2). If “EntityType” is something that could change during the run, you would instead make it a State ( Properties
cannot change during a run, but States can).
See Also:
LogicBasedOnEntityState.spf
180 / 1277
Simio Reference Guide
LogicBasedOnEntityState - SimBit
Problem:
I have entities that need to be sent to certain destinations based on their entity type.
Categories:
Decision Logic – Paths, EntityCharacteristics
Key Concepts:
Before Exiting, Path, Real State Variable, State Assignments
Assumptions:
Each source only produces one type of entity. Source 1 produces ModelEntity1 ( Green) and Source 2 produces
ModelEntity2 ( Red).
Technical Approach:
A Discrete State Variable will be added to the ModelEntity. An Add-On Process will be used to assign this State Variable a
value based on the entity type. The State will then be referenced in order to make a decision.
Details for Building the Model:
Simple System Setup
Add two ModelEntity objects from the Project Library and two Sources, a Server, and two Sinks from the Standard
Library to the Facility Window.
Change the name of the ModelEntity objects to ModelEntity1 and ModelEntity2 and make sure that Source1 has an
Entity Type of ‘ModelEntity1’, while Source2 has a an Entity Type of ‘ModelEntity2’.
Creating the Discrete State Variable
Highlight ModelEntity in the Navigation window (not the Model) and select the Definitions tab and States panel.
Add a Discrete State Variable to the ModelEntity with Name ‘EntityType’.
Assigning the State Variable
Within the State Assignments section of the Sources, enter the Before Exiting repeating editor and add the State
Variable Name of ‘ModelEntity.EntityType’ a New Value of ‘1.0’ (for Source1) and State Variable Name of
‘ModelEntity.EntityType’ a New Value of ‘2.0’ (for Source2).
Creating the Logic Decision
To make the decision, you will take advantage of the Selection Weight property on the outgoing links from the Server.
For one link, change the Selection Weight as the expression ‘ModelEntity.EntityType==1.0’. For the other, use the
expression ‘ModelEntity.EntityType==2.0’.
Discussion:
This procedure of using a State works well for items that could change during the run (e.g. perhaps EntityType needs to
change as it proceeds through processing). If the item will not change during the run, it would be easier and more efficient
to have EntityType be a Property instead of a State of the ModelEntity.
See Also:
LogicBasedOnEntityProperty.spf
181 / 1277
Simio Reference Guide
MassFlowProcessing - SimBit
Problem:
I have 2 stockpiles of material and I want material to flow from the first stockpile to the second at a variable rate. When the
flow rate changes, the second stockpile has to wait for the new flow rate to reach it before noticing a change in flow rate.
Categories:
Building New Objects / Hierarchy, Level States
Key Concepts:
Assign Step, Button, Conveyor, Create Step, Delay Step, EndTransfer Step, Event, Expression Property, External View,
ExternalNode, Fixed Class Object, Label, Level State Variable, OnInitialized Process, OnRun Initialized Process, Process
Triggering Event, Real State Variable, Size.Height, Size.Length, Size.Width, Station Element, Status Label, Status Label,
Timer Element, Transfer Step
Assumptions:
All flows go from the left to the right. Increased flow means more flow is leaving the first stockpile, meaning the flow rate
becomes more negative (and vice versa - a decrease in flow means less material is leaving and the flow becomes less
negative).
Technical Approach:
We will create a new object called a StockPile and represent the amount of material1 in each stock pile with a Level State
Variable. At various events, we will change the outgoing rate of the first stockpile object and pass the new rate to the
second stockpile object using an entity to represent the leading edge of the new flow of material.
Details for Building the Model:
Adding a State to ModelEntity
First we must create the State on the Entity that will carry the new Flow Rate information from one pile to the other.
To do this, click on ModelEntity in the Navigation Window and go to the States Panel in the Definitions Tab. Add a
Real State and name it ’FlowChange’.
Creating the StockPile Object Definition
In your Project Home Tab, click ‘New Model’ to add a Fixed Class Object to your Project Library. Rename this Object
‘StockPile’ by right-clicking on the new object and choosing ‘Rename’.
In the Elements Panel of the Definitions Tab, add a new Station Element by clicking the button in the Ribbon. Name
this station ‘Pile’.
Next, add an Expression Property from the Standard Property drop-down list in the Ribbon of the Properties Panel.
Name this property ‘InitialOreQuantity’. Change the Category Name to ‘Initial Ore Quantity’.
In the States Panel, add a Level State and Name it ‘OreQuantity’.
Defining the StockPile Object’s External View
In the External Panel of the Definitions tab, you can (optionally) give your StockPile a new Symbol by clicking on
Place Symbol button in the Ribbon. If you have an applicable 3D image you can choose Import Symbol. If not, you
can choose to Download a Symbol from Trimble Warehouse. You can find this particular symbol by searching for
“Trash Pile” – it will be the first option. You may want to resize your symbol in the symbol editor.
After placing the symbol, click on the External Node button in the Ribbon and bring in 2 External Nodes. Place one
on the left-hand side of the object and one on the right-hand side. Click on the left-hand node. Change its Node
Class Name to ‘BasicNode’, its Input Location Type to ‘Station’ and the Station Name to ‘Pile’. Rename this node
‘Input’.
For the right-hand node, change its Node Class Name to ‘TransferNode’ and change its Name to ‘Output’. Leave the
Input Location Type to ‘None’, since this will be the output node.
Defining the StockPile Object Processes
In the Processes window, select ‘OnRunInitialized’ from the Select Process drop-down to create a new
OnRunInitialized Process. Drag in an Assign Step from the list of Common Steps. Set the State Variable Name
182to/ 1277
OnRunInitialized Process. Drag in an Assign Step from the list of Common Steps. Set the State Variable Name to
‘OreQuantity’ and right-click on the New Value, click on Set Referenced Property and select the Property
‘InitialOreQuanity’ from the list. This Process will set the initial value for each stockpile’s ore level to match the user-
defined initial ore quantity property that will later be defined in the Model.
Next, click Create Process in the Ribbon. Set the Triggering Event in the Properties Window to ‘Pile.Entered’. This
process will then be activated when the pile is entered by an entity. Within the process, place an EndTransfer step to
signal that the Station has accepted the exchange. After that, place an Assign step that assigns the State Variable
Name of ‘OreQuanitity.Rate’ the Value of ‘–ModelEntity.FlowChange’. This allows the receiving StockPile to receive
at a rate equal (but opposite) to the rate that is flowing out of the first StockPile. Lastly, place a Destroy step to
destroy the entity carrying the information after it has been received.
Creating the Model
In your ‘Model’ Object, drag in 2 StockPile objects from the Project Library and connect them with a Conveyor. Set
the Conveyor’s Initial Desired Speed to ‘.05 Meters per Second’.
In the Elements Panel in the Definitions Tab, add a Timer Element and name it ‘RateChange’. Set its Time Interval to
‘Random.Exponential(10)’ and the Units to ‘Minutes’. This timer will represent random points in time that the flow
rate could change in a system. This could be the arrival of a new truck, another worker is on shift, etc.
In your Events Panel, add an Event and name it ‘Stop’.
Adding Model Processes Window
In the Process tab, click on the Create Process button in the ribbon and create a process with the Name
‘TimerRateChange’. Set the Triggering Event for this Process to ‘RateChange.Event’. First, place an Assign step into the
process. Set the State Variable Name to ‘StockPile1.OreQuantity.Rate’ and the New Value to
‘StockPile1.OreQuantity.Rate + Random.Uniform(-10,0)’. This will Increase the “Flow Out” of the stockpile.
Next, we create an entity to carry the new Rate down the conveyor to the next stockpile. This entity will act as the
leading edge of the new flow of material. To do this, we must place a Create step after the Assign and create a
DefaultEntity Object Instance Name.
From the Created exit of the Create step, we need to Assign the new Flow Rate that was created in the first Step so
we place an Assign. Set the State Variable Name to ‘ModelEntity.FlowChange’ and its New Value to
‘StockPile1.OreQuantity.Rate’.
Finally, place a Transfer Step after the Assign. We will Transfer From ‘FreeSpace’ (where the entity is Created), To
‘Node’, Node Name ‘ Output@StockPile1’.
We want the almost the exact same process for the Stop Event. Copy the first Process by clicking in the white space
of the Process. When the process gets shaded with diagonal lines and the Properties window changes to the Process
Properties, it means that it is selected, so press Ctrl+C, then Ctrl+V to copy and paste the entire Process.
Change the Name to ‘StopFlow’, Triggering Event to ‘Stop’ and in the first Assign step change the New Value to ‘0’.
Animating the Stockpiles
To represent the animation of the stockpiles, we need to make a new process. In the Processes Window, click the
Select Process button in the Ribbon and choose ‘OnInitialized’ from the drop down list. Place an Assign Step to
assign the Height, Length, and Width of the StockPiles according to the size of the OreQuantity State. To do this, set
the first State Variable Name to ‘StockPile1.Size.Height’ and the New Value to ‘StockPile1.OreQuantity/20’.
Click the ‘…’ button next to Assignments ( More) and add 5 additional items. Set the first item’s State Variable Name to
‘StockPile1.Size.Length’ and its New Value to ‘StockPile1.OreQuantity/10’. Similarly, the next item will be
‘StockPile1.Size.Width’ and its New Value will be ‘StockPile1.OreQuantity/10’. Fill out the next 3 items with the same
State Variable Names and Values but with StockPile2 instead.
Add a Delay step and set the Delay Time to an appropriate amount. 0.5 min was used in this example.
Drag the process Endpoint to the input of the Delay to create a loop. This allows the animation to update every time
the Delay is executed.
Enhancing Animation
In the Animation Ribbon in the Facility tab, add a Button and the Button Text to ‘Stop Flow’ and set the Event Name
to ‘Stop’.
Attach Status Labels to each StockPile by clicking on each StockPile object, then clicking the Status Label button in
the Symbols Tab. Set the Expression to ‘OreQuantity’, and add another for ‘OreQuantity.Rate’. Add both Status Labels
for the other StockPile objects, as well.
Drag in a ModelEntity Instance and attach a Status Label to it and set this Expression to ‘FlowChange’.
Embellishments:
If left running, StockPile1’s OreQuantity will become extremely negative, which in reality is impossible. To end the run when
183 / 1277
If left running, StockPile1’s OreQuantity will become extremely negative, which in reality is impossible. To end the run when
StockPile1’s OreQuantity reaches 0.0, see the SimBit ‘UsingMonitor’ for detailed instructions.
1Material refers to the substance flowing from one stockpile to the other – not to be confused with a Simio Material
Element
184 / 1277
Simio Reference Guide
MergingConveyorsControlledByGate - SimBit
Problem:
I want to model merging conveyors that prevent package collisions by having a gate that stops a package before the
merge point if it would collide with another.
Categories:
Add-On Process Logic, Conveyor Systems
Key Concepts:
Conveyor, Resource, Add-On Process, Seize Step, Release Step
Assumptions:
There are two types of entities that exit from two sources on conveyors and merge onto single conveyor system. At merge
point, a conveyor must prevent arriving entities from collisions by stopping them to move forward. Entities enter a single
conveyor system on a first in first out basis.
Technical approach:
A resource of capacity 1 is created to represent the gate or passage of a single entity. An add-on process is used at the
entry to each merging conveyor to seize the gate, thus metering flow to a single entity at a time. At the merge node,
another add-on process is used to release the gate, allowing the next waiting entity to proceed.
185 / 1277
Simio Reference Guide
MoveableOperator - SimBit
Problem:
I want to model a system that has two Servers in series and requires a Worker to be present at each Server before
processing can occur. Animation should show the Worker moving between the two servers and parking at the appropriate
Server for processing.
Categories:
Building New Objects / Hierarchy
Key Concepts:
Add-On Process, Assign Step, Before Exiting, Contents, Decide Step, InputBuffer, On Evaluating Seize Request, On
Released, ParkingStation Queue, RideStation Queue, Secondary Resources, Server, State Assignments, Worker
Assumptions:
There is only one Worker in the system. It will work at the first Server until the second Server has 5 or more entities waiting
in its queue. The Worker will then work on the second Server until the input buffer is empty and then return to working on
the first Server.
Technical Approach:
The Worker is modeled with a standard Worker object. The Worker object travels between two nodes that are located near
each Server, which animates the moveable resource. The Worker object is seized by each Server before processing and the
model ensures that the object is located at the appropriate node before it begins Processing. Add On Processes on the
Worker object will check the contents of the Input Buffer queue to see if the Worker should be working at Server1 or
Server2. A state variable at the Model will indicate which Server the Worker should be working on.
Details for Building the Model:
Simple System Setup
Add a Source, two Servers and a Sink to the Facility Window. Add a ModelEntity object to the Facility Window and
change its picture to a box.
Connect the Source to the first Server, connect the first and second Server together and connect the second Server to
the Sink with Paths. Add two Basic Nodes that are connected to each other with a bi-directional path. Place the
nodes near each of the Servers. This is the path that the movable resource will take between the Servers.
Place a Worker object in the Facility window and change its picture to a person by clicking on the Worker object and
selecting a new symbol from the Project symbol library in the ribbon.
Set the Park While Busy property of the Worker to ‘True’, which will tell the Worker to park at the node while it’s
processing instead of stay on the link.
Set the Initial Node(Home) property to ‘BasicNode1’.
Adding Logic to the Servers
Click on Server1 and expand the Secondary Resources property category. Under the Resource for Processing category,
set the Object Type property to ‘Specific’, set the Object Name property to ‘Worker1’. Set the Request Move property
to ‘To Node’ and the Destination Node property to ‘BasicNode1’. This tells the Server that it must seize Worker1 and
it must arrive at BasicNode1 before processing can begin at this Server.
Repeat the above step for Server2. It must also seize Worker1 and before processing, but set the Destination Node
property to ‘BasicNode2’ instead of ‘BasicNode1’ so that Worker1 arrives at the node closest to Server2.
Click back on Server1 and expand the State Assignments property category. Open the Repeating Property editor for
the Before Exiting property by clicking on the ellipse that appears in the text box of this property. Click Add and set
the State Variable Name to ‘ModelEntity.Priority’ and the New Value to ‘2’. This changes the priority of all entities that
leave this Server from the default value of 1 to the new value of 2.
Create New State
In the Definitions window of the model, go to the States panel.
Create a new Real Discrete state by clicking on Real in the ribbon. Name this new state ‘WorkerTaskPriority’.
This will keep track of which server the Worker should be working at. Set the Initial State Value in the
186 / 1277
This will keep track of which server the Worker should be working at. Set the Initial State Value in the
properties window to ‘1’.
Add On Process Logic for Worker
Click on the Worker object and expand the Add On Process Triggers property category.
Create a new process that is called from the Released property by selecting ‘Create New’ from the drop down
of this input box. This new process will check the current Task Priority when Worker is Released from a job.
Go to the processes window and in the process called Worker_Released, place a Decide Step which
checks the input buffer of Server 2 to see if there are 5 or more entities waiting. Set the Decide Type to
‘ConditionBased’ and the Expression to Server2.InputBuffer.Contents >= 5. If True, the state
WorkerTaskPriority is set to a value of ‘2’ with an Assign Step. If False, another Decide Step checks to see
if the input buffer is empty and if so, it assigns the value of ‘0’ to the state WorkerTaskPriority with an
Assign Step. This tells the system that the Worker will move to Server2 and work there until the input
buffer is empty.
Back in the Facility window, click on the Worker.
Create a new process that is called from the Evaluating Seize Request property by selecting ‘Create New’ from
the drop down of this input box. This new process will be executed each time a Server is attempting Allocation
of the Worker Object.
Go to the processes window and in the process called Worker1_EvaluatingSeizeRequest, place a Decide
step that checks to see if the entity that is evaluating its allocation should get the capacity of the Worker.
Set the Decide Type to ‘ConditionBased’ and the Expression to 'Entity.Priority == WorkerTaskPriority'. If
True, then the entity will get capacity of the Worker since the Worker object is supposed to stay at that
server, based on the value of WorkerTaskPriority. If the priorities do no not match, Token.ReturnValue is
set to ‘False’, which means that the allocation attempt of the Worker object was rejected.
187 / 1277
Simio Reference Guide
MoveASeizedObject - SimBit
Problem:
I have seized a moveable resource and now I’d like it to move to a couple of locations within the model before I release
the capacity of the resource.
Categories:
Worker
Key Concepts:
Decide Step, Delay Step, ID, Is.Worker, ModelEntity, Move Step, Location.Parent, Path, Secondary Resources, Selection
Weight, Server, Worker
Technical Approach:
There are two Server objects that both need to seize a Worker object and have the Worker move to the Server before
processing can begin. After processing finishes at each Server, the After Processing Add On Process trigger executes a
process. This process tells the Worker object to move to a node, delay, then move to another node and delay again. The
entire time, the Entity within the Server “owns” the capacity of the Worker. Finally, the Worker is told to move back to the
Server where the Entity is still waiting in the Processing station. Once the Worker reaches the Server, the entity releases
capacity of both the Server and the Worker and it moves out of the Server.
Details for Building the Model:
Simple System Setup
Place a Source object, followed by two Server objects that are in parallel, within the Facility window. Rename the
Server objects to Room1 and Room2. Connect the Source to the Servers with paths.
Click on the Source object and change the Interarrival Time property to ‘Random.Exponential(9)’.
Place two Sink objects, one near each Server, and connect Room1 to Sink1 with a path and connect Room2 to Sink2
with a path.
Place two Transfer Nodes into the Facility window, somewhere between Room1 and Room2. Name one
TransferNode ‘Lab’ and the other ‘Desk’.
Place Paths going from the output nodes of the servers to Lab, from Lab to Desk, and from Desk back to the server
output nodes.
Place a Worker object into the Facility window. Set its Initial Node (Home) property to ‘Desk’ and set its Idle Action
property to ‘Go to Home’.
In the Paths connecting the Output Nodes to Lab, set the Selection Weight to ‘Is.Worker’ to ensure that no Entities
travel on these paths (they are for workers only). Entities will go directly into the Sinks.
Logic for Seizing and Moving Worker
Select Room1 and set its Processing Time property to ‘2’ minutes.
Expand the Secondary Resources category within Room1’s properties and under the Resource for Processing
category, set the Object Name property to ‘Worker1’. In this same property category, set the Request Move property
to ‘To Node’ and set the Destination Node property to ‘Output@Room1’. This is where we tell Room1 to seize
Worker1 and have it move to Room1, before processing can begin at the server.
Repeat the above steps for the Room2, but instead of setting Destination Node to ‘Output@Room1’, enter
‘Output@Room2’.
Within the Processes window, create a new process by clicking on ‘Create Process’ in the ribbon. Name this process
‘Server_Processed’.
Place a Move Step in this process. Open the Resource Move Requests repeat group property window by clicking
on the … (elipse button). Within the editor window that appears, click the Add button and set Object Name to
‘Worker1’ and Destination Node to ‘Lab’.
Place a Delay Step and set the Delay Time to ‘2’ and Units to ‘Minutes’. This is how long the Worker will wait at
the Lab node before moving on.
Place another Move Step and within the Resource Move Request – Repeating Property editor window, set
Object Name to ‘Worker1’ and Destination Node to ‘Desk’.
188 / 1277
Place a Delay Step and set the Delay Time to ‘2’ and Units to ‘Minutes’. This is how long the Worker will wait at
the Desk node before moving on.
Place a Decide Step, which will check to see which Room the Worker should return to. Set the Decide Type to
‘Condition’ and the Expression to ‘ModelEntity.Location.Parent == Room1’. This is checking to see if the Entity
that “owns” this Worker right now is currently located in Room1.
In the True segment leaving the Decide Step, place a Move Step that moves ‘Worker1’ to ‘Output@Room1’. In
the False segment leaving the Decide Step, place a Move Step that moves ‘Worker1’ to ‘Output@Room2’.
Within the Facility window, select Room1 and expand the Add On Process Triggers property category. In the After
Processing trigger, select the new process you just created. Do the same thing for Room2. The same process can be
called from each Server.
Embellishments:
Add additional Move Steps that require the Worker to visit other locations while it is seized by the entity. Or increase the
Interarrival Time on the Source object and then increase the number dynamic Worker objects there are in the system to ‘2’.
Discussion:
Because the entity “owns” the Worker object while it is moving through the system, no other object can get capacity of this
Worker object. It is “Busy” until the Entity releases the capacity of the Worker. In this example, the Entity releases capacity
of the Worker once the Entity leaves the Server.
189 / 1277
Simio Reference Guide
MultipleInputArgumentsOnProcesses -
SimBit
Problem:
I have a Worker that needs to service 2 different Servers upon a server failure. Rather than having separate add-on
processes for each server, I’d like a single process that will seize the Worker when either Server fails.
Categories:
Add-On Process Logic, Worker
Key Concepts:
Add-On Process, Failure, On Failed, On Repaired, Process Input Arguments, Seize Step, Set Referenced Property, Release
Step, Server, Worker, Time to Repair, Token, Uptime Between Failures
Assumptions:
A single Worker is used to repair 2 different Servers when they fail. A bi-directional path is used to transfer the Worker
between the Servers. The same failure type property values are used with the Servers.
Additional Notes:
Input Arguments on processes allow the user to have single shared process between objects. In this SimBit, the seized
worker is directed to the appropriate work location, no matter where the process is called from. While not illustrated here,
it’s also possible to return a value (or values) in a similar fashion using return values.
Technical Approach:
Two Source-Server-Sink sets of objects connected by paths are placed in the model. A Worker is transferred between the
Servers via a bi-directional Path between the Servers. Reliability logic ( Uptime Between Failures and Time To Repair) is
defined via referenced properties. Add-On processes, along with process input arguments, are used to seize the worker
when needed.
Details for Building the Model:
System Setup
In the Facility window, place a Source, a Server and a Sink object and connect them with Path objects. Repeat this
process with a second set of objects below in parallel to the first set. On both Source objects, change Interarrival
Time to ‘Random.Exponential(.5)’.
Place a BasicNode ( BasicNode1) next to Server1, a BasicNode ( BasicNode2) next to Server2 and a third BasicNode
( HomeNode) between the Source objects. Connect these nodes with a bi-directional path. Place a Worker object in
the Facility window and set the following property values: Initial Node (Home) to ‘HomeNode’, Idle Action to ‘Park At
Home’. Click on the HomeNode and in the Appearance ribbon, select Draw Queue and add a
ParkingStation.Contents queue. On that same ribbon, turn off the Parking Queue option.
In the Server1 object, under Reliability Logic, set the Failure Type to ‘Calendar Time Based’ and create a new
referenced property for Uptime Between Failures called ‘UptimeBetweenFailures’ and one for Time To Repair called
‘TimeToRepair’. In Server2, under Reliability Logic, set the Failure Type to ‘Calendar Time Based’ and set a referenced
property on Uptime Between Failures to ‘UptimeBetweenFailures’ and on Time To Repair to ‘TimeToRepair’. Right
click on the Model and select Properties. Under Controls, General set UptimeBetweenFailures to
‘Random.Exponential(5)’, Units to ‘Minutes’, TimeToRepair to ‘Random.Uniform(.25,.5)’ and Units to ‘Minutes’.
In both of the Server objects, under Add-On Process Triggers, set Failed to ‘Server_Failed’ and Repaired to
‘Server_Repaired’.
Add-On Processes and Input Arguments
In the Definitions window, under Tokens, add a new token called “MyToken”. Add an Object Reference of type Node
and call it ‘Destination’.
In the Processes window, highlight the Server_Failed process and under Advanced Options, change Token Class Name
to ‘MyToken’. Select Input Arguments to open the repeating property editor. Add an item where Name is
190 / 1277
to ‘MyToken’. Select Input Arguments to open the repeating property editor. Add an item where Name is
‘LocalNode’ and State Variable Name is ‘MyToken.Destination’.
In the Server_Failed process, add a Seize step. Select Resource Seizes to open the repeating property editor. Add an
item where Object Name is ‘Worker1’, Request Move is ‘ToNode’ and Destinationi is ‘MyToken.Destination’.
In the Server_Repaired process, add a Release step and select Resource Releases to open the repeating property
editor. Add an item where Object Name is ‘Worker1’.
In the Facility window, select Server1 and under the Failed Add-On Process Triggers, Input Arguments, set Local Node
to ‘BasicNode1’. Select Server2 and under the Failed Add-On Process Triggers, Input Arguments, set Local Node to
‘BasicNode2’.
191 / 1277
Simio Reference Guide
MultipleServerFailures - SimBit
Problem:
I need to model failures at a Server object using more than one type of failure event stream. The Reliability Logic
properties on the Server object only allow for a single way to generate failure occurrences.
Categories:
Resources, Failures, Add-On Process Logic
Key Concepts:
Fail, Failure, Math.Remainder, Multiple Failure Types, Processing Count Based Failure, Processing Time Based Failure,
Repair, Server
Assumptions:
A processing time based failure occurs at the server approximately every minute and takes 30 seconds to repair. A
processing count based failure (preventative maintenance) occurs at the server after every 10 parts are processed and takes
a minute to repair.
Technical Approach:
The processing time based failure stream will be modeled using the Reliability Logic properties of the Server object. The
processing count based failure stream will be modeled using add-on process logic.
Details for Building the Model:
System Setup
Place Source, Server and Sink objects in the Facility window. Connect these objects using Connectors.
Modeling the Processing Time Based Failure Stream
For the Reliability Logic properties of the Server object, specify Failure Type as ‘Processing Time Based’, Uptime
Between Failures as ‘Random.Exponential(1)’ minutes, and Time to Repair as ‘.5’ minutes.
Modeling the Processing Count Based Failure Stream
In the Definitions window, add a real State called NumberProcessed.
In the Facility window, on the Server object, define an Add-On Process Trigger for the After Processing property and
call it ‘Server1_AfterProcessing’.
In the Processes window, for the logic of the ‘Server1_AfterProcessing Process’, add an Assign step and assign the
State Variable Name 'NumberProcessed' to New Value 'NumberProcessed+1'. Next add a Decide step with an
Expression ‘Math.Remainder( NumberProcessed,10) == 0’. On the True exit point of the Decide step, add an Execute
step and specify the Process Name as ‘PrevMaintenance’.
Still in the Processes window, create a process and name it ‘PrevMaintenance’. In this process, add the steps Fail,
Delay, and Repair. For the Fail step, specify the Failure Name to ‘Server1.Failure’. For the Delay step, specify the Delay
Time to be '1' minute. For the Repair step, specify the Failure Name to be ‘Server1.Failure’.
192 / 1277
Simio Reference Guide
MultiServerSystemWithJockeying - SimBit
Problem:
I want to model a service system that consists of a group of parallel servers, where each server has its own waiting line and
customers switch between lines if they think they will get served faster.
Categories:
Buffering
Key Concepts:
Buffer Logic, Reneging, Jockeying
Assumptions:
A system for processing customer entities consists of a group of three parallel servers. Each server has its own separate
waiting line. When a customer arrives, they will choose the leftmost shortest queue to enter. Servers process their queues in
FIFO order, however if a customer at the end of a waiting line can move up by switching lines, then they will (see Figure 1).
The time between customer arrivals is sampled from an exponential distribution, EXPO(1) minutes. The processing time for
each customer is EXPO(2.8) minutes.
The jockeying rule is formalized as follows: If the completion of processing at a server i causes nj > ni + 1 for some other
server j, then the customer from the tail of queue j switches to the tail of queue i. If there are two or more such customers,
then the one from the closest, leftmost queue jockeys.
Details for Building the Model:
Facility Window Setup
Add a Source, three Servers, and Sink to the Facility window. Connect the Source to the Servers and the Servers to
the Sink using Connector links.
Place a ModelEntity object from the Project Library into the Facility window. Name it ‘Customer’.
Server Node List Definition
Go to the Definitions, Lists window. Add a node list and name it ‘ServerNodeList’. Specify the nodes in the list as
Input@Server1, Input@Server2, and Input@Server3 (in that order).
Source Properties
Specify the Entity Type as ‘Customer’ and the Interarrival Time as ‘Random.Exponential(1)’ minutes.
Source ‘Output’ Node Properties
Specify the Entity Destination Type as ‘Select From List’ and the Node List Name as ‘ServerNodeList’. Specify the
destination Selection Goal as ‘Smallest Value’ of Selection Expression ‘Candidate.Server.InputBuffer.Contents +
Candidate.Server.Processing.Contents’. This will cause a new customer arrival to choose the server that is the leftmost
shortest queue.
Custom Function Definitions
To simplify some expressions, go to the Definitions, Functions window. Add three custom functions named
‘NumberAtServer1’, ‘NumberAtServer2’, and ‘NumberAtServer3’. The expressions used to return a value for these
functions are as follows:
Server Properties
For each server, specify the Processing Time as ‘Random.Exponential(2.8)’ minutes.
For each server, go to Buffer Logic -> Input Buffer -> Balking & Reneging Options. Open up the Renege Triggers
repeat group and specify event-based renege triggers for each of the server input buffers using the table below as
well as the example model for guidance.
193 / 1277
well as the example model for guidance.
Embellishments:
In this example, we have also used the State Assignments section of properties to change the picture of the entity if
reneging occurs at a Server. This is done by selecting the On Reneging repeat group and specifying the Assign If property
as ‘Reneging From Input Buffer’, the State Variable Name as ‘ModelEntity.Picture’ and the New Value as ‘1’ (for Server1) or
whichever entity picture desired. Note that clicking on the ModelEntity, selecting the Add Additional Symbol button
multiple times, and then changing the symbol of the entity will allow the graphics to update with such On Reneging state
assignments.
See also:
SourceWithBalkingIfBlocked.spfx
ServerQueueWithBalkingAndReneging.spfx
ChangingQueuesWhenServerFails.spfx
194 / 1277
Simio Reference Guide
NotifyStep - SimBit
Problem:
When a certain event occurs or when a variable reaches a certain point, I want the simulation to pause while a message is
given to the user, asking them to either continue running the simulation or giving them the ability to pause the simulation to
investigate the event.
Categories:
Add-On Process Logic, Buffering
Key Concepts:
Contents, CrossingStateChange, Event, InputBuffer, Monitor, Notify Step, On Change Detected Process
Technical Approach:
A message can be displayed to the screen with a Notify Step. This model will place a Notify Step to be executed when a
Monitor element fires. This Monitor element fires when the contents of the Server’s InputBuffer station exceed 3.
Details for Building the Model:
Simple System Setup
Place a Source, a Server and a Sink into the Facility window and connect them with Paths.
Go to the Definitions Window. You should be in the Elements panel ( Elements highlighted on the left of the screen).
Click on Monitor in the Ribbon to create a new Monitor element.
Set the Monitor Type property to ‘CrossingStateChange’
Set the State Variable Name to ‘Server1.InputBuffer.Contents’
Set the Threshold Value to ‘3’.
Set the Crossing Direction property should be set to ‘Positive’, which means that this Monitor will fire when the
contents of the InputBuffer cross over the value of 3 in the positive direction (i.e. when it increases from 3 to 4).
In the drop down of the On Change Detected Process property, create a new Process by select “Create New”.
This new process will be executed when this Monitor fires.
Go to the Processes window and you should see the new Process that was just created. Place a Notify Step into this
process (located under All Steps).
Set the Notification Type to ‘Warning’
Set the Message Heading to “InputBuffer Monitor” (include the double quotes since this is a String)
Set the Message Content to “InputBuffer has more than 3 entities” ((include the double quotes since this is a
String)
Embellishments:
Change the contents of the String message that is in the Message Heading or the Message Content properties. First select
“Continue running” in the pop up window and then select “Pause the Simulation”, to see the behavior of the two choices.
Finally, select “Don’t show this warning again” at the bottom of the window to turn off future warnings.
Discussion:
The Warning Level is controlled from the Run ribbon under Advanced Options. The user can set the Warning Level to Alert
User (this is the default), Write to Trace Only, or Do Nothing. Once the user selects Do Nothing or selects the “Don’t show
this warning again” check box in the pop up window, they must select Re-enable Disabled Warnings from the Advanced
Options tab to get the Warnings to reappear.
195 / 1277
Simio Reference Guide
ObjectReferenceOnEntity - SimBit
Problem:
I would like to keep track of what Server an entity visited so that this information can be used later in the model. I would
like to keep a reference to an object on my entity.
Categories:
Decision Logic -– Paths, Decision Logic -– Processing, Entity Characteristics
Key Concepts:
Active Symbol, Object Reference State, Location.Parent, Selection Weight
Assumptions:
If an Entity is processed at Server1, it must route to Server5 for processing after it finishes at Server4. If an Entity is
processed at Server2, it must route to Server6 for processing after it finishes at Server4.
Technical Approach:
An Object Reference State is created on the ModelEntity object, which will be used to hold a reference to which Server the
entity visited first (either Server1 or Server2). The Selection Weight properties on the paths the leave Output@Server4 will
contain expressions that will route the entity to correct Server, either Server5 or Server6, depending on which Server it
visited at the beginning of the model. The logic in these expressions checks the value of the Object Reference State on
each entity to determine if it was processed at Server1 or Server2.
Details for Building the Model:
Simple System Setup
Place a Source ( Source1) and Sink ( Sink1) at the left and right sides, respectively, of the Facility window.
Place two Server2 in parallel after the Source and name them Server1 and Server2. Connect Source1 to each new
Server with Paths.
Place two Servers, in series, next. Name them Server3 and Server4. Connect them together with Paths and connect
both Server1 and Server2 to Server3 with a Path.
Place two additional Servers, in parallel, after Server4. Name them Server5 and Server6. Connect Server4 to each
new Server with a Path and connect Server5 and Server6 to the Sink with Paths.
Place a ModelEntity object from the Project Library, into the Facility window. Select the entity in the Facility window
and click on ‘Add Additional Symbol’ icon in the Ribbon. Change the color of the second symbol to Red. First, ensure
that he second symbol is displayed by selecting the entity in the Facility window and checking the Active Symbol icon
in the Ribbon. If (2 of 2) is displayed, you are viewing the second symbol. Click on the Color drop down in the
Ribbon, find Red, and then click back onto the Entity object to change its color. (if you are viewing 1 of 2, or the first
symbol, simply select the second symbol from the Active Symbol drop down)
Creating the Object Reference State on the ModelEntity
Click onto ModelEntity in the Navigation window in the upper right side of the interface. Once ModelEntity is
selected, you are now viewing the object definition for this object. Go to the Definitions window of the ModelEntity
object.
Go to the States Panel by selecting States on the left panel.
Click on the Object Reference icon in the ribbon to create a new Object Reference State. Rename this new state,
FirstServer.
Adding Logic to the Model
Back in the main Model, click on Server1 and expand the State Assignments property category. Add a new
assignment in the On Entering property. Click Add to create a new Assignment once the Repeating Property Editor
window is open. Set the State Variable Name to ‘ModelEntity.FirstServer’. Set the New Value property to
‘ModelEntity.Location.Parent’.
The function ModelEntity.Location.Parent will return a reference to the object where the entity is current
located (it’s ParentObject) and at this moment, the ParentObject is Server1, so it will assign a reference of
Server1 to the new state named FirstServer on each entity that passed through. 196 / 1277
Server1 to the new state named FirstServer on each entity that passed through.
Click on Server2 and add the exact same assignment to this Server. ( Exact same State Variable Name and same
expression for New Value). However, before you exit the Repeat Group editor, add a second Assigment. Set the State
Variable Name to ‘ModelEntity.Picture’ and the New Value to ‘1’.
This will change the color of all entities leaving Server2 to Red. This will help with visually confirming that these
entities will be routed to Server6.
Select the Path that leads from Server4 to Server5. Set the Selection Weight property to ‘ModelEntity.FirstServer ==
Server1’. This tells Simio that only entities that have their FirstServer state set to ‘Server1’ will be able to take this
Path.
Similarly, select the Path that leads from Server4 to Server6. Set the Selection Weight property to
‘ModelEntity.FirstServer == Server2’. This tells Simio that only entities that have their FirstServer state set to ‘Server2’
will be able to take this Path.
197 / 1277
Simio Reference Guide
OneQueueForMultipleServers - SimBit
Problem:
I have multiple servers and I would like one queue that feeds into these two servers.
Categories:
Buffering
Key Concepts:
Allow Passing, Blocked Destination Rule, Input Buffer, Lists, NodeList, Path, Select Available Only, Selection Goal,
TransferNode
Assumptions:
If there are entities waiting and one of the servers becomes available, the first entity in the queue will move to the available
server for processing.
Technical Approach:
There are two servers, but the same concept can be applied if there were more than two servers. The InputBuffer property
on each server is set to ‘0’. This will ensure that entities do not wait at each server. A Transfer Node is placed in front of the
two servers. The Transfer Node is configured to only send entities on paths that are available, which ensures that the
entities will wait here if there are no servers available. The Path that leads to the Transfer Node has its Allow Passing
property set to ‘False’ so that the entities wait one behind the other on this link.
Details for Building the Model:
Simple System Setup
Place a Source object and a Sink object in the Facility window. In between, place two Servers that are in parallel to
each other. Place a Transfer Node in front of these two Servers.
Connect the Source to the Transfer Node with a Path. Set the path’s Allow Passing property to ‘False’.
Connect the Transfer Node to the input node of each server with paths.
Connect the output nodes of each server to the Sink.
Create a Node List
Go to the Definitions window and open the Lists panel. Create a new Node List by clicking on the Node icon in the
ribbon. In the node list, first list Input@Server1, followed by Input@Server2.
Ensuring One Queue
Click on the Transfer Node. Set the Entity Destination Type property to ‘Select From List’.
Set the Node List Name property to the name of your new Node List.
The Selection Goal property is set to ‘Random’ in this example.
The Blocked Destination Rule is set to ‘Select Available Only’. This ensures that the entity does not leave this Transfer
Node and travel to its destination if there are entities at each server.
Eliminate Input Buffers
Eliminate the Input Buffer at each server so that the entities cannot wait in this location for server capacity. Set the
Input Buffer property on each server to 0.
Embellishment:
Experiment with more servers and see the behavior change when you change the Blocked Destination Rule property on the
Transfer Node.
OverflowWIP - SimBit
Problem:
I have parts that are processed by two machines, always in FIFO order. I have a small WIP area in front of the machines –
parts always go here to wait if space is available. If the small WIP area is full, parts go to an overflow area, but are still
pulled in FIFO order regardless of location.
Categories:
Buffering
Key Concepts:
Capacity.Allocated, Lists, ModelEntity, ObjectList, Path, Ranking Expression, Ranking Rule, Resource, Secondary Resources,
Selection Weight, Smallest Value First, TimeCreated
Technical Approach:
Represent the WIP areas as Servers with the specified capacity, but no processing time. Don’t leave the Server until the
processing machine is ready to process it. Use resource default behavior to select FIFO from all waiting parts (regardless of
location).
Details for Building the Model:
Simple System Setup
Add a Source, 4 Servers, and a Sink to the Facility Window. Two of the Servers will be the MainWIP and
OverflowWIP areas, while the other two Servers will be ServerA and ServerB.
Determining the WIP Area to go to
In the Selection Weight property for the path to MainWIP, use the 'MainWIP.Capacity.Allocated <
MainWIP.Capacity'. This will evaluate the number of busy “spots” in this Server as compared to the capacity.
In the Selection Weight property for the path to OverflowWIP, use the ‘MainWIP.Capacity.Allocated ==
MainWIP.Capacity’.
Defining the Machines
Place resource with Name ‘ResourceA’ and ‘ResourceB’ representing each machine.
Open the Definitions tab, Lists panel and add an Object list with Name ‘Machines’.
Add ‘ResourceA’ and ‘ResourceB’ to the list.
Details for Machine Selection
Within each WIP area ( MainWIP and OverflowWIP), within the Secondary Resources / Other Resource Seizes section
of properties, enter the After Processing repeating editor and change the Object Type to ‘FromList’, and the Object
List Name to ‘Machines’. The Selection Goal should remain as the default ‘PreferredOrder’ to select the first available
machine from the list. These are seized just before the WIP resource is released.
Within each Server ( ServerA and ServerB ), within the Secondary Resources / Other Resource Releases section of
properties, enter the After Processing repeating editor and change the Object Type to ‘FromList’, and the Object List
Name to ‘Machine’.
Details for Moving to the Selected Machine
Using paths, connect each of the WIP type Servers to each of the processing type Servers, ServerA and ServerB.
In the Selection Weight property for each path to MachineA, use the expression ‘ResourceA.Capacity.UnitsOwned’.
In the Selection Weight property for each path to MachineB, use the expression ‘ResourceB.Capacity.UnitsOwned’.
The combination of the above will result in a weight of 1 for the correct path and a weight of 0 for the other path.
Animation Embellishment:
To make it easier to see the FIFO behavior, we used different entity symbols based on creation time. Look in the Current
Symbol property for PartA and to see the expression used to use a different symbol each hour.
199 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
200 / 1277
Simio Reference Guide
PathSelectionRule - SimBit
Problem:
I have a bidirectional path that takes entities from two different inputs to two different outputs, with entities coming from
both sides of the path. I want to be able to direct how the entities flow onto the path, but I’m not sure how the Traffic
Direction Rule property on a Path works.
Categories:
Decision Logic -- Paths
Key Concepts:
Allow Passing, Bidirectional Path, Entity Destination Type, Maximum Arrivals, Path, Prefer Desired Direction, Source, Time
Offset, Traffic Direction Rule
Assumptions:
There is no passing on the bidirectional path. Entities move onto the link from both node entrances. The systems shown are
identical except for the Traffic Direction Rule property on the bi-directional Path.
Technical Approach:
A model is developed with a system containing two sources, two sinks and a bidirectional link. This first group of objects is
then copied to a second system. To evaluate the difference between the systems, the model will be deterministic, meaning
no random distributions will be used. The only difference will be the Traffic Direction Rule property on the bidirectional
path.
Details for Building the Model:
Simple System Setup
Place a Source ( Source1) and Sink ( Sink1) at the left side of the Facility window. Then, place a second Source
( Source2) and Sink ( Sink2) on the right side.
Within Source1, change the Interarrival Time to ‘.2’ and the under the Stopping Conditions category, change
Maximum Arrivals to ‘5’. Within Source2, change the Time Offset to ‘0.1’, the Interarrival Time to .2 and the Maximum
Arrivals to ‘5’.
Setting the Destinations
Click on the output node of Source1 ( Output@Source1) and change the Entity Destination Type to ‘Specific’ and the
Node Name to ‘Input@Sink2’.
Do the same for Source2 ( Output@Source2) and specify the Entity Destination Type as ‘Specific’ and the Node Name
as ‘Input@Sink1’.
Adding Nodes, Paths and a Bidirectional Path
Place a BasicNode1 to the right of Source1/Sink1. Place a second BasicNode2 to the left of Source2/Sink2.
Using Paths, connect Source1 to BasicNode1 and Source2 to BasicNode2. Then connect BasicNode1 to Sink1 and
BasicNode2 to Sink2. For the Paths connecting the Sources to the BasicNodes, set Allow Passing to ‘False’.
Add a path connecting BasicNode1 and BasicNode2. Change the path’s Type to ‘Bidirectional’, Allow Passing to
‘False’ and Speed Limit to ‘.1’.
Copying System1 to System2
Now that we have a single system completed, we will copy it to make an identical one. This can be done by moving
the mouse to the top left corner above the Source1 and Ctrl-Left Click and drag to highlight all the objects in
system1 (including both Sources, Sinks, BasicNodes and all paths).
Ctrl-C will copy the system and position the mouse below system1 and use Ctrl-V to paste the copy. All objects will
be renamed with unique names.
Edit the bidirectional path for System2 and change the Traffic Direction Rule to ‘Prefer Desired Direction’. You may
need to expand the properties under Type to see this property.
Change the entity destination Node Name properties in the Source Output Nodes to ‘Input@Sink1_1’ and
‘Input@Sink2_1’. 201 / 1277
‘Input@Sink2_1’.
202 / 1277
Simio Reference Guide
PickUpDropOffFlow - SimBit
Problem:
I would like to model flow being carried on a moving entity. The moving entity’s Container would be filled with flow. It
would then travel to a new destination and then empty the flow out of its Container.
Categories:
Add-On Process Logic, Flow Library
Key Concepts:
Assign Step, Condition, Contents, Custom Object, Decide Step, Event, Execute Step, Fire Step, FlowNode, ModelEntity,
Notify Step, Remove Step, Transfer Step, Wait Step
Assumptions:
The model described below will support two entities arriving from the Source object. If this number is altered, the tank
capacity and volume will need to be adjusted to support this.
Technical Approach:
There is a Tank that initially contains 600 cubic meters of flow. There is a second Tank that is initially empty but can hold up
to 600 cubic meters. The ModelEntity object has a Container element that will hold 300 cubic meters of flow. The traveling
entity arrives at a Node and flow is transferring from the first Tank into the Container on the entity. Flow is transferred until
the entity’s Container is full. At this point, the transfer of flow is stopped and the entity travels to the next Node. At this
point, flow is transferred from the entity’s Container into the second Tank. When the entity’s Container is empty, the entity
leaves the Node and travels to the Sink.
Details for Building the Model:
System Setup
Drag out two instances of ModelEntity, so there is an instance of DefaultEntity and ModelEntity1 in the Facility
window. DefaultEntity will be the traveling entity and ModelEntity1 will be the flow.
Place a Source ( Source1) and Sink ( Sink1) at the left and right sides, respectively, of the Facility window.
Set the Maximum Arrivals property on the Source to ‘2’.
Place two TransferNodes in between the Source and the Sink and connect each objects with a Path.
Click onto the path that connects the Source to the first TransferNode. Set the Initial Traveler Capacity to ‘1’ so
that only one traveling entity will be on this link at the same time. This is required so that the second entity
does not arrive at the first TransferNode and request a transfer of flow while the first entity is still accepting a
transfer of flow.
Place two Tank objects (from the Flow Library). Place one Tank near the first TransferNode and the other Tank near
the second TransferNode.
For Tank1, set the Initial Volume Capacity property to ‘600 cubic meters’. Add a row to the Initial Contents
repeat group property and set the Entity Type property to ‘Modelentity1’ and the Quantity to ‘600’, which
indicates that this Tank will initially have 600 cubic meters of ModelEntity1 inside of it.
For Tank2, set the Initial Volume Capacity property to ‘600 cubic meters’.
In the Run Ribbon, set the Speed Factor to at least 300 for a more appropriate animation speed.
Adding a Container to the ModelEntity object
Click on the ModelEntity object in the Navigation window (right side of interface) to enter into this object’s
definition.
Go to the ModelEntity’s Definitions window and click onto “Container” in the Elements ribbon.
Set the Container’s Initial Volume Capacity to ‘300’ cubic meters.
Find the On Full Process and On Empty Process properties of the Container and select “Create New” for each
property so that you have created two new processes that will be triggered when this Container is Full and
Empty.
203 / 1277
From within the ModelEntity’s Definitions window, go to the Events panel (find Events along the left hand side of the
interface). Create two new Events by clicking on “Event” in the Events ribbon. Name one event ‘Full’ and the other
‘Empty’.
Go to the ModelEntity’s Processes window. Find the two new processes that were created earlier from the Container
element.
Place a Fire Step in the Container1_OnEmptyProcess. Set the Event Name of this step to ‘Empty’.
Place a Fire Step in the Container1_OnFullProcess. Set the Event Name of this step to ‘Full’.
Process Logic to Transfer Flow
Navigate back to the main model by clicking onto Model in the Navigation window. Go to the Model’s Processes
window. Create 4 new Processes by clicking on Create Process in the Process ribbon.
Click onto the first process and set it’s Name property to ‘FillShip’.
In this process, we’ll be transferring flow from Tank1 into the entity’s Container. First, make sure there is
sufficient flow in Tank1 to transfer. Place a Decide Step that checks the condition
“Tank1.FlowContainer.Contents > 0’.
If False, place a Notify Step that tells the user there isn’t sufficient flow.
If True, place a Transfer Step to transfer the flow.
Set From to ‘CurrentNode’
Set To to ‘Container’
Set Container Name to ‘ModelEntity.Container1’
Set Flow Regulator Name to ‘[email protected]’
Under Advanced Options, set Entity Type to ‘SpecificObject’ and Entity Object to
‘Tank1.FlowContainer.Contents.FirstItem.Modelentity’ . This is telling Simio that you specifically
want to find the entity that is currently in the Contents queue of the FlowContainer inside of Tank1
and transfer that entity into the current entity’s Container1
Click onto the second process and set it’s Name property to ‘TransferFromTank1ToShip”.
Place an Execute Step with the Process Name property set to ‘FillShip’. In the Advanced Options, set the
Token Wait Action to ‘None ( Continue)’. This will tell Simio to execute the FillShip process, but this token
will not wait for that process to finish, it will continue onto the next step.
Place a Wait Step and set the Event Name to ‘ModelEntity.Full’.
Place a Decide Step and set the Expression to
‘[email protected]>0’, which checks if there is still an
entity in the Flow Request Queue of the Tank’s output node. An entity would still be in this queue if only a
partial amount of the flow was transferred out of the tank. We need to remove the entity from this queue
because we are done with this transfer of flow. This is how we “cancel” a flow transfer request. Simio will
keep on trying to transfer the rest of the flow volume to this entity, unless you remove it from the Flow
Request Queue when you are done. If we had transferred all of the volume that was in the Tank, this step
would not be necessary.
Click onto the third process and set it’s Name property to ‘EmptyShip”
In this process, we’ll be transferring flow from the entity’s Container into Tank2.
Place a Transfer Step to transfer the flow.
Set From to ‘CurrentContainer’
Set To to ‘Container’
Set Container Name to ‘Tank2.FlowContainer’
Set Flow Regulator Name to ‘[email protected]’
Under Advanced Options, set Entity Type to ‘SpecificObject’ and Entity Object to
‘ModelEntity.Container1.Contents.FirstItem.Modelentity’. This is telling Simio that you specifically
want to find the entity that is currently in the Contents queue of the entity’s Container and transfer
that entity into the FlowContainer of Tank2.
Click onto the fourth process and set it’s Name property to ‘TransferFromShipToTank2”.
Place an Execute Step with the Process Name property set to ‘EmptyShip’. In the Advanced Options, set
the Token Wait Action to ‘None ( Continue)’. This will tell Simio to execute the EmptyShip process, but
this token will not wait for that process to finish, it will continue onto the next step.
Place a Wait Step and set the Event Name to ‘ModelEntity.Empty’.
Navigate back to the Facility window of the model and click onto TransferNode1. In the Entered Add On Process
trigger property, select “TransferFromTank1ToShip” in the dropdown so that this process is executed when the entity
enters this node. Similiarly, click onto TransferNode2. In the Entered Add On Process trigger property, select
“TransferFromShipToTank2” in the dropdown so that this process is executed when the entity enters this node.
204 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
205 / 1277
Simio Reference Guide
ProcessModelWithinModel - SimBit
Problem:
There is a series of simple steps in your facility that are repeated many times throughout the operation. You wish to have a
small user-defined “model object” that can be placed multiple times in your model logic.
Categories:
Building New Objects / Hierarchy
Key Concepts:
BasicNode, ContinueProcess, Delay Step, EndTransfer Step, Expression Property, ExternalNode, Object Instance Property,
Station, Release Step, Resource, Seize Step, Station Element, Transfer Step
Assumptions:
The similar steps that will be made into an object include seizing a resource, delaying for a given amount of time and
releasing the resource. The Processes Window steps of Seize, Delay, and Release will be used. All logic within this model
object will be specified in the Processes Window.
Technical Approach:
Within the first model, called SeizeDelayRelease, we will define the processing necessary for this single object, which
includes the Seize, Delay and Release steps. This logic will remain unchangeable, however, the end user of the
SeizeDelayRelease object will be able to specify a single resource name (for seizing / releasing), as well as the delay time.
Details for Building the Model:
Defining the SeizeDelayRelease Process Logic
Open a new model and rename the Model to SeizeDelayRelease by selecting MySimioProject in the Navigation
window, selecting the Models panel, highlighting Model and clicking to rename.
Open the Processes window of SeizeDelayRelease. Create a process with Name ‘Process1’.
Place the Seize, Delay and Release steps into Process1.
For any properties that the end user will be able to specify, highlight the property, right click and select Set
Referenced Property, Create New Referenced Property and specify a property name. In this example, within the
Delay step, set the Delay Time property to ‘DelayTime’. You will see a green arrow to the left of DelayTime,
indicating that the value will come from the parent object, SeizeDelayRelease. Do the same for the Object Name for
Seize and Release steps to specify a ‘Resource Name’ in the parent object.
Defining the SeizeDelayRelease External View
Click on the Definitons tab and select the External panel, where you will specify what the user will see in a Facility
window when they place this model. Place an ellipse, and two external nodes (one for entry, one for exit) in the view.
Change the entry node’s Node Class Name to ‘BasicNode’. The logic of this model is only in the Processes window,
thus the Input Location Type is ‘Station’, with the Station of ‘EntryStation’.
Change the exit node’s Node Class Name to ‘TransferNode’. Input Location Type is ‘None’, as this is a transfer out.
Utilizing the Entry and Exit Node within the Process Logic
Return to the Processes Window and change the change the Triggering Event property to EntryStation.Entered (recall
that the entry node’s Input Location Type was Station called EntryStation).
Add an EndTransfer step at the start of the process, before the Seize step. This will stop the transfer into the model
so that other logic may begin.
Place a Transfer step after the Release step. Change the From property to ‘CurrentStation’, since we entered this
process via station ( EntryStation). The To property should be ‘ParentExternalNode’, with the External Node Name of
‘Node2’ (name of exit node in External Window).
Using the SeizeDelayRelease Model in Another Model
Open a new model and within its Facility Window, place a Source and Sink from the Standard Library and a
SeizeDelayRelease model from the Project Library and connect them with Paths. Place a Resource and change the
Name to ‘Resource1’. 206 / 1277
Name to ‘Resource1’.
Highlight SeizeDelayRelease and specify the ResourceName as ‘Resource1’ and the DelayTime as ‘3.1’.
When you run this new model, the logic behind SeizeDelayRelease then includes all process logic specified within
that model. You may place SeizeDelayRelease as many times in your new model as you like with varying
ResourceName and DelayTime properties.
207 / 1277
Simio Reference Guide
RandomValueFromTable - SimBit
Problem:
I would like to use real data for my system, including time between arrivals and processing times, instead of distribution
data. Recent research1 suggests that sampling directly from real data may be more accurate than using a fitted distribution.
Categories:
Arrival Logic, Data Tables, Entity Characteristics
Key Concepts:
Before Creating Entities, Data Table, Foreign Key, Object Reference Property, RandomRow, RandomValue, Table Foreign
Key Property, Table Row Referencing
Technical Approach:
This model illustrates use of two different types of data. The top subsystem illustrates using data where you have a
standalone set of collected values, for example historical processing times. The bottom subsystem illustrates using data
where you have a set of collected values with identifying or categorizing information, for example historical processing
times by entity type.
Create a table for each set of arrival and/or processing data that will be read during the simulation run. For data that is
entity type specific, a foreign key column within a table is utilized to classify the data. In this example, the first
Source/Server/Sink combination will read data for both source arrivals, as well as server processing times from two
separate tables. In the second Source/Server/Sink combination, two entity types will be generated that have processing
time information located within a relational table.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility window. Connect these with Paths.
Place a second Source, Server, and Sink combination in the Facility window and connect as well.
Place 3 ModelEntity objects from the Project Library into the Facility Window and change the Name property values
to ‘Green’, ‘Red’ and ‘Blue’- change their picture colors to match.
Defining the Data Tables with Product Information
Click on the Data tab of the model and select the Tables panel. Add a DataTable with the Name ‘Source1Table’ and
add a ‘Real’ type property named ‘ArrivalTimes_1’. Copy and paste in any ‘real’ data you may have for time between
arrivals (in this example, we generated 50 data points from StatFit2).
Add a DataTable with the Name ‘Server1Table’ and add a ‘Real’ type property named ‘ProcessingTimes_1’. Copy and
paste in any ‘real’ data you may have for processing times (in this example, we generated 100 data points from
StatFit2).
Add a third Data Table with the Name ‘PartTypes’. Add two column properties; including an Entity Object Reference
property named ‘WhichType’ and an Integer type property named ‘HowMuch’. Add ‘Red’ and ‘Green’ to the Entity
Object Reference column and have corresponding ‘HowMuch’ property values of ‘40’ and ‘60’. We will use the
RandowRow function to generate the entity type from Source2. Click on the column ‘WhichType’ and select the Set
Column as Key button. We will use this as a key for the next table.
Finally, add a Data Table with the Name ‘Server2Table’ that includes a Foreign Key column named ‘PartType’ as well
as a real type column named ‘ProcessingTimes_2’. For the ‘PartType’ column, set the column property named Table
Key to ‘PartTypes.WhichType’, which references the column noted in previous step. In this table, you will add
associated times for both ‘Blue’ and ‘Red’ type parts. The RandomValue function will be used to randomly pick a
value from the associated data for the given part type calling the table.
Generating Random Values for Source1 and Server1
Within Source1, change the Entity Type to ‘Green’ and the Interarrival Time to
‘Source1Table.ArrivalTimes_1.RandomValue’. This will randomly select a value from the Source1Table ( ArrivalTimes_1
property) as the interarrival time each time an entity is generated.
Within Server1, change the Processing Time property to ‘Server1Table.ProcessingTimes_1.RandomValue’. This
function will pull a random value from the Server1Table’s ProcessingTimes_1 column each time an entity is208 / 1277
function will pull a random value from the Server1Table’s ProcessingTimes_1 column each time an entity is
processed.
Generating Random Entity Types and then Random Values from Relational Table
Within Source2, open the Table Row Referencing->Before Creating Entities section of properties and specify the Table
Name as ‘PartTypes’ and the Row Number as ‘PartTypes.HowMuch.RandomRow’.
Change the Interarrival Time to ‘Random.Exponential(6)’. The Entity Type can then be specified as
‘PartTypes.WhichType’, which will be based on the part type generated (40% Blue and 60% Red based on HowMuch
column property values).
Within Server2, change the Processing Time property to ‘Server2Table.ProcessingTimes_2.RandomValue’. This
function will pull a random value from the associated part type’s ProcessingTimes_2 column entries each time an
entity is processed.
Footnote:
1) Nelson, WSC2013, http://www.simio.com/resources/presentations/2013-Winter-Simulation-Conference/pdfs/WSC2013-
Titan-Keynote-Nelson-Simulation-Curmudgeon.pdf
209 / 1277
Simio Reference Guide
RecordDistanceTraveled - SimBit
Problem:
I want to record the distance traveled by a vehicle per hour.
Categories:
Custom Statistics, Vehicles, Custom Object
Key Concepts:
Subclass, Real State Variable, Discrete State, TallyStatistic, Movement, Distance, Periodic Statistic, Hourly Statistic
Technical Approach:
The Vehicle object will be sub-classed to make a customized vehicle in order to add a state and statistic on top of the
standard vehicle behavior. A process will be added to the vehicle to update the state and record the periodic statistic.
Details for Building the Model:
Creating a Sub-Classed Object MyVehicle
Create a new vehicle class called MyVehicle that is sub-classed from Vehicle by right-clicking on Vehicle in the
Standard Library and choosing Subclass.
Adding the State and Statistic to MyVehicle
Select MyVehicle in the Navigation window and click on the Definitions tab, States panel to add a discrete state with
Name ‘PreviousDistanceTraveled’ and Unit Type of ‘Length’. This will be used to record the distance traveled at the
beginning of each period (each hour).
Also within the Definitions window, select the Elements panel and add a Tally Statistic with Name
‘DistanceTraveledPerHour’ and Unit Type of ‘Length’. To make this statistic appear beside the existing distance
traveled statistic, under the Results Classification properties, use Data Source of ‘[ Object]’, Category of ‘Travel’ and
Data Item ‘DistanceTraveledPerHour’.
Also within the Definitions window Elements panel add a Timer with Name ‘HourlyTally’ and Time Offset of ‘1’. This
will be used to trigger a process at the end of the first hour and each subsequent hour.
Within the Processes window add a new process with Name ‘RecordAndResetDistanceTraveled’ and Triggering Event
Name of ‘HourlyTally.Event’. This process will be triggered at the end of each hour so we can calculate and record the
travel during that hour and then reset our internal state. Add two steps to this process.
Add a Tally Step with Tally Statistic Name of ‘DistanceTraveledPerHour’ and Value of ‘TotalDistanceTraveled -
PreviousDistanceTraveled’.
Add an Assign Step to assign the State Variable Name ‘PreviousDistanceTraveled’ to the New Value of
‘TotalDistanceTraveled’.
Building the Model
Select Model from the Navigation window and within the Facility window, place a Source and Sink and connect them
with two paths, one from Source1 to Sink1 and the other from Sink1 to Source1.
Within the Source, change the Interarrival Time to be ‘Random.Exponential(10)’.
Change the Source’s Output TransferNode property Ride On Transporter from ‘False’ to ‘True’. Then change the
Transporter Name property to ‘MyVehicle1’.
Place one of the subclassed vehicle objects by selecting MyVehicle from the Project Library on the left. Specify the
Initial Desired Speed to be '0.5' and the Initial Node (Home) to be ‘Input@Sink1’.
Embellishment:
Add a floor label that will display the distance traveled using the Expression ‘MyVehicle1[1].TotalDistanceTraveled’. You can
also display the travel distance within the current hour by calculating it from the expression
‘MyVehicle1[1].TotalDistanceTraveled - MyVehicle1[1].PreviousDistanceTraveled’. An attached label could be made to the
vehicle in a similar fashion but omitting the ‘MyVehicle1[1].’ term in each expression.
Advanced Notes:
210 / 1277
The TotalDistanceTraveled function is very efficient because it is based on a level which is only updated on demand. But if
this function (or any level) is used in certain types of animation and status displays like a floor label or plot, the frequent
updating required may cause noticeable speed degradation.
The changes made to the subclassed vehicle in this SimBit are all “safe” additions, no built-in logic was overridden. This
means that you can confidently update such an object when new changes are introduced by Simio.
211 / 1277
Simio Reference Guide
ReferenceBatchedEntity - SimBit
Problem:
I would like to make a decision based on the state (priority) of a batched entity. The Vehicle that the parent entity should
select is determined by the priority state of the member entity.
Categories:
Combining and Separating Entities, Entity Characteristics, Vehicles
Key Concepts:
Allow Passing, BatchMembers Queue, Before Exiting, Bidirectional Path, Combiner, Condition Based, Current Symbol
Index, Object Reference State, Priority, Ride on Transporter, Selection Rule, State Assignments, Vehicle
Technical Approach:
There are three Sources which create entities that will enter a Combiner. One Source creates what will become the parent
entity and the other two Sources create member entities. One of the member Sources assigns a priority of ‘2’ to the
member entity and the other assigns a priority of ‘3’ to its entities. After entities are combined, they ride on a Vehicle. There
are two Vehicles to select from and one has a priority value of ‘2’ and the other has a priority value of ‘3’. The Parent entity
must have knowledge of the priority state on the member entity because the value of the member entity’s priority must
equal the value of the Vehicle’s priority. The parent entity has an entity reference state which stores a reference to the
batched member entity so that it can use a function to determine the priority of the member entity.
Details for Building the Model:
Simple System Setup
Place three Source objects into the Facility window. Name them Source_Parent, Source_MemberA and
Source_MemberB.
Set the Interarrival Time of Source_Parent to ‘Random.Exponential(.5)’
Set the Interarrival Time of Source_MemberA to ‘Random.Exponential(.75)’ and set the Time OffSet to ‘.2’
Set the Interarrival Time of Source_MemberB to ‘Random.Exponential(.75)’
Place a Combiner object and a Sink object. Connect the Combiner object to the Sink object with a Path. Set the Type
property of this path to ‘Bi-Directional’ and the Allow Passing property to ‘False’. This will allow Vehicles to travel
back and forth on the path and not travel on top of each other.
Connect Source_Parent to the Parent Input Node of the Combiner with a Path. Connect both Source_MemberA and
Source_MemberB to the Member Input Node of the Combiner with Paths.
Place two Vehicle objects into Facility window. Name one VehicleA and keep its color the default blue. Name the
other VehicleB and change its color to red by selecting red from the Color drop down in the ribbon while that
Vehicle object is selected in the Facility window.
Create a Transporter List
Select VehicleA and right click. Select ‘Add to Transporter List’ and then select ‘Create New Transporter List’. Name
this list, ‘TransporterList1’.
Select VehicleB and right click. Select ‘Add to Transporter List’ and select ‘TransporterList1’.
To view this List that was just created with a right click shortcut, go to the Definitions tab and then to the Lists Panel.
Lists can also be created in this window.
Create Additional Entity Symbols
Place a ModelEntity into the Facility window. Select the entityand give it a total of three symbols by clicking on the
Add Additional Symbol icon in the ribbon twice so that the Active Symbol drop down now has a symbol for index 0,
1 and 2.
Select index 1 from the Active Symbol drop down and select a new color (i.e. light blue) and click onto the
entity object in the Facility window to change its color. Similarly, select index 2 from the Active Symbol drop
down and select a different color (i.e. pink) and click onto the entity object to change its color. Index 0 should
still display a green entity object.
212 / 1277
Select the DefaultEntity object and set its Current Symbol Index property to ‘ModelEntity.Priority – 1’. This will control
which symbol is displayed.
To animate the batched entity, select the DefaultEntity object in the Facility window and select BatchMembers from
the Draw Queue drop down in the Symbols ribbon. Draw the queue near the DefaultEntity object.
Set Properties and States on Entity and Vehicles
Select VehicleA and set its Initial Priority property to ‘2’. Set its Initial Home property to ‘Output@Combiner1’ and its
Idle Action to ‘Park At Home’.
Select VehicleB and set its Initial Priority property to ‘3’. Set its Initial Home property to ‘Output@Combiner1’ and its
Idle Action to ‘Park At Home’.
Select Source_MemberA and open the Before Exiting repeat group property under the State Assignments category.
Add a State Assignment where the State Variable Name is set to ‘ModelEntity.Priority’ and the New Value is set to ‘2’.
Select Source_MemberB and open the Before Exiting repeat group property under the State Assignments category.
Add a State Assignment where the State Variable Name is set to ‘ModelEntity.Priority’ and the New Value is set to ‘3’.
Create Entity Reference State on ModelEntity
Go to the object definition of ModelEntity by selecting it in the Navigation window in the upper right corner of the
interface. Go to the Definitions tab of the ModelEntity and click into the States panel by selecting States on the left
side. Create an Entity Reference State by selecting ‘Entity’ from the Object Reference drop down menu in the ribbon.
Rename this new state, ‘MyBatchedEntity’. This state can later be referenced using ‘ModelEntity.MyBatchedEntity’.
Add Logic to Model
Navigate back to the main model by selecting Model in the Navigation window. Select the Combiner object and
open the Before Exiting repeat group property editor, found under the State Assignments category.
Add a new State Assignment where the State Variable Name is ‘ModelEntity.MyBatchedEntity’ and the New
Value is ‘ModelEntity.BatchMembers.FirstItem’. The BatchMembers.FirstItem function returns a reference to the
first item located in the BatchMembers queue of this entity. In this case, there is only one entity in the
BatchMember queue. The entity reference state, MyBatchedEntity now contains a reference to the batched
entity.
Select the Output@Combiner1 node and set the Ride On Transporter property to ‘True’.
Set the Transporter Type property to ‘From List’ and the Transporter List Name property to ‘TransporterList1’.
Set the Selection Condition property to ‘ModelEntity.MyBatchedEntity.Priority ==
Candidate.Transporter.Priority’. This will tell the model to only select a Vehicle that has a same Priority as the
batched entity.
213 / 1277
Simio Reference Guide
RegeneratingCombiner - SimBit
Problem:
You have a palletizer or similar machine but you do not know the exact timing of when to have pallets arrive.
Categories:
Combining and Separating Entities
Key Concepts:
BatchMembers Queue, Combiner, On Event Arrival Mode, ParentInputBuffer, Source
Assumptions:
We want to have a supply of three pallets waiting so the process will rarely be delayed by lack of pallets.
Technical Approach:
Use the standard features of a Source object to create one new pallet each time one is consumed. Use the Initial Number
Entities property on the Source when ‘On Event’ is used to generate initial entities (must be at least 1, we used 3).
Details for Building the Model:
Simple System Setup
Place two ModelEntity objects from the Project Library and two Sources, one Combiner, and one Sink from the
Standard Library in the Facility window of a new model. Connect Source1 to the ParentInput@Combiner1 with a
Conveyor. Connect Source2 to the MemberInput@Combiner1 with a path. Connect Combiner1 to the Sink with a
Path.
Change the Name of the one of the ModelEntity instances to ‘Pallet’ and the other to ‘Part’.
Creating the Pallets
Within Source1, change the Entity Type to ‘Pallet’. Specify Arrival Mode of ‘On Event’. For Event Name, choose
‘[email protected]’.
On Source1, specify the number of Initial Number Entities as ‘3’. This will generate pallets to start the simulation.
Creating the Parts and Combining Them onto Pallets
Within Source2, change the Entity Type to ‘Part’. Set the Time Offset to ‘.5’ minutes so that the parts arrive after the
initial pallets.
Within Combiner1, specify the Batch Quantity as ‘7’. This will combine 7 parts onto a single pallet for later
processing. Change the Processing Time property to Random.Exponential(1) and the Parent Input Buffer to ‘1’. This
will cause the other pallets to wait on the conveyor.
Discussion:
When Source1 is initialized at the beginning of the model run, it will create 3 Pallet entities and send them out of the
normal Source exit node.
Combiner1 automatically fires an event every time a parent entity exits the Combiner object. Source1 will wait for that
event and create a new entity each time it occurs, effectively replacing the pallet that was just consumed.
Embellishment:
We added an Attached Queue to the Pallet entity symbol and associated it with the Queue State named
'Pallet.BatchMembers'. This will display the members in any batch associated with the Pallet, or in this case, after the Pallet
“picks up” entities in the Combiner, they will appear on the pallet.
RelationalTableInRepeatingProperty - SimBit
Problem:
I have three types of patients that require different processing times, as well as multiple doctors and/or nurses for
processing.
Categories:
Data Tables, Worker
Key Concepts:
Before Creating Entities, Data Table, Dynamic Object Property, Expression Property, Foreign Key, Idle Action, Initial Node
( Home), Key Column, Numeric Property, ParkingStation Queue, RandomRow, Ranking Rule, Request Move, ResourceState,
Server, Smallest Value First, Status Label, Table Row Referencing, Worker
Assumptions:
Each of the three patient types will have a nurse / doctor combination that determines both the name (doctor/nurse) and
quantity of each that is needed. More severe patients will have higher priority. There will be one nurse and two doctors
available to the patients.
Technical Approach:
Relational tables are used to store information about the patients. A Data Table is created that will store information about
each patient type, including the percentage of each that enters the system, and the processing times. A separate related
table will include for each patient type the caregiver type (nurse or doctor) and quantity required. Workers will be used for
the Doctors and Nurse and will move between the Servers to process the patients.
Details for Building the Model:
Simple System Setup
Add a Source, two Servers, and a Sink to the Facility window. Also, place three ModelEntity objects from the Project
Library into the window.
Change the Names of the ModelEntities to be 'Patient_Mild', 'Patient_Medium' and 'Patient_Severe'. Change the
symbol color of each to distinguish them from one another. This is done by highlighting the symbol and selecting the
appropriate color from the Symbols ribbon.
Paths and Extra Basic Nodes
Use Paths and connect Source1 each Server, and both Servers to Sink1.
Place a BasicNode above each of the TransferNodes at both Servers. These nodes will be the used by the Nurse and
Doctors to move between and serve the patients. BasicNode1 should be above Server1 and BasicNode2 should be
located above Server2.
Place an additional BasicNode located in between the Servers, BasicNode3. This will be used as the ‘resting’ location
for the workers when they are not with a patient.
Use unidirectional Paths to connect BasicNode1 to BasicNode3, BasicNode3 to BasicNode2 and then in the other
direction from BasicNode2 to BasicNode3 and BasicNode3 to BasicNode1.
Defining the Workers
Place two Worker objects in the Facility window and rename them ‘Doctor’ and ‘Nurse’. Change the color of one of
the Workers so that you can tell them apart graphically.
Change the Park While Busy property to ‘True’ so that graphically we can animate the Workers while they are busy.
Within each, change the Initial Node (Home) to ‘BasicNode3’ where they will all start out at the start of the
simulation run. Additionally, change the Idle Action to ‘Park At Home’ so they return to BasicNode3 when they are
done with a patient if they are not needed.
Because we have two doctors in the system, change the Initial Number in System (under Dynamic Objects) of the
Doctor object to ‘2’.
Setting up the Data Tables
215 / 1277
In the Data Window, select the Tables panel and add a Data Table named ‘Patients’ with the following properties
and in the following order:
( Entity Object Reference with Name ‘EntityType’) Patient_Mild, Patient_Medium, Patient_Severe
( Integer with Name ‘AmountEach’) 50,40,10
( Expression with Name ‘ProcessingTime ‘ , Unit Type ‘Time and Default Units ‘Minutes’)
Random.Triangular(2,3,4), Random.Triangular(4,6,8), Random.Triangular(10,15,20)
Select the EntityType column and select the Set Column as Key button – this will allow data from this column
to be referenced with a Foreign Key column in another table
Add another Data Table named ‘Workers’ with the following properties and in the following order:
Foreign Key with Name ‘EntityType’ and Table Key of ‘Patients.EntityType’) Patient_Mild, Patient_Medium,
Patient _Medium, Patient_Severe, Patient_Severe
Object Instance Transporter with Name ‘Worker Name') Nurse, Nurse, Doctor, Nurse, Doctor
Integer with Name ‘QuantityNeeded ‘) 1,1,1,1,2
** NOTE: Notice in this table, there is 1 Nurse needed for Patient_Mild, 1 Nurse and 1 Doctor needed for
Patient_Medium and 1 Nurse and 2 Doctors needed for Patient_Severe. The entity type may be referenced
multiple times within the Foreign Key Column in this table, depending upon the type of caregivers needed
Creating Multiple Entity Types from Source
In the Facility Window, expand the Table Row Referencing in the Properties Window of the Source object.
Under the Before Creating Entities subcategory, set the Table Name to ‘Patients’ and the Row Number to
‘Patients.AmountEach.RandomRow’.
Change the Entity Type to ‘Patients.EntityType’ and Interarrival Time to ‘Random.Exponential (5)’.
Specifying the Patient Priority
Within each of the ModelEntity objects, change the priorities of each. The Patient_Mild has an Initial Priority of ‘2’,
while Patient_Medium is ‘1’ and Patient_Severe is ‘0’.
Within each of the Servers, change the Ranking Rule to ‘Smallest Value First’ based on the Ranking Expression
‘Entity.Priority’.
Adding Processing Time and Assignment Information to the Servers
Within each Server, change the Processing Time to ‘Patients.ProcessingTime’.
Open the Secondary Resources for each of the Servers, under Other Resource Seizes select On Entering, open the
Repeating Property Editor and Add a property.
Change the Object Name to ‘Workers.WorkerName’ the Request Move to ‘To Node’ and Destination Node to
‘BasicNode1’ for Server1 and ‘BasicNode2’ for Server.
Under Advanced Options, change the Number of Objects to ‘Workers.QuantityNeeded’.
Exit the Repeating Property Editor and right click on ‘On Entering’ and select ‘Set Referenced Property’ and
select ‘Workers’.
Change Must Simultaneously Seize to ‘True’.
Expand the Other Resource Releases under Secondary Resources, open the Repeating Property Editor and Add a
property for both Servers for After Processing.
Change the Object Name to ‘Workers.WorkerName and the Number of Objects ‘Workers.QuantityNeeded’.
Exit the Repeating Property Editor and right click on ‘After Processing’ and select ‘Set Referenced Property’
and select ‘Workers’.
Animating the Worker Status and Parking Areas
The status of the doctors and nurses can be animated using a Status Label from the Animation ribbon. Place three
status symbols in the Facility Window. Because the doctors and nurse are dynamic objects, they can be referenced
individually. Change the Expression of the status labels to ‘Nurse[1].ResourceState’, ‘Doctor[1].ResourceState’ and
‘Doctor[2].ResourceState’, respectively.
Note that the ResourceState function for Workers is ‘0’ when Idle and ‘1’ when Busy.
Click on BasicNode1 (next to Workstation1) and select Draw Queue > ParkingStation.Contents from the Appearance
ribbon. Place three vertices for the queue so that there is a location for each of the doctors and nurse to appear while
they are busy. Do the same for BasicNode2.
RemoveFromAllocationQueue - SimBit
Problem:
I have an entity that is waiting for capacity of a resource type object, such as a Server. If the entity has been waiting for 5
minutes, it leaves the queue and exits the system.
Categories:
Decision Logic -- Processing
Key Concepts:
Add-On Process, AllocationQueue, Assign Step, ContinueProcess, EndProcess, Execute Step, On Associated Object
Destroyed, On Entered, Real State Variable, Remove Step, SetNode Step, Status Label, Run.TimeNow, Token Actions,
Renege, Reneging
Assumption:
In this model, the scenario is a call center where the entities are incoming calls. The callers wait on the line for one of three
customer service reps but if they are not serviced within 5 minutes, they hang up. The waiting time for each entity is
displayed in an attached status label, rounded to the next lowest integer.
Technical Approach:
The Remove Step is used to remove an entity from the Server’s Allocation Queue if it has been waiting longer than 5
minutes. When the entity enters the Server, it executes a new process ( Process1) and then continues with its processing. The
new process delays for 5 minutes and then attempts to remove the entity from the Allocation Queue, if it is still in the
queue. This process has a property called Token Associated Object Destroyed Action, which is set to ‘EndProcess’. This
indicates that if the object that is associated with the token executing the process (the entity) is destroyed, then end the
process. So if the entity is still waiting in the queue, it will be removed by this process. But if the entity is no longer waiting
and has been destroyed, this process will be ended.
Details for Building the Model:
Simple System Setup
Place a Source, a Server and two Sinks into the Facility window. Connect the Source to the Server with a path and
connect the Server to each Sink with paths.
Drag a ModelEntity object into the Facility window. This can be renamed to CustomerCall to represent a phone call.
Click on the Source and rename it to ‘Incoming Calls’. Set the Interarrival Time to ‘Random.Exponential(.7)’
Click on the Server and rename it to ‘CustomerServiceReps’. Set the ProcessingTime to ‘Random.Exponential(4)’. Set
the Initial Capacity to ‘3’.
Rename one Sink to ‘HangUps’ and the other to ‘ServicedCustomers’
Add A State to ModelEntity
Click on the ModelEntity from within the Navigation window on the top right side of the interface. Go to the
Definitions tab (this is the Definitions window of the ModelEntity).
Click on the States panel on the left. Click on ‘Discrete State’ in the ribbon to create a new state variable. Rename it
to ‘TimeEnteredLine’.
Process Logic
Create a new Add On Process in the ‘Entered’ trigger of the Server. It will be named ‘Server1_Entered’.
From within the Processes window, place an Assign Step in the ‘Server1_Entered’ process. Set the State Variable
Name to ‘ModelEntity.TimeEnteredLine’ and New Value to ‘Run.TimeNow’. This is recording when this entity begins
its wait in the Server queue.
Place a SetNode Step after the Assign Step. Set the Destination Type to ‘Specific’ and the Node Name to
‘Input@ServicedCustomers’. By default, entities should exit through this Sink.
Create a new process by clicking on the ‘Create Process’ icon in the ribbon. Name this ‘Process1’. In the properties of
this process, set Token Associated Object Destroyed Action property to ‘EndProcess’
Back in the ‘Server1_Entered’ process, place an Execute Step after the SetNode Step. Set the Process Name to
‘Process1’ and the Token Wait Action to ‘None ( Continue)’. This will cause Process1 to be executed, but the token (and
217 / 1277
‘Process1’ and the Token Wait Action to ‘None ( Continue)’. This will cause Process1 to be executed, but the token (and
therefore the entity) will continue on with its action while Process1 begins execution.
Place a Delay Step in Process1. The Delay Time should be 5 minutes.
Place a Remove Step next, that has it’s QueueStateName set to ‘CustomerServiceReps.AllocationQueue’.
In the Removed segment leaving the Remove Step, place a SetNode Step. The Destination Type should be set to
‘Specific’ and the Node Name should be ‘Input@HangUp’. This will send removed entities (entities still in the queue
after the 5 minute delay), to the HangUp sink.
After the SetNode Step in Process1, place a Transfer Step. Set From to ‘CurrentStation’ and To to ‘Node’ and Node
Name to ‘Output@CustomerServiceReps’. When an entity is removed from a queue, it must be transferred
somewhere. Set the Token Wait Action property to 'WaitUntilTransferringEvent'.
Status Labels
Click on the CustomerCall entity in the Facility window and draw an attached Status Label by clicking the Status
Label icon in the ribbon (while CustomerCall is selected). Set the Expression property to ‘Math.Floor(( Run.TimeNow –
TimeEnteredLine)*60). This will display the waiting time (rounded) of each entity as it travels the system.
Click on each Sink object and draw a Floor Label by clicking the Floor Label icon in the ribbon (while the Sink is
selected). Then, click on the Edit icon in the ribbon to edit the text of this attached Floor Labels. Type ‘Total
HangUps: { InputBuffer.NumberEntered}’ and ‘Total Serviced Customers: { InputBuffer.NumberEntered}.
Embellishments:
Vary the Delay time to see how the system changes or set the Delay time as a property and vary it within an experiment.
Experiment with the capacity of the Customer Service Rep server to see the impact on the number of customers who hang
up.
218 / 1277
Simio Reference Guide
RequestRideFromSameTransporter - SimBit
Problem:
I have entities that select a transporter from a list, after being processed at a Server, the entity must be picked up by the
same transporter.
Categories:
Entity Characteristics, Worker
Key Concepts:
Object Reference State, Add-On Process, Assign Step, Transporters, ModelEntity, ObjectList, TransporterList, Ride on
Transporter, Entity.CurrentTransporter, Functions
Assumption:
There is one unit of each worker type in the system.
Technical Approach:
A Transporter Reference State Variable will be added to the ModelEntity. An Add-On Process will be used to assign this
state variable a value based on the Transporter that picks up the entity. The transporter reference state will then be used to
request a ride on a particular worker later in the model.
Details for Building the Model:
Simple System Setup
Place a Source, a Server, and a Sink from the Standard Library. Use two Unidirectional Paths (one in the forward, and
one in the reverse, direction) to connect Source and Server1, Input@Server1 and Output@Server1, and
Output@Server1 to Sink1. – The reason we use 2 paths here is to avoid deadlocks when the 2 transporters are traveling
in opposite directions.
Then connect the Sink to the Source using just one path.
Adding the Transporters and Transporter List
Place two Worker objects in the Facility and change the Name properties to ‘WorkerA’ and ‘WorkerB’.
While holding the Ctrl key, click on each of the Worker objects. While they are highlighted, right-click in the
highlighted area and select Add to Transporter List > Create a New Transporter List and name the list ‘WorkerList’.
You will notice now that within the Definitions window, List panel, this new Transporter List is available to view/edit
and contains our 2 worker objects.
Also while both Workers are selected, set their Initial Node to ‘Output@Source1’.
Adding a Transporter Reference State
Within the Navigation window, highlight the ModelEntity and go to its Definitions window, States panel.
From the States ribbon, select Object Reference > Transporter. Change the Name of the object reference state to
‘WhoPickedMeUp’. This will generate a new state on the entity, referenced ModelEntity.WhoPickedMeUp, which can
store a reference to a particular instance of a Worker.
Defining the Logic
Within the Navigation window, go back to the Model and make sure you are in the Facility window.
Select one of the Workers, expand its Add-On Process Triggers and double-click on the Loaded trigger (make sure
you click on the word Loaded), which will automatically create a new process, and take you to the Processes window.
Add an Assign step to the process and assign the State Variable Name ‘ModelEntity.WhoPickedMeUp’ to the New
Value ‘Entity.CurrentTransporter’ – This function returns a reference to the transporter object where the entity is currently
riding.
Go back into the Facility window. Click on the other Worker and add this same process to its Loaded Add-on Process
Trigger. The same Assign step will now be called by both Workers.
Set the Ride on Transporter Property in Output@Source1 to ‘True’, Transporter Type to ‘From List’, and Transporter List
Name to ‘WorkerList’.
219 / 1277
Name to ‘WorkerList’.
Finally, set the Ride on Transporter Property in Output@Server1 to ‘True’, leave the Transporter Type as ‘Specific’, and
set the Transporter Name to ‘ModelEntity.WhoPickedMeUp’. – You will have to manually type this value in, the
Transporter Name property will make the state available in the drop down.
Enhancing the Animation
Set the Speed Factor in the Run Window to be 0.010.
Drag in an instance of ModelEntity. While it is selected, click on ‘Status Label’ and draw a box next to the entity. Set
its Expression to ‘WhoPickedMeUp’. – The ‘ModelEntity’ is not necessary because the label is already attached to the
ModelEntity so it knows what object we are referring to.
To Rotate the Status Label, press Ctrl and drag on of the green dots in the corner of the label.
220 / 1277
Simio Reference Guide
ResourcesWithWorkSchedules - SimBit
Problem:
There are two employees that work at a ticket counter. The employees follow two different work schedules.
Categories:
Schedules / Changeovers
Key Concepts:
Current Symbol Index, ObjectList, Resource, Schedules, Secondary Resources
Assumptions:
The work schedule is the same each day – it follows a one day cycle.
Technical Approach:
A server represents the ticket counter and a resource object is used to represent an employee. The capacity of each
resource is determined by a work schedule.
Details for Building the Model:
Simple System Setup
Place a Source, Server, Sink and two Resource objects into the Facility Window. Change the Name of the resources to
‘Employee1’ and ‘Employee2’.
If you’d like to change the symbol representing the entity, place a ModelEntity object from the Project Library into
the Facility Window and select a new symbol from the symbol tab.
Specifying Information about the Employees
Click on the Definitions tab, select the Lists panel and create a new Object List with Name ‘ObjectList1’. Click on the
text boxes of the list to get a drop down that will show all the available objects from the model. Put both
‘Employee1’ and ‘Employee2’ objects in the list.
In the Data tab, Schedules panel, add two new schedules by clicking on the Work Schedules button on the Schedule
tab and entering the schedule Name ‘Schedule1’ and ‘Schedule2’.
Set the number of Days in each schedule to ‘1’. This indicates that this one day schedule repeats itself for each day
the simulation is run.
Create a two Day Patterns by clicking on the Day Patterns tab. Name the two patterns ‘DayPattern1’ and
‘DayPattern2’.
Click on the ‘+’ sign to expand the Work Periods
Create a pattern that has a Value of ‘1’ (on shift) in these time slots: 8:00 AM - 10:00 AM, and 12:00 PM -2:00 PM for
‘DayPattern1’. For ‘DayPattern2’, specify a Value of ‘1’ from 8:00 AM - 12:00 PM for. Leave everything else empty,
which indicates Off Shift times.
Back within the Work Schedules tab, select ‘DayPattern1’ for ‘Schedule1’ and ‘DayPattern2’ for ‘Schedule2’.
Select each Resource and change the Capacity Type to ‘Work Schedule’ and select the appropriate Work Schedule,
either ‘Schedule1’ or ‘Schedule2’.
Using the Employees at the TicketCounter
In the Facility Window, within the TicketCounter ( Server), open the Secondary Resources and find the Resource for
Processing section of properties. Change the Object Type to ‘FromList’ and the Object List Name to ‘ObjectList1’.
Animating the Employees
In order to animate the Resource objects to change color when they are busy, click on one of the Employees in the
Facility Window. Select Add Additional Symbol from the symbols tab of the Ribbon. With the Active Symbol icon
reading 2 of 2, select a new color (i.e. green) from the Color icon in the symbols tab and then click on the center
circle of the Resource object. By default, this resource will now change to green when it is busy. ( This is controlled by
the default expression in the current symbol index property of the resource object).
221 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
222 / 1277
Simio Reference Guide
ResourceSelectionConcepts - SimBit
This SimBit Project includes four models that demonstrate the use of Secondary Resources For Processing. The models
increase in complexity and demonstrate methods for selecting Resources based on attributes like cost, efficiency and skill.
Models included in this SimBit:
1. CostBasedResourceSelection
2. EfficiencyBasedResourceSelection
3. SkillsBasedResourceSelection
4. SecondaryResourceShiftChange
Model 1: CostBasedResourceSelection
Problem:
I have three processing lines which each require one Secondary Resource For Processing, and I would like to select the least
costly available Resource.
Categories:
Resources
Key Concepts:
Efficiency, Financials, Largest Value, Lists, Object List, Resource, Resource Efficiency, Secondary Resources, Selection Goal,
Status Label
Assumptions:
When using Resources and Efficiency features, the actual Processing duration for a Server is defined as Processing Time
divided by Resource Efficiency. This may be one value if there is only one seized Resource, or an Aggregate Efficiency value
determined by Resource Efficiency Rule, in the event of multiple seized Resources.
Technical Approach:
This Model contains three competing Source -> Server -> Sink processing lines and three Resources stored in an Object
List. Each Resource has a different hourly Usage Cost Rate. Each Server requires one Secondary Resource For Processing,
and always tries to select the least expensive, available Resource using a Selection Goal.
Details for Building the Model:
System Setup
Place one Source ( Source1), one Server ( Server1) and one Sink ( Sink1) at the left, middle, and right sides
(respectively) of the Facility window.
Connect Source1 to Server1, and Server1 to Sink1, using Paths.
Change Interarrival Time of Source1 to ‘Random.Exponential(1)’ and, under Stopping Conditions, set Maximum
Arrivals to ‘50’.
Place three Resource objects in the Facility window and change their names to ‘Joe’, ‘Mary’ and ‘Bill’. You can change
the Resource names by either double clicking their labels in the Facility window or navigating to the General section
of their Properties Window and editing the Name Property.
Click on Joe and, under Financials -> Resource Costs, change the Usage Cost Rate to ‘15’. Make sure its units are
‘USD’ in the dropdown. Then, repeat this for Mary and Bill but with Usage Cost Rate values of ’17.50’ and ‘20’
respectively.
Then, in the Definitions Tab, navigate to the Lists View (left hand side of the screen) and create an Object List. In its
Properties window change Name to ‘Resources’. Then, in the bottom half of the split window, populate the list with
the three Resources ( Joe, Mary, Bill) that you instantiated in the Facility window.
Change the Processing Time of Server1 to ‘1’ and make sure that its Units are ‘Minutes’ in the dropdown.
Under Secondary Resources set Repeat Group to ‘False’, Object Type to ‘Select From List, Object List Name to
‘Resources’, Selection Goal to ‘Smallest Value’, and final Value Expression to
‘Candidate.Resource.ResourceUsageCostRate’.
Place one ModelEntity object in the Facility window and notice that its name is DefaultEntity (by default).
223 / 1277
Now copy and paste the Source -> Server -> Sink processing line by holding ctrl then click-dragging to highlight all
three objects (and their Paths) at once. Copy (ctrl+c) and paste (ctrl+v) shortcut keys work in Simio, or you may use
the icons on the Project Home Ribbon. Copy your processing line containing Source1, Server1 and Sink1 and paste it
twice in Facility window. You may leave the names as they are: Source1_1, Server1_2, etc. or change them to Source2,
Server3, etc. depending on your preference.
Status Labels
Click on Joe in Facility window, then navigate to the Animation Ribbon and select a Status Label. Then bring your
mouse back into Facility window and notice that its appearance has changed to a crosshair. Now you may click-drag
to draw a gray status label above Joe in Facility window. Once its drawn, and you select it, you will notice that its
Attached To property has the value ‘Joe’.
The goal is to write an Expression which will dynamically demonstrate where each Resource is throughout the run. On
your Status Label type the Expression ‘ResourceOwners.FirstItem.CurrentStation’.
Upon running the Model, you’ll encounter a Runtime Warning stating “Unable to evaluate status expression for
graphic.” The relevant “Possible cause” is that which reads “An attempt was made to access the member of an object
or element reference, but the reference is set to the value ‘Nothing’.”
One option would be to check the box for “Don’t show this warning again”, however, it is always recommended to try
and resolve Model logic, rather than suppress warnings.
A solution is to rewrite your Status Label Expression as ‘Math.If( ResourceOwners.FirstItem == Nothing, " ",
ResourceOwners.FirstItem.Entity.CurrentStation)’. Now, you will notice that the Runtime Warning does not occur,
because the Status Label simply displays a blank space “ “ when Joe is idle.
Repeat the steps to create Attached Status Labels for Mary and Bill with the same ‘Math.If…’ Expression discussed
above.
Model 2: EfficiencyBasedResourceSelection
Problem:
I have three processing lines which each require one Secondary Resource For Processing, and I would like to adjust the
Processing Times based on Resource Efficiency.
Categories:
Data Tables, Resources
Key Concepts:
Data Table, Efficiency, Largest Value, Resource, Resource Efficiency, Secondary Resources, Selection Goal, Server, Status
Label, Status Plot
Assumptions:
Each Server has the same Processing Time of ‘1’ Hour, by definition, but the actual duration of Processing varies with the
Efficiency of the Secondary Resource used For Processing.
Technical Approach:
This Model contains three competing Source -> Server -> Sink processing lines and three Resources stored in a Data Table
along with their Efficiency values. Each Server requires one Secondary Resource For Processing and always tries to select
the most efficient Resource available using a Selection Goal.
Details for Building the Model:
Some of the instructions for this Model refer to the CostBasedResourceSelection Model. If you did not work through the
CostBased Model, please refer to its “Details for Building the Model” documentation section as needed.
System Setup
Start by copying the three processing lines you created in CostBasedResourceSelection and paste them in the empty
Facility window of EfficiencyBasedResourceSelection. Also copy and paste Joe, Mary and Bill along with their
Attached Status Labels.
Instead of storing the Resources in a List, as was done in CostBasedResourceSelection, they will now be stored in a
Data Table. Navigate to the Data tab and, on the Schema Ribbon click the Add Table dropdown and select ‘Add
Data Table’. In the Table Properties Window change Name to ‘SkillsTable’.
On the Schema Ribbon, select the Object Reference Property dropdown and choose ‘Object’. This will create an
Object Property column in your SkillsTable.
Now, in the Property Window for the column you just created, change Name to ‘Resources’ and change Object Type
to ‘Resource’.
224 / 1277
to ‘Resource’.
Next, on the Schema Ribbon, select ‘Real’ from the Property dropdown to create another column. Name this column
‘Efficiency’ and enter the values ‘0.5’, ‘0.75’ and ‘1’ respectively for the rows storing Joe, Mary and Bill.
Next configure the Servers to use the information stored in SkillsTable. Go back to Facility window and select
Server1. Some of the Properties copied over from the CostBased Model will persists, but not all of them. Change
Object List Name to ‘SkillsTable.Resources’, Selection Goal to ‘Largest Value’, Value Expression to
‘SkillsTable.Efficiency’ and in the Advanced Options dropdown, Resource Efficiency to ‘SkillsTable.Efficiency’.
You may have noticed that the Object Type property is still ‘Select From List’, which is as desired, because in this case
we are using the Table column as a List. There is more information about Table columns as lists in the “Data Tables”
Help topic.
Make the same updates to Server2 but set Selection Goal to ‘Random’ and notice that Value Expression no longer
appears.
Make the same updates (made to Server1) to Server3 but make sure Selection Goal is set to ‘Smallest Value’ and set
Value Expression to ‘SkillsTable.Efficiency’.
Finally, place one instance of ModelEntity in the Facility window.
Status Labels and Status Plot
Select (click) Server1 in Facility window, then navigate to the Animation Ribbon and select a Status Label. Then bring
your mouse back into Facility window and notice that its appearance has changed to a crosshair. Now you can click-
drag to draw a gray status label near the top corner of Server1 in Facility window. Once its drawn, and you select it,
you should notice that it has an Attached To property with the value ‘Server1’.
We want to display the Aggregate Efficiency of each Server. Aggregate Efficiency will display the Resource Efficiency, at
a given Server, based on one or multiple Secondary Resources For Processing — subject to the Resource Efficiency
Rule in the Server Process Logic, under Other Processing Options. You’ll notice that a numerical index (0-5) is passed
to Aggregate Efficiency. The values (0-5) respectively correspond to the six values of the Resource Efficiency Rule
property: ‘None’, ‘Average’, ‘Count’, ‘Maximum’, ‘Minimum’ or ‘Sum’. Since we are only using one Secondary Resource
For Processing, in this Model, the value is somewhat arbitrary as long as it is not 0 ( None) or 2 ( Count).
For the Status Label attached to Server1, type the Expression ‘Math.If( Processing.Contents.FirstItem == Nothing, " ",
Processing.Contents.FirstItem.Entity.SeizedResources.AggregateEfficiency(1))’. Refer to the
CostBasedResourceSelection documentation section “Details for Building the Model” -> “Status Labels” for a
discussion about the need for ‘Math.If…’.
Navigate to the Animation Ribbon and select a Status Plot. Click-and-drag to draw it in Facility window. Then, open
the Repeating Property Editor by selecting the ‘…’ icon within the Additional Expressions property.
Click the Add button three times to create three [ Empty] Items in the Repeating Property Editor. Select the first
[ Empty] Item, and type the Expression ‘Server1.Processing.Contents.AverageTimeWaiting * 60’, and Label it
‘S1_Avg_Processing’. Repeat these steps for Server2, and Server3 in the other two [ Empty] Items. Now when you Run
the Model, you’ll notice that the Status Plot populates with the average processing time at each server, based on the
Entities that have completed processing.
Model 3: SkillsBasedResourceSelection
Problem:
I have two processing lines, which each require two Secondary Resources. Some Workers are only qualified to work at one
Server. I would like to use the average of the seized Resource Efficiencies to determine the overall effect on Processing
Time.
Categories:
Data Tables, Resources
Key Concepts:
Data Table, Efficiency, Largest Value, Resource Efficiency, Secondary Resources, Selection Condition, Selection Goal, Status
Label, Worker
Assumptions:
The Worker ‘Joe’ is not qualified to work at Server1 and the Worker ‘Tom’ is not qualified to work at Server2 per their
Efficiency values of ‘0’ as defined in the SkillsTable Data Table.
Technical Approach:
This Model contains two Source -> Server -> Sink processing lines and four Workers with different values of Efficiency, at
each Server, defined in a Data Table. An Efficiency value of ‘0’ indicates that a Worker is not qualified at a given Server.
Each Server requires two Secondary Resources For Processing, and always tries to select the most efficient Resource
225 / 1277
Each Server requires two Secondary Resources For Processing, and always tries to select the most efficient Resource
available using a Selection Goal. A Selection Condition guarantees that a Worker must also be qualified to work at a given
Server.
Details for Building the Model:
System Setup
From the Project Home Ribbon, select the Actions dropdown and click the Source, Server, Sink Add-In.
Hold down ctrl and click-drag to highlight the entire Source -> Server -> Sink processing line, that was created by
the Add-In, and copy/paste it to the right in Facility window.
Drag four Worker objects into Facility window and name them ‘Joe’, ‘Tom’, ‘Bill’ and ‘Mary’.
Place a BasicNode near the Workers and name it ‘Home’.
Use ctrl+click to multi-select Joe, Tom, Bill and Mary. Then edit the following properties: set Park While Busy to
‘True’, Initial Node (Home) to ‘Home’ and Idle Action to ‘Park At Home’.
Navigate to the Data Tab and use the Add Table dropdown, on the Schema Ribbon, to Add Data Table. In in the
Table Properties Window change Name to ‘SkillsTable’.
On the Schema Ribbon select Object from the Object Reference Property dropdown. You will now see a column of
type Object Property. In its Properties Window, change Name to ‘Workers’, Object Type to ‘Worker’ and Auto-set
Table Row Reference to ‘True’.
Then populate the Workers column with Joe, Mary, Bill and Tom.
Next create two Real Property columns, using the Schema Ribbon Property dropdown, and selecting Real (twice).
Name the first new column ‘EfficiencyAtServer1’, and the second new column ‘EfficiencyAtServer2’.
Respectively for Joe, Mary, Bill and Tom, populate the ‘EfficiencyAtServer1’ column with the values 0, 0.5, 1 and 2.
Then, in the same order, populate the ‘EfficiencyAtServer2’ column with the values 1.5, 0.5, 1.5 and 0.
Now we will configure the Servers up to use the information in Skills Table. Multi-select Server1 and Server2 by
holding ctrl then clicking them both. Set Processing Time to ‘1’ ( Minutes) and Resource Efficiency Rule (in Other
Processing Options dropdown) to ‘Average’.
With both Servers still multi-selected: In the Secondary Resources section, under For Processing, set Repeat Group to
‘False’, Object Type to ‘Select From List’, Object List Name to ‘SkillsTable.Workers’, Selection Goal to ‘Largest Value’
and, under Advanced Options, Number of Objects to ‘2’.
Then, only for Server1, set Value Expression (still in Secondary Resources -> For Processing) to
‘SkillsTable.EfficiencyAtServer1’, Request Move to ‘To Node’, Destination Node to ‘Input@Server1’, and under
Advanced Options, Selection Condition to ‘SkillsTable.EfficiencyAtServer1 > 0’, and Resource Efficiency to
‘SkillsTable.EfficiencyAtServer1’. The Selection Condition ensures that a Worker is qualified to work at a Server before
it is seized.
Then, only for Server2 make the same adjustments but reference the ‘SkillsTable.EfficiencyAtServer2’ column, and
‘Input@Server2’ Node, in the proper Expressions.
Drag one ModelEntity into the Facility window.
Drawing Queues
Select the BasicNode named ‘Home’ that you placed in Facility window. Then, in the ( Node Tools) Appearance
Ribbon, click the Draw Queue dropdown and select ParkingStation.Contents. Drag your cursor back into Facility
window and notice that it now appears as crosshairs.
Left click somewhere near the ‘Home’ Node to make the first Queue Vertex, then right click somewhere else near the
‘Home’ Node to make another Vertex. Next, on the ( Queue Tools) Appearance Ribbon, select the Oriented Point
Alignment option.
Now use the Add Vertex button, on the Appearance Ribbon, to add two more Vertices and place them wherever
you’d like the Workers to wait when Idle. The position of the green arrows, extending from the Vertices, may be
adjusted to control the direction the Workers will face while they occupy the Queue.
Follow the same steps to draw two more Oriented Point ParkingStation.Contents Queues Attached To Input@Server1
and Input@Server2.
Status Labels and Dynamic Labels
I would like to create a Dynamic Label (one that travels with the Agent as it moves in the Animation) showing the
Efficiency for a given Worker, at a given Server. Multi-select Joe, Tom, Bill and Mary using ctrl+click. In the General
section, of their Properties Window, we will use a Math.If statement in Dynamic Label Text to evaluate (logically) “if
the Worker is at Input@Server1, show its EfficiencyAtServer1, if the Worker is at Input@Server2, show its
EfficiencyAtServer1, otherwise show nothing”.
The Expression is as follows: ‘Math.If( Worker.CurrentNode == Input@Server1,
String.FromReal( SkillsTable.EfficiencyAtServer1), Worker.CurrentNode == Input@Server2,
String.FromReal( SkillsTable.EfficiencyAtServer2), " ")’.
226 / 1277
Then you may append (at the beginning) each Worker’s Dynamic Label Text with their name. So the Dynamic Label
Text for Joe should be ‘”Joe” + Math.If( Worker.CurrentNode…)’.
Finally, make a Status Label attached to Server1, and another attached to Server2 with the following Expression
‘Math.If( Processing.Contents.FirstItem == Nothing, " ",
Processing.Contents.FirstItem.Entity.SeizedResources.AggregateEfficiency(1))’. See the “Status Labels and Status
Plot” section, in EfficiencyBasedResourceSelection documentation above, for a discussion about this Expression.
Model 4: SecondaryResourceShiftChange
Problem:
I have some day shift Resources who are replaced by night shift Resources in the middle of the day. I would like the Server
to continue working during the shift change and re-calculate remaining Processing Time based on the Efficiency of night
shift Resources.
Categories:
Add-On Process Logic, Building New Objects / Hierarchy, Data Tables, Resources, Schedules / Changeovers
Key Concepts:
Add-On Process, Data Table, Efficiency, Lists, ObjectList, Off Shift, On Shift, Output Table, MyResource, Resource
Efficiency, Schedules, Secondary Resources, Selection Goal, SubClass, WorkSchedule
Assumptions:
This SimBit uses an Output Table which is a disabled feature for Personal and Design Editions. Users with these Editions
will be able to view the Output Table but not create their own or edit it.
Technical Approach:
This Model contains one Source -> Server -> Sink processing line and five instances of a Resource Subclass Object called
MyResource whose definition contains a Real Property called Efficiency. The value for Efficiency is then assigned at each
instance of MyResource, in the General Property Group. Each instance of MyResource follows a WorkSchedule and at 2PM
a shift change occurs. The Off Shift Rule ‘Switch Resources If Possible’ allows the Server to continue processing while re-
calculating the remaining Processing Time based on the Efficiency values of the incoming MyResources.
Details for Building the Model:
Custom Resource Object
Right-click the Resource Object, in Standard Library, and select Subclass. Notice that the Navigation Window (top
right) now shows MyResource along with ModelEntity and the Models you have created.
Select MyResource in the Navigation Window and navigate to the Definitions Tab. In the Properties View, define a
Real Property using the Standard Property dropdown ( Properties Ribbon) and selecting Real.
Change Name of the Real Property to ‘Efficiency’ and set its Default Value to ‘1.0’.
We will use this custom Resource Object in our Model and be able to define an Efficiency for each instance of
MyResource.
System Setup
Place a Source, Server and Sink in Facility window and connect them with Paths.
Place five MyResource objects in Facility window and name them ‘Joe’, ‘Mary’, ‘Bill’, ‘Sue’ and ‘Tom’. Notice that
MyResource is not located in the Standard Library (to the left of Facility window), but in the [ Project Library] which is
just below it. In the General section of their Properties Window, set Efficiency to ‘0.75’, ‘1.0’ (default), ‘1.0’ (default),
‘1.5’ and ‘2.0’ respectively.
In the Definitions Tab -> Lists View create an Object List to store the five MyResources just instantiated. Change the
Name property of your List to ‘Resources’.
Now configure Server1. Set Processing Time to ‘1’ ( Hours), and Resource Efficiency Rule (under Other Processing
Options) to ‘Average’. Under Secondary Resources -> For Processing, set Repeat Group to ‘False’, Object Type to
‘Select From List’, Object List Name to ‘Resources’, Selection Goal to ‘Largest Value’, Value Expression to
‘Candidate.MyResource.Efficiency’ and Off Shift Rule to ‘Switch Resources If Possible’. Under Advanced Options, set
Number of Objects to ‘2’ and Resource Efficiency to ‘Candidate.MyResource.Efficiency’.
Place one ModelEntity in Facility window.
Work Schedules
Navigate to the Data Tab, Work Schedules View.
Rename the ‘StandardWeek’ Work Schedule to ‘Day’ and change its description to something meaningful like ‘The
day shift schedule’. Create another Work Schedule by typing ‘Night’ in the next row and change its description
227to/ 1277
day shift schedule’. Create another Work Schedule by typing ‘Night’ in the next row and change its description to
something similar.
In the bottom half of the split Window rename the ‘StandardDay’ Day Pattern to ‘DayShift’ and give it a Description
like ‘Standard 6-2 work day’. Then create another Day Pattern called ‘NightShift’ and give it a Description like
‘Standard 2-10 work day’.
In ‘DayShift’ set Start Time to ‘6:00 AM’, Duration to ‘8 hours’ and notice that End Time automatically updates to ‘2:00
PM’. Make sure that Value is set to ‘1’. This corresponds to the Capacity (while On-Shift) of any Object following this
WorkSchedule.
In ‘NightShift’ set Start Time to ‘2:00 PM’, Duration to ‘8 hours’ and notice that End Time automatically updates to
‘10:00 PM’. Make sure that Value is set to ‘1’.
Finally, update the ‘Day’ Work Schedule to use ‘DayShift’ Pattern on each day Monday through Friday. Make the same
change to ‘Night’ but using the ‘NightShift’ Pattern.
Go back to Facility window and ctrl+click to multi-select Joe, Mary, Bill, Sue and Tom. In the Properties Window
update Capacity Type to ‘WorkSchedule’. Next, for Joe, Mary and Bill set Work Schedule to ‘Day’.
Do the same for Sue and Tom but set Work Schedule to ‘Night’.
Output Table (disabled in Personal and Design Editions)
In the Data Tab Schema Ribbon use the Add Table dropdown to Add Output Table. Change its Name property to
‘Results’.
On the Schema Ribbon, use the State dropdown to add an Integer State column. Change its Name to ‘EntityID’.
Again, using the State dropdown ( Schema Ribbon), add two DateTime State columns. Name the first one
‘StartProcessing’ and the second one ‘EndProcessing’.
Finally, add a Real State column and name it ‘Duration’. Make sure its Unit Type is set to ‘Time’.
Process Logic
In Facility window select the Input@Server1 Node. In the Add-On Process Triggers section, double click on Entered
and notice that an Add-On Process called ‘Input_Server1_Entered’ is created.
Follow the same steps, at Output@Server1 to create an ‘Output_Server1_Entered’ Add-On Process.
Next go to the Processes Tab and click ‘All Steps’ in the bottom left to reveal more Steps. Drag an AddRow Step into
the ‘Input_Server1_Entered’ Process. Click on the AddRow Step and change Table Name to ‘Results’.
Click on the Add Row Step you just made, and press F2 to give it a meaningful name like ‘AddOneResultsRow’.
If you simply click in the blank space of the Process you will see its Properties appear in the Properties Window and
you may give it a meaningful Description if you’d like.
Next drag an Assign Step into the ‘Output_Server1_Entered’ Process. Use F2 to give it a meaningful name like
‘Results.Duration’.
Within the ‘Results.Duration’ Assign Step set State Variable Name to ‘Results.Duration’ and New Value to
‘Results.EndProcessing – Results.StartProcessing’.
Click the three dots in Assignments (More) to open the Repeating Property Editor. Use the Add button to create an
empty Item. Within it, set State Variable Name to ‘Results.EntityID’ and New Value to ‘ModelEntity.ID’.
These Processes will populate the Results Output Table throughout the run, and their functionality will be clearer
once you can see the Results.
Status Labels
In Facility window click Server1 and navigate to the Animation Ribbon. Click Status Label and draw it in Facility
window near Server1. Make sure that its Attached To property is ‘Server1’.
Set its Expression to ‘Math.If( Processing.Contents.FirstItem == Nothing, " ",
Processing.Contents.FirstItem.Entity.SeizedResources.AggregateEfficiency(1))’. There is more discussion about this
Expression in the previous Models’ “Status Labels” documentation sections.
Lastly draw one more Status Label near the first one, this time not attached to anything. Type the Expression
‘DateTime.ToString( TimeNow, "h:mm tt")’. Observe how this Expression dynamically displays the Simulation Time
throughout the run.
228 / 1277
Simio Reference Guide
ResourceStatesWhenOffShift - SimBit
Problem:
I have a system with two Servers that each seize a secondary Resource before processing begins. Each Server behaves
differently if it is processing an entity when the seized secondary Resource goes Off Shift. Server1 will finish processing any
entities that are currently being processed but will not begin working on another entity until the secondary Resource is back
On Shift. Server2 will immediately end the processing of any entities when the secondary Resource goes Off Shift.
Categories:
Add-On Process Logic, Resources, Schedules / Changeovers
Key Concepts:
Add-On Process, Interrupt Step, On Off Shift, OnEnteredProcessing, Real State Variable, Resource, Resource, ResourceState,
Save Remaining Time, Schedules, Status Pie
Assumptions:
When Server2 immediately ends the processing of any entities when the secondary Resource goes Off Shift, the interrupted
entity will remember how much time it has left for processing and get sent back to the InputBuffer of Server2 to queue up
so it can finish its processing time when the secondary Resource comes back On Shift.
Technical Approach:
Server1 will use the default behavior when any seized secondary Resource goes Off Shift, which is to continue processing
any entities that are in the middle of processing during the shift change. The Resource will be put into the Resource State of
“OffShiftBusy” during the time when it is finishing the processing of these entities. Server2 will not follow the default
behavior, but instead when the secondary Resource goes Off Shift, it will Interrupt any processing that is currently occurring
on Server2. Capacity of Server2 will be immediately released and the entity will be transferred back to Server2.InputBuffer
with a Transfer Step.
Details for Building the Model:
Simple System Setup
Place a Source and a Sink into the Facility window. Place two Servers between that are in parallel to each other.
Connect the Source to both Servers with Paths and connect both Servers to the Sink with Paths.
Place two Resource objects into the Facility window.
Create Work Schedules:
Go to the Data window and go to the Schedules panel by clicking Schedules in the left hand side of the Data
window.
Add a new schedule by clicking on the Work Schedules button and entering the schedule Name ‘WorkSchedule1’.
Set the Start Date (i.e. 6/14/2010) and the number of Days to ‘1’.
Create a Day Pattern by clicking on the Day Pattern tab. Enter the Name ‘DayPattern1’.
Click on the ‘+’ sign to expand the Work Periods.
Create a schedule that has a Value of ‘1’ (on shift) in these time slots: 8:00-8:10am, 8:15-8:25am, 8:30-8:40am, and
8:45-8:55am. Leave everything else empty, which indicates Off Shift times. The schedule of the run starting time day is
adjusted depending on the schedule’s number of days. As the schedule’s number of days is one day, every day will have the
same schedule independently of the fact that the run date is prior to the schedule date. For example a run date starting
June 12th vs. a schedule start date on June 14th.
Back in the Facility window, click onto each Resource object and change the Capacity Type property of each to
‘WorkSchedule’ and select the new Schedule for the Work Schedule property. The same schedule can be used for
both Resource objects.
Change the Run Time parameters by clicking on the Run Tab in the Ribbon. Set the Starting Time to 8:00am and set
the Ending Type to 1 Hour.
Adding a New State to ModelEntity
Create a new State on the ModelEntity. This will keep tracking of the processing time and it is needed because
during the Interrupt Step, we save off the remaining processing time.
229 / 1277
during the Interrupt Step, we save off the remaining processing time.
Click on the ModelEntity within the Navigation Window in the top right. When this is selected, go into the
Definitions window. You are now in the Definitions window of the ModelEntity (not the main model).
Click on the States panel to the left and click on Discrete State in the Ribbon to add a new State. Name this
ProcessingTime. Set the Initial State Value to ‘.4’
Go back to the main model by clicking on Model in the Navigation window.
Go to the Facility window and click on Server1. Set the Processing Time property to ‘ModelEntity.ProcessingTime’.
Do the same for Server2.
Add Process Logic to main Model:
From the Facility window of the main model, click on Server1. Create two new processes in the Processing and After
Processing Add On Process triggers.
Do the same for Server2 (click on the Server2 and create two new Add On Processes for Processing and After
Processing)
Go to the Processes window and place a Seize Step in Server1_Processing process and place a Release Step in the
Server1_AfterProcessing process. These steps will seize the secondary Resource before Server1 begins processing
and it will release it after it has finished processing. In the Seize Step, set Object Type to ‘Specific’ and select
‘Resource1’ from the dropdown of Object Name. Leave everything else as the defaults.
Do the same for Server2 – add a Seize Step to the Processing process and a Release Step to the Processed process.
But instead of seizing and releasing Resource1 – use Resource2.
Server1 and Resource1 will follow the default behavior when Resource1 goes Off Shift. But Server2 and Resource2
will immediately end processing. So we need to add process logic when Resource2 goes Off Shift. From within the
Facility window, select Resource2. Create a new process in the Off Shift Add On Process trigger.
From within the Processes window, place an Interrupt Step in this new process. Set the Process Name to
‘Server2.OnEnteredProcessing’. Set the Interrupted Process Action to ‘EndProcess’. And set Save RemainingTime to
‘ModelEntity.ProcessingTime’.
In the Interrupted segment of the Interrupt Step, place a Release Step. In the Release Step, set Object Type to
‘Specific’ and select ‘Resource2’ from the dropdown of Object Name. Leave everything else as the defaults.
After the Release Step, place a Transfer Step to move any entity currently being processed into the InputBuffer. Set
From to ‘CurrentStation’ and To to ‘Station’ and Station Name to ‘Server2.InputBuffer’.
Adding ResourceState Pie Charts to Facility Window:
In the Facility window, select Resource1 and then click on Status Pie within the Ribbon. Draw the Pie Chart into the
Facility window. This will create a Status pie chart that is attached to Resource1. In the properties window of the
Status Pie, set DataType to ‘ListState’ and ListState to ‘ResourceState’.
Do the same for Resource2. When the model runs, notice the different between the Resource States between the two
Resources. Resource1 will have some time where it is 'OffShiftBusy' because it will finish working on an entity, but
Resource2 will never have this State because it will always interrupt processing when it goes Off Shift so it will never
be OffShiftBusy.
Embellishments:
Change the Work Schedule durations or the Processing times to see changes to flow and balance of the system and
therefore to the time spent in each ResourceState.
See Also:
See Interrupt Step and List States help pages.
230 / 1277
Simio Reference Guide
RotatingVehicleExample - SimBit
Problem:
I want a robot to pick parts from the source, to process them at a server and drop them at the sink.
Categories:
Add-On Process Logic, Vehicles
Key Concepts:
Assign Step, Create Step, Delay Step, Execute Step, Movement.Heading, Movement.X, Movement.Y, Movement.Z, Token
Wait Action, Vehicle
Technical Approach:
Add a Vehicle and initialize its coordinates ( X, Y, Z ) to a basic node placed earlier in the model. Assign new angular values
to Movement.Heading and delay the vehicle to rotate the robot.
233 / 1277
Simio Reference Guide
RoutingWithoutPaths - SimBit
Problem:
My entities travel through a sequence of nodes and there is no travel time in between nodes. Instead of using zero-time
TimePaths or Connectors, I’d like to have my entities move directly from node to node without traveling on a link.
Categories:
Data Tables, Decision Logic -- Processing
Key Concepts:
Add-On Process, Data Table, Expression Property, Expression Property, Node Property, On Entered, Real State Variable,
Search Step, Transfer Step
Assumption:
The routing information comes from a Simio data table.
Technical Approach:
A Data Table contains two columns; one which is a node property which contains the routing information and the other is
an integer property which indicates the part type. Each entity in the system has a part type and this is used to determine
the routing information from the Data Table. A Transfer Step transfers the entities from Node to Node, eliminating the
need for links.
Details for Building the Model:
Simple System Setup
Place two standard Sources, four Servers and one Sink object into the Facility window.
Place two ModelEntity objects into the Facility window. Name one ModelEntity “PartA” and the other “PartB”. Color
PartB red by selecting the entity in the Facility window and selecting the color red from the Color dropdown in the
Decoration section of the ribbon.
Set Entity Type in Source1 to ‘PartA’ and to ‘PartB’ in Source2.
Create the Data Table
Create a new Data Table by going to the Data tab and clicking on Add Data Table from the Tables section of the
Schema ribbon.
Add a new column to the table by selecting Expression from the Property dropdown in the Columns section of the
Schema ribbon. Name this property ‘Part Type’ by changing the Name property in the properties window.
Add another column to the table by selecting Node from the Object Reference Property dropdown in the Columns
section of the Schema ribbon. Name this property ‘MyDestination’.
Fill in the table with the following information:
235 / 1277
Simio Reference Guide
ScheduledMaterialArrivals - SimBit
Problem:
I have a data file specifying the times that materials arrive to the system.
Categories:
Data Tables
Key Concepts:
Data Table, Event, Material Element, Numeric Property, Process Triggering Event, Produce Step, Server, Source, Timer
Element
Technical Approach:
Create a table that specifies the Arrival Time and Quantity of each delivery. Create a Timer that triggers a Produce step in a
process to introduce Material into the system.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility window, link together with Paths.
Specify that the Source creates 1 arrival with 6 entities per arrival.
Change Entities Per Arrival to ‘6’.
Change Maximum Arrivals to ‘1’.
Defining the Data Table with Arrival Information
Open the Data window of the model and select the Tables panel. Use the Add Data Table button to create a table
with the Name ‘MaterialDeliverySchedule’ and include the following columns:
( Real)‘ArrivalTime’: 1, 1.5, 0.5
( Integer)‘Quantity’:3, 1, 2
Material Arrivals using Data Table Information
In the Definitions window, select the Elements panel:
Add a Material element Name Widget
Add a Timer Name 'MaterialArrival'. Set the Interval Type to 'ArrivalTable'. Set the Arrival Time Property to
'MaterialDeliverySchedule.ArrivalTime'.
In the Processes window:
Create a new process Name 'MaterialHasArrived'. Set the Triggering Event Name to 'MaterialArrival.Event' (the
event that is fired by the Timer).
Add a Produce step to that process. Set the Production Type to 'Material'. Set the Material Name to 'Widget'.
Set the Quantity to 'MaterialDeliverySchedule.Quantity'.
Using the Material Information in the Model
In the Facility window:
Select Server1 and change the Process Type to ‘Task Sequence’.
Select Processing Tasks and open the Repeating Property Editor.
Change the Material Name to ‘Widget’.
Change the Quantity to ‘1’.
Enhancements:
Add a Status Label showing the Input Buffer Contents of Server1.
Add a Status Label showing the number of Widgets in Stock.
237 / 1277
Simio Reference Guide
ScheduledMaterialArrivalsWithDeviation -
SimBit
Problem:
I have a machine that consumes material and material is scheduled to be available (produced) at specific times. I want to
see how variation around the material arrival times affects my system.
Categories:
Arrival Logic, Data Tables
Key Concepts:
Add-On Process, Arrival Time Deviation, Data Table, Material Element, Numeric Property, On Exited, Produce Step, Server,
Source, Status Plot, Task Sequence
Assumptions:
We will assume a constant Entity Interarrival Time and a constant Processing Time so we can see the affects of the material
arrival variation.
Technical Approach:
A Server object is used and it consumes 1 unit of Material with a '1' minute Processing Time. We set the Material arrival
times to be scheduled to arrive just as the material is due to run out. We will use 2 systems: one with no variation around
the material arrival time, and one without.
Details for Building the Model:
Simple System Setup
Place 4 Sources, 2 Servers and 4 Sinks from the Standard Library into the Facility window.
Connect Source1, Server1, and Sink1 with Paths. Connect Source2 and Sink2 with a Path, as well.
Place these two groups of objects on the left hand side of the Facility window.
Now replicate this system with the remaining objects on the right side of the Facility window. Connect Source3,
Server2, and Sink3 with paths, as well as Source4 and Sink4.
Rename Source2 ‘MaterialArrival1’ and Source4 ‘MaterialArrival2’.
Creating the Material Arrival Table
In the Tables panel of the Data tab, click Add Data Table. Name this table ‘MaterialArrivalTable’.
Under Standard Property, click ‘Real’ to add a Real Property.
Name this property ‘ArrivalTime’ and set its Unit Type to ‘Time’ and leave the Units ‘Hours’.
We want the Material to arrive every 15 minutes, so we will fill in the table with arrival table with arrivals every 0.25
hours (0.25, 0.5, 0.75, 1, 1.25, etc…) up to 3 hours.
Creating the Material Elements
Open the Definitions window and select the Elements panel. In the Supply category, click on the Material element
twice adding 2 Materials: ‘Material1’ and ‘Material2’.
Set both of their Initial Quantities to ‘15’.
Process to Produce Material
The Source-Sink portion of each system is designed to illustrate Material arrivals. So we have to trigger a Produce
step somehow.
In MaterialArrival1, create a process on the Exited Add-On Process Trigger.
In this MaterialArrival1_Exited process, place a Produce Step. Set the Production Type to ‘Material’, the Material
Name to ‘Material1’ and the Quantity to ‘15’.
Do the same thing for MaterialArrival2, create a process in MaterialArrival2’s Exited Add-On Process Trigger.
In the MaterialArrival2_Exited process, place a Produce step. Set the Production Type to ‘Material’, the Material Name
to ‘Material2’ and the Quantity to ‘15’.
238 / 1277
to ‘Material2’ and the Quantity to ‘15’.
Defining the Object Properties
Within the Facility window, edit both Source1 and Source3 (either by pressing 'Ctrl' and selecting both or by editing
them separately) so that the Interarrival Time is ‘1’ and Units are ‘Minutes’ and that the Maximum Time under
Stopping Conditions is ‘3’ and Units are ‘Hours’.
In Server1, change the Process Type to ‘Task Sequence’ and for the Processing Tasks open the Repeating Property
Editor by clicking on the button with the three little dots. Add a new task and change the Name to ‘Consume’, the
Processing Time to ‘1’. Under the Material Requirements, change the Material Name to ‘Material1’ and the Quantity to
‘1’.
In Server2, change the Process Type to ‘Task Sequence’ and for the Processing Tasks open the Repeating Property
Editor by clicking on the button with the three little dots. Add a new task and change the Name to ‘Consume’, the
Processing Time to ‘1’. Under the Material Requirements, change the Material Name to ‘Material2’ and the Quantity to
‘1’.
In both MaterialArrival1 and MaterialArrival2, set the Arrival Mode to ‘Arrival Table’ and the Arrival Time Property to
‘MaterialArrivalTable.ArrivalTime’.
In MaterialArrival1, leave the Arrival Time Deviation property set to ‘0.0’. But in MaterialArrival2, set it to
‘Random.Uniform(-0.2,0.2)’ and Units to ‘Hours’. This means that the Entity will try to arrive via the time specified in
MaterialArrivalTable.ArrivalTime, but the actual arrival time will be anywhere from 0.2 hours early to 0.2 hours late.
Enhancements:
We can add some animation, to show the current remaining number of Materials while we’re running this model.
Choose Status Plot from Animation ribbon, create a Status Plot, with the Title ‘Constant Material Arrivals’, then set the X
Axis label to be ‘Time’ and the Y Axis label to ‘Quantity’.
Then click on the plot, go to Properties window, add 2 rows in the Additional Expressions. One row has the Expression set to
‘Material1.QuantityAvailable’, and the Label set to ‘Material1’. The other row has the Expression set to
‘Server1.InputBuffer.Contents’, and the Label set to ‘Buffer Contents’. Then we’ll have two animation lines within the plot,
one represents the number of Material1 units remaining and the other one represents the number Entities in Server1’s Input
Buffer.
Repeat this process for the Variable System instead using Server2 and Material2 in the Expressions.
These two graphs illustrate how variation upon arrivals can really wreak havoc on the system by occasionally starving the
system of material and allowing a queue to form at the Server. With constant arrival times and processing times, it is
impossible to recover from these queues and waiting times become significantly longer.
239 / 1277
Simio Reference Guide
ScheduleUsesAProperty - SimBit
Problem:
I would like to use a Work Schedule where the capacity within the schedule is dependent on a user input property.
Categories:
Schedules / Changeovers
Key concepts:
On Shift, Off Shift, Schedules, Server, WorkSchedule
Technical Approach:
This is a simple Source, Server, Sink model where the Server follows a Work Schedule. The capacity within the Work
Schedule is set by the value of a property. Therefore, when the user changes the value of the property for the simulation
run, the capacity of the Server uses this value since it is reading this value from within the Work Schedule.
Details for Building the Model:
Simple System Setup
Place a Source object, a Server object and a Sink object and connect the Source to the Server with a Path and
connect the Server to the Sink with a Path.
Set the Interarrival Time of the Source to ‘Random.Exponential(.2)’ minutes.
Set the Capacity Type property of the Server object to ‘WorkSchedule’ and set the Work Schedule property to
‘StandardWeek’.
Defining the Property
Go to the Properties window by selecting Properties along the left panel from within the Definitions window.
Select Integer from the Standard Property drop down in the Properties ribbon. Rename this new property,
‘ServerCapacity’.
Defining the Schedule
Go to the Schedules window by selecting Schedule along the left panel from within the Data window.
Click onto the Day Patterns tab. You’ll see the ‘StandardDay’ day pattern. Click onto the ‘+’ to expand the pattern.
The Value column has a value of ‘1’ by default. This means that when the simulation clock is between the hours listed,
the value of ‘1’ is set to the capacity of resource that is following this Day Pattern within the a specified Work
Schedule. Replace the ‘1’ with the name of the new property that was created, ‘ServerCapacity’. Have the schedule
use this new property for both the 8am-12pm timeframe and the 1pm-5pm timeframe. Note that this Day Pattern
named ‘Standard Day’ is then referenced within the ‘Standard Week’ work schedule.
Setting the Model’s ServerCapacity Property
Before you run the model, set the value of the ServerCapacity property by finding it in the Model Properties. Either
click into the open space of the Facility window to bring up Model Properties, or right click onto the name of the
Model from within the Navigation window and select Model Properties. You’ll see the new property, ServerCapacity,
and you can set the value and run the model to see how the capacity of the Server is set to the value of this new
property.
You might consider having the model start running at 8:00am, which is when the Work Schedule begins On Shift. This
is controlled on the Run ribbon, under Run Setup.
Embellishments:
Create an experiment and create different scenarios where the ServerCapacity property has different values and compare
the throughput and average time in system of the entities. To create an Experiment, either right click onto the name of the
Model in the Navigation Window and select New Experiment or click onto New Experiment from the Project Home
ribbon.
240 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
241 / 1277
Simio Reference Guide
SearchStationElement - SimBit
Problem:
I’d like to use a Station element and I’d like to search the entities in a Station and find one that meets my specific criteria.
Categories:
Add-On Process Logic, Combining and Separating Entities, Decision Logic -- Processing
Key concepts:
Active Symbol, Add-On Process, Batch Step, Decide Step, EndTransfer Step, From Current Station, Match Condition, On
Created Entity, On Event Arrival Mode, ReturnValue, Search Step, Selection Weight, State Assignments, Station Element,
Transfer Step
Technical Approach:
Each time Source1 creates an entity, another entity is created via a Create Step within a process. It is given a new picture
(30% - green, 30% - red, 40% - blue). This new entity is then transferred into Station1.
Another Source sends an entity to Server1. Before processing at Server1, the entity searches Station1 to try and find a
matching entity ( ModelEntity.Picture) and if a match is found, they are batched, processed and they move to the Sink
named Batched. If there is not currently a match in the Station, the entity is processed and moves to the Sink named Single.
Details for Building the Model:
Creating Entities for the Station
Place a Source object and a Sink object and connect them with a Path.
In the Source object ( Source1), set the Arrival Mode property to ‘On Event’. Set the Initial Number Entities to
‘10’. Set the Triggering Event Name to ‘Station1.Exited’.
This Source object will start by creating 10 entities, but will then wait to create another entity when an entity
exits Station1.
Create a new Add-On Process in the Created Entity Add-On Process trigger. We will populate this process later
when we get to the Processes window.
Place a ModelEntity from the Project Library into the Facility window.
With the DefaultEntity selected, click onto Add Additional Symbol (twice) in the Symbols ribbon so that there
are three different symbols now available for this DefaultEntity.
Make the second symbol active by selecting 2 of 3 from the Active Symbol drop down in the Symbols ribbon
(the entity should still be selected in the Facility window). Click onto Color in the Symbols ribbon and select
Red and then click onto the DefaultEntity so that the color turns Red.
Make the third symbol active by selecting 3 of 3 from the Active Symbol drop down in the Symbols ribbon (the
entity should still be selected in the Facility window). Click onto Color in the Symbols ribbon and select Blue
and then click onto the DefaultEntity so that the color turns Blue.
You should now have three different symbols for the Default Entity – green, red and blue, where green has a ‘0’
next to it in the Active Symbol drop down, Red has a ‘1’ and Blue has a ‘2’.
Creating Entities for Server Processing
Place another Source object, a Server object and two Sink objects into the Facility window. Change the Name of one
of the Sinks ‘Batched’ and the other ‘Single’.
Connect Source2 to Server1 with a Path and connect Server1 to each of the Sink objects with a Path.
In Source2, create a new State Assignment in the Before Existing Assignment property. Use the Discrete distribution
to assign a random value to State Variable Name of ‘ModelEntity.Picture’, which is a built-in state on the ModelEntity
object (this also controls the color of the DefaultEntity symbol). The New Value of the assignment is
‘Random.Discrete(0, .3, 1, .6, 2, 1 )’. This will assign 30% of the entities green, 30% red and 40% blue.
In Server1, set the Initial Capacity property to ‘5’ and the Processing Time property to ‘.1’ minutes. Create a new Add-
On Process in the Processing Add-On Process Triggers. We will populate this process later when we get to the
Processes window.
Select the path that leads from the Server to the Batched Sink. Set the Selection Weight of this path to
‘ModelEntity.BatchMembers > 0’. This will force only entities that have another entity in its BatchMembers 242 (i.e.
queue/ 1277
‘ModelEntity.BatchMembers > 0’. This will force only entities that have another entity in its BatchMembers queue (i.e.
batched entities) to follow this path.
Select the other path which leads from the Server to the Single Sink. Set the Selection Weight of this path to
‘ModelEntity.BatchMembers == 0’. This will force only entities that do not have an entity in the BatchMembers queue
(i.e. unbatched, single entities) to follow this path.
Creating Elements in the Definitions Window
Within the Definitions tab, select the Elements panel. Click onto Station in the Elements ribbon to create a new
Station element.
Click onto Batch Logic in the Elements ribbon to create a new Batch Logic element. This will be used within process
logic to batch entities together.
Process Logic within the Processes Window
Click onto Create Process in the Processes ribbon to create a new process, named Process1.
Find the process property named Triggering Event Name and populate it with the event, ‘Station1.Entered’.
This indicates that this process will be executed whenever an entity enters Station1.
Place an EndTransfer step into this process. This indicates that the transfer has been completed and that the
entity is now inside the station.
Find the Source1_CreatedEntity process. This is the process that is executed each time Source1 creates an entity.
Place a Create Step. Set the Entity Type property to ‘DefaultEntity’.
In the Created exit leaving the Create step, place an Assign step. Set the State Variable Name property to
‘ModelEntity.Picture’ and the New Value property to ‘Random.Discrete(0, .3, 1, .6, 2, 1 )’. This will assign 30% of
the entities to green, 30% - red, 40% - blue.
After the Assign Step, place a Transfer step. Set the From property to ‘FreeSpace’. Entities are always created in
FreeSpace. Set the To property to ‘Station’ and the Station Name to ‘Station1’.
Find the Server1_Processing process. This is the process that is executed each time an entity is about to start
processing on Server1.
Place a Search step. This step will search the Station to try and find an entity with the same color as the entity
about to process at the Server. If a matching entity is found, its ModelEntity.ID is saved into the
Token.ReturnValue. Set the Collection Type to ‘QueueState’ and the Queue State Name to ‘Station1.Contents.’
Set the Match Condition to ‘ModelEntity.Picture == Candidate.ModelEntity.Picture’. Set the Search Expression
to ‘ModelEntity.ID’.
Place a Decide step out of the Original exit leaving the Search step. Set the Decide Type to ‘ConditionalBased’
and the Expression to ‘Token.ReturnValue == 0’. This checks to see if the Search Step found a matching entity. If
the ReturnValue of the token is anything other than zero, then the Search step found a match and put the
ModelEntity.ID of that entity into the Token.ReturnValue.
Place a Batch step out of the False exit leaving the Decide step. Set the Batch Logic Name to the name of the
Batch Element that was created earlier. Set the Category to ‘Parent’. This entity (which is the original entity at
the Server), will become the parent in the batch.
Place a Transfer step out of the Found exit of the Search step. Set the From property to ‘CurrentStation’ and the
To property to ‘FreeSpace’. This Step is only executed if a matching entity is found via the Search step. It will
transfer that entity out of the Station and into FreeSpace.
Place a Batch step after the Transfer step. Set the Batch Logic Name to the name of the Batch Element that was
created earlier. Set the Category to ‘Member’. This entity (which is entity that was just transferred out of the
Station), will become the member in the batch.
Animating Queues
Animate the contents of the Station by clicking onto the Animation ribbon and selecting Detached Queue. Draw a
queue into the Facility window and set the Queue State to ‘Station1.Contents’.
Animate the batched items that are attached to the ModelEntity by selecting the DefaultEntity in the Facility window
and selecting Batch Members from the Draw Queue dropdown in the Symbols ribbon. Draw the queue somewhere
near the instance of DefaultEntity. This is an attached queue.
243 / 1277
Simio Reference Guide
SearchTables - SimBit
Problem:
I would like to be able to search through a Data Table and select a row based on certain criteria.
Categories:
Arrival Logic, Data Tables
Key Concepts:
Add-On Process, Assign Step, Collection Type, Current Symbol Index, Data Table, Match Condition, ModelEntity, Node
Property, Numeric Property, On Created Entity, Priority, Search Step, SetNode Step, TableRows, TransferNode
Technical Approach:
A Data Table contains an Integer property and a Node Property. Each entity is assigned a value of 1, 2, 3 or 4 to its priority.
A token searches the Data Table on behalf of the entity to find the row that matches the value of its priority. Once the
appropriate row is found, the destination of the entity is set to the Node that is listed in the Data Table.
Details for Building the Model:
Simple System Setup
Place a Source and a Sink into the Facility window. Place four Transfer nodes in between the two objects - the nodes
should be in parallel. Connect the Source to each of the four nodes and connect each node to the Sink.
Place a ModelEntity into the Facility window. To help with model verification, we’ll have the entity change color
depending on its priority (and therefore its destination node).
Select the DefaultEntity in the Facility window and click on the Add Additional Symbol icon in the ribbon. You
will see that the icon to the right, Active Symbol, now displays 2 of 2. Click on the Color icon, select a color and
then click back into the Default Entity in the Facility window. The symbol should change color. You have now
changed the color of whatever symbol is active (if it says 2 of 2, then you changed the color of the second
symbol that is associated with this Default Entity object).
Add two more symbols to this object by repeating the steps above and assign a unique color to each of the
four symbols.
Within the ModelEntity properties, under the Animation section, specify the Current Symbol Index property as
‘ModelEntity.Priority – 1’. The steps in the process logic below will assign the priority to the entity based on a random
discrete distribution and the animation entity picture will then change as priority is assigned.
Create Data Table
Go to the Data window, and within the Tables panel, click the Add Data Table icon in the ribbon to add a new table.
Add a column that is an Integer property by selecting Integer from the Standard Property drop down in the ribbon.
The column can be renamed to Priority.
Add a second column to the table – a Node Property, by select Node from the Object Reference drop down in the
ribbon. The column can be renamed to Node.
Fill the table with data – such as:
1 , TransferNode1
2 , TransferNode2
3 , TransferNode3
4 , TransferNode4
Add Process Logic
From within the Facility window, click on the Source and create a new Add On Process for the trigger called Created
Entity. (select Create New from the drop down)
From within the Processes window, you should see the new Process that was created.
Place an Assign step in the process. The StateVariable Name should be ModelEntity.Priority and the New Value
should be Random.Discrete(1, .25, 2, .5, 3, .75, 4, 1). Each entity has a 25% chance of being assigned a Priority of
1, 2, 3 or 4.
244 / 1277
Place a Search Step after the Assign Step. The Collection Type property should be set to ‘TableRows’ and the
Table Name property should be the name of your Data Table ( Table1). Set the Match Condition to be
‘ModelEntity.Priority == Table1.Priority’. This will ensure that the entity is set to read the row that matches its
priority value.
In the Found segment of the Search Step, place a SetNode step. The Destination Type property is ‘Specific’ and
the Node Name property should be set to ‘Table1.Node’.
Embellishments:
Change the matching condition for searching the table and add additional information in the Data Table to be used in the
model.
245 / 1277
Simio Reference Guide
SearchTableUponEnteringObject - SimBit
Problem:
Each object in my model reads data from a table to determine its processing time and the number of resources it must
seize before processing. I do not want to hard code the row where each object should look for its data, but instead the
entity should search the table whenever it enters the Server to find the appropriate data.
Categories:
Data Tables
Key Concepts:
Add-On Process, Blocked Destination Rule, Cyclic, Data Table, Entity, Entity Destination Type, Expression Property, ID,
NodeList, Numeric Property, On Entered, Location.Parent, Real State Variable, Resource, RowNumber, Save Index Found,
Search Step, Secondary Resources, Select Available Only, Selection Goal, Server, SetRow Step, String Property, Token,
Token State, TransferNode
Technical Approach:
This model contains three Servers in parallel. An entity travels to one of the three Servers, seizes a certain number of
Resources, delays for a certain amount of time and then releases the Resources. The number of Resources and the delay
duration is different for each Server. This information is stored in a table. To find the appropriate row in the table, the token
must search the table and find the row that contains the information for that particular Server. The search uses the ID of the
Server object to find the appropriate row in the table.
Details for Building the Model:
Basic Model Setup within the Facility window
Place a Source followed by a Transfer Node and connect them with a Connector.
Place three Servers in parallel and another Transfer Node after these Servers. Connect the first TransferNode to all
three Servers with Paths and connect the Servers to the second Transfer Node with Paths.
Place a Sink and connect to the second Transfer Node to the Sink.
Go to the Definitions window and create a new Node List from the Lists panel on the left. Add Input@Server1,
Input@Server2 and Input@Server3 to the Node List.
Back in the Facility window, set the EntityDestinationType property of the first Transfer Node to ‘Select From List’ and
set Node List Name to your new List. Set Selection Goal to ‘Cyclic’.
Place a standard Resource object and set the Initial Capacity to ‘6’. Name this ‘Resources’.
Creating the Table within the Data window
Create a new Data Table by clicking the ‘Add Data Table’ icon in the ribbon. Name this table ‘ServerData’
In ServerData, add four columns; An Object property named ‘ServerName’, an Integer Property column named
‘NumberOfResources’ and an Expression Property column named ‘Hours’.
Place the following data into the Table:
Server1, 3, .1
Server2, 2, .05
Server3, 1, .02
Adding a New Token in the Definitions window
Go to the Tokens panel within the Definitions window and click on the ‘Add Token’ icon in the ribbon.
Select the name of the new token and then click on the ‘Real’ icon in the ribbon to add a new Real State to this token.
Name this new state, ‘RowNumber’. The new token type will be used in the process below. The default token in Simio
does not have any custom States and this model will save off a row number within the process into a custom state on
the token so we will use this new token type instead of the default Simio token.
Searching the Table in the Processes window
Create a new Process by clicking ‘Create Process’ from the ribbon. Name this process ‘MyProcess’ in the properties
window. Click anywhere within the process and open the Advanced Options category in the Process Properties
window. Set the Token Class Name to ‘MyToken1’ , which is the name of the new token you created above.
246 / 1277
window. Set the Token Class Name to ‘MyToken1’ , which is the name of the new token you created above.
Place a Search Step
Set the Collection Type to ‘TableRows’.
Set the Table Name to ‘ServerData’. This tells the Search Step to search through the Table to find the
appropriate row.
Set the Match Condition to ‘Entity.Location.Parent == ServerData.ServerName’. The function
Entity.Location.Parent returns a reference to the object that this Entity is currently inside of (i.e. the current
Server). And we want the Search step to find the row within the ServerName column of the ServerData that
matches the current Server.
Set Save Index Found to 'MyToken1.RowNumber' to save off the row number temporarily.
Place a SetRow step in the Original segment leaving the Search step. Set the Table Name property to ‘ServerData’
and the Row Number to ‘MyToken1.RowNumber’.
Referencing the Table within the Servers
Return to the Facility window and select Server1. Set the Processing Time property to ‘ServerData.Hours’ to read the
processing time from the table.
Under the Secondary Resources category, find ‘Other Resource Seizes’ and open the window for Before Processing.
Set Object Name to ‘Resources’ and Units Per Object to ‘ServerData.NumberOfResources’. This tells the Server to
seize capacity of Resources before processing begins at this Server.
Under the Secondary Resources category, find ‘Other Resource Releases’ and open the window for After Processing.
Set Object Name to ‘Resources’ and Units Per Object to ‘ServerData.NumberOfResources’. This tells the Server to
release capacity of Resources after processing is finished at this Server.
Find the Entered Add On Process trigger within this Server and select the new process you named MyProcess from
the drop down. This tells the Server to execute this process when an entity enters this Server and this is where the
entity will search the table to find the appropriate row.
Repeat the above steps for the other two Servers.
See Also:
The SimBit named “HierarchyWithTables.spfx” uses this model inside of another model and demonstrates the changes that
are needed to this model in order for it to work properly as a submodel inside of another.
247 / 1277
Simio Reference Guide
SeizingSameResourceFromList - SimBit
Problem:
I have entities that select a resource from a list of resources, but once selected, they must use that same resource
throughout their processing.
Categories:
Entity Characteristics
Key Concepts:
Object Reference State, Add-On Process, Assign Step, Resources, Discrete State, ModelEntity, ObjectList, Lists, Resource,
Secondary Resources
Assumptions:
There are three resources within the set. Server1 has a capacity of 3, while Server2 has a capacity of 1.
Technical Approach:
An Object Reference State Variable will be added to the ModelEntity. An Add-On Process will be used to assign this state
variable a value based on the resource the entity seized from a resource set. The object reference state will then be used to
seize that particular resource later in the processing.
Details for Building the Model:
Simple System Setup
Place a Source, two Servers and a Sink from the Standard Library. Use Paths to connect the Source to Server1,
Server1 to Server2, and Server2 to the Sink. Change the Interarrival Time of the Source to ‘Random.Exponential(3)’.
Change the Initial Capacity of Server1 to ‘3’ because the server can process up to 3 entities at a time. Also change the
server’s Processing Time to ‘Random.Triangular(1,2,3)’.
Change the Processing Time of Server2 to ‘Random.Triangular(1,2,3)’.
Adding the Resources and Resource List
Place three Resource objects in the Facility and change the Name properties to ‘R1’, ‘R2’ and ‘R3’.
Place the mouse to the top left of all three resources, and press the Ctrl key and drag the mouse to encompass all
three Resources. While they are all highlighted, right-click in the highlighted area and select Add to Object List >
Create a New Object List and name the list ‘Resources’. You will notice now that within the Definitions window, List
panel, the three resource objects have been added to the Resources list.
Adding an Object Reference State
Within the Navigation window, highlight the ModelEntity and go to its Definitions window, States panel.
From the States ribbon, select Object Reference > Object. Change the Name of the object reference state to
‘WhichResource’. This will generate a new state of the entity, referenced ModelEntity.WhichState, that can store a
reference to the resource that is seized in Server1.
Seizing the Resources
Within the Navigation window, go back to the Model and make sure you are in the Facility window.
Within Server1, under Secondary Resources, change the Object Type to ‘From List’ and the Object List Name to
‘Resources’.
Also within Server1, under the Add-On Process Triggers, double click on Processing, which will create a new process
named ‘Server1_Processing’ and will also take you within the Processes window.
Add an Assign step to the process and assign the State Variable Name ‘ModelEntity.WhichResource’ to the New
Value ‘ModelEntity.SeizedResources.LastItem’. This will store a reference to the last item that the entity seized, which
would be one of the 3 resources. We can then use that information within Server2.
Go back into the Facility window. Within Server2’s Secondary Resources, keep the Object Type of ‘Specific’ and add
the value ‘ModelEntity.WhichResource’ as the Object Name. This will then use each entity’s object reference that was
assigned to determine the resource to seize.
248 / 1277
assigned to determine the resource to seize.
Embellishments:
This model could also easily be built using 3 workers instead of 3 resources. The worker may be selected to move the entity
from Server1 to Server2. First of all, you would add 3 worker objects to the model; group select them and right-click to
Add to Transporter List (instead of Object List). Change the Object List Name in Server1 to the Transporter list name you
just created. Finally, if you wanted to have the worker move the entity from one server to the other, you would click on the
transfer node of Server1 ( Output@Server1), specify Ride on Transporter as ‘True’ and specify the Transporter Name as
‘ModelEntity.WhichResource.Transporter’.
** Note: If the Object Reference state on the entity was a ‘Transporter’ object reference, the Transporter Name would be
specified as ‘ModelEntity.WhichResource’; but because the object reference was an Object and Simio is looking for a
Transporter Name (as opposed to Object Name), the name must include the ‘.Transporter’ to signify what type of object it
is. See help for Element and Object Reference States for more information.
249 / 1277
Simio Reference Guide
SeizingVehicle - SimBit
Problem:
I would like to model a system that has a vehicle which is used for both transport and non transport activities. The vehicle’s
capacity is seized by another object for the non-transport activities.
Categories:
Vehicle
Key Concepts:
Add-On Process, Decide Step, Is, Processing, After Processing, Release Step, Ride on Transporter, Seize Step, Vehicle
Technical Approach:
There are two Sources that each produce a different type of entity; PartA and PartB. Both types of entities are processed by
Server1. However, PartB type entities require the Vehicle object to be seized before processing at Server1 can occur. A
Decide Step before processing checks to see what part type it is and then a Seize step seizes capacity of the Vehicle object
and requests a move to the Node near Server1. All entities are then processed by Server2 and the Vehicle is required to
transport all entities from Server2 to the Sink. Therefore, the same Vehicle object is transporting entities and also visiting
Server1 to help with processing. Helping with Server1 has a higher priority.
Details for Building the Model:
Simple System Setup
Place two Sources and two ModelEntity objects into the Facility window. Rename the entity objects to PartA and
PartB. Set Source1’s Entity Type property to ‘PartA’ and Source2’s Entity Type property to ‘PartB’. Change the
Interarrival Time of Source2 to Random.Exponential(.9) hours.
Place a Vehicle into the Facility window. Set the Initial Node(Home) to ‘Output@Server2’ and Idle Action to ‘None’.
Place two Servers into the Facility window, in series. Connect both Sources to Server1 with Paths and connect Server1
and Server2 with a Path.
Place a Sink into the Facility window and connect Server2 with the Sink with a Path. Change the Type property of the
Path to ‘Bidirectional’. This is required so the vehicle can travel back and forth on this path.
In the Output node of Server2, set the Entity Destination property to ‘Specific’ and the Node Name to ‘Input@Sink1’.
Set Ride On Transporter to ‘True’, Transporter Type to ‘Specific’ and Transporter Name to ‘Vehicle1’.
Place a TransferNode just above Server1. This will be where the Vehicle moves when it is helping with processing for
Server1. Place a Path between Server2 and the new TransferNode. Make this path bi-directional by setting the Type
property to ‘Bidirectional’.
Add Process Logic
From within the Facility window, click on Server1 and create two new Add On Processes for the triggers Processing
and After Processing.(select Create New from the drop down)
From within the Processes window, you should see the new Processes that were created.
In the Server1_Processing process, place a Decide step. The Decide Type is ‘Conditional’ and the Expression is
‘Is.PartB’. This checks to see if the entity is a PartB type entity.
In the True segment, place a Seize step. Open the Seizes – Repeating Property Editor by pressing the … button
on the right side of the Seizes property. The Object Type is ‘Specific’ and the Object Name is ‘Vehicle1’. Set the
Request Move to ‘ToNode’ and the Destination Node to ‘TransferNode1’. This will request that Vehicle1 move to
TransferNode1 for servicing PartB before it starts processing.
In the Server1_AfterProcessing process, place a Decide step. The Decide Type is ‘Conditional’ and the
Expression is ‘Is.PartB’. This checks to see if the entity is a PartB type entity.
In the True segment, place a Release Step. Set the Object Name to ‘Vehicle1’ within the Releases – Repeating
Property Editor.
SelectEntityColorFromStringList - SimBit
Problem:
I would like to choose, from a menu, a property for each entity added to my model. The destination of each entity is
dependent upon its property value.
Categories:
Entity Characteristics
Key Concepts:
List Property, ModelEntity, Selection Weight, StringList
Assumptions:
Each entity color is associated with exactly one source and sink. One server will process each entity type.
Technical Approach:
A string list of colors is created in the ModelEntity objects’ Definitions windows. A list property is created and when an
entity is placed, the property value of that entity is selected from a menu.
Details for Building the Model:
Simple System Setup
Add two Sources, a Server, and three Sinks to the Facility Window.
Connect the two Sources to the Server with Paths. Connect the Server to the three Sinks with Paths.
Creating a String List
Select the ModelEntity in the Navigation window. Then click the Definitions tab and select Lists in the panel. Add a
String List with the Name of ‘Colors’. Add as many colors as desired.
Adding a List Property
In the Properties panel of the Definitions window of the ModelEntity, add a List Property with the Name ‘Color’.
Set the List Name property under Logic to ‘Colors’ and the Category Name property under Appearance to
‘Properties’. This will give the user the option to specify Color as a property of an entity and the list of Colors will be
shown as options.
Adding an Entity to the Model
Place a ModelEntity from the Project Library in the Facility Window. Select the desired color from the Color property
drop down list. Then change the color of the entity to match that choice.
Change the Entity Type Arrival Logic property of the Source to match the color of its associated entity.
Set the Selection Weight of each path from the Server to the Sink to
‘ModelEntity.Color==ModelEntity.List.Colors.[ Desired Color]’. For example, if you created Red entities and Blue
entities, you would want to have at least a Red Sink and a Blue Sink and then have the Selection Weight expression
have ModelEntity.Color==ModelEntity.List.Colors.Blue on one of the paths and
ModelEntity.Color==ModelEntity.List.Colors.Red on the other.
Note: The actual color of the entity is not related to this color property we are putting onto the ModelEntity. This is
just to control logic. To change the animated color, you should select the entity and change its color with the Color
button in the Symbols ribbon.
Embellishments:
Add entities, sources and sinks of additional colors.
SelectEntityTypeFromTable - SimBit
Problem:
I have a data file containing information about my products, product mix and processing parameters.
Categories:
Entity Characteristics
Key Concepts:
Before Creating Entities, Data Table, Data Table, Dynamic Object Property, Expression Property, Numeric Property,
RandomRow, Source, Table Row Referencing
Technical Approach:
Create a table that contains the product mix and processing information for each part type possible.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility Window.
Place 3 ModelEntity objects from the Project Library into the Facility Window and change the Name property values
to ‘PartA’, ‘PartB’ and ‘PartC’.
Defining the Data Table with Product Information
Click on the Data tab of the model and select the Tables panel. Add a DataTable with the Name ‘ProductTable’ and
include the following columns:
‘PartType’ – An object reference property of type Entity that will be used in the Source object to decide what is
created
‘ProductMix’ - A standard property of type Real that contains a number to indicate the weight (likelihood) of
creating that entity type.
‘ProcessTime’ - A standard property of type Expression to be used elsewhere in the model.
There should be 3 rows containing PartType, ProductMix and ProcessTime data: PartA, 50, 2; PartB, 30, 4; and PartC,
20; Random.Uniform(4, 6).
Generating Random Entities using Data Table Information
Within Source1, expand the Table Row Referencing section of the Properties window.
Set the Table Name to ‘ProductTable’. Apply the RandomRow table function to the ProductMix column by setting the
value of the Row Number to ‘ProductTable.ProductMix.RandomRow. This will select a row based on the weight value
in each row (e.g. the first part type (row 1) will be selected 50/(50+30+20) or 50% of the time).
Using the Product Information in the Model
On Source1, specify the Entity Type property to be created from ‘ProductTable.PartType’.
On Server1, specify the Processing Time property as ‘ProductTable.ProcessTime’.
Discussion:
You could add additional columns to provide data for use elsewhere in the model.
There are two forms of referencing table data:
TableName.PropertyName - When you use SetRow as we have done here to set the row for that entity, you do not need
to specify the row number.
TableName[ RowNumber].PropertyName - If you want to explicitly reference a different row, or make a table reference
from an entity that does not have a designated row, you can use this form.
254 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
255 / 1277
Simio Reference Guide
SelectingResourceFromList - SimBit
Problem:
I have a group of 2 Resources called Mechanics. I have three Servers in parallel that all share the group of mechanics for
processing and must seize one of the two before it can process the entity.
Categories:
Resources
Key Concepts:
Lists, ObjectList, Resource, Secondary Resources, Server
Assumptions:
There are no restrictions on which mechanic should be seized – either resource can work on any one of the three servers.
Each server seizes in Preferred Order, which means if both resources are available, they will always select Resource 1.
Technical Approach:
Place both the Servers and the Resources in the Facility Window before then creating an Object List the Lists panel of the
Definitions Window. Use Add-On Processes in each Server to Seize and Release from the List.
Details for Building the Model:
Simple System Setup
Place a Source, a Sink and three Servers (in parallel) in the Facility Window. Ensure that the Servers each have a
capacity of Infinity. The server capacity is not the constraint in this model – the ability to seize a Resource is the
constraint.
Place two Resources in the Facility Window.
Defining the Resource List
Click on the Definitions tab and select the Lists panel. Since we are creating a List of Resources, which are Objects,
we need to click on the Object list button. Change the Name of the list to ‘Mechanics’.
Select the first cell in the table and select ‘Resource1’. Then do the same for the second row and select ‘Resource2’.
Using the Resources in the Server Processing
Within each of the 3 Servers, enter the Secondary Resources / Resource for Processing section or properties. Change
the Object Type to ‘FromList’ and the Object List Name to ‘Mechanics’.
See Also:
A related SimBit is SelectingResourcesAsAGroup.spf, which would be used if you’d like to seize multiple mechanics
together before processing.
256 / 1277
Simio Reference Guide
SelectingResourcesAsAGroup - SimBit
Problem:
I have a group of 4 Resources called Mechanics. I have a Server that all requires two mechanics for processing and must
seize both before it can process the entity.
Categories:
Resources
Key Concepts:
Lists, ObjectList, Resource, Secondary Resources, Server
Assumptions:
There are no restrictions on which two mechanics should be seized. Each server seizes in Preferred Order, which means if all
resources are available, they will always select the first two listed in the object list. Other selection rules might result in
different usage patterns.
Technical Approach:
Place both the server and the resources in the Facility Window before then creating an Object list in the Lists panel of the
Definitions Window. Use Add-On Processes in the Server to Seize and Release from the object list.
Details for Building the Model:
Simple System Setup
Place a Source, a Sink and one Server in the Facility Window. Ensure that the Server has a capacity of Infinity. The
server capacity is not the constraint in this model – the ability to seize a Resource is the constraint.
Place four Resources in the Facility Window.
Defining the Resource List
Click on the Definitions tab and select the Lists panel. Since we are creating a List of Resources, which are Objects,
we need to click on the Object list button. Change the Name of the list to ‘Mechanics’.
Select the first cell in the table and select ‘Resource1’. Then do the same for the second row and select ‘Resource2’,
and continue with ‘Resource3’ and ‘Resource4’ in the third and fourth rows.
Using the Resources in the Server Processing
Within Server1, we will use the properties within the Secondary Resources section to seize the resources before
processing and release the resources after processing.
In the Other Resource Seizes section, enter the Before Processing repeating editor and change the Object Type to
‘FromList’. The Object List Name should be ‘Mechanics’ and ensure that the Number of Objects is set to ‘2’. The
Selection Goal is ‘PreferredOrder’ so that so that if multiple Resources are available, the Resource that is listed first in
the List will be selected.
Do a similar thing for the Other Resource Releases section, After Processingrepeating editor – release from an Object
List Name of ‘Mechanics’ and the Number of Objects of ‘2’.
Embellishment:
We have added a second symbol to each resource and changed the color of the disk to red to indicate when it is busy.
257 / 1277
Simio Reference Guide
SelectServerWithShortestLine - SimBit
Problem:
I would like my entities to always go to the Server with the least number of entities waiting in its queue.
Categories:
Decision Logic -- Paths
Key Concepts:
AssociatedStationLoad, Candidate, Entity Destination Type, Lists, Node, NodeList, Selection Goal, SmallestValue, Source,
TransferNode
Assumptions:
There is one Source producing entities that are choosing which Server to go to.
Technical Approach:
A Node List of all Input Nodes at the Servers will be created in the Definitions Window. The Routing Logic at the Output
Node of the Source will set the Entity Destination Type to ‘Select From List’. The entities will select the Server with the
largest value of remaining input capacity.
Details for Building the Model:
Simple System Setup
Add a Source, three Servers and three Sinks to the Facility Window. Set a different Processing Time for each of the
Servers; for example Server1 is set to ‘20’ minutes, Server2 is set to ‘Random.Triangular(1,3,8)’ minutes and Server3 is
set to ‘0.1’ minutes.
Use Paths to connect the Source to each Server and each Server to its respective Sink.
Creating a Node List
• Select the Definitions tab and click on the Lists panel to add a Node list and change its Name to ‘Servers’. Add the
three Input Nodes of the Servers to the list. The order of the list will not affect the model.
Adding Logic to the Model
Select the Source’s Output Node and change the Entity Destination Type to ‘Select From List’. Choose the newly
created node list called ‘Servers’ for the Node List Name property.
The Selection Goal should be set to ‘Smallest Value’ and the Selection Expression should be set to
‘Candidate.Node.AssociatedStationLoad’. This will ensure that the entity chooses a Server based on the least number
of entities waiting or en-route to the Server.
Embellishments:
Try changing the Interarrival Time of the Source or the Processing Times of the Servers.
258 / 1277
Simio Reference Guide
SelectSpecificVehicle - SimBit
Problem:
I have two different parts in my system and each part should be carried by a specific vehicle. Therefore, the part will wait
for a specific vehicle, even if other vehicles are available.
Categories:
Vehicles
Key Concepts:
DestinationNode, Initial Node ( Home), Lists, ModelEntity, NumberRiders, Priority, Ride on Transporter, Server,
TransferNode, TransporterList, Vehicle, VisitRequestQueue
Technical Approach:
We will utilize the Priority property on the ModelEntity object and the Priority property on the Vehicle object. We’ll assume
that the value in the ModelEntity’s property must match the value in the Vehicle’s property in order for that Vehicle to be
selected.
Details for Building the Model:
System Setup
Place two Source objects and a Server object and connect both Sources to the Server with paths.
Place a Sink object and connect the Server to the Sink. Also, draw a Path from the Sink back to the Output node of
the Server. This path will be utilized by the Vehicles.
Place two ModelEntity objects from the Project Library and rename one to ‘PartA’ and the other to ‘PartB’. Consider
changing the color of one entity by selecting it in the Facility window and selecting a color from the Color icon in the
ribbon and then clicking back onto the Entity in the Facility window.
Assign a value to the Initial Priority property on each Part. Click on PartA and set the Initial Priority property to a
value of ‘1.0’. Click on PartB and set the Initial Priority property to a value of ‘2.0’.
Click on Source2 and change the Entity Type property to ‘PartB’. Ensure that Source1 has its Entity Type property set
to ‘PartA’. This will ensure that each Source will create a different type of entity.
Place two Vehicle objects, naming one “PartA_Vehicle” and the other “PartB_Vehicle”. Consider changing the color of
one of the Vehicles.
Assign a value to the Initial Priority property on each Vehicle. Click on PartA_Vehicle and set the Initial Priority
property to a value of ‘1.0’. Click on PartB_Vehicle and set the Initial Priority property to a value of ‘2.0’.
Assign an Initial Node location for each vehicle to tell Simio where to place these vehicles at the beginning of the
run. Click on each vehicle and set Initial Node (Home) to ‘Input@Sink1’.
Vehicle Selection Logic
We will create a Transporter List. Go to the Definitions window and click on Lists in the left side panel. Click on
Transporter in the Ribbon to create a Transporter List.
Enter two rows – one for each vehicle you’ve placed in your model.
Back in the Facility window, click on the Output Node of Server1. This is where we will tell Simio that each entity
entering this node should request a ride on a Vehicle. We will also specific exactly which Vehicle the entity should
request from our Transporter List.
Set Ride On Transporter property to ‘True’. Set Transporter Type to ‘From List’. Set Transporter List Name to the name
of the list you just created. Put this expression into the Selection Condition property, ‘Candidate.Transporter.Priority
== ModelEntity.Priority’. This tells Simio, from the possible list of candidates (transporters), the Priority property
must equal the Priority property on this current ModelEntity.
Discussion:
Consider these other examples to use in the Selection Condition property of a Transfer Node, when selecting a Transporter:
Candidate.Transporter.NumberRiders < 2 – To select the Transporter with its current number of entities riding on it as less
than 2.
259 / 1277
Candidate.Transporter.DestinationNode == Server1 – To select the Transporter that has its Destination Node currently set
to Server1.
Candidate.Transporter.VisitRequestQueue == 0 – To select the Transporter that does not currently have any destination visit
requests.
Embellishments:
Change the Initial Ride Capacity property of each Vehicle ( SimBit has Initial Ride Capacity set to ‘3’) to see how the system
behavior changes.
260 / 1277
Simio Reference Guide
SeparatorMakesCopies - SimBit
Problem:
I would like to have an entity create three identical copies of itself so there are a total of 4 entities that are exactly the
same.
Categories:
Combining and Separating Entities
Key Concepts:
Make Copies, Maximum Arrivals, Separation Mode, Separator
Assumptions:
One Entity type goes into the Separator. The Separator produces three exact copies of the entity. The Source produces 100
entities and therefore the Separator produces 300 copies, which means there is a total of 400 entities at the end of the
model. The copies and the originals depart through separate sinks.
Technical Approach:
A Separator is placed into the model and the Separation Mode property is set to ‘Make Copies’. Two different Sinks are
used in order to collect statistics separately on the original entities and the copied entities.
Details for Building the Model:
Simple System Setup
Place a Source, Separator and two Sinks in the Facility Window.
Connect the Source to the Separator and the Separator to both Sinks using Paths such that the parent entity will go
to Sink1, while the copies will go to Sink2.
Defining the Source
Set the Maximum Arrivals to ‘100’. This will turn off the Source once 100 entities have been generated.
Defining the Separator
Set the Separation Mode property to ‘Make Copies’. The Copy Quantity is set to ‘3’.
261 / 1277
Simio Reference Guide
SequentialProcessingByBatchSpecifiedInTable
- SimBit
Problem:
I have unlimited inventory and a Server that produces parts from that inventory.
Categories:
Add-On Process Logic, Data Tables
Key Concepts:
Assign Step, AvailableRowCount, Current Symbol Index, Data Table, Decide Step, ModelEntity, Numeric Property, Picture,
Real State Variable
Assumptions:
I have a table that tells me what parts I want to produce and in what sequence. When I complete the sequence I will
restart.
Technical Approach:
Use a Source, tightly linked to a Server to represent the generic arrivals from inventory. Use a table to supply the
production data. Use add-on processes in the Server to control indexing through the table.
Details for Building the Model:
Simple System Setup
Create a model with Source, Server, and Sink, connected by a Connector and a Path respectively.
Add a ModelEntity from the Project Library and change the Name to ‘AnyEntity’.
Click on AnyEntity and then use the Add Additional Symbol button to add a second entity picture. Click on the color
icon to change the color of that first entity ( Index 0). The entity at Index 1 will remain the original color.
Setting up the Data Table
In the Tables panel of the Data Window, select the Add Data Table button to add a table with the Name
‘DataTable1’ with Integer properties for PartType and Quantity. Set the PartType value to match the indexes defined
in the AnyEntity Symbol (0 and 1).
Specify the Quantity values required for each PartType.
Adding Discrete State Variables to the Model
Click on the Definitions tab of the model and select the States panel.
Add a Discrete State Variable with the Name ‘Index’ to track which table row is being processed.
Add a Discrete State Variable with the Name ‘Count’ to track quantity produced for that row.
We will use the predefined state Picture on the ModelEntity to track what is being produced.
Process Logic
Go to the Processes Window and create a Process with the Name ‘Process1’.
Place a Decide step with an Assign step connected to the True exit. Place another Assign step then Decide and
Assign steps from the False exit. The second Decide step False exit should connect to the first Decide input, as should
the last Assign exit.
Change the Name of the first Decide step to ‘DecideIsCurrentRowDone’. This will compare the row quantity
produced to quantity desired by using the Decide Type of ‘ConditionBased’ and Expression of ‘Count <
DataTable1[ Index].Quantity’.
If the above condition is true, then the True exit Assign step with Name ‘AssignPictureAndCount’ assigns the picture
to the row PartType ( State Variable Name is ‘ModelEntity.Picture’ and New Value is ‘DataTable1[ Index].PartType’) and
increments the row production counter ( State Variable Name is ‘Count’ and New Value is ‘Count+1’).
If the above condition is false, then the False exit Assign with Name ‘AssignRowAndCount’ increments the row index
using State Variable Name is ‘Index and New Value is ‘Index+1’. It also assigns the row production counter, 262
‘Count’ to
/ 1277
using State Variable Name is ‘Index and New Value is ‘Index+1’. It also assigns the row production counter, ‘Count’ to
‘0’.
The next Decide step ‘DecideIfEndOfTable’ determines if the Index has passed the last specified table row by using
‘ConditionBased’ evaluation and Expression ‘Index >=DataTable1.AvailableRowCount’ (where the function
AvailableRowCount returns the total number of rows in the data table).
If the above condition is true, then the last Assign step ‘AssignRestart’ assigns the ‘Index’ back to ‘1’.
After we have decided our new row, both branches go back to the initial Decide.
Connect the Process Logic to the Server
Go back to the Server properties in the Facility Window. Use the pull down list for the Entered Add-On Process
Triggers and select ‘Process1’.
Discussion:
This could also have been done with a custom object that encompassed both entity creation and processing. In this case
you could have actually created the desired entity types rather than using a state to represent entity type.
263 / 1277
Simio Reference Guide
ServerBlockingApproaches - SimBit
This SimBit project includes four models that demonstrate how to block a Server and have an entity wait at the Server until
the next Server location is available.
Models included in this SimBit:
1. BlockWithConnectors – Demonstrates how to use Connectors built in logic to block a Server and wait until the next
Server is available for an entity to continue.
2. BlockWithProcesses – Demonstrates how to use a set of processes to block a Server and wait until the next Server is
available for an entity to continue.
3. BlockWithEntityDestinationType – Demonstrates how to use Entity Destination Type to block a Server and wait until
the next Server is available for an entity to continue.
4. BlockWithRoutingGroup – Demonstrates how to use Routing Group elements and their Destination Blocked
Condition to block a Server and wait until the next Server is available for an entity to continue.
Model 1: BlockWithConnectors
Problem:
I have a system that has instantaneous travel between locations, but entities need to wait at their current location until their
next location is available.
Categories:
Buffering, Decision Logic -- Paths
Key Concepts:
Connectors, ResourceState
Technical Approach:
Connectors have built in logic that changes the Resource State of a Server to ‘Blocked’.
Details for Building the Model:
Simple System Setup
Place a Source, four Servers, and a Sink in the Facility window. Change the Name of the Source to ‘Arrested’, the
Name of the four Servers to ‘HoldingChamber’, ‘Booking’, ‘Interrogation’, and ‘Court’, respectively. Lastly, change the
Name of the Sink to ‘Jail’.
Link ‘Arrested’ to ‘HoldingChamber’, ‘HoldingChamber’ to ‘Booking’, ‘Booking’ to ‘Interrogation’, ‘Interrogation’ to
‘Court’, and ‘Court’ to ‘Jail’, all with Connectors.
Place a ModelEntity in the Facility View and change the Name to ‘Prisoner’.
Select the Source ‘Arrested’. Change the Interarrival Time to ‘Random.Exponential(1)’ and set the Units to ‘Hours’.
Select the Server ‘HoldingChamber’. Change the Initial Capacity to ‘Infinity’, the Processing Time to ‘0’ and the
Output Buffer Capacity to ‘0’.
Select the Server ‘Booking’. Change the Processing Time to ‘Random.Triangular(5,10,15)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Interrogation’. Change the Processing Time to ‘Random.Exponential(35)’ minutes. Set the Input
Buffer Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Court’. Change the Processing Time to ‘Random.Triangular(30, 60, 90)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Model 2: BlockWithProcesses
Problem:
I have a system that requires an Entity to stay at its current Server until the next destination is available while also blocking
the Server from accepting another Entity. Add-on processes and a Wait step will be used to hold the entities.
Categories:
264 / 1277
Add-On Process Logic, Buffering, Decision Logic -- Paths
Key Concepts:
Add-On Process, Assign Step, Decide Step, Resource State, Wait Step
Technical Approach:
Process logic can be used to change the ResourceState of a Server and to force an Entity to wait until the Server is
available for use.
Details for Building the Model:
Simple System Setup
Place a Source, four Servers, and a Sink in the Facility window. Change the Name of the Source to ‘Arrested’, the
Name of the four Servers to ‘HoldingChamber’, ‘Booking’, ‘Interrogation’, and ‘Court’, respectively. Lastly, change the
Name of the Sink to ‘Jail’.
Link ‘Arrested’ to ‘HoldingChamber’, ‘HoldingChamber’ to ‘Booking’, ‘Booking’ to ‘Interrogation’, ‘Interrogation’ to
‘Court’, and ‘Court’ to ‘Jail’, all with Paths.
Place a ModelEntity in the Facility View and change the Name to ‘Prisoner’.
Select the Source ‘Arrested’. Change the Interarrival Time to ‘Random.Exponential(1)’ and set the Units to ‘Hours’.
Select the Server ‘HoldingChamber’. Change the Initial Capacity to ‘Infinity’ and the Processing Time to ‘0’.
Select the Server ‘Booking’. Change the Processing Time to ‘Random.Triangular(5,10,15)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Interrogation’. Change the Processing Time to ‘Random.Exponential(35)’ minutes. Set the Input
Buffer Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Court’. Change the Processing Time to ‘Random.Triangular(30, 60, 90)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Creating Processes
Go to the Facility window and select ‘HoldingChamber’. Expand the ‘Add-On Process Triggers’ section of the
Properties pane. Double click on After Processing to add a new process here. Place a Decide step in this process. Set
the Condition Or Probability to ‘Booking.Capacity.Remaining > 0 && [email protected] ==
0’. This Decide step checks to see if the ‘Booking’ Server is available. From the ‘False’ branch, place a Wait step.
Change the Event Name to ‘[email protected]’, which forces an entity to wait until another entity reaches the
output node of ‘Booking’.
Go to the Definitions window and add an Integer state variable with the Name ‘Count’, with the Initial Value of
‘0’. This will be used in the logic to make sure only one prisoner leaves the HoldingChamber at a time.
As the first step in the process, prior to the Decide step, add an Assign step. Assign the State Variable Name
‘Count’ to the New Value ‘0’.
From the Wait step, place an Assign step and another Decide step. Within the Assign step, assign the State
Variable Name ‘Count’ to the New Value ‘Count + 1’. Within the Decide step, enter the Condition or Probability
as ‘Count > 1’. Connect the True exit of the step to the first Assign step in the process.
Note that when an entity leaves the Booking Server and the Output@BookingEntered event is fired, all waiting
entities will leave the Wait step (since the capacity of the HoldingChamber is > 1, multiple entities may reside
there). To avoid allowing all to exit, the Count variable is increased with entity exiting the Wait step, but only
the first one will continue to the Booking Server.
Return to the Facility window and select ‘Booking’. Expand the ‘Add-On Process Triggers’ section of the Properties
pane. Double click on After Processing to add a new process here. Place a Decide step in this process. Set the
Condition Or Probability to ‘Interrogation.Capacity.Remaining > 0 &&
[email protected] == 0’. This Decide step checks to see if the ‘Interrogation’ Server is
available. Off the False branch, place an Assign step. This Assign step places the ‘Booking’ Server into a
ResourceState of Blocking’. To do this, change the State Variable Name to ‘Booking.ResourceState’ and the New Value
to ‘2’. Lastly, add a Wait step off the Assign step. This Wait step forces an Entity to wait until another Entity enters the
Output Node of ‘Interrogation’. To do this, change the Event Name property to ‘[email protected]’.
Return to the Facility window and select ‘Interrogation’. Expand the ‘Add-On Process Triggers’ section of the
Properties pane. Double click on After Processing to add a new process here. Place a Decide step in this process. Set
the Condition Or Probability to ‘Court.Capacity.Remaining > 0 && [email protected] == 0’.
This Decide step check to see if the ‘Court’ Server is available. From the False branch, place an Assign step. This
Assign step has a State Variable Name of ‘Interrogation.ResourceState’ and a New Value of ‘2’. This Assign step places
the ‘Interrogation’ Server in a ‘Blocked’ state if the ‘Court’ Server is unavailable. Finally, add a Wait step after the
Assign step. Change the Event Name to ‘[email protected]’. This makes an Entity wait until another Entity
265 / 1277
Assign step. Change the Event Name to ‘[email protected]’. This makes an Entity wait until another Entity
enters the Output Node of the ‘Court’ Server.
Model 3: BlockWithEntityDestinationType
Problem:
I have a system that requires an Entity to stay at its current Server until the next destination is available while also blocking
the Server from accepting another Entity. Entity Destination Type and Selection Lists will be used for blocking.
Categories:
Buffering, Decision Logic -- Paths
Key Concepts:
Lists, Select Available Only, Select From List, TransferNode
Technical Approach:
When using Entity Destination Type ‘Select From List’, Simio has built in logic that evaluates an Entity route request to
determine whether a candidate location in the Destination Node List is ‘Blocked’.
Details for Building the Model:
Simple System Setup
Place a Source, four Servers, and a Sink in the Facility window. Change the Name of the Source to ‘Arrested’, the
Name of the four Servers to ‘HoldingChamber’, ‘Booking’, ‘Interrogation’, and ‘Court’, respectively. Lastly, change the
Name of the Sink to ‘Jail’.
Link ‘Arrested’ to ‘HoldingChamber’, ‘HoldingChamber’ to ‘Booking’, ‘Booking’ to ‘Interrogation’, ‘Interrogation’ to
‘Court’, and ‘Court’ to ‘Jail’, all with Paths.
Place a ModelEntity in the Facility View and change the Name to ‘Prisoner’.
Select the Source ‘Arrested’. Change the Interarrival Time to ‘Random.Exponential(1)’ and set the Units to ‘Hours’.
Select the Server ‘HoldingChamber’. Change the Initial Capacity to ‘Infinity’, Processing Time to ‘0’ and Output Buffer
Capacity to ‘0’.
Select the Server ‘Booking’. Change the Processing Time to ‘Random.Triangular(5,10,15)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Interrogation’. Change the Processing Time to ‘Random.Exponential(35)’ minutes. Set the Input
Buffer Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Court’. Change the Processing Time to ‘Random.Triangular(30, 60, 90)’ minutes. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Configuring Node List
Go to the Lists view on the Definitions tab. Create three Node Lists by clicking the ‘Node’ button three times.
NodeList1 – Change Name to ‘CourtInput’ and add ‘Input@Court’ to the List.
NodeList2 – Change Name to ‘InterrogationInput’ and add ‘Input@Interrogation’ to the List.
NodeList3 – Change Name to ‘BookingInput’ and add ‘Input@Booking’ to the List.
Return to the Facility window and change the Entity Destination Type for the TransferNodes to ‘Select From List’. Note
that the Block Destination Rule is, by default, ‘Select Available Only’. This will assure that the entity will select the
destination only if the Server capacity is available (since buffer size is ‘0’).
Output@HoldingChamber – Change Node List Name to ‘BookingInput’.
Output@Booking – Change Node List Name to ‘InterrogationInput’.
Output@Interrogation – Change Node List Name to ‘CourtInput’.
Model 4: BlockWithRoutingGroup
Problem:
I have a system that requires an Entity to stay at its current Server until the next destination is available whilst also blocking
the Server from accepting another Entity. Custom Routing Group and Selection Lists will be used for blocking.
Categories:
Buffering, Decision Logic -- Paths
Key Concepts:
266 / 1277
Lists, RoutingGroup Element, Select Available Only, TransferNode
Technical Approach:
Routing Groups have built in logic that evaluates an Entity route request to determine whether a candidate location in the
Destination Node List is ‘Blocked’.
Details for Building the Model:
Simple System Setup
Place a Source, four Servers, and a Sink in the Facility window. Change the Name of the Source to ‘Arrested’, the
Name of the four Servers to ‘HoldingChamber’, ‘Booking’, ‘Interrogation’, and ‘Court’, respectively. Lastly, change the
Name of the Sink to ‘Jail’.
Link ‘Arrested’ to ‘HoldingChamber’, ‘HoldingChamber’ to ‘Booking’, ‘Booking’ to ‘Interrogation’, ‘Interrogation’ to
‘Court’, and ‘Court’ to ‘Jail’, all with Paths.
Place a ModelEntity in the Facility View and change the Name to ‘Prisoner’.
Select the Source ‘Arrested’. Change the Interarrival Time to ‘Random.Exponential(1)’ and set the Units to ‘Hours’.
Select the Server ‘HoldingChamber’. Change the Initial Capacity to ‘Infinity’, Processing Time to ‘0’ and Output Buffer
Capacity to ‘0’.
Select the Server ‘Booking’. Change the Processing Time to ‘Random.Triangular(5,10,15)’. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Interrogation’. Change the Processing Time to ‘Random.Exponential(35)’. Set the Input Buffer
Capacity and Output Buffer Capacity to ‘0’.
Select the Server ‘Court’. Change the Processing Time to ‘Random.Triangular(30, 60, 90)’. Set the Input Buffer Capacity
and Output Buffer Capacity to ‘0’.
Configuring Node List
Go to the Lists view on the Definitions tab. Create three Node Lists by clicking the ‘Node’ button three times.
NodeList1 – Change Name to ‘CourtInput’ and add ‘Input@Court’ to the List.
NodeList2 – Change Name to ‘InterrogationInput’ and add ‘Input@Interrogation’ to the List.
NodeList3 – Change Name to ‘BookingInput’ and add ‘Input@Booking’ to the List.
Creating Routing Group Elements
Under the Advanced Options section of the Routing Group element, there is a property called Destination Blocked
Condition. This logical condition evaluates an Entity route request to determine whether a candidate location in the
Destination Node List is blocked. By default this property is set to ‘Candidate.Node.AssociatedStation != Nothing &&
Candidate.Node.AssociatedStationHasSpaceFor ( Entity) == False’. This expression checks the candidate destination nodes
to see if there is an Entity there and also checks to see if there is space for an Entity, and if one of these is false, then the
Server will be blocked.
Go to the Elements view on the Definitions tab. Create three Routing Groups by clicking the ‘Routing Group’ button
three times.
RoutingGroup1 – Change Name to ‘RoutingGroupCourt’ and the Destination Node List Name to ‘CourtInput’.
RoutingGroup2 – Change Name to ‘RoutingGroupInterrogation’ and the Destination Node List Name to
‘InterrogationInput’.
RoutingGroup3 – Change Name to ‘RoutingGroupBooking’ and the Destination Node List Name to
‘BookingInput’.
Return to the Facility window and change the Entity Destination Type for the Output Nodes to ‘Use Custom Routing
Group’.
Output@HoldingChamber – Change Routing Group Name to ‘RoutingGroupBooking’.
Output@Booking – Change Routing Group Name to ‘RoutingGroupInterrogation’.
Output@Interrogation – Change Routing Group Name to ‘RoutingGroupCourt’.
267 / 1277
Simio Reference Guide
ServerFollowsCapacitySchedule - SimBit
Problem:
I have a server that follows a schedule with entities entering the system 24 hours a day. Capacity of server changes over the
day.
Categories:
Schedules / Changeovers
Key Concepts:
Current Symbol Index, Off Shift, On Shift, Schedules, Server, Work Exceptions, WorkSchedule
Assumptions:
The server works from 8:00 am to 5:00 pm with a capacity of 2, from 5:00 pm to 9:00 pm with a capacity of 1, and a
capacity of 0 otherwise. The server also has a work exception and is off shift for an entire day.
Technical Approach:
A Schedule is created for a Server and the Server is set to follow this Schedule in its Process Logic. When the Server is Off
Shift it will turn red indicating a Current Capacity of zero.
Details for Building the Model:
Simple System Setup
Add a Source, Server and Sink to the Facility Window. Update the Processing Time of the Server to ‘0.25’ and Units to
‘Hours’.
Connect the Source, Server and Sink using Paths.
Creating a Work Schedule
In the Data Window, select the Schedules panel and add a Work Schedule with Name ‘Schedule1’.
Create a Day Pattern by clicking on the Day Pattern tab and enter the Name ‘DayPattern1’. Enter the number of Days
as ‘7’.
Click on the ‘+’ sign to expand the Work Periods.
Specify that ‘DayPattern1’ that has a Value of ‘2’ (on shift) from 8:00 am to 5:00 pm and capacity Value of ‘1’ from 5:00
pm to 9:00 pm. Leave everything else empty, which indicates Off Shift times.
Under Work Schedules, select ‘DayPattern1’ for days 1 through 5. Because Day 6 and Day 7 have no day pattern
specified, it is assumed that the capacity value is 0 (off shift) for those days.
Expand the ‘+’ sign on ‘Schedule1’. Under the Work Period Exceptions tab, add an exception on Day 4 that has the
capacity Value of ‘0’ (off shift) for 24 hours.
In the Facility Window, change the Process Logic Capacity Type property of the Server to ‘WorkSchedule’.
Change the Process Logic Work Schedule property of the Server to ‘Schedule1’.
Animating the Off Shift Server
Select the Server and click the Add Additional Symbol in the ribbon. Then select the first of the two Active Symbols
and change its color to Red.
For the Server, change the Appearance Current Symbol Index to ‘Server1.CurrentCapacity’.
Embellishments:
To enhance the model for specific needs, try shifting the Server’s work schedule, the Source’s Interarrival Time rate, or the
Server’s Processing Time rate.
268 / 1277
Simio Reference Guide
ServerFollowsDailySchedule - SimBit
Problem:
I have a server that follows a daily schedule with entities entering the system 24 hours a day.
Categories:
Schedules / Changeovers
Key Concepts:
Current Symbol Index, Off Shift, On Shift, Schedules, Server, WorkSchedule
Assumptions:
The server works an 8 hour shift with a 30 minute break. The server’s queue has an infinite capacity.
Technical Approach:
A Schedule is created for a Server and the Server is set to follow this Schedule in its Process Logic. When the Server is Off
Shift it will turn red indicating a Current Capacity of zero.
Details for Building the Model:
Simple System Setup
Add a Source, Server and Sink to the Facility Window. Update the Processing Time of the Server to
‘Random.Triangular (0.1, 0.15, 0.25)’ and the Units to ‘Hours’.
Creating a Daily Work Schedule
In the Data Window, select the Schedules panel and add a Work Schedule with the Name ‘Shift8Hours’.
Create a Day Pattern by clicking on the Day Pattern tab and enter the Name ‘DayPattern1’.
Change the number of Days to ‘7’.
Click on the ‘+’ sign to expand the Work Periods.
Enter the Start Time and End Time from 8:00 am to 12:00 and 12:30 pm to 4:30 pm that has a Value of ‘1’. Leave
everything else empty, which indicates Off Shift times.
Under Work Schedules, select 'DayPattern1' for days 1 through 5. Days 6 and 7 will not have a day pattern specified,
thus the capacity value will be 0 (off shift).
Within the Facility window, change the Server’s Process Logic Capacity Type property to ‘WorkSchedule’.
Change the Process Logic Work Schedule property to ‘Shift8Hours’.
Animating the Off Shift Server
Select the Server and click the Add Additional Symbol in the ribbon. Then select the first of the two Active Symbols
and change its color to Red.
Change the Appearance Current Symbol Index to ‘Server1.CurrentCapacity’.
Embellishments:
To enhance the model for specific needs, try shifting the Server’s work schedule, the Source’s Interarrival Time rate, or the
Server’s Processing Time rate.
269 / 1277
Simio Reference Guide
ServerFollowsOddSchedule - SimBit
Problem:
I have a server that follows an odd schedule with entities entering the system 24 hours a day.
Categories:
Schedules / Changeovers
Key Concepts:
Current Symbol Index, Off Shift, On Shift, Schedules, Server, WorkSchedule
Assumptions:
The server works for 45 minutes then rests for 15 minutes. The server’s queue has an infinite capacity.
Technical Approach:
A Schedule is created for the Server and the Server is set to follow this Schedule in its Process Logic. When the Server is
Off Shift it will turn red indicating a Current Capacity of zero.
Details for Building the Model:
Simple System Setup
Add a Source, Server and Sink to the Facility Window. Update the Processing Time of the Server to be
‘Random.Triangular (0.1, 0.15, 0.25)’ and the Units to be ‘Hours’.
Creating a Work Schedule
In the Data Window, select the Schedules panel and add a Work Schedule with Name ‘Shift45Minutes’.
Create a Day Pattern by clicking on the Day Pattern tab and specifying the Name ‘DayPattern1’.
Click on the ‘+’ sign to expand the Work Periods.
Enter into ‘DayPattern1’ the following information: 12:00 am to 12:45 am and from 12:45 am to 1:45 am and from
2:00 am to 2:45 am that has a Value of ‘1’. Leave everything else empty, which indicates Off Shift times.
Under Work Schedules, select ‘DayPattern1’ for day 1.
Within the Facility Window, change the Server’s Process Logic Capacity Type property to ‘WorkSchedule’.
Change the Process Logic Work Schedule property to ‘Shift45Minutes’.
Animating the Off Shift Server
With the Server selected, click the Add Additional Symbol in the ribbon. Then select the first of the two Active
Symbols and change its color to Red.
Change the Appearance Current Symbol Index to ‘Server1.Capacity’.
Embellishments:
To enhance the model for specific needs, try shifting the Server’s work schedule, the Source’s Interarrival Time rate, or the
Server’s Processing Time rate.
See Also:
To see how to make a more traditional 8 hour work day schedule, see ServerFollowsDailySchedule.spf.
270 / 1277
Simio Reference Guide
ServerQueueWithBalkingAndReneging -
SimBit
Problem:
I want to model a single server queue with balking and reneging (impatient customers).
Categories:
Buffering
Key Concepts:
Buffer Logic, Balking, Reneging
Assumptions:
A system consists of a single server that processes customer entities in FIFO order. The time between customer arrivals is
sampled from an exponential distribution, EXPO(5) minutes. The processing time for each customer is EXPO(4.25) minutes.
An arriving customer balks if the current number waiting at the Server is greater than or equal to its queue length tolerance.
This tolerance is sampled from a triangular distribution, TRIA (3,5,9). If the customer does decide to enter the queue, then it
has a waiting time tolerance sampled from an Erlang distribution, ERLA (15,2) minutes. If that tolerance time elapses and
the customer has not yet been served or is not within a maximum tolerable position from the front of the queue (i.e., within
a specific ‘stay zone’), then the entity abandons the queue and leaves the system. The stay zone for a customer is sampled
from a Poisson distribution, POIS (0.75).
Details for Building the Model:
Facility Window Setup
Add a Source, Server, and Sink to the Facility window. Connect the Source to the Server and the Server to the Sink
using Connector links.
Place a ModelEntity object from the Project Library into the Facility window. Name it ‘Customer’.
Source Properties
Specify the Entity Type as ‘Customer’ and the Interarrival Time as ‘Random.Exponential(5)’ minutes.
Server Properties
Specify the Processing Time as ‘Random.Exponential(4.25)’ minutes.
Go to Buffer Logic -> Input Buffer -> Balking & Reneging Options. Specify the Balk Decision Type as ‘Conditional’
and the Balk Condition Or Probability as ‘Server1.InputBuffer.Contents >= Random.Triangular(3,5,9)’.
Open the input buffer’s Renege Triggers repeat group. Add a new time-based renege trigger. Specify the Wait
Duration as ‘Random.Erlang(15,2)’ minutes. Specify the Renege Decision Type as ‘Conditional’ and the Renege
Condition Or Probability as ‘Server1.InputBuffer.Contents.IndexOfItem( Entity) > Random.Poisson(0.75)’.
Embellishments:
Instead of a FIFO ranked queue, assume that customers have different priorities and are processed in priority order. Thus,
the arrival of a higher priority customer will bump back lower priority customers in the queue.
Once a customer’s waiting time tolerance elapses, it will continue waiting only for as long as it’s position in the queue
remains within its maximum tolerable range from the front. If a higher priority customer subsequently joins the queue and
bumps the customer back outside of its ‘stay zone’, then the customer reneges.
Hint: Use an event-based renege trigger to evaluate all entities in the server’s input buffer queue for possible reneging
anytime a new entity joins the queue.
See also:
SourceWithBalkingIfBlocked.spfx
ChangingQueuesWhenServerFails.spfx
271 / 1277
MultiServerSystemWithJockeying.spfx
272 / 1277
Simio Reference Guide
ServersUsingTaskSequenceWithDataTables_FlowLine
- SimBit
Problem:
I want to model a system where the entities being processed follow a fixed work path, and where the operations
performed at the physical processing locations are task sequences that are also the same for each entity. For modeling
purposes, it is desired that all operation data for each physical processing location is defined in a set of relational data
tables.
Categories:
MultiTask Server, Data Tables
Key Concepts:
Auto-Set Table Row Reference, Data Table, Materials Element, Process Type, Resources, Server, Task Sequence
Assumptions:
The modeled system is a flow line that consists of three server locations visited in a fixed sequence. Entities enter the
system at the front of the line and then are processed through the three servers before finishing at a sink.
Technical Approach:
The operation data for each physical processing location is defined in a set of relational data tables using the design
shown in Figure 1.
274 / 1277
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
Source object – Make sure the Entity Type property is specified as the model entity type that you placed in the
model.
For Each Server object – Specify the Process Type as ‘Task Sequence’. Then, right-click on the Processing Tasks
repeat group and set a reference to the ‘ProcessingTasks’ table. This indicates that the ProcessingTasks table will be
used as the referenced data source for getting processing task information. Finally, in the Process Logic->Other Task
Sequence Options properties, specify the Task Resources Referenced Table Name as the ‘TaskResources’ table table and
the Task Materials Referenced Table Name as the ‘TaskMaterials’ table. This indicates that those tables will be used as
the referenced data sources for getting task resource and material requirements.
For Each Server object – Open the Processing Tasks repeat group. Map the columns from the ProcessingTasks,
TaskResources and TaskMaterials tables to the appropriate corresponding properties in the repeat group (refer to the
SimBit if necessary as a guide).
In the Servers table, make sure that the Auto-set Table Row Reference property for the ServerName column is set to
‘True’.
Embellishments:
Experiment with different server operation data in the relational data tables.
See also:
ServersUsingTaskSequencesWithDataTables_JobShop.spfx
ServerUsingTaskSequencesWithWorkers.spfx
275 / 1277
Simio Reference Guide
ServersUsingTaskSequenceWithDataTables_JobShop
- SimBit
Problem:
I want to model a system where the entities being processed have different routings based on type, and where the
operations performed at the physical processing locations are task sequences that are also dependent on the job type. For
modeling purposes, it is desired that all product mix, job routing, and operation data is defined in a set of relational data
tables.
Categories:
MultiTask Server, Data Tables
Key Concepts:
Data Table, Material Element, Process Type, RandomRow, Sequence Table, Server, Source, Table Row Referencing, Task
Sequence
Assumptions:
The modeled system has three possible server locations where entities are processed. An entity will enter the system and
visit those one or more of the server locations in a sequence that is dependent on the job type. Not all of the servers have
to be visited and a server may be visited more than once.
Technical Approach:
The product mix, job routing, and operation data is defined in a set of relational data tables using the design shown in
Figure 1.
277 / 1277
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
Source object – Specify the Entity Type property as ‘JobTypes.JobType’. Go to the Table Row Referencing->Before
Creating Entities properties, and specify the Table Name as ‘JobTypes’ and the Row Number as
‘JobTypes.MixPercentage.RandomRow’. The Source will then randomly create entities of the types specified in the
JobTypes table using the specified mix percentages.
For Each ‘Output’ TransferNode object – Specify the Entity Destination Type as ‘By Sequence’. Then, when an entity
exits the Source or any of the Server objects, it will set its next destination based on the JobRoutings sequence table.
For Each Server object – Specify the Process Type as ‘Task Sequence’. Then, right-click on the Processing Tasks
repeat group and set a reference to the ‘ProcessingTasks’ table. This indicates that the ProcessingTasks table will be
used as the referenced data source for getting processing task information. Finally, in the Process Logic->Other Task
Sequence Options properties, specify the Task Resources Referenced Table Name as the ‘TaskResources’ table and the
Task Materials Referenced Table Name as the 'TaskMaterials' table. This indicates that those tables will be used as the
referenced data sources for getting task resource and material requirements. .
For Each Server object – Open the Processing Tasks repeat group. Map the columns from the ProcessingTasks,
TaskResources, and TaskMaterials tables to the appropriate corresponding properties in the repeat group (refer to
the SimBit if necessary as a guide).
Embellishments:
Experiment with different product mix, job routing, and operation data in the relational data tables.
See also:
ServersUsingTaskSequencesWithDataTables_FlowLine.spfx
ServerUsingTaskSequencesWithWorkers.spfx
278 / 1277
Simio Reference Guide
ServersUsingTaskSequenceWithDataTables_LoopbackBranches
- SimBit
Problem:
I want to model a system where the operations performed at servers are task sequences, and there are conditional or
probabilistic loopback branches in the task workflow. For modeling purposes, it is desired that all operation data is defined
in a set of relational data tables.
Categories:
Data Tables, MultiTask Server
Key Concepts:
Data Table, Process Type, Server, Task Sequence, Loopback Branches
Assumptions:
The modeled system is a sequential process through two server locations.
The processing task sequence at the first server has a probabilistic loopback branch in the task workflow and is shown in
Figure 1. After finishing Task3, there is a 30% chance that a ‘Rework’ result loops the task sequence execution back to Task1.
The processing task sequence at the second server has a conditional loopback branch in the task workflow and is shown in
Figure 2. The processing of each entity at the server repeats a loop of Task1 through Task3 a total of 3 times. The task
sequence execution then continues to Task4.
Technical Approach:
The operation data is defined in a set of relational data tables using alternative designs shown in Figure 3 and Figure 4. The
first data table design assumes at most one loopback branch from any task in the task workflow. The second data table
design allows for possibly multiple loopback branches from any task.
279 / 1277
Details for Building the Model:
Facility Window Setup
Add a Source, two Servers, and a Sink from the Standard Library to the Facility window. Use Connector links to
connect the objects.
Place a ModelEntity object from the Project Library into the Facility window. Then, click on ModelEntity in the
Navigation window. Go to the Definitions window and click on States. Add a string CurrentTask state variable and an
integer LoopCount state variable to the ModelEntity definition.
Data Table Setup
In the Data window, add data tables to the model using the relational table design shown in either Figure 3 or Figure 4. The
table column property types are as follows:
280 / 1277
281 / 1277
Once the data tables have been added, enter all required operation data into the tables. Refer to the data tables in the
Simbit as a guide.
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
For Each Server object – Specify the Process Type as ‘Task Sequence’. Then, right-click on the Processing Tasks
repeat group and set a reference to the ‘ProcessingTasks’ table. This indicates that the ProcessingTasks table will be
used as the referenced data source for getting processing task information. Then, right-click on the Loopback
Branches repeat group and set a reference to either the ‘ProcessingTasks’ table (if using the data table design in
Figure 3) of the ‘ProcessingLoopbackBranches’ table (if using the data table design in Figure 4).
For Each Server object – In the Process Logic->Other Task Sequence Options properties, specify the Task State
Assignments Referenced Table Name as the ‘TaskStateAssignments’ table. This indicates that table will be used as the
referenced data source for getting task state assignments.
For Each Server object – Open the Processing Tasks and Loopback Branches repeat groups. Map the columns from
the ProcessingTasks, ProcessingLoopbackBranches, and TaskStateAssignments tables to the appropriate
corresponding properties in the repeat groups (refer to the SimBit if necessary as a guide).
In the Servers table, make sure that the Auto-set Table Row Reference property for the ServerName column is set to
‘True’.
282 / 1277
Simio Reference Guide
ServersUsingTaskSequenceWithDataTables_SequenceDependentSetups
- SimBit
Problem:
I want to model a system where the entities being processed have different routings based on type, and where each
operation performed at a physical processing location has a possible sequence dependent setup time. For modeling
purposes, it is desired that all product mix, job routing, sequence-dependent setup times, and other operation data is
defined in a set of relational data tables.
Categories:
MultiTask Server, Data Tables
Key Concepts:
Changeovers, Data Table, Process Type, RandomRow, Sequence Dependent, Sequence Table, Server, Source, Table Row
Referencing, Task Sequence
Assumptions:
This SimBit builds upon concepts illustrated by the SimBit ‘ServersUsingTaskSequenceWithDataTables_JobShop’. It may be
useful to first review that particular example, if you have not already done so, before proceeding with this one.
The modeled system consists of a single work center with two parallel servers. An entity will enter the system, visit one of
the two servers in the work center, and then exit. The processing of an entity at a server consists of a possible sequence
dependent setup time, depending on product color and style attribute differences between the current job and the
previous one, and then a processing time.
When a server becomes available, the next job is selected using a ‘Least Setup Time’ dispatching rule.
Note that, while the relational table data design in this example is oriented towards modeling a job shop, the presented
system has been simplified to a single work center in order to specifically focus on the topic of modeling sequence
dependent setups.
The job types processed in the system are as follows:
The setups times (in minutes) at each server to change from one product color to another are as follows:
The setups times (in minutes) at each server to change from one product style to another are as follows:
Technical Approach:
The product mix, job routing, and operation data is defined in a set of relational data tables using the design shown in
Figure 1.
283 / 1277
The possible sequence dependent setup times incurred at the servers are defined in a set of relational data tables using the
design shown in Figure 2.
285 / 1277
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
Source object – Specify the Entity Type property as ‘JobTypes.JobType’. Go to the Table Row Referencing -> Before
Creating Entities properties, and specify the Table Name as ‘JobTypes’ and the Row Number as
‘JobTypes.MixPercentage.RandomRow’. The Source will then randomly create entities of the types specified in the
JobTypes table using the specified mix percentages. Change the Interarrival Time to ‘Random.Exponential(1.5)’
minutes.
For Each ‘Output’ TransferNode object (the Source and two Servers) – Specify the Entity Destination Type as ‘By
Sequence’. Then, when an entity exits the Source or either of the Server objects, it will set its next destination based
on the JobRoutings sequence table.
For Each Server object – Specify the Process Type as ‘Task Sequence’. Then, right-click on the Processing Tasks repeat
group and set a reference to the ProcessingTasks table. This indicates that the ProcessingTasks table will be used as
the referenced data source for getting processing task information. Finally, in the Process Logic -> Other Task
Sequence Options properties, specify the Task Resources Referenced Table Name as ‘TaskResources’ and the Task
Materials Referenced Table Name as ‘TaskMaterials’. This indicates that those tables will be used as the referenced
data sources for getting task resource and material requirements.
For Each Server object – Open the Processing Tasks repeat group. Map the columns from the ProcessingTasks,
TaskResources, TaskMaterials, and Servers tables to the appropriate corresponding properties in the repeat group
(refer to the SimBit if necessary as a guide).
For Each Server object – Go to Advanced Options -> Expected Setup Time Expression and enter the expression
‘Servers.ChangeoverLogicType.ExpectedSetupTime(Server, Entity)’. This will be the expression used to estimate
expected setup times when selecting the next entity to send to an available server using the ‘LeastSetupTime’
dispatching rule.
Go to the Definitions -> Elements and do the following:
For Each Changeover Logic Element - Right-click on the Setup Transitions repeat group and set a reference to the
SetupTransitions table. This indicates that the SetupTransitions table will be used as the referenced data source for
getting that information for the changeover logic. Then open the Setup Transitions repeat group. Map the columns
from the SetupTransitions table to the appropriate corresponding properties in the repeat group (refer to the SimBit
if necessary as a guide).
For Each Changeover Logic Element – Right-click on the Setup Efficiency Multiplier property and set a reference to
the table property Servers.SetupEfficiencyMultipler. Right-click on the Assume Concurrent Setups If property and set
a reference to the table property Servers.AssumeConcurrentSetups.
Embellishments:
Experiment with different changeover logic, concurrent setup assumptions, and/or setup efficiency multipliers for the
servers and note the differences in the total incurred changeover time.
Also note that the SimBit currently has no data within the TaskResources and TaskMaterials tables, but can easily be added
by including data within these tables, as the mapping to the Task Sequences is already done.
See also:
ServersUsingTaskSequencesWithDataTables_JobShop.spfx
286 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
287 / 1277
Simio Reference Guide
ServerUsingTaskSequence - SimBit
This SimBit project includes three models that demonstrate the use of the Server’s Task Sequence capability.
Models included in this SimBit:
1. MultiTaskServer_SpecificTime – Demonstrates the Server’s task sequence option of using a Specific Time delay for
a task. The time delay is then specified directly within the dialog for each particular task.
2. MultiTaskServer_ProcessName – Demonstrates the Server’s task sequence option of using a Process Name for a
task. The process logic is then included within a specific process within the Processes window.
3. MultiTaskServer_Submodel – Demonstrates the Server’s task sequence option of using a Submodel to model the
process flow for the task. The process logic for the task is then determined by the Facility window entity flow starting
at the Submodel Starting Node and continuing until that process flow is complete and the entity is destroyed.
Model 1: MultiTaskServer_SpecificTime
Problem:
I want to model multiple tasks within a similar physical location. My entity has a single task first, but then has two tasks that
are done in parallel. My tasks are all represented with simple delays.
Categories:
MultiTask Server
Key Concepts:
Active Symbol, Add-On Process, Assign Step, Finished Task, Picture, Process, Process Type, Server, Task Sequence
Assumptions:
Only a single entity is flowing through the system so that the focus can be on the task flow of that single entity. The entity
will go through 4 different simple delay tasks, some of which can be done simultaneously.
Technical Approach:
Use the Process Type of ‘Task Sequence’ on the Server object to specify all the tasks, their dependencies and logic.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink from the Standard Library in the Facility window. Connect the Source to the Server
and the Server to the Sink with Paths.
Within the Source, change the Maximum Arrivals property to ‘1’ so that only a single entity enters the system.
Adding Tasks to the Server
Within the Server, change the Process Type to ‘Task Sequence’. Within the Processing Tasks property, open the
repeating property editor and specify four different tasks.
Sequence Number set to ‘10’ for the first task with the Name of ‘Clean’. Within this task, the Branch Type is ‘Always’ (all
entities perform this task). The Process Type is ‘Specific Time’ and the Processing Time is ‘1’ minute.
The next two tasks can be done in parallel and can only be started once the first task, 10, is done. Therefore we will
set the Sequence Number set to ’20.1’ for the first task with the Name of ‘Trim1’. Within this task, the Branch Type is
‘Always’. The Process Type is ‘Specific Time’ and the Processing Time is also ‘1’ minute. The other parallel task is
Sequence Number ’20.2’, with the Name of ‘Paint’. The Branch Type is ‘Always’, Process Type is ‘Specific Time’ and
Processing Time is ‘5’ minutes. The extension from the 20 (20.1 and 20.2) indicates that they can be done in parallel.
Finally, a task is performed after task 20.1 but can be done prior to 20.2 being complete. Therefore, we will indicate
the Sequence Number set to ’30.1’ for the task with the Name of ‘Trim2’. Within this task, the Branch Type is ‘Always’,
the Process Type is ‘Specific Time’ and the Processing Time is ‘1’ minute.
Animating the Entity Changes
Place a ModelEntity from the Project Library into the Facility window. Click on the green symbol and within the
Symbols ribbon, click on Add Additional Symbol to create 5 different symbols (which you will then color with
288unique
/ 1277
Symbols ribbon, click on Add Additional Symbol to create 5 different symbols (which you will then color with unique
colors) for various symbol states.
When any of the tasks is completed, the animation symbol for the entity ( ModelEntity.Picture) will be updated to
show that a task has been completed. Within the Processes window, add a process named ‘Server1_FinishedTask’.
Add an Assign step to this process to assign the State Variable Name ‘ModelEntity.Picture’ to the New Value
‘ModelEntity.Picture + 1’.
Re-enter the Server’s Processing Tasks repeating editor and change the Finished Task add-on process to be
‘Server1_FinishedTask’ for each of the tasks shown. All tasks can use this same process to simply update the entity
picture symbol by one each time.
Model 2: MultiTaskServer_ProcessName
Problem:
I want to model multiple more complicated tasks within a similar physical location. My entity has a single task first, but
then has two tasks that are done in parallel. The logic for each task is defined within processes in the Processes window.
Categories:
MultiTask Server
Key Concepts:
Active Symbol, Add-On Process, Assign Step, Delay Step, Picture, Process, Process Type, Server, Task Sequence
Assumptions:
Only a single entity is flowing through the system so that the focus can be on the task flow of that single entity. The entity
will go through 4 different tasks, some of which can be done simultaneously. The task logic for each task is represented in
different processes in the Processes window.
Technical Approach:
Use the Process Type of ‘Task Sequence’ on the Server object to specify all the tasks, their dependencies and logic.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink from the Standard Library in the Facility window. Connect the Source to the Server
and the Server to the Sink with Paths.
Within the Source, change the Maximum Arrivals property to ‘1’ so that only a single entity enters the system.
Adding Process Logic for Each Task
Within the Processes window, use the Create Process to create four unique processes with the Names of
'Clean_Process', 'Paint_Process', 'Trim1_Process' and 'Trim2_Process'.
Within the Clean_Process, add a Delay step with the Delay Time of ‘1’ minute. Add an Assign step that will assign the
State Variable Name of ‘ModelEntity.Picture’ to the New Value of ‘ModelEntity.Picture + 1’. The picture assignment
will be discussed more below.
Within the Trim1_Process and Trim2_Process, add the same two steps as above ( Delay for 1 minute and Assign entity
picture). * NOTE: If these processes for multiple tasks were always going to remain the same, you could alternatively
have a single process that has the Delay and Assign and reference that within the Task (steps below).
Within the Paint_Process, add a a Delay step with the Delay Time of ‘5’ minutes. Add an Assign step that will assign
the State Variable Name of ‘ModelEntity.Picture’ to the New Value of ‘ModelEntity.Picture + 1’.
Adding Tasks to the Server
Within the Server, change the Process Type to ‘Task Sequence’. Within the Processing Tasks property, open the
repeating property editor and specify four different tasks.
Sequence Number set to ‘10’ for the first task with the Name of ‘Clean’. Within this task, the Branch Type is ‘Always’ (all
entities perform this task). The Process Type is ‘Process Name’ and the Process Name refers to the ‘Clean_Process’ that
was created above.
The next two tasks can be done in parallel and can only be started once the first task, 10, is done. Therefore we will
set the Sequence Number set to ’20.1’ for the first task with the Name of ‘Trim1’. Within this task, the Branch Type is
‘Always’. The Process Type is ‘Process Name’ and the Process Name is ‘Trim1_Process’. The other parallel task is
Sequence Number ’20.2’, with the Name of ‘Paint’. The Branch Type is ‘Always’, Process Type is ‘Process Name’ and
Process Name is ‘Paint_Process’. The extension from the 20 (20.1 and 20.2) indicates that these two tasks can be done
in parallel.
289 / 1277
in parallel.
Finally, a task is performed after task 20.1 but can be done prior to 20.2 being complete. Therefore, we will indicate
the Sequence Number set to ’30.1’ for the task with the Name of ‘Trim2’. Within this task, the Branch Type is ‘Always’,
the Process Type is ‘Process Name’ and the Process Name is ‘Trim2_Process’.
Animating the Entity Changes
Place a ModelEntity from the Project Library into the Facility window. Click on the green symbol and within the
Symbols ribbon, click on Add Additional Symbol to create 5 different symbols (which you will then color with unique
colors) for various symbol states.
When any of the tasks is completed, the animation symbol for the entity ( ModelEntity.Picture) will be updated to
show that a task has been completed. Remember that within the Processes window, we have Assign steps at the end
of each process to assign the ModelEntity.Picture to be one more than it previously was.
Model 3: MultiTaskServer_Submodel
Problem:
I want to model multiple tasks that may be done in different physical locations while the entity remains at a Server. My
entity has a single task first, but then has two tasks that are done in parallel at different locations.
Categories:
MultiTask Server
Key Concepts:
Active Symbol, Add-On Process, Assign Step, Finished Task, Picture, Process Type, Server, Submodel, Task Sequence
Assumptions:
Only a single entity is flowing through the system so that the focus can be on the task flow of that single entity. The entity
will go through 4 different tasks, some of which can be done simultaneously. The task logic for the last three tasks is
represented within the Facility window.
Technical Approach:
Use the Process Type of ‘Task Sequence’ on the Server object to specify all the tasks, their dependencies and logic.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink from the Standard Library in the Facility window. Connect the Source to the Server
and the Server to the Sink with Paths.
Within the Source, change the Maximum Arrivals property to ‘1’ so that only a single entity enters the system.
Submodel Logic for Tasks in Facility Window
Place three Servers and Sinks in the Facility window (in addition to those placed above). Connect each Server to a
Sink with a Path. Name the first Server ‘Lab1_Test’, the second one ‘Lab2_Test’ and the third ‘XRay_Test’. Within both
the Lab1_Test and Lab2_Test servers, specify the Processing Time of ‘1’ minute. Within the XRay_Test, specify the
Processing Time of ‘5’ minutes.
Adding Tasks to the Server
Within the Server, change the Process Type to ‘Task Sequence’. Within the Processing Tasks property, open the
repeating property editor and specify four different tasks.
Sequence Number set to ‘10’ for the first task with the Name of ‘Checkup’. Within this task, the Branch Type is ‘Always’
(all entities perform this task). The Process Type is ‘Specific Time’ and the Processing Time is ‘1’ minute.
The next two tasks can be done in parallel and can only be started once the first task, 10, is done. Therefore we will
set the Sequence Number set to ’20.1’ for the first task with the Name of ‘Lab1’. Within this task, the Branch Type is
‘Always’. The Process Type is ‘Submodel’, the Submodel Entity Type is ‘DefaultEntity’ and the Submodel Starting Node
is ‘Input@Lab1_Test’. The other parallel task is Sequence Number ’20.2’, with the Name of ‘XRay’. The Branch Type is
‘Always’, Process Type is ‘Submodel’, Submodel Entity Type is ’DefaultEntity’ and Submodel Starting Node is
‘Input@XRay_Test’. The extension from the 20 (20.1 and 20.2) indicates that they can be done in parallel.
Finally, a task is performed after task 20.1 but can be done prior to 20.2 being complete. Therefore, we will indicate
the Sequence Number set to ’30.1’ for the task with the Name of ‘Lab2’. Within this task, the Branch Type is ‘Always’,
the Process Type is ‘Submodel’, Submodel Entity Type is ‘DefaultEntity’ and the Submodel Starting Node is
‘Input@Lab2_Test’.
290 / 1277
‘Input@Lab2_Test’.
Animating the Entity Changes
Place a ModelEntity from the Project Library into the Facility window. Click on the green symbol and within the
Symbols ribbon, click on Add Additional Symbol to create 5 different symbols (which you will then color with unique
colors) for various symbol states.
When any of the tasks is completed, the animation symbol for the entity ( ModelEntity.Picture) will be updated to
show that a task has been completed. Within the Processes window, add a process named ‘Server1_FinishedTask’.
Add an Assign step to this process to assign the State Variable Name ‘ModelEntity.Picture’ to the New Value
‘ModelEntity.Picture + 1’.
Re-enter the Server’s Processing Tasks repeating editor and change the Finished Task add-on process to be
‘Server1_FinishedTask’ for each of the tasks shown. All tasks can use this same process to simply update the entity
picture symbol by one each time.
Required introduction
291 / 1277
Simio Reference Guide
ServerUsingTaskSequence_AlternativeMethodsForDefiningTaskPrecedence
- SimBit
This SimBit project includes three models using the Server object that demonstrate the alternative methods available to
define the task precedence dependencies for a task sequence.
Models included in this SimBit:
SequenceNumberMethodExample- Demonstrates how to define the task precedence dependencies for a task
sequence by using task sequence numbers.
ImmediatePredecessorsMethodExample – Demonstrates how to define the task precedence dependencies for a
task sequence by specifying the immediate predecessors for each task.
ImmediateSuccessorsMethodExample – Demonstrates how to define the task precedence dependencies for a task
sequence by specifying the immediate successors for each task.
Figure 1 illustrates the example task sequence that is demonstrated by each of the example models using an alternative
task precedence method. First ‘Task1’ is started. When ‘Task1’ is finished then both ‘Task2’ and ‘Task3’ can start. When ‘Task2’
is finished, then ‘Task4’ can start. When ‘Task3’ is finished, then ‘Task5’ can start. Finally, ‘Task6’ can start once both ‘Task4’
and ‘Task5’ have finished.
Model 1: SequenceNumberMethodExample
Problem:
I want to model the example task sequence shown in Figure 1 at a Server object using task sequence numbers to define the
task precedence dependencies.
Categories:
MultiTask Server
Key Concepts:
Data Table, Server, Process Type, Task Sequence, Task Precedence Method
Technical Approach:
Table 1 below shows the task data using the ‘Sequence Number’ task precedence method that will produce the example
task sequence shown in Figure 1.
293 / 1277
Data Table Setup
In the Data window, add a ‘Processing Tasks’ data table to the model. The table column property types are as follows:
294 / 1277
Simio Reference Guide
ServerUsingTaskSequenceWithSequenceDependentSetups
- SimBit
Problem:
I have a Server that requires a certain setup time based on which entity type needs to be processed.
Categories:
MultiTask Server
Key Concepts:
Changeovers, List Property, Sequence Dependent, Server, Status Pie, StringList, Time Offset
Assumptions:
Each source only produces one type of entity. The model will complete its run faster if the Server processes all entities of
one type before changing over to process entities of another type.
Technical Approach:
A String List is created in the List panel of the Definitions window for the ModelEntity. A List property is defined in the
Model Entity’s Definitions window, Properties panel. A Server with Task Sequences and a Sequence Dependent Setup type
task is used and a Changeover matrix defines the various setup times. A Time Offset will be used to demonstrate the
impact of setup times.
Details for Building the Model:
Simple System Setup
Add two Sources, a Server and two Sinks to the Facility window. Change the Interarrival Times of the Sources to ‘0.1’
minutes and the Maximum Arrival of each Source to ‘10’. Also set the Time Offset property of one of the Sources to
‘5’ minutes.
Connect the Sources to the Server and the Server to each Sink with Paths.
Adding a String List and List Property to the ModelEntity
Click on the ModelEntity (within the Navigation window). Open the Definitions tab and select the Lists panel to add
a String List named ‘Colors’. Add as many colors as desired.
Within the Definitions tab, select the Properties panel and add a List Property with the Name ‘Color’. Set the List
Name property to ‘Colors’ and the Category Name property under Appearance to ‘Properties’. This will give the user
the option to specify Color as a property of an entity and the list of Colors will be shown as options.
Adding a String List to the Model
Click on the Model within the Navigation window to continue modifying the simulation model (instead of the
ModelEntity). Go to the Definitions tab and select the Lists panel to add a String List named ‘Colors’. Add the same
colors, in order, as defined with the ModelEntity string list.
Creating a Changeover Matrix
In the Data Window, select the Changeovers panel. Create a Changeover Matrix and change the Name to ‘Cleaning’.
Change the List Name property to be ‘Colors’.
Fill in the matrix with desired values or follow the example: (Note: these values will be in Minutes):
296 / 1277
Simio Reference Guide
ServerUsingTaskSequenceWithWorkers -
SimBit
Problem:
I want to model multiple tasks within a similar physical location. Each task requires a worker to help perform the task. Most
tasks are done all the time, while one is done only a percentage of the time.
Categories:
Add-On Process Logic, MultiTask Server, Worker
Key Concepts:
Active Symbol, Add-On Process, Assign Step, BasicNode, Decide Step, InputBuffer, ObjectList, Picture, Process, Process
Type, Request Move, Server, Started Task, Status Label, Task Sequence, Worker
Assumptions:
Only a single entity will process at a Server at a time and incoming entities will wait at the Source until a Server is idle
before being assigned to one of the two Servers. All tasks are sequential, there are no parallel tasks.
One of the tasks (lab work) is a probabilistic task. We will assume that even if that task is not completed for a given entity
that all remaining tasks will continue as planned.
Technical Approach:
Use the Process Type of ‘Task Sequence’ on the Server objects to specify all the tasks, their dependencies, logic and
resources required. Tasks are sequential so task numbering will be simple at 10, 20, 30, 40.
Details for Building the Model:
Simple System Setup
Place a Source, a Server (we will later copy this first one to another) and Sink from the Standard Library in the Facility
window. Connect the Source to the Server and then the Server to the Sink with Paths.
Within the Source, change the Interarrival Time property to ‘Random.Exponential(6)’ to send entities into the system.
Place two BasicNode objects in the model, both near the bottom of the Facility window below the Server to the left
and right. Rename them NursesStation and Lab. Place another Basic Node near the Server and name it
‘ExamRoomNode’. This will be where the nurse/doctor visit when performing an entity task. Do not connect the
nodes with Paths just yet, we will do that shortly.
Defining Workers
Place three Worker objects in the Facility window and rename them 'Nurse1', 'Nurse2' and 'Doctor'. Change each of
the worker’s Initial Node (Home) property to ‘NursesStation’ and Idle Action to ‘Park At Home’. This will cause them
all to be located at the BasicNode NursesStation at the start of the simulation and they will travel back to this area
when they are idle.
Within the Definitions tab, Lists panel, add a Transporter List named 'Nurses' and include Nurse1 and Nurse2.
Adding Tasks to the Server
Within Server, change the Process Type to ‘Task Sequence’. Within the Processing Tasks property, open the repeating
property editor and specify four different tasks.
Sequence Number set to ‘10’ for the first task with the Name of ‘Check Vitals’. Within this task, the Branch Type is
‘Always’ (all entities perform this task). The Process Type is ‘Specific Time’ and the Processing Time is ‘3’ minutes.
Within the Resource Requirements section, we will be requiring a nurse to perform this task. Set the Object Type to
‘Select From List’ and the Object Name to ‘Nurses’ meaning we will select from among the available nurses.
Additionally, set the Request Move property to ‘To Node’ and Destination Node to ‘ExamRoomNode’. This will
require the nurse to move to the Server to perform the task (as opposed to staying at its current location).
Add another processing task with a Sequence Number set of ‘20’ and the Name of ‘Lab Work’. Within this task, the
Branch Type is ‘Probabilistic’ with the Condition or Probability as ‘.8’, meaning approximately 80% of the entities will
297 / 1277
require this task. The Process Type is ‘Specific Time’ and the Processing Time is ‘2’ minutes. Within the Resource
require this task. The Process Type is ‘Specific Time’ and the Processing Time is ‘2’ minutes. Within the Resource
Requirements section, we will be requiring a nurse to again perform this task. Set the Object Type to ‘Select From List’
and the Object Name to ‘Nurses’ meaning we will select from among the available nurses. Additionally, set the
Request Move property to ‘To Node’ and Destination Node to ‘Lab’. This will require the nurse to move to the Lab to
perform the task, even though the entity is still at the Server1 location.
The third processing task should have a Sequence Number set of ‘30’ and the Name of ‘Nurse Visit’. Within this task,
the Branch Type is ‘Always’. The Process Type is ‘Specific Time’ and the Processing Time is ‘3’ minutes. Within the
Resource Requirements section, we will be requiring a nurse so specify the same information as the previous two
tasks. Set the Request Move property to ‘To Node’ and Destination Node to ‘ExamRoomNode’ so that the nurse
returns to Server1 for processing. IMPORTANT NOTE: Within the Task Information section of properties, change
the Auto Cancel Trigger to ‘None’. This is very important because this property can allow the cancellation of this task
if all predecessor tasks are cancelled if left at the default value (if the probability based lab work task isn’t done, the
‘None’ property value for this field makes sure that the task is not automatically cancelled).
Finally, the last processing task should have a Sequence Number set of ‘40’ and the Name of ‘Doctor Visit’. Within this
task, the Branch Type is ‘Always’. The Process Type is ‘Specific Time’ and the Processing Time is ‘5’ minutes. Within the
Resource Requirements section, we will now be requiring the Object Type of ‘Specific’ and Object Name of ‘Doctor’.
Set the Request Move property to ‘To Node’ and Destination Node to ‘ExamRoomNode’ so that the doctor moves to
the Server1 for processing.
Within the main properties of the Server, under the Buffer Capacities section, change the Input Buffer to ‘0’. This will
make sure that entities don’t accumulate in the Server1 buffer while waiting. We will add some logic to the Source to
help with this as well in the below section.
NOTE about Resources Utilized within Processing Tasks – When using Resources within various processing tasks in
the Server ( Task Sequence based), the resource is ‘Reserved’, by default, for processing from one task to another. This
is done with the two properties Keep Reserved If (set to ‘True’) and Reservation Timeout (set to ‘Math.Epsilon’). This
will ensure that a resource used in one task will not be allocated to another entity in another area when it is to be
used for another processing task immediately after (such as in this example, the nurse is used for 3 tasks in a row).
Adding the Second Server and Associated Logic
Because our Servers will have similar task information, we chose to fill out all the task information first within a single
Server, Server1. Now let’s copy the Server by highlighting Server1 and using Ctrl-C and Ctrl-V to copy and paste.
Change the Name of the copied Server to ‘Server2’. This way, all 4 tasks within the Processing Tasks are copied and
you can simply edit them.
First, place another BasicNode object near Server2 and name it ‘ExamRoomNode2’. This is where the nurses/doctor
will travel for processing at this server.
Edit the Processing Tasks and change the Destination Node for the requested move of the workers from
‘ExamRoomNode’ to ‘ExamRoomNode2’ for the 10, 30 and 40 sequence number tasks (done at the server). We will
still require the lab work to be done at the lab. Change the Lab Work task Condition or Probability to be ‘.7’, requiring
only 70% of the patients to need lab work from this server.
Connecting the Worker Paths
Note that we now have 4 BasicNode objects for the workers ( Doctor/Nurses) to move between when processing.
These workers in this example will not move along any of the same paths as the entities. Note also that ‘Bidirectional’
type paths, when multiple Workers (and/or Vehicles) are moving can cause potential lockups unless by-pass type
paths are used. Therefore, we will avoid that all together and simply draw two unidirectional paths between the
various nodes. Connect the NursesStation node to the ExamRoomNode in both directions with Paths. Then, connect
the ExamRoomNode to the ExamRoomNode2 with Paths. Finally, connect the ExamRoomNode to the Lab with
Paths in both directions.
Selecting Between Multiple Servers from Source
In this example, we’d like our entities to wait at the Source object if a Server isn’t available for processing (no buffer
space at Servers). Note that if we simply left the ‘0’ Input Buffer on the Servers and no other logic, entities could
reside on the Paths connecting the Source and each Server. Therefore, we will first make a List of possible Server
options from which to select. Go to the Definitions tab and Lists panel. Add a Node list with the Name ‘ExamRooms’
that includes the ‘Input@Server1’ and the ‘Input@Server2’ as the members of the list.
Within the Facility window, click on the output node of Source1. Change the Entity Destination Type to ‘Select From
List’. The Node List Name should be ‘ExamRooms’. The Selection Goal of ‘Preferred Order’ will select a node from the
list based on the listed order ( Server1 first, then Server2). The Blocked Destination Rule of ‘Select Available Only’ will
cause the entities to wait at the Source output area if there is no capacity available at the Servers.
Animating the Processing Task Name of the Servers
298 / 1277
Note that in this example, the processing task name is graphically animated for each of the two Servers. It is possible
in this particular example for two reasons. First, the Server Initial Capacity itself is ‘1’ and does not change. That
means that ONLY ONE entity will ever be able to go through the Process Tasks listed within the Server at any given
time. Second, the entity processing tasks at the Server are all serial tasks, meaning that only one task is occurring at a
time, then the next, and so on. If the entity had multiple tasks occurring simultaneously, signified by the Sequence
Number values, the task names would not be able to be displayed as they are.
When an entity is processing through sequence tasks in the Server, the token(s) associated with that entity have a
function ‘Token.Task.Name’ that carries the task sequence name (i.e., Check Vitals, Lab Work, etc.). Because of the
above discussion, each Server will only be going through one task at a time, and therefore we will add two model
states to the model. Within the Definitions tab, States panel, add two String type states and name them
‘Server1_Task’ and ‘Server2_Task’. These states will be assigned a value based on the Token.Task.Name function when
the task changes.
In the Processes window, create a new process named ‘Task_Assignment’. Within this process, add a Decide step. The
Condition or Probability property should be ‘ModelEntity.Location.Parent == Server1’. This will check the location of
the entity (is it at Server1 or Server2 so we know which state variable to update). From the True exit, add an Assign
step that assigns the State Variable Name ‘Server1_Task’ to the New Value of ‘Token.Task.Name’ and then from the
False exit, add a similar Assign steps that assigns the State Variable Name ‘Server2_Task’ to the New Value
‘Token.Task.Name’.
In order to update these variables after every task, enter the Processing Tasks repeating property window for the
servers and under the Add-On Process Triggers section, add the Starting Task process as ’Task_Assignment’ for every
task in each server. This is done in the Starting Task section (instead of the Finished Task section) since we would like
to update the variable in the animation just prior to the task starting and view it during the task. The value will then
change when the task changes.
Optional – The variables will not automatically ‘clear’ when the entity is done processing. To clear the variables, make
a similar process to the above described with Decide and two Assign steps. Assign the state variables to “ “ (blank, as
they are strings but need to be in quotes). On the last task for each Server, reference this new process in the Finished
Task add-on process trigger.
Finally, the state variables can be graphically shown in the Facility window by clicking on the Animation ribbon and
placing Status Labels with the Expression values ‘Server1_Task’ and ‘Server2_Task’.
See Also:
ServersUsingTaskSequencesWithDataTables_FlowLine.spfx
ServersUsingTaskSequencesWithDataTables_JobShop.spfx
299 / 1277
Simio Reference Guide
ServerWithMaterialConsumption - SimBit
This SimBit Project includes two models, the first illustrates the basic concepts of using materials and BOM and the second
model illustrates adding material replenishment to that basic model.
Model 1: ServerWithMaterialConsumption
Problem:
I have a machine that uses some material and produces some material and I’d like to model the usage and production of
the material.
Categories:
Materials
Key Concepts:
Bill of Materials, Material Element, QuantityConsumed, QuantityProduced, Task Sequences
Assumptions:
The Source only produces 10 arrivals. One bookshelf is created for every entity that enters the Server and for each
bookshelf that is created, 8 nails are consumed and 2 pieces of wood. There are initially 100 units of wood and 400 units of
nails.
Technical Approach:
A Server object is used, and it consumes materials from a Bill of Materials. The Server object produces a material
(bookshelf). The number of bookshelves produced, and the number of nails and pieces of wood consumed is recorded with
an output statistic.
Details for Building the Model:
Creating the Materials and Bill of Materials
Open the Definitions Window and select the Elements panel. Create three new Material elements by clicking on the
Material Icon in the top ribbon menu.
Change the Name of the first material element to be ‘Wood’. The Initial Quantity should be set to ‘100’.
Change the Name of the second to be ‘Nails’. The Initial Quantity should be set to ‘400’.
Change the Name of the third material element to be ‘BookShelf’. The Initial Quantity is ‘0’. Add two rows to the
BillOfMaterials property – one for the Component Material Name ‘Nails’, which should have a Component Quantity
of ‘8’ and the other row for Component Material Name ‘Wood’, which should have a Component Quantity of ‘2’.
Simple System Setup
Place a Source, Server, and Sink from the Standard Library into the Facility window and connect with Connectors.
Update the Source to set the Interarrival Time to ‘Random.Exponential(.9)’ and the Maximum Arrivals property to ‘50’.
Defining the Server
Within the Facility window, edit the Server object and change the Process Type to ‘Task Sequence’.
Open the Processes Tasks repeat group and add two rows.
For the first row, leave the Sequence Number at ‘10’, change the Name to ‘Setup’, and set the Processing Time to ‘0.1’
minute. Within the Materials Requirements section set the Consumption Type as ‘Bill of Materials’ and Material Name
as ‘BookShelf’. The Quantity is ‘1’.
For the second row set the Sequence Number to ‘20’, change the Name to ‘Process, and set the Processing Time to
‘Random.Triangular(0.5,0.8,1.2)’ minutes. Within the Materials Requirements section set the Action Type to ‘Produce’,
leave the Production Type as ‘Material’, and set the Material Name as ‘BookShelf’.
Model 2: ServerWithMaterialConsumptionAndReplenishment
Problem:
I have a machine that uses some material and produces some material, and I’d like to provide replenishment of the
300 / 1277
I have a machine that uses some material and produces some material, and I’d like to provide replenishment of the
material once depleted. ( Enhancement of ServerWithMaterialConsumption).
Categories:
Materials
Key Concepts:
Bill of Materials, Event, Material Element, Monitor, OutputStatistic, Produce Step, QuantityAvailable, QuantityConsumed,
QuantityProduced, Task Sequences
Assumptions:
The Source has infinite arrivals. One bookshelf is created for every entity that enters the Server and for each bookshelf that
is created, 8 nails and 2 pieces of wood are consumed. There are initially 30 units of wood and 60 units of nails. Each time
wood is depleted, we replenish 40 of it; each time nails are depleted, we replenish 80 of them. Due to different
replenishment policies, the lead time of replenishment for wood and nails are different.
Technical Approach:
A Server object is used, and it consumes materials from a Bill of Materials and produces a material (bookshelf). We use
two Monitor elements to watch Model States that keep track of the numbers of wood and nails remaining in the system.
Each monitor fires an event when the number of the material it monitors in the system goes below a certain threshold
value, and then this event triggers the replenishment process for this material.
Details for Building the Model:
Updating the Model Described Above
On Source, reset the Maximum Arrivals back to ‘Infinity’.
Open the Definitions Window and select the Elements panel. Change the Initial Quantity of Nails to be ‘50’.
Still in the Elements panel, click on the Monitor icon in the General ribbon group and name that monitor
‘WoodMonitor’. Set the State Variable Name to ‘Wood.QuantityInStock’, the Monitor Type to ‘CrossingStateChange’,
the Crossing Direction to ‘Negative’, and the Initial Threshold Value to ‘10’. This monitor will fire an event named
‘WoodMonitor.Event’ whenever the state variable crosses from 10 to 9.
Add a second Monitor element which is very similar to the first, name it ‘NailsMonitor’. The differences with this
monitor are that the State Variable Name is ‘Nails.QuantityInStock’, the Initial Threshold Value is set to ‘20’ and the
automatically fired event will be ‘NailsMonitor.Event’.
Go to the Processes window. Create two processes named ReorderWood and ReorderNails.
Under the General category of the first process set the Name to ‘ReorderNails’ and set the Triggering Event Name to
‘NailsMonitor.Event’ (select from the list). Place a Delay step in the process. The Delay Time is ‘5’, and the Units is set
to ‘Minutes’. Then place a Produce step in the process. The Production Type is ‘Material’, Material Name is ‘Nails’, and
the Quantity is ‘80’. This process will be executed when the remaining quantity of Nails is below 20, and then the
process will delay for 5 minutes as the delivery lead time and replenish 80 Nails.
Name the second process Name to ‘ReorderWood’ with a Triggering Event Name of 'WoodMonitor.Event’. The
process itself is very similar to the first process. The differences are the Delay Time for Delay step is set to ‘2’ minutes
and within the Produce step, the Material Name is ‘Wood’, and the Quantity is ‘40’.
Embellishments:
We can add some animation, to show the current remaining number of materials while we’re running this model.
Choose Status Plot from Animation under Facility Tools, create a Status Plot, with the Title ‘Material Available’, then set the
X Axis label to be ‘Time’ and the Y Axis label to be ‘Pieces’, and change the time range shown on the X Axis to be ‘30
minutes’.
Then click on the plot, go to Properties Window, add 2 rows in the Additional Expressions. One row has the Expression set
to ‘Nails.QuantityInStock’, and the Label set to ‘Nails’. The other row has the Expression set to ‘Wood.QuantityInStock’, and
the Label set to ‘Wood’. Then we’ll have two animation lines within the plot, one represents the number of remaining nails
and the other one represents the number of remaining wood.
You may note that this system does briefly run out of Nails on each cycle and that this causes the system to be unbalanced
and start building inventory. You might try different settings for the reorder threshold to minimize any process impact.
301 / 1277
Simio Reference Guide
ServerWithSequenceDependentSetup -
SimBit
Model 1: Represent Setup Time
Problem:
I have a Server that requires a certain setup time based on which Entity type needs to be processed.
Categories:
Changeover Logic
Key Concepts:
Changeovers, List Property, Sequence Dependent, Server, Status Pie, StringList
Assumptions:
Each Source only produces one type of Entity. The model will complete its run faster if the Server processes all Entities of
one type before changing over to process Entities of another type.
Technical Approach:
A String List is created in the List panel of the Definitions window for the ModelEntity. A List property is defined in the
ModelEntity’s Definitions window, Properties panel. A Server with a Sequence Dependent Setup Time is used, and a
Changeover Matrix defines the various setup times.
Details for Building the Model:
Simple System Setup:
Add two Sources, a Server, and three Sinks to the Facility window. Change the Interarrival Time of the Sources to ‘0.1’
minutes and the Maximum Arrivals of each Source to ‘5’. Change the Entities Per Arrival for both Sources to ‘2’.
Adding a String List:
Click on the Definitions tab and select the Lists panel to add a String List named ‘Colors’. Add as many colors as
desired, in this case 5: White, Yellow, Red, Blue, and Black. Be sure to add this same String List to the Lists within the
Definitions tab of the ModelEntity.
Adding a List Property:
Also, within the Definitions window, select the Properties panel and add a List Property with the Name ‘Color’.
Set the List Name property under Logic to ‘Colors’ and the Category Name property under Appearance to
‘Properties’. This will give the user the option to specify Color as a property of an Entity and the List of Colors will be
shown as options.
Creating a Changeover Matrix:
In the Data window, select the Changeovers panel. Create a Changeover Matrix and change the Name to ‘Cleaning’.
Change the List Name property to ‘Colors’.
Fill in the Changeover Matrix with desired values or follow the example below:
303 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
304 / 1277
Simio Reference Guide
ServerWithTransferInConstraints - SimBit
Problem:
This small example illustrates usage of the ‘Transfer-In Constraints’ feature that is available in Advanced Options for the
processor-oriented standard library objects.
In this problem, there are three servers arranged in a line. When an entity arrives to a server, if there are already three (3)
entities waiting in the input buffer to be processed, then the entity continues to the next server. The exception is the last
server in the line, which has no transfer-in constraints and thus accepts all overflow of entities that cannot be processed by
the first two servers.
Categories:
Decision Logic -- Paths
Key Concepts:
Server, Queue, Path
Assumptions:
For either ‘Server1’ or ‘Server2’ in this model, a maximum of 3 entities may ever be waiting in the input buffer. The last
server, ‘Server3’, has no such constraint and thus can accept all overflow of entities that cannot be processed by the first two
servers.
Technical Approach:
Use the Advanced Options section, Transfer-In Constraints functionality available for the Server object.
Details for Building the Model:
Simple System Setup
Place a Source, three Servers, and a Sink in the Facility window.
Move the input nodes of the Servers to the top portion of the Servers and the output nodes to the bottom portion
below the object name.
Connect the Source to Server1’s input node. Then connect Server1’s input node to Server 2’s and then to Server 3’s
node. Logically, the entities will attempt to travel from the Source to Server1. If the entity violates the server’s
transfer-in constraints, then the entity travels to the second server Server2. If transfer-in constraints for that server are
also violated, then the entity continues on to Server3 which will always accept the entity.
Connect all three Servers output nodes to the Sink.
Logic Details within the Objects
Within the Source, change the Interarrival Time to ‘Random.Exponential(.1)’. Within Server1, change the Processing
Time to ‘Random.Triangular(.3,.4,.6)’.
Within both Server1 and Server2, open the Advanced Options properties and change the Transfer-In Constraints to
‘Custom Condition’. Then, specify the Transfer-In Condition as ‘Server.InputBuffer.Contents < 3’. This will cause entities
to evaluate the contents of the input buffer for a given server before entering the node at that server. If the condition
is true, the entity will enter the node, if not, it will continue.
Because the arrival rate on the Source is quite high, and the Server1 processing time is longer than the other Servers,
you’ll see that after a short while, entities will bypass Server1 and continue to Server2. Then once Server2 buffer gets
larger, incoming entities continue to Server3.
305 / 1277
Simio Reference Guide
SetPropertyBasedOnValueOfListProperty -
SimBit
Problem:
I have a String List property and the value of a numeric property within the model is set depending on the value of the
String List property.
Categories:
Decision Logic -- Paths
Key concepts:
List Property, Math.If, Maximum Arrivals, Path, StringList, TimeOnLink
Technical Approach:
A TimePath connects the Source to the Sink. The Travel Time property on this TimePath is set based on the current value of
the List Property named ExitLocation.
If the value of this property is 'Far', the Travel Time is 5 minutes. If the value of this property is 'Near', the Travel Time is 1
minutes.
Details for Building the Model:
Defining the Lists and Properties
Go to the Lists window by selecting Lists along the left panel from within the Definitions window. Click on String in
the ListData ribbon to create a new String List. Name this new list ‘ExitLocations’. Add two entries into the list -
‘Near’ and ‘Far’.
Go to the Properties window by selecting Properties along the left panel from within the Definitions window. Select
List from the Standard Property drop down in the Properties ribbon. Change the Name of this new property to
‘ExitLocation’. Set the ListName property of this property to ‘ExitLocations’.
Simple System Setup
Within the Facility window, place a Source object and a Sink object and connect them with a TimePath.
In the Source object, set the Interarrival Time property to ‘1’ minute. Set the Maximum Arrivals, under the Stopping
Conditions category, to ‘10’.
Click onto the TimePath and set the Travel Time property to ‘Math.If( ExitLocation == List.ExitLocations.Far,5, 1)’ This
expression checks the value of the ExitLocation string list property and if it is set to ‘Near’, the value of the Travel
Time property is set to ‘1’. If the value of the ExitLocation string list property is set to ‘Far’, the value of the Travel Time
property is set to ‘5’.
Testing the Model
Because the Source object is set to only create 10 entities, the model can be tested by seeing how long the model
takes to run through 10 entities. The model can also be tested by displaying a status label that returns the average
time that an entity spends on the link (i.e. TimePath1.TimeOnLink.Average).
306 / 1277
Simio Reference Guide
SimpleElevatorObject - SimBit
Problem:
I want to know how to model a simple elevator.
Categories:
Animation, Building New Objects/Hierarchy, Decision Logic – Paths, Vehicles
Key Concepts:
Bind To External Input Node, Bind To External Output Node, Connector, Custom Object, External View, Externally Visible,
Idle Action, Initial Node ( Home), Location.X, Location.Y, Location.Z, Minimum Dwell Time, ModelEntity, Network
Turnaround Method, Object Reference Property, Parking Station Queue, Ride On Transporter, RideStation Queue, Vehicle
Technical Approach:
We build a custom elevator object that consists of 2 transfer nodes and a bi-directional path connecting the two nodes. A
standard vehicle object is used as the elevator platform that travels between the two nodes. There are also two external
nodes where entities transfer out of the object. The object has two properties for the user to provide inputs; the Minimum
Dwell Time of the Elevator and the Capacity of the Elevator.
There are two models that include the Elevator object to demonstrate how it can be used in model logic. The first model
uses two elevator objects. The entity must go up to the second floor to travel between the two elevators, and then back
down to the first floor to exit the system. The second model uses two elevator objects on top of one another, to model a
three story facility. The first elevator carries entities up to the second floor and back to the first floor and the second
elevator carries entities to and from the second and third floor.
Enhanced Technical Approach:
To build the Elevator Object:
Click New Model from the Project Home ribbon to create a new fixed object in this project
Click onto the new object in the Navigation window and change the name to ElevatorObject. Ensure the
ElevatorObject object is selected in the Navigation window and proceed to the next step.
Facility Window:
Place down two Transfer Nodes. Name them: TransferNode1, TransferNode2
Drag a standard Vehicle object into the Facility window.
Set the Network Turnaround Method property to ‘Reverse’
Set the Initial Node (Home) property to ‘TransferNode1’
Set the Idle Action and OffShiftAction properties to ‘RemainInPlace’
Flatten the Vehicle so it looks like a flat elevator platform
On TransferNode1, set the Entity Destination Type property to ‘Specific’ and set the Node Name property to
‘TransferNode2’.
Create a new Add On Process in the Entered Add On Process trigger property of TransferNode1 by selecting Create
New in the drop down of this property. Do the same for TransferNode2.
On TransferNode2, set the Entity Destination Type property to ‘Specific’ and set the Node Name property to
‘TransferNode1’.
On each node, expand the General Properties, and then the Physical Characteristics and Location to find the X,Y,Z
Location properties. Set these properties to:
TransferNode1 – X: 0, Y: 0, Z: 0
TransferNode2 – X: 0, Y: 6, Z: 0
Draw a Path between the two nodes and set the Type property to ‘BiDirectional’
Creating the External View of the Elevator Object
Click onto the TransferNode1 node. Right click and select Bind to New External Input Node. Name this FirstFloorIn1.
This creates an External Input Node that sends entities directly to the FirstFloorIn facility node.
Click onto the TransferNode2 node. Right click and select Bind to New External Input Node. Name this
SecondFloorIn1. This creates an External Input Node that sends entities directly to the SecondFloorIn facility
307node.
/ 1277
SecondFloorIn1. This creates an External Input Node that sends entities directly to the SecondFloorIn facility node.
Right click onto Vehicle1 and select Externally Visible. This will make this object NOT externally visible in the External
View.
Go to the Definitions Window and into the External View panel. Click onto the External Node in the Ribbon and
place an External Node near the TransferNode1 and name it FirstFloorOut. Set the Node Class Name property to
‘TransferNode’. Place another External Node near the TransferNode2 and name it SecondFloorOut. Set the Node
Class Name property to ‘TransferNode’.
Processes Window:
In the Add On Process for TransferNode1 Entered process trigger: Place a Decide Step with the Expression property
set to ‘Is.Modelentity’ to check if this is the entity arriving to the node.
In the True segment leaving the Decide step, place another Decide step with an Expression set to
‘Modelentity.PreviousNode != FirstFloorIn’ This checks to see if the entity arrived from outside of the elevator
or if it came through the elevator from the other node.
In the True segment leaving this Decide Step, place a Transfer Step. Set the From property to ‘CurrentNode’,
the To property to ‘ParentExternalNode’ and the ExternalNodeName to ‘FirstFloorOut’. This transfers an entity
out of the object if the entity did not just enter into the object.
In the False segment leaving this Decide Step, place a SetNode step. Set the Destination Type property to
‘Specific’ and the Node Name property set to ‘TransferNode2’.
After the SetNode step, place a Ride Step. Set the Transporter Type property to ‘Specific’ and the Transporter
Name to ‘Elevator’
Adding Object Reference Properties to the Elevator Object:
In order to give the user some control over the behavior of the ElevatorObject object, you can create some
properties on this object.
Click on Vehicle1 and find the Initial Ride Capacity property. Right click onto the name of this property and
select Create New Referenced property. Name this new property ‘ElevatorCapacity’.
Set the Minimum Dwell Time Type of the Vehicle to ‘Specific Time’. Right click onto the Minimum Dwell Time
property and select Create New Referenced property. Name this new property ‘Minimum Dwell Time’.
To see these new properties and change the default values, go to the Definitions window of the ElevatorObject
object and go to the Properties Panel. Change the default of the Elevator Capacity to ‘1’ and the default of the
Minimum Dwell Time property to 5 seconds.
Create "SingleStory" Model:
Click New Model to create a new Fixed Object in this project. Name it UsingElevator.
Place down two Source objects, two Sink objects, and two ElevatorObject objects (from the Project Library).
Draw paths from one Source to FirstFloorIn on ElevatorObject1, from SecondFloorOut to SecondFloorIn of
ElevatorObject2 and then from FirstFloorOut to one of the Sink objects.
Draw paths from the other Source to FirstFloorIn on ElevatorObject2, from SecondFloorOut to SecondFloorIn of the
ElevatorObject1 and then from FirstFloorOut to the other Sink object.
Create "ThreeStories" Model:
Place an instance of the ElevatorObject object and another directly on top of it. ( To move an object up and down in
the Facility Window, select the object, hold down the Shift key and drag it up or down)
Connect the SecondFloorOut node of the first elevator to the FirstFloorIn node of the second elevator with a
Connector. Connect the FirstFloorOut node of the second elevator to the SecondFloorIn node of the first elevator
with a Connector.
Place a Source object at the level of the first elevator and connect it to FirstFloorIn with a Path. Add another Source
object at the level of the second elevator. Connect this Source to FirstFloorIn of the second elevator and
SecondFloorIn of the first elevator. The Source will send half of its entities down to the first floor and half up to the
third floor.
Place three Sinks into the Facility window; one at the first floor level, another at the second floor level and a third at
the third floor level. Connect the FirstFloorOut node to the first floor Sink with a Path. Connect the SecondFloorOut
node of the first elevator and the FirstFloorOut node of the second elevator to the second floor Sink with a Path. And
connect the SecondFloorOut node of the second elevator to the third floor Sink.
SimpleLeastSlackSelectionRule - SimBit
Problem:
I have multiple entities with different due dates and I want to them to be processed with a Least Slack scheduling
methodology.
Categories:
Buffering, Lookup and Rate Tables
Key Concepts:
Arrival Mode, Numeric Property, Ranking Expression, Ranking Rule, Rate Tables, Server, Smallest Value First, Time Varying
Arrival Rate
Assumptions:
Assume that Processing Time is the same and constant for each type of entity and also assume that entities are allowed to
be processed even after their deadline.
Technical Approach:
Entities are created in separate Sources according to an appropriate Time Varying Arrival Rate. The entities then travel to a
Server that selects the next job based on a Selection Rule to accept the entity type with the least slack waiting in the queue.
Details for Building the Model:
Simple System Setup
In the Facility window, place four Sources and four ModelEntity objects to go along with each Source. Also place a
Server and a Sink. Connect all the Sources to the Server, as well as the Server to the Sink, with Paths.
Rename the ModelEntities ‘EarlyIn_LateOut’, ‘EarlyIn_EarlyOut’, ‘LateIn_LateOut’, and ‘LateIn_EarlyOut’ and rename
the Sources that each is generated from in a similar fashion (we used EL, EE, LL, LE ). Also, change the color of the
entity symbols so that each entity type can be differentiated.
Extend the Input Buffer for the Server so that all entities in the queue will be visible.
Create Rate Tables
In each Source set the Entity Type to the appropriate Entity. Change Arrival Mode to ‘Time Varying Arrival Rate’ and
notice that the Rate Table box is now highlighted. This means that a Rate Table has to be created for each type of
Entity.
Go to the Data Window and then to the Rate Tables Panel to create a Rate Table. Create four Rate Tables with
names associated with the entity types (i.e., EarlyIn_LateOut_RT, EarlyIn_LateOut_RT, etc.).
The Interval Size for each table should be’ 1’ hour, while the Number of Intervals for each should be ‘6’. Note that the
last 2 hours in all the tables are 0, indicating no entity arrivals, which will allow the system to empty. The specific rate
tables for this example are as follows:
309 / 1277
Once these tables are created, go back to the appropriate Source and select the Rate Table that goes with that
Source.
Assigning the Due Date
The Due Date will be represented as a Property of the ModelEntity, since it will not change values during the
simulation run.
Select ModelEntity in the Navigation Window in the upper right-hand portion of the screen. Go to the Definitions
Window and then Properties Panel. Add a Standard Property (type Real) and rename it ‘DueDate’.
To set the DueDate for each entity, go back to the Model and notice in each entity instance, there is a new property
called DueDate.
In this example, the deadlines are set as follows: EarlyIn_EarlyOut to ‘2.5’, EarlyIn_LateOut to ‘7’, LateIn_EarlyOut to
‘6’, and LateIn_LateOut to ‘8’.
With the default Run Setup settings, the model starts at midnight (represented numerically as 0), so if the entity
is to be “shipped” at 2:30 AM its DueDate is to be set at ‘2.5’.
Configuring the Server to Select Entities with Least Slack
The Server in this model is to process entities based off of a Least Slack scheduling methodology. Slack is defined as
the Deadline minus the Remaining Process Time. Because this model only has one server, processing time can be
ignored.
Within the Server, change the Processing Time to ‘4’ minutes. Then, change the Ranking Rule to ‘Smallest Value First’.
Set the Ranking Expression to ‘ModelEntity.DueDate’. This means that the Server is going to prioritize the queue
according to DueDate, and select the entity with the smallest value, or essentially, the one with the earliest value.
Discussion:
Slack is the “cushion” that an object has between it is potentially done processing and its deadline. In this model, this
cushion should have been mathematically described in the Ranking Expression as ‘ModelEntity.DueDate – ( Run.TimeNow +
ModelEntity.ProcessingTime)’. The Remaining Processing Time would become a factor if entities had different processing
times. This could happen if there were multiple Servers and/or entities followed a different sequence of steps, or if the
entities just simply have different processing times.
If the Due Dates were exactly the same for all entities, the Ranking Rule would be the opposite of the one used in this
example. It would be set to ‘Largest Value First’ with a Ranking Expression of ‘ModelEntity.ProcessingTime’.
Of course, if both Due Date and Processing Time are not consistent between the entities, the entire expression is necessary.
310 / 1277
Simio Reference Guide
SimpleTank - SimBit
Problem:
I want to model the level of a fluid tank complete with animation.
Categories:
Add-On Process Logic, Level States
Key Concepts:
Circular Gauge, CrossingStateChange, Floor Label, Level State Variable, Monitor, Rate, Resource, Size.Height, StateStatistic,
Status Label
Assumptions:
This tank has a Capacity of 1000 units and fills at a rate of +1000/hr and empties at a rate of -5000/hr with a pause of .1
hours between changes. The height of the tank in the Facility Window has been set to 5 meters.
Technical Approach:
A resource is created along with other drawing elements to represent a tank. Add-On processes are created to mimic the
tank filling/emptying logic as well as to animate the level of fluid in the tank.
Details for Building the Model:
Creating the Tank
Place a resource into the Facility Window.
Change the symbol to represent the fluid level in the tank – a cylinder was used in this example – and resize it to an
appropriate size (the Height was set to 5 in this example).
Options to improve animation:
To represent the shell of the tank, draw a polyline around the outer-edge of the cylinder, leaving an opening so
that the fluid level is visible. Change the Object Height to equal the height of the fluid level.
To represent the top of the tank, draw a circle and change its Object Height. Place it on top of the other two
parts.
To show tank action in 2D view, add a dial gauge using the expression TankVolume and range 0 to 1000. In 3D
view use “Shift-Drag” to raise it and place it on top of the tank.
Creating the Add-On Process Logic
Add a Level State Variable called 'TankVolume' in the States panel of the Definitions Window.
In the Processes Window, create 2 processes called TankFull and TankEmpty to dictate the tank’s actions at those
points in time.
For TankEmpty:
Add an Assign step and call it StopEmptying. Set the State Variable Name to ‘TankVolume.Rate’ and the New
Value to '0'.
Add a Delay step and call it WaitForSupply. Set the Delay Time to '0.1' Hours.
Add an Assign step and call it StartFilling. Set the State Variable Name to ‘TankVolume.Rate’ and the New
Value to '1000'.
For TankFull:
Add an Assign step and call it StopFilling. Set the State Variable Name to ‘TankVolume.Rate’ and the New
Value to '0'.
Add a Delay step and call it Pause. Set the Delay Time to '0.1' Hours.
Add an Assign step and call it StartEmptying. Set the State Variable Name to ‘TankVolume.Rate’ and the New
Value to '-5000'.
In the Definitions Window, Elements panel, add 2 Monitor Elements – MonitorTankFull and MonitorTankEmpty.
These monitors trigger an event when its condition is reached.
For MonitorTankFull:
311 / 1277
Set Monitor Type to ‘CrossingStateChange’
Set State Variable Name to 'TankVolume'
Set Threshold Value to '1000'
Crossing Direction to ‘Positive’
On Change Detected Process will be 'TankFull'
For MonitorTankEmpty:
Set Monitor Type to ‘CrossingStateChange’
Set State Variable Name to 'TankVolume'
Set Threshold Value to '0'
Crossing Direction to ‘Negative’
On Change Detected Process will be 'TankEmpty'
To represent the animation of the tank we need to make a new process.
In the Processes Window, click the Select Process button in the ribbon and choose ‘OnInitialized’ from the drop
down list. Drag an Execute step and set Process Name in the Logic to TankEmpty.
Add a Delay step called DelayBetweenUpdates and set the Delay Time to an appropriate amount. 1 min was
used in this example.
Add an Assign step. Set the State Variable Name to ‘Tank.Size.Height’. The New Value is going to be a
representation of the tank’s fluid level. So, when it is full the value should be equal to the height set to the
resource (5). In this case it was set to TankVolume/200 because the maximum volume is 1000 and 1000/200
equals the height of the resource – 5.
Drag the process Endpoint to the input of the Delay to create a loop. This allows the animation to update
every time the Delay is executed.
Embellishments:
We’ve added a Status Plot to illustrate the TankVolume over time, as well as Status Labels to represent the Tank Volume
and Fill Rate. It can be seen that the animated fluid level mirrors the change in TankVolume.
Discussion:
The delay time used in the DelayBetweenUpdates process step may affect run time. A large delay time between animation
updates results in a faster run time because the model does not have to update the resource height as frequently. On the
other hand, a smaller delay time results in a smoother, more accurate animation at the potential expense of a longer run
time.
312 / 1277
Simio Reference Guide
SingleVehicleUsage - SimBit
Problem:
I have entities that require movement on a vehicle between operations.
Categories:
Vehicles
Key Concepts:
Ride on Transporter, TransferNode, Vehicle
Assumptions:
There is a single vehicle that moves all entities. The vehicle can move up to 2 entities at a time between the objects in the
system. All paths are unidirectional.
Technical Approach:
Set the Transfer Nodes on the Source and Server objects to specify that a vehicle is required for movement. With
unidirectional paths, the vehicle must have a path to return from the Sink to the Source, even though the entity doesn’t
travel between those objects.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility Window.
Defining the Vehicle and its Characteristics
Place a Vehicle in the Facility Window.
Within the Transport Logic section, change the Initial Ride Capacity to ‘2’. This will allow up to 2 entities to be moved
on the vehicle at one time. Change the Load Time to ‘1’ and the Unload Time to ‘Random.Uniform(1,3)’. Each entity
incurs the load delay when getting on the vehicle and the unload delay when getting off the vehicle.
Modifying the Transfer Nodes
Click on the Transfer Node (exit) of the Source and change the Ride On Transporter property to ‘True’. Specify the
Transporter Type as ‘Specific’ and Transporter Name as ‘Vehicle1’.
Do the same thing as above for Server object’s Transfer Node.
Placing the Paths
Double click on the Path to define the multiple paths between the Source, Server and Sink objects.
When using vehicles, the Basic Node (entry) on the Server must be connected to the Transfer node (exit) on the
Server so the Vehicle can move from one node to the next.
Click on one of the paths. Note that the Type is set to ‘Unidirectional’. Since the paths are unidirectional, place a path
also from the Sink object back to the Source object. While the entities will exit the system at the Sink, the Vehicle
must have a path to return to the Source to pick up additional entities for transfer.
Embellishments:
Try changing the paths to be bidirectional or changing the initial ride capacity of the vehicle.
313 / 1277
Simio Reference Guide
SingleWorkerCompletesProcessAndMovesToNode
- SimBit
Problem:
I want to model a system that has multiple Servers in series and requires a Worker to be present at each Server before
processing can occur. The worker completes work across all servers for one entity before another entity can begin
processing. Animation should show the Worker moving between the two servers and parking at the appropriate Server for
processing. The Server and Worker should change color when working. There is only one Worker in the system.
Categories:
Add-On Process Logic, Worker, Resources
Key Concepts:
Active Symbol, Add-On Process, Before Processing, Initial Node ( Home), Move Step, Secondary Resources, Server, Worker
Assumptions:
There is only one Worker in the system. It will work at the first Server, and then proceed to work at the second Server with
the same entity that finished at Server1. The Worker will then return to working on the first Server. * NOTE: In this example,
the worker moves to the second server at approximately the same speed as the entity – should this be different, additional
logic may be required.
Technical Approach:
The Worker is modeled with a standard Worker object. The Worker object travels between two nodes that are located near
each Server, which animates the moveable resource. The Worker object is seized by the first Server before processing and
the model ensures that the object is located at the appropriate node before it begins Processing. Add On Processes on the
first server onExited will request the worker to move to the second server before processing. The second server will release
the worker after processing.
Details for Building the Model:
Simple System Setup
Add a Source, two Servers and a Sink to the Facility window. Change the Interarrival Time of the Source to
‘Random.Exponential (.53)’ minutes.
Connect the Source to the first Server, connect the first and second Server together and connect the second Server to
the Sink with Paths. Add two Basic Nodes that are connected to each other with a bi-directional path. Place the
nodes near each of the Servers. This is the path that the movable resource will take between the Servers.
Place a Worker object in the Facility window. Add a symbol to this worker and change it to green by clicking on the
Worker object, adding a new symbol by selecting add additional symbol from the Additional Symbols category in
the ribbon. Color the worker green by selecting Color from the decoration ribbon. The worker will already turn green
when working as its animation is by default set to ‘Worker.Capacity.Allocated > 0’.
Set the Park While Busy property of the Worker to ‘True’, which will tell the Worker to park at the node while it’s
processing instead of stay on the link.
Set the Initial Node(Home) property to ‘BasicNode1’.
Adding Logic to the Servers
Click on Server1 and expand the Secondary Resources property category. Under the Other Resource Seizes category,
open the repeat group for Before Processing. Add a new repeat group property by selecting Add. Select the repeat
group and set the Object Type property to ‘Specific’, set the Object Name property to ‘Worker1’. Set the Request
Move property to ‘To Node’ and the Destination Node property to ‘BasicNode1’. This tells the Server that it must
seize Worker1 and it must arrive at BasicNode1 before processing can begin at this Server.
Repeat the above step for Server2, except instead under Other Resource Releases and After Processing. This will tell
Server 2 to release the worker on completion of processing.
Add On Process Logic for Server1
Click on the Server1 object and expand the Add On Process Triggers property category.
Create a new process that is called from the Exited property by selecting ‘Create New’ from the drop down of
this input box. This new process will tell the Worker to move to Server 2 once the entity has left Server 1. 314 / 1277
this input box. This new process will tell the Worker to move to Server 2 once the entity has left Server 1.
Go to the processes window and in the process called Server1_Exited, place a Move Step. Open the
Resource Move Request repeat group and add a new property. Set the Object Type to specific, the Object
Name to ‘Worker1’, and the Destination Node to ‘BasicNode2’. Close the repeat group.
Adding Animation
Add a symbol to this worker and change it to green by clicking on the Worker object, adding a new symbol by
selecting add additional symbol from the Additional Symbols category in the ribbon. Color the worker green by
selecting Color from the decoration ribbon. The worker will already turn green when working as its animation is by
default set to ‘Worker.Capacity.Allocated > 0’.
Repeat the same step for Server1 and Server2.
315 / 1277
Simio Reference Guide
SortingConveyorSystem - SimBit
Problem:
I have a conveyor system that sorts boxes and sends them to the appropriate shipping dock.
Categories:
Conveyor Systems, Sequence Tables
Key Concepts:
By Sequence, Conveyor, Data Table, Dynamic Object Property, Entity Destination Type, Numeric Property, RandomRow,
Sequence Table, TransferNode, Table Row Referencing
Assumptions:
There are three different types of boxes and each type of box has its own shipping dock.
Technical Approach:
There is only one Source. It reads a Data Table to determine how many of each type of box to produce. The boxes travel
on a conveyor to the Labeling machine (a Server). They leave the Labeling machine and travel on the conveyor system. The
system uses Sequence Tables to determine the route of each type of box.
Details for Building the Model:
Simple System Setup
Place a Source object and a Server object into the Facility window. The Server can be renamed “Labeling Machine”.
Set it’s Input Buffer capacity to 0 to force any waiting entities to stay on the conveyor. Place three Transfer Nodes in a
line after the Server. And finally, place three Sink objects, one below each of the Transfer Nodes. These Sink objects
represent the shipping docks and they can be renamed Box1_Dock, Box2_Dock, Box3_Dock.
Connect the Source to the Server with a Conveyor. Connect the Server to the first Transfer Node with a Conveyor and
connect the other Transfer Nodes together with Conveyors. And finally, connect each Transfer Node to the Sink that
was placed below it.
Drag three instances of ModelEntity into the Facility window. Rename them to Box1, Box2 and Box3. You can also
change the symbol and the colors, if desired. This is accomplished by selecting the entity and then choosing a symbol
from the Symbol Library found in the Ribbon. The color of the symbol can be changed by selecting a new color from
the Color menu in the Ribbon (when the entity is selected) and then clicking on the part of the entity that you’d like
changed.
Creating Tables
Go to the Tables panel within the Data window. Create a new Data Table by clicking on the Add Data Table icon in
the Ribbon.
Add a new column to this table of type, “Entity”. This is done by selecting “Entity” from the Object Reference
drop down in the Ribbon. You can rename this property to be “BoxType” from within the Properties window on
the right.
Add another column to this table of type, “Real”. This is done by select “Real” from the Standard Property drop
down in the Ribbon. You can rename this property to be “ProductMix”.
Enter data into this table, such as: Box1 .4 Box2 .3 Box3 .3
Add Three Sequence Tables by clicking on the Add Sequence Table icon in the Ribbon (3 times). There is one
Sequence table for each type of Box. The Sequence Table consists of rows of Nodes and the Entity ( Box) will follow
this route, going from the node listed first and then proceed row by row.
In SequenceTable1, enter the following rows of data: Input@Labeling, TransferNode1, Input@Box1_Dock
In SequenceTable2, enter the following rows of data: Input@Labeling, TransferNode1, TransferNode2,
Input@Box2_Dock
In SequenceTable3, enter the following rows of data: Input@Labeling, TransferNode1, TransferNode2,
TransferNode3, Input@Box3_Dock
Using the Data Table
316 / 1277
Using the Data Table
From within the Facility window, click on the Source and expand the Table Row Referencing-> Before Creating Entities
section in the Properties Window.
Set the Table Name to the name of your Data Table (i.e. ‘Table1’)
The Row Number is set to ‘Table1.ProductMix.RandomRow’. This function tells Simio to use the values in the Product
Mix column as a weighted average to determine which row to set at any given time. So in our example, 40% of the
time row 1 will be read. 30% of the time, row 2 will be read and 30% of the time, row 3 will be read.
Set the Entity Type property to ‘Table1.BoxType’. The Source will create the entity listed in the BoxType column of
Table1. Therefore, 40% of the time Box1 types will be created, 30% of the time, Box2 types will be created and 30%
of the time, Box3 types will be created.
Using the Sequence Tables
In order to tell the Entity which Sequence Table to use, click on each Entity instance ( Box) and set the InitialSequence
property. Box1’s property should be set to ‘SequenceTable1’, Box2 to ‘SequenceTable2’, and Box3 to
‘SequenceTable3’.
You also need to configure each of the Transfer Nodes in the model to use Sequence Tables to determine the next
location for the entity. Therefore, click on each Transfer Node (including the output nodes of the Source and the
Server) and set the EntityDestination property to ‘BySequence’.
Embellishments:
Experiment by changing the sequences in the Sequence Tables. See how the model behaves when the TransferNodes do
not use “BySequence” for their EntityDestination property. Vary the values of the ProductMix column in the Data Table to
see different amounts of each box type created.
Instead of using predetermined sequences, other approaches to sort the packages could include:
Use an add-on process when leaving the Server to set the entity destination to the proper loading dock.
Add decision logic in add-on processes at Transfer Nodes 1 and 2 to represent a scanner that would “read” the entity
and direct it down the appropriate path.
317 / 1277
Simio Reference Guide
SourceServerSinkApproaches - SimBit
Problem:
Source – Server – Sink ( SSS ) is a frequently used problem for beginners in simulation because it can be easily compared to
queueing theory problems such as M/M/1 and M/M/2. But even that simple model has several possible approaches. We
provide this project both to illustrate three approaches and to provide a tool for fast experimentation by beginners.
Categories:
Decision Logic -- Processing
Key Concepts:
Analysis, Capacity.Allocated, Contents, Create Step, Delay Step, Delay Step, Destroy Step, Experiment, Expression Property,
Histogram, InputBuffer, OutputStatistic, Pivot Grid, Release Step, Replication, Response, Server, Sink, Status Label, Tally
Step, TallyStatistic, Timer Element, Transfer Step, WaitUntilTransferring
Assumptions:
We are assuming a very simple system consisting of a single arrival stream, a single (perhaps multiple capacity) server, and
then the entity is disposed. The primary statistics of interest are the time in queue and number in queue.
Unlike most SimBits, our goal here is not to teach you the details of how to build these, but rather to provide the modeling
concepts and leave you with a useful tool for beginning analysis.
Technical Approach:
This project file contains three models. We have one model ( SSS_Library) built using only the Standard Library. This is the
easiest to build, but also runs significantly slower because it contains some overhead of objects and statistics. The other
two models are built entirely from processes – one with just tokens ( SSS_Process) and one with entities
( SSS_Process_with_Entity). While not complex, these are a little more difficult to build and understand because you have to
do some of the “plumbing” yourself, but the reward is significantly faster execution.
Using these Objects:
Each object has four properties to adjust their behavior: Time Between Arrivals, Maximum Arrivals, Service Time, and
Number of Servers. By adjusting those parameters you can compare simulation results to those of many common queuing
problems. By adjusting the number of replications in the experiments, you can see a clear illustration of the value of
running sufficient replications.
Running Interactively to watch the provided animation
Select a model in Navigation window in the upper right (each model name begins with “SSS_”). Change to the Facility
window for the selected model. Right click on the model name and select Properties to open the Model Properties. You
will find the four properties in the Process Logic category. Set them and run to watch the animation.
Running experiments to perform a reliable statistical analysis
From the Navigation window, load the experiment for the selected model. You will see the four Controls (the properties) as
well as two Responses (the Key performance Indicators). You can get a quick summary of the results here as well as go to
the Pivot Grid for more complete data.
To really appreciate the value of additional replications, select the Response Chart tab in the experiment window, turn on
the Histogram and Rotate Plot buttons if not already on, reset the run, then press run and watch how much the early results
vary.
Modeling Concepts:
As mentioned above, our goal here is not to teach you the details of how to build these, but rather to provide the modeling
concepts. So here are some of the concepts for each approach.
SSS_Library
Build the model by placing the three objects and connecting them with Connectors, not Paths, so they do not impact the
timing. We expose the four properties by right-clicking on each property to create a new reference property. Then in the
Properties panel of the Definitions tab, we fine tune the “properties” of each property to control things like category, units,
318 / 1277
Properties panel of the Definitions tab, we fine tune the “properties” of each property to control things like category, units,
default value, and display name. We also hide the inherited properties that we do not want to clutter our model property
window.
SSS_Process
This model is built using the Processes window and the Definitions window. In the processes window, we set up a simple
Seize, Delay, Release, Tally. Since only one item is being seized, we can use the Parent Object itself as the constraint. We set
up a separate Assign using the OnRunInitialized process to assign that desired quantity of the parent object. Note that this
is all done with the Token that is executing the process – we never create any entities.
In the Definitions window we add a Timer to trigger periodic token arrivals t our process. We add a TallyStatistic to collect
TimeInSystem and we add two OutputStatistics to collect the final values of the Queue statistics.
SSS_Process_with_Entity
This model is built using the Processes window and the Definitions window similar to above. But instead of using just the
tokens, we also create Entities to support better animation. Since we have an entity, we also take advantage of using a
Station as our constraint. Transferring into a station is similar to seizing a resource. Destroying the entity after it finishes
processing also removes it from the station, the equivalent of a release.
Since the Entity and Station automatically generate their own statistics, we do not need the Tally step, or TallyStatistic and
OutputStatistic elements.
Embellishments:
Note that while we have discussed this as a project containing three models, you could also load the spfx file as a library
containing three objects.
319 / 1277
Simio Reference Guide
SourceWithBalkingIfBlocked - SimBit
Problem:
I want to model balking of entity arrivals at a source if there is no immediate space at the downstream server.
Categories:
Buffering
Key Concepts:
Balking, Blocked, Buffer Logic
Assumptions:
There are no buffers in the system, including at the Source, Servers or on Paths, as all paths are represented with
connectors, zero-time duration for movement.
Details for Building the Model:
Facility Window Setup
Add a Source, two Servers, and a Sink to the Facility window. Connect the Source to Server1, Server1 to Server2 and
Server2 to the Sink using Connector links.
Source Properties
Specify the Interarrival Time as ‘Random.Exponential(2.4)’ minutes.
Under Buffer Logic properties, specify the Output Buffer Capacity as ‘0’. Open the Balking & Reneging Options
properties and leave the Balk Decision Type as ‘Blocked’ and the Balk Node Name as ‘None ( Destroy Entity)’ so that
when an entity is created, if it cannot immediately transfer into Server1 for processing, it will balk.
Server Properties
Within Server1, specify the Processing Time as ‘Random.Exponential(2)’ minutes.
Go to Buffer Logic -> Input Buffer and change the Capacity to ‘0’. Also within Buffer Logic properties, under Output
Buffer, change the Capacity to ‘0’.
Within Server2, specify the Processing Time as ‘Random.Exponential(1.7)’ minutes.
Change both the Input Buffer and Output Buffer Capacity properties for Server2 to ‘0’, similar to Server1.
Embellishments:
Send the Balked entity from the Source to a specified Balk Node Name for alternative processing.
See also:
ServerQueueWithBalkingAndReneging.spfx
ChangingQueuesWhenServerFails.spfx
MultiServerSystemWithJockeying.spfx
320 / 1277
Simio Reference Guide
SourceWithCustomEntityTypeProperty -
SimBit
Problem:
I would like my Source object to create multiple entity types but instead of reading a table to get the information about
which types of entities to create, I would like my user to input this information through a property on the Source object.
Categories:
Arrival Logic, Building New Objects / Hierarchy
Key Concepts:
Create Step, Dynamic Object Property, Expression Property, Override, Process, RandomRow, Repeating Group Property,
SetRow Step, Status Label, Subclass
Assumptions:
A new, custom Source object is created, by subclassing the Source from Simio’s standard library.
Technical Approach:
We subclass a standard Source object and add a new Repeating Group property that contains a Dynamic Object Instance
property ( Entity property) and an Expression property. This is the property used to input information into this Source on
which type of entity to create and the percentage of which type of entity to create. The OnEntityArrival process is
Overridden and modified. A new SetRow step is used to reference the contents of the new RepeatingGroup property. The
Create Step is modified to reference the RepeatingGroup’s Entity property for its Object Instance Name. This tells the new
Source object to set a row in the Repeating Group property (based on the probabilities entered) and then create that
particular type of entity.
Details:
Subclass the Standard Source object
From the standard library in the Facility window, right click on the standard Source object and select “SubClass”. This
will place a new, subclassed Source object in your Project Library and you will automatically be navigated into this
object. In other words, you’ll see the new Source in the Navigation window (top right corner of interface) and the
new Source will be highlighted. This indicates that you are inside of that new Source object – looking at its Facility
window, not the main model’s Facility window.
From within this new Source object, go to its Definitions window. Click on the Properties panel on the left to view the
Properties window.
Create a new Repeating Group property on this object by clicking the icon in the ribbon named “Repeat
Group”.
Rename this property ‘Entity_Types’ and set the Description in the properties window to ‘The type of
entity to create and the probability of creating this type.’
Set the Category Name to ‘Arrival Logic’.
Ensure that this new property is highlighted in the Properties Window and then select “Entity” from the ‘Object
Reference’ property dropdown of the Ribbon. This is adding a new Dynamic Object Instance type property
into this Repeat Group property. This new property should appear under the heading Entity_Types.Properties in
the main part of the Properties window, if it were indeed added to the Repeat Group.
With this new Dynamic Object Instance property highlighted/selected, change the Name to ‘Entity_Type’
and set the Description to ‘The type of entity to create’.
Set the Category Name to ‘Arrival Logic’
Go back and select/highlight the Entity_Types property and select ‘Expression’ from the Standard Properties
dropdown of the Ribbon. This is adding a new Expression type property into this Repeat Group. This new
property should appear under the heading Entity_Types.Properties, alongside the Entity_Type property.
With this new Expression property highlighted/selected, change the Name to ‘Probability’ and set the
Description to ‘The probability of creating this type of entity.’ 321 / 1277
Description to ‘The probability of creating this type of entity.’
Set the Category Name to ‘Arrival Logic’
From within this new Source object, go to its Processes window. Find the OnEntityArrival process and select it by
clicking anywhere in the process. Click the Override button in the ribbon and see the process change to a White
background, which indicates that you can now modify the logic.
Place a new SetRow step after the Execute step and before the Create step.
Change the Name to ‘RandomRowInEntity_Types’.
Right click on the Table Name property and select ‘Set Referenced Property’ and select the Entity_Types
Repeat Group property that we just created.
Put the expression, ‘Entity_Types.Probability.RandomRow’ into the expression for Row Number, which
tells this SetRow step to select a row in the Entity_Types Repeat group, based on the values in the
Probability property.
Ensure the Object Type property is set to ‘Token’ (found in the Advanced Options category), so that we
are telling the Token to set a reference to the Repeat Group and not the associated object (which doesn’t
exist yet).
Click on the Create Step and right click on the Object Instance Name property. Select ‘Set Referenced Property’
and select Entity_Types.Entity_Type, which tells this Create Step to look there for which type of entity to create
Navigate back to the main Model by selecting ‘Model’ in the Navigation window (upper right). From the Facility
window, drag a standard Server and a standard Sink from the Standard Library. Find the new Source we created in
the Project Library (bottom left, under the standard Library) and drag one instance of the new Source into the Facility
window. Connect the three objects with Paths.
Drag three instance of ModelEntity into the Facility window and rename them to ‘PartA’, ‘PartB’ and ‘PartC’. Give
each entity a unique color by selecting the instance, and selecting color from the Ribbon and then clicking back on
the entity to give it that color.
Click on the instance of the new Source object within the Facility window and find the Entity_Types property in the
Arrival Logic category.
Click the ellipse at the far right of the new property to open the Repeat Group editor (to begin entering
values).
Click ‘Add’ to add a new row into this Repeat Group property. Enter ‘PartA’ for Entity_Type and ‘.3’ for the value
of the Probability property.
Click ‘Add’ twice more to add a row for creating ‘PartB’ with a probability of ‘.4’ and ‘PartC’ with a probability
of ‘.3’.
Embellishments:
Consider adding Status Labels and/or Floor Labels to visually display how many of each type of entity has been created, in
order to help debug and validate the behavior of the new Source object. ( The expression, ‘PartA.NumberCreated’ will
return the number of this type of entity that was created by the Source.)
322 / 1277
Simio Reference Guide
SourceWithRateTable - SimBit
Problem:
I have entities for which the arrival rate varies over time.
Categories:
Arrival Logic
Key Concepts:
Arrival Mode, Poisson Distribution, Rate Tables, Source, Time Varying Arrival Rate
Assumptions:
I have an average of 20 entities arrive during every third hour (e.g. 2:00, 5:00, 8:00, 11:00, …). On other hours I have no
arrivals.
Technical Approach:
Specify the arrival data in a Rate Table. Reference that rate table in a Source object.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility Window.
Connect the Source to Server and Server to Sink using Paths.
Defining a Rate Table
In the Data Window, select the Rate Tables panel and create a new rate table with Name ‘RateTable1’. Change the
Interval Size property to ‘1’ and the Number of Intervals to ‘24’.
Add the data for the average number of arrivals during each period.
Using the Rate Table within a Source
Change the Source1 Arrival Mode property to ‘Time Varying Arrival Rate’ and Rate Table to ‘RateTable1’.
Discussion:
Do not expect an exact number of arrivals in any given period. This is random, a non-homogeneous Poisson distribution.
Over a sufficient number of trials, it will produce the average number of arrivals specified, but for any given period it may
be unlikely to generate the exact number specified.
323 / 1277
Simio Reference Guide
StringStates - SimBit
Problem:
I would like to check the priority of part and then use a String State to display to the screen, whether or not the current part
is considered a high risk part, a medium risk part or a low risk part.
Categories:
Discrete States, Functions
Key Concepts:
Before Exiting, Condition, Current Symbol Index, Floor Label, Math.If(), ModelEntity, Priority, State Assignments, String
State Variable
Assumptions:
There are five different parts produced in this model, each assigned a priority of 1-5, with equal probability. Priority 1 is
considered High Risk, Priority 2 is considered Medium Risk and the rest are considered Low Risk.
Technical Approach:
Assign the entity a value of 1-5 in the ModelEntity.Priority state via the Before Exiting State Assignment property of the
Source object. Assign a value of “HIGH”, “MEDIUM” or “LOW” to a String State, via the On Entering State Assignment
property of the Source object, based on the priority of the entity that has just entered this Server. The String State is written
to the screen in a Floor Label. The Math.If function is used to check ModelEntity.Priority and then assign a value to the
String State.
Details for Building the Model:
Simple System Setup
Drag a standard Source, a standard Server and a standard Sink into the Facility window. Connect them with Paths.
Drag a ModelEntity into the Facility window from the Project Library. Rename this to ‘Parts’. With the ModelEntity
selected in the Facility window, click Add Additional Symbol button in the Ribbon to give this entity a total of 5
symbols. Assign a different color to each symbol.
To assign colors to each symbol, select the ModelEntity object and click the Color button in the icon. Select the
desired color and then click back onto the ModelEntity object in the Facility window. You should see the color
change. You have just changed the color of the “active symbol”. To determine which symbol is active, look at
the Active Symbol button in the icon. To change which symbol is active, select the appropriate symbol from the
Active Symbol dropdown.
When the ModelEntity object is selected in the Facility window, find the Current Symbol Index property in the
properties window. Change the expression to ‘ModelEntity.Priority -1’. ( The minus 1 is needed because the
Symbol index is 0 based but the smallest priority we’ll assign is 1)
State Assignments
Create a new String State on the Model by going to the Definitions window and clicking on the States panel along
the left side of the window.
Click the String button in the Ribbon to create a String state. Rename it ‘Alert’.
Back in the model’s Facility window, click on the Source object in the Facility window.
Find the Before Exiting property under the State Assignments category in the properties window and add a row
to this repeat group property (by click on the ellipse that appears in this input box).
The State Variable Name is ‘ModelEntity.Priority’ and the New Value expression should be
Random.Discrete(1,.2, 2,.4, 3, .6, 4, .8, 5, 1 ) , which assigns the value of 1-5, each with an equal probability of .2
Click on the Server object in the Facility window.
Find the On Entering property under the State Assignments category in the properties window and add a row to
this repeat group property.
324 / 1277
The State Variable Name is ‘Alert’ and the New Value expression should be Math.If(( ModelEntity.Priority == 1),
"HIGH", ( ModelEntity.Priority ==2), "MEDIUM", "LOW") This expression will assign a value of “HIGH” to Alert
if the ModelEntity being processed has a priority of 1, it will return “MEDIUM” if the priority is 2 and “LOW”
otherwise .
325 / 1277
Simio Reference Guide
TableReferenceInRepeatingProperty - SimBit
Problem:
I have three types of entities and want to store their respective information about processing times, which worker to use
and which assignments to make within a table.
Categories:
Data Tables, Worker
Key Concepts:
Before Creating Entities, Data Table, Dynamic Object Property, Expression Property, Numeric Property, RandomRow, Ride
on Transporter, State Assignments, State Property, Table Row Referencing, Table Transporter Property
Assumption:
There are three types of entities and each one has only one worker that it uses and has only one assignment to make.
Technical Approach:
A Data Table is created that will store information about each entity type. Each row in the table will include information
related to a specific entity type, including the percentage of each that enters the system, the worker that is needed to move
the entity, the processing time at a given server and finally, the entity state and value to assign when the entity gets to the
server.
Details for Building the Model:
Simple System Setup
Add a Source, Server, and Sink, as well as two Worker objects to the Facility Window. Also, place three ModelEntity
objects from the Project Library into the window.
Change the Names of the ModelEntity to be 'Red', 'Blue' and 'Green'. Change the symbol color of each to match the
name. This is done by highlighting the symbol and selecting the appropriate Color from the Symbols ribbon. We will
be changing the picture of the Red entity, so select the Red entity symbol, click on Add Additional Symbol in the
Symbol ribbon and change the picture so that graphically the symbols for 0 and 1 are different (colors or texture).
Change the color of one of the Workers so that you can tell them apart graphically.
Use Paths and connect Source1 to Server1, Server1 to Source1 (using unidirectional paths instead of a single
bidirectional path) and also Server1 to Sink1.
Setting up the Data Tables
In the Data Window, select the Tables panel and add a Data Table named ‘Table1’ with the following properties and
in the following order:
( Entity Object Reference with Name ‘EntityType’) Blue, Green, Red
( Integer with Name ‘Percentages’) 30, 35, 35
( Expression with Name ‘ProcessTime ‘ ,Unit Type ‘Time and Default Units ‘Minutes’) Random.Triangular(1,2,3),
3.4, Random.Uniform(5,6)
( State with Name ‘StateName’) ModelEntity.Priority, ModelEntity.Size.Width, ModelEntity.Picture
( Expression with Name ‘StateValue1’) 2, 1.4, 1
( Transporter Object Reference with Name ‘Workers’) Worker1, Worker2, Worker1
Creating Multiple Entity Types from Source
In the Facility Window, expand the Table Row Referencing in the Properties Window of the Source object.
Under the Before Creating Entities subcategory, set the Table Name to ‘Table1’ and the Row Number to
‘Table1.Percentages.RandomRow’.
Change the Entity Type to ‘Table1.EntityType’ and set the Interarrival Time to ‘Random.Exponential(2)’.
Specifying the Worker for Transport
Within the Source’s transfer node, ‘Ouptut@Source1’, change the Ride on Transporter property to ‘True’.
Change the Transporter Name to ‘Table1.Workers’.
326 / 1277
Adding Processing Time and Assignment Information to the Server
Within Server1, change the Processing Time to ‘Table1.ProcessTime’.
Expand the State Assignments and click on the button within the On Entering property to open the repeating
property editor. Use the Add button and add a State Variable Name of ‘Table1.StateName’ and New Value of
‘Table1.StateValue1’. Close the dialog and you should see the On Entered property change to ‘1 Row’.
327 / 1277
Simio Reference Guide
TallyStatisticsInTable - SimBit
Problem:
I have two different entity types and two exits from the system. I would like to keep entity statistics, by type, for each exit
from the system.
Categories:
Custom Statistics
Key Concepts:
Add-On Process, Data Table, Dynamic Object Property, Expression Property, On Created Entity, On Entered, Path,
Selection Weight, Table Row Referencing, Table Tally Statistic Element Property, Tally Step, TallyStatistic
Assumptions:
There are two entity types which go through a single server, then through an inspection area where they either pass
inspection or fail inspection.
Technical Approach:
A Data Table is used to store information about each entity type as it moves through the system, including the processing
time at the Server, the inspection percentages and also the tally statistics names that will be used when the entity either
passes or fails inspection.
Details for Building the Model:
Simple System Setup
Add two Sources, two Servers and two Sinks to the Facility window. Connect both Sources to Server1 with Paths.
Connect Server1 to Server2, then Server2 to both Sinks with Paths.
Change the Name of Sink1 to ‘Passed_Inpection’ and the Name of Sink2 to ‘Failed_Inspection’.
Add two ModelEntities from the Project Library to the Facility window. Change the Name property (under General
category) on one to ‘PartA’ and the other to ‘PartB’. Change the Color of the PartA symbol to red.
Setting Up Tally Statistics
We will keep statistics on each part type that goes through each exit; therefore 4 tally statistics will be needed. In the
Definitions tab, Elements panel, click on the Tally Statistic button and add 4 tallies.
Change the Name properties (under General) to ‘PartA_Passed’, ‘PartA_Failed’, ‘PartB_Passed’ and ‘PartB_Failed’.
Adding a Data Table
Create a new table by clicking on the Data tab, Tables panel and selecting Add Data Table. Within the table, there
will be five columns. First, add a Object Reference – Entity, then two Standard Property – Expression fields, then two
Element Reference – Tally Statistic columns.
Change the Name of the first column to ‘Entity Type’. Add ‘PartA’ and ‘PartB’ as the row values in the column.
Change the Name of the second column to ‘Process Time’ and its associated Unit Type to ‘Time’ and Default Units to
‘Minutes’. Add ‘Random.Triangular(3,4,5)’ and ‘Random.Triangular(3,5.4,7)’ as the processing time values in the
column.
The third column should have the Name of ‘Inspection Rate’. The rate should be ‘.9’ for PartA and ‘.84’ for PartB.
Finally, the last two columns, which are tally references, should have Name values of ‘Passed Tally’ and ‘Failed Tally’. In
the ‘Passed Tally’ column, enter the ‘PartA_Passed’ and ‘PartB_Passed’ tally names. In the ‘Failed Tally’ column, enter
the ‘PartA_Failed’ and ‘PartB_Failed’ tally names. These names will be referenced within the Tally step later in this
description.
Setting up the Source Objects
In the Facility Window, change the Entity Type property for Source1 to ‘PartA’. In order to reference the table data,
set the Table Name property to ‘Table 1’ and the Row Number to ‘1’.
Change the Entity Type property for Source2 to ‘PartB’. In order to reference the table data, set the Table Name
property to ‘Table 1’ and the Row Number to ‘2’.
328 / 1277
Modifying the Servers and Paths
Within Server1, change the Processing Time to reference the table with ‘Table1.ProcessTime’. Within Server2, change
the Name to ‘Inspection’ and the Processing Time to ‘Random.Triangular(2,2.5,3)’. All part types have the same
inspection time distribution.
On the paths from Inspection to the Passed_Inspection and Failed_Inspection sinks, we will be modifying the
Selection Weight property to reflect the rate of failure for each part type. For the path going to Passed_Inspection,
change the Selection Weight to ‘Table1.InspectionRate’. For the path going to Failed_Inspection, change the Selection
Weight to ‘1-Table1.InspectionRate’.
Using Custom Tally Statistics
Within the Passed_Inspection Sink, create a new process in the Add-On Process Triggers Entered property named
‘Passed_Inpection_Entered’. Within the Failed_Inspection object, create a similar new process in the Entered property
named ‘Failed_Inspection_Entered’.
Within the Processes window, in the Passed_Inspection_Entered process, add a Tally step. Have the Value Type of
‘Expression’, TallyStatistic Name property of ‘Table1.PassedTally’, and Value of ‘ModelEntity.TimeInSystem’.
Do the same for the Failed_Inspection_Entered by adding a Tally step, changing the TallyStatistic Name to
‘Table1.FailedTally’ and Value to ‘ModelEntity.TimeInSystem’.
The above Tally steps will then point into the correct columns of Table1 to utilize the various Tally Statistics elements
for each of the part types, PartA and PartB. These custom statistics can then be seen in the Model statistics, with the
Data Source value being the Tally Statistic Name ( PartA_Passed, PartA_Failed, etc.).
Embellishments:
The tally statistics that are added may be modified to categorize them in a more meaningful fashion. Within the Tally
Statistics elements in the Definitions tab, each tally has a Results Classification area of properties. Using the Data Source,
Category and Data Item properties can help to classify the user statistics in the results. For example, you may wish to set
them as ‘Results’, ‘PartA’ and ‘Passed’ respectively (and similar for the other Tallies).
329 / 1277
Simio Reference Guide
TankCleanInPlaceTrigger - SimBit
Problem:
Empty and clean the tank when the inflow entity type changes, but if the tank is already empty, skip cleaning. The time to
clean the tank is dependent on which inflow entity type is used.
Categories:
Add-On Process Logic, Flow Library
Key Concepts:
Add-On Process, Assign Step, Changeovers, Clean In-Place Triggers, Decide Step, Delay Step, FlowConnector, FlowSink,
FlowSource, LastChangeoverState, List Property, StringList
Technical Approach:
The Inflow entity type changes every 5 minutes by enabling and disabling FlowSource regulators. Using the Tank’s Clean-
In-Place Triggers, the tank is cleaned on the event when the inflow entity type changes. The required cleaning time is then
determined by looking at the specified ‘From/To’ changeover matrix and getting the time when transitioning from the last
changeover state to the current changeover state of the clean in-place operation. When the entity type changes but the
tank is empty, the LastChangeoverState variable is set to 0 so the cleaning is skipped.
Details for Building the Model:
Simple System Setup
Add 3 FlowSources, a Tank, and a FlowSink to the Facility window. Add 3 ModelEntity objects to the Facility window.
Connect the FlowSources to the Tank and the Tank to the FlowSink using FlowConnectors.
Rename the ModelEntity objects ‘Flow1’, ‘Flow2’, and ‘Flow3’. Select Flow2, click the Color dropdown, select Red, and
click Flow2. Select Flow3, click the Color dropdown, select Light Blue, and click Flow3. Set Entity Type of
FlowSource1 to ‘Flow1’, Entity Type of FlowSource2 to ‘Flow2’, and Entity Type of FlowSource3 to ‘Flow3’.
Flow Regulator Logic
Within the output flow nodes of the FlowSource objects, set Regulator Initially Enabled to ‘False’ for FlowSource2 and
FlowSource3. This causes the flow from both FlowSource2 and FlowSource3 to initially be off, while the flow from
FlowSource1 will start immediately.
Within the output flow nodes of FlowSource3 and Tank1, set the Initial Maximum Flow Rate to ‘25’ Cubic Meters per
Hour.
Click the Processes window and select OnRunInitialization from the Select Process dropdown. Add the following
steps in order - Delay, Assign, Delay, Assign, Delay, and Assign. Click the third Assign step and move the end point
to the beginning of the first Delay step.
Set the Delay Time to ’5’ and Units to ‘Minutes’ for each Delay step.
For the first Assign, set the State Variable Name to ‘[email protected]’ and New Value to
‘False’. Add a Row to Assignments ( More) and set the State Variable Name to
‘[email protected]’ and New Value to ‘True’.
For the second Assign, set the State Variable Name to ‘[email protected]’ and New Value
to ‘False’. Add a Row to Assignments ( More) and set the State Variable Name to
‘[email protected]’ and New Value to ‘True’.
For the third Assign, set the State Variable Name to ‘[email protected]’ and New Value to
‘False’. Add a Row to Assignments ( More) and set the State Variable Name to
‘[email protected]’ and New Value to ‘True’.
Clean In-Place Triggers Logic
Select ModelEntity in the Navigation window. Click the Definitions window then select Lists from the panel. Click the
String button. Select StringList1 and rename it to ‘FlowTypeList’. Type ‘Flow1’, ‘Flow2’, ‘Flow3’ into the list.
Click the Property option from the Definitions panel. Click the Standard Property Window and select List. Change the
Name to ‘FlowType’. Set the List Name to ‘FlowTypeList’.
Select Model in the Navigation window. Click the Facility window. Click each Model Entity, and set the Flow Type to
its Entity’s name. 330 / 1277
its Entity’s name.
Click the Definitions window then Lists button. Click the String button. Select StringList1 and type ‘Flow1’, ‘Flow2’,
‘Flow3’ into the list.
Select the Data window, Changeovers button on the panel. Click the Changeover Matrix button. Set the String List
Name to ‘StringList1’ and Time Units to ‘Minutes’ for ChangeoverMatrix1. Fill in the Matrix '0,1,2;4,0,3;5,6,0'.
Click the Facility window and select the Tank. Add a row to the Clean-In-Place Triggers and set Triggering Event
Name to ‘Tank1.InflowEntityTypeChanged’, Cleaning Time Type to ‘Sequence Dependent’, Operation Attribute to
‘ModelEntity.FlowType’, and Changeover Matrix to ‘ChangeoverMatrix1’.
Double click New Inflow Entering label of the Add-On Process Triggers to create a new process.
In the Processes window, add a Decide step and an Assign step (from the True exit of the Decide step) to the new
process.
Within the Decide step, set the Expression to ‘Tank1.FillStatus==0’, and on the Assign step, set the State Variable
Name to ‘Tank1.LastChangeoverState’ and New Value to ‘0’. This will check to see if the tank is empty (fillstatus is ‘0’),
the changeover will not be necessary.
331 / 1277
Simio Reference Guide
TaskSequenceAndWorker - SimBit
This SimBit project includes two models that demonstrate the use of the Server’s Task Sequence capability including
Workers.
Models included in this SimBit:
1. TaskSequenceAndWorker_InServer – Demonstrates the Server’s task sequence option including a number of
process tasks requiring workers. The data within this model is stored directly within the Server object.
2. TaskSequenceAndWorker_InTable – Demonstrates the Server’s task sequence option including a number of process
tasks requiring workers. The data within this model is stored in a table and referenced from within the Server object.
This provides additional flexibility as the data can be read in from an external data source.
Model 1: TaskSequenceAndWorker_InServer
Problem:
I would like to perform a number of concurrent tasks at a Server with a worker, including having the worker move to
another location, perform a task then move back to my location. The information about the tasks is specified in the Server.
Categories:
Add-On Process Logic, Decision Logic -- Processing, Decision Logic -- Paths, MultiTask Server, Resources, Worker
Key Concepts:
Add-On Process, Bidirectional Path, DestinationNode, Keep Reserved If, People, Release Step, Request Move, Resource,
Seize Step, Server, Task Sequence, TransferNode, Worker
Assumption:
We will be reserving the Worker within the Server’s processing tasks for each task and then again for the transport task
from one Server to the next. It is assumed that the object ride capacity is ‘1’ when using reserved workers/vehicles.
Technical Approach:
There are multiple tasks that occur within the waiting area of the model, including seizing a room resource, seizing the
nurse worker to go and clean the room, then moving the nurse to the patient location. The ‘Keep Reserved If’ options are
set to ‘True’ so that the same nurse performs the various operations, as well as is reserved for transporting the entity patient
to the Exam Server. All tasks that occur within the waiting room are specified using the Task Sequence option for
processing in a Server.
Details for Building the Model:
Simple System Setup
Place a Source, two Servers and a Sink in the Facility window. Change the Name of the Source to ‘ArrivalArea’, the
first Server to ‘WaitingArea’ and the second Server to ‘Exam1’. Name the Sink ‘Door’. Add a ModelEntity to the
model and name it ‘SickPatient’. Position the Servers and their input/output nodes as shown in the example.
Place three TransferNode objects in the Facility window, one to the top left of the Exam1 server (‘NurseStation’), one
directly below that and in line with the WaitingArea and Exam1 servers (‘TransferNode1’) and one below the Exam1
server (‘TransferNode2’).
Connect the ArrivalArea source to the WaitingArea server with a Path. Use Paths to connect the NurseStation node to
TransferNode1 and then all other possible paths. Note that using bidirectional paths is an easy way to allow travel in
both directions, but keep in mind this can cause potential deadlocking with multiple workers/vehicles and can cause
entity logic trouble if the entity destination is ‘Continue’ and not a specific destination.
Connect the input/output nodes in the Exam1 server with a Connector or Path.
Defining the Worker ( Nurse)
Place a Worker object in the Facility window with the Name ‘Nurse’. Change the Initial Node (Home) to ‘NurseStation’
and the Idle Action to ‘Park At Home’. Note that in this particular model, we only have a single nurse ( Initial Number
in System under Population is default of ‘1’).
Entity Arrivals
332 / 1277
Entity Arrivals
Within the ArrivalArea source, change the Interarrival Time to ‘Random.Exponential(2.5)’ minutes. The connection to
the WaitingArea will allow all entities to directly move to that area for processing.
Waiting Area Logic
Within the WaitingArea server, change the Initial Capacity to 10. This will allow 10 entities to be waiting in the area in
a graphical queue to perform the various tasks specified.
Change the Process Type to ‘Task Sequence’ and enter the Processing Tasks repeating properties dialog. All tasks will
occur sequentially, therefore we will number them as such.
For Sequence Number ‘10’, the Name is ‘ReserveRoom’ and the Process Type is ‘Process Name’. The Process
Name that will include the logic for this process is ‘GetRoom’. (see below).
For Sequence Number ‘20’, the Name is ‘SendNurseToRoomAndClean’, the Process Type is ‘Specific Time’ and
Processing Time is ‘Random.Triangular(.5,1,1.5)’. It is important to note that for this process task, the nurse is
required. Thus, the Object Name is ‘Nurse’, the Request Move is ‘ToNode’ and Destination Node is
‘Input@Exam1’. This task will seize the nurse, move the nurse to the Exam1 location and delay for the
processing time specified.
For Sequence Number ‘30’, the Name is ‘BringBackNurse’, the Process Type is ‘Specific Time’ and Processing
Time is ‘0’. The nurse is also required for this task. Thus, the Object Name is ‘Nurse’, the Request Move is
‘ToNode’ and Destination Node is ‘Output@WaitingArea’. This task will seize the nurse, move the nurse to the
WaitingArea location.
One key concept with multiple process tasks using resource requirements is that by default, within the
Advanced Options section of properties, the Keep Reserved If is set to ‘True’. Therefore, the resource is reserved
automatically when used from one task to another.
Within the WaitingArea output node, change the Entity Destination Type to ‘Specific’ and the Node Name to
‘Input@Exam1’. It is important to specify the entity destination when a network of nodes will be passed to that the
entity continues to its correct destination. Change the Ride On Transporter to ‘True’ and the Transporter Name to
‘Nurse’. Note that the Keep Reserved If property is blank, meaning we will not reserve the nurse for processing in the
exam room, although if the nurse was needed for that processing, this should be set to ‘True’.
Exam Logic
Within the Exam1 server, change the Processing Time to ‘Random.Triangular(1,2,3)’ minutes. Within the Add-On
Process Triggers, specify the process name ‘LeaveRoom’ on the Exited property. Next, we will determine the logic for
that process, as well as the ‘GetRoom’ process specified in the WaitingArea process task.
GetRoom and LeaveRoom Processes Logic
Within the Facility window, place a Resource object with the Name ‘Room1’. This room object will be used to control
the number of entities (patients) that are allowed to have the room reserved/cleaned or be in the room at any given
time.
Within the Processes window, create two processes. The first process has a Name of ‘GetRoom’ and should contain a
single Seize step that seizes the Object Name ‘Room1’ resource. This is done, as noted above, within the first task of
the WaitingArea, before the nurse worker is moved to the room for cleaning.
The second process has a Name of ‘LeaveRoom’ and should contain a single Release step that releases the Object
Name ‘Room1’ resource. This release is performed once the processing time at the Exam1 server is complete and the
entity is exiting the server.
Model 2: TaskSequenceAndWorker_InTable
Problem:
I would like to perform a number of concurrent tasks at a Server with a worker, including having the worker move to
another location, perform a task then move back to my location. The information about the tasks should be specified in a
table so that it is easily editable and/or imported from an external data file.
Categories:
Add-On Process Logic, Data Tables, Decision Logic -- Processing, Decision Logic -- Paths, MultiTask Server, Resources,
Worker
Key Concepts:
Add-On Process, Bidirectional Path, Data Table, DestinationNode, Enumeration Property, Keep Reserved If, Node
Property, Object Reference Property, People, Process Element Reference Property, Release Step, Request Move, Resource,
Seize Step, Server, Set Referenced Property String Property, Task Sequence, Table Sequence Property, TransferNode,
Worker
333 / 1277
Assumption:
We will be reserving the Worker within the Server’s processing tasks for each task and then again for the transport task
from one Server to the next. It is assumed that the object ride capacity is ‘1’ when using reserved workers/vehicles.
Technical Approach:
There are multiple tasks that occur within the waiting area of the model, including seizing a room resource, seizing the
nurse worker to go and clean the room, then moving the nurse to the patient location. The ‘Keep Reserved If’ options are
set to ‘True’ so that the same nurse performs the various operations, as well as is reserved for transporting the entity patient
to the Exam Server. All tasks that occur within the waiting room are specified using the Task Sequence option however, all
property values are specified directly within a data table.
Details for Building the Model:
Simple System Setup
Same as Model 1 above.
Defining the Worker ( Nurse)
Same as Model 1 above.
Entity Arrivals
Same as Model 1 above.
Data Tables and Process Task Properties
Within the Data window, add a new Data Table to the model. Change the Name of the table to ‘ActivityTasks’.
Include the following column types/names:
Sequence Number property ( Standard Property) – Name is ‘TaskSequenceNumber’
String property ( Standard Property) – Name is ‘TaskName’
Enumeration property ( Standard Property) – Name is ‘ProcessType’ ( Enum Type is ‘TaskProcessType’)
Expression property ( Standard Property) – Name is ‘ProcessingTime’ ( Unit Type is ‘Time’ and Default Units are
‘Minutes’)
Process Element property ( Element Reference) – Name is ‘ProcessName’
Object property ( Object Reference) – Name is ‘ObjectName’
Enumeration property ( Standard Property) – Name is ‘RequestMove’ ( Enum Type is ‘SeizeReqeustVisitType’)
Node property ( Object Reference) – Name is ‘DestinationNode’
Each row in the table will then represent a unique processing task. Since there will be three processing tasks, there
should be three rows, including the following data:
Task Sequence Number ‘10’, Task Name ‘ReserveRoom’, Process Type ‘Process Name’, Processing Time ‘0’, Process
Name ‘GetRoom’, Object Name *blank*, Request Move ‘None’ and Destination Node *blank*
Task Sequence Number ‘20’, Task Name ‘SendNurseToRoomAndClean, Process Type ‘Specific Time’, Processing
Time ‘Random.Triangular(.5,1,1.5)’, Process Name *blank*, Object Name ‘Nurse’, Request Move ‘ToNode’ and
Destination Node ‘Input@Exam1’
Task Sequence Number ‘30’, Task Name ‘BringBackNurse’, Process Type ‘Specific Time’, Processing Time ‘0’,
Process Name *blank*, Object Name ‘Nurse’, Request Move ‘ToNode’ and Destination Node
‘Output@WaitingArea’
IMPORTANT NOTE: When using Table Data for entry into a repeating group of properties, you must have a column
for each property that MAY be changed in a given entry / process task – if the property remains as the default value
for all entries, it is not necessary to have a column feed-in (i.e., the Selection Goal for the Resource Requirement).
Waiting Area Logic
Within the WaitingArea server, change the Initial Capacity to 10. This will allow 10 entities to be waiting in the area in
a graphical queue to perform the various tasks specified.
Change the Process Type to ‘Task Sequence’ and enter the Processing Tasks repeating properties dialog. The task
data will come directly from the particular table generated in the above step.
Set the Sequence Number to ‘ActivityTasks.TaskSequenceNumber’
Set the Name to ‘ActivityTasks.TaskName’
Set the Process Type to ‘ActivityTasks.ProcessType’
Set the Processing Time to ‘ActivityTasks.TaskProcessingTime’
Set the Process Name to ‘ActivityTasks.ProcessName’
334 / 1277
Set the Object Name to ‘ActivityTasks.ObjectName’
Set the Request Move to ‘ActivityTasks.RequestMove’
Set the Destination Node to ‘ActivityTasks.DestinationNode’
Then close the Processing Tasks repeating property editor.
Within the Processing Tasks property field, type in ‘ActivityTasks’ which is the name of the table. This is important for
the repeating editor to know the table reference where all internal data is stored.
Within the WaitingArea output node, change the Entity Destination Type to ‘Specific’ and the Node Name to
‘Input@Exam1’. It is important to specify the entity destination when a network of nodes will be passed to that the
entity continues to its correct destination. Change the Ride On Transporter to ‘True’ and the Transporter Name to
‘Nurse’. Note that the Keep Reserved If property is blank, meaning we will not reserve the nurse for processing in the
exam room, although if the nurse was needed for that processing, this should be set to ‘True’.
Exam Logic
Same as Model 1 above.
GetRoom and LeaveRoom Processes Logic
Same as Model 1 above.
335 / 1277
Simio Reference Guide
TrackingTankContentsByProductTypeUsingTableStates
- SimBit
Problem:
I want to keep track of individual quantities of flow volume within a Tank during a simulation run.
Categories:
Add-On Process Logic, Flow Library
Key Concepts:
Assign Step, Delay Step, Flow Connector, Flow Source, Monitor, Tank
Assumptions:
Using State Columns in a Data Table is a Professional/RPS license feature. This model could be made with a non-
Professional/RPS license by replacing the State Columns with using States on the Model level that has values assigned to it
with an Assign step.
Technical Approach:
A data table comprised of a Key Column of each Entity and Level State Columns for each Tank in the system can keep
record of flow quantities by Entity Type and Tank with the use of Add-On Process logic and Monitors.
The RowForKey function is used to resolve which Liquid row in the Tank Contents data table corresponds with which
volume in a specific Tank. RowForKey returns the row index of the row for which the specified KeyColumnName has the
specified keyValue.
In lieu of using the RowForKey function, an alternative approach where the index of each entity type is at a known index in
the table could be considered.
Details for Building the Model:
Simple System Setup
Go to ModelEntity in the Navigation Pane:
Create a String List named ‘LiquidTypeName’ that has ‘RedLiquid’ and ‘GreenLiquid’ as its two strings.
Create a List Property named ‘LiquidType’ whose List Name is ‘LiquidTypeName’.
Return to the Model and place two ModelEntity objects in the Facility window. Rename one to ‘RedLiquid’ and the
other to ‘GreenLiquid’, respectively. Change the Color of RedLiquid to Red.
Select ‘RedLiquid’ and change the Initial Priority to ‘2.0’ and ensure that LiquidType is ‘RedLiquid’.
Select ‘GreenLiquid’ and set LiquidType to ‘GreenLiquid’.
Place two FlowSource objects in the Facility window. Rename one to ‘RedLiquidSource’ and the other to
‘GreenLiquidSource’, respectively.
Select RedLiquidSource and ensure that the Entity Type is ‘RedLiquid’.
Select Output@RedLiquidSource and set Initial Maximum Flow Rate to ‘1’ and Regulator Initially Enabled to ‘False’.
Select GreenLiquidSource and ensure that the Entity Type is ‘GreenLiquid’.
Select Output@GreenLiquidSource and set Initial Maximum Flow Rate to ‘1’ and Regulator Initially Enabled to ‘False’.
Place two Tank objects in the Facility window.
Select Tank1 and set the Contents Ranking Rule to ‘Smallest Value First’ and Contents Ranking Expression to
‘ModelEntity.LiquidType’.
Select Input@Tank1 and set Initial Maximum Flow Rate to ‘1’.
Select Output@Tank1 and set Initial Maximum Flow Rate to ‘0.3333’.
Select Input@Tank2 and set Initial Maximum Flow Rate to ‘0.3333’.
Link the following Nodes together with FlowConnector objects:
Output@RedLiquidSource to Input@Tank1.
Output@GreenLiquidSource to Input@Tank1.
Output@Tank1 to Input@Tank2.
Creating Monitors
Open the Definitions window and select the Elements view, in the General category, click Monitor twice to add two
Monitors to this model.
Select the first Monitor and rename it ‘Tank1FlowMonitor’.
336 / 1277
Select the second Monitor and rename it ‘Tank2FlowMonitor’.
Select Tank1FlowMonitor and open the Repeating Property Editor for Monitored State Variables (More) and then Add
two Items:
State Variable Name ‘Tank1.FlowContainer.CurrentVolumeFlowIn.Rate’.
State Variable Name ‘Tank1.FlowContainer.CurrentVolumeFlowOut.Rate’.
Select Tank2FlowMonitor and open the Repeating Property Editor for Monitored State Variables (More) and then Add
two Items:
State Variable Name ‘Tank2.FlowContainer.CurrentVolumeFlowIn.Rate’.
State Variable Name ‘Tank2.FlowContainer.CurrentVolumeFlowOut.Rate’.
Setting Up the Data Table
Navigate to the Data tab and select the Tables view and click Add Table.
Add an Entity Column, rename it ‘ProductType’, and Set Column As Key:
Add a row for RedLiquid.
Add a row for GreenLiquid.
Add two Level State Columns, one for each Tank:
Rename one ‘Tank1Level’.
Rename the other ‘Tank2Level’.
Creating Processes
Create an OnRunIntialized Add-On Process:
Place an Assign step with two assignments:
Set State Variable Name to ‘[email protected]’ and New Value to ‘True’.
Set State Variable Name to ‘[email protected]’ and New Value to
‘False’.
Place a Delay step with a Delay Time of ‘1 Hour’.
Place an Assign step with two assignments:
Set State Variable Name to ‘[email protected]’ and New Value to ‘False’.
Set Set Variable Name to ‘[email protected]’ and New Value to ‘True’.
Place a Delay step with a Delay Time of ‘1 Hour’ and have this Delay step loop back to the first Assign step.
Navigate to the Definitions tab, select Tank1FlowMonitor, and then double click on Triggered Process Name to create
an Add-On Process.
Place an Assign step with two assignments:
Set State Variable Name to
‘TankContents[ TankContents.ProductType.RowForKey( RedLiquid)].Tank1Level.Rate’ and New Value to
‘Math.If( Input@Tank1.FlowRegulator.OutputFlowReceivers.FirstItem.Is.RedLiquid,
Tank1.FlowContainer.CurrentVolumeFlowIn.Rate,0.0)-
Math.If( Output@Tank1.FlowRegulator.OutputFlowReceivers.FirstItem.Is.RedLiquid,
Tank1.FlowContainer.CurrentVolumeFlowOut.Rate,0.0)’.
Set State Variable Name to
‘TankContents[ TankContents.ProductType.RowForKey( GreenLiquid)].Tank1Level.Rate’ and New Value to
‘Math.If( Input@Tank1.FlowRegulator.OutputFlowReceivers.FirstItem.Is.GreenLiquid,
Tank1.FlowContainer.CurrentVolumeFlowIn.Rate,0.0)-
Math.If( Output@Tank1.FlowRegulator.OutputFlowReceivers.FirstItem.Is.GreenLiquid,
Tank1.FlowContainer.CurrentVolumeFlowOut.Rate,0.0)’.
Navigate to the Definitions tab, select Tank2FlowMonitor, and then double click on Triggered Process Name to create
and Add-On Process.
Place an Assign step with two assignments:
Set State Variable Name to
‘TankContents[ TankContents.ProductType.RowForKey( RedLiquid)].Tank2Level.Rate’ and New Value to
‘Math.If( Input@Tank2.FlowRegulator.OutputFlowReceivers.FirstItem.Is.RedLiquid,
Tank2.FlowContainer.CurrentVolumeFlowIn.Rate,0.0)-
Math.If( Output@Tank2.FlowRegulator.OutputFlowReceivers.FirstItem.Is.RedLiquid,
Tank2.FlowContainer.CurrentVolumeFlowOut.Rate,0.0)’.
Set State Variable Name to
‘TankContents[ TankContents.ProductType.RowForKey( GreenLiquid)].Tank2Level.Rate’ and New Value to
‘Math.If( Input@Tank2.FlowRegulator.OutputFlowReceivers.FirstItem.Is.GreenLiquid,
Tank2.FlowContainer.CurrentVolumeFlowIn.Rate,0.0)-
Math.If( Output@Tank2.FlowRegulator.OutputFlowReceivers.FirstItem.Is.GreenLiquid,
Tank2.FlowContainer.CurrentVolumeFlowOut.Rate,0.0)’.
Enhancements:
Animation can be added to show the current volume in each respective Tank broken down by Entity Type as well as the
337 / 1277
Animation can be added to show the current volume in each respective Tank broken down by Entity Type as well as the
total volume in the Tank.
Add a Floor Label for each Tank, the Floor Label for Tank1 could look something like this:
Total Volume In Tank1: { Tank1.FlowContainer.Contents.Volume}
Total Red Liquid Volume: { TankContents[ TankContents.ProductType.RowForKey( RedLiquid)].Tank1Level}
Total Green Liquid Volume: { TankContents[ TankContents.ProductType.RowForKey( GreenLiquid)].Tank1Level}
338 / 1277
Simio Reference Guide
TransferLine - SimBit
Problem:
You have a transfer line that has a single conveyor with multiple workcenters. All parts on the conveyor move together.
None can move unless all are ready.
Categories:
Add-On Process Logic, Conveyor Systems
Key Concepts:
Accumulating, Add-On Process, BasicNode, Conveyor, DesiredSpeed, On Entered, Real State Variable, TransferNode
Assumptions:
Entities will move synchronously and all are aligned at the designated stopping locations (either workcenter or
intermediate location) together.
Technical Approach:
Use multiple non-accumulating conveyors. Use nodes with add-on processes to delay for the operations and coordinate
the conveyor segments.
Details for Building the Model:
Simple System Setup
Place a Source and Sink object in the Facility Window.
Place 3 BasicNodes and 1 TransferNode in the middle of the Source and Sink objects. Connect the Source to the first
BasicNode with a Path, as well as the TransferNode to the Sink with a Path.
Use 3 Conveyors to connect the three BasicNodes together, as this will represent our workcenters that move
synchronously.
Defining System States
Click on the Definitions tab and select the States panel. Add a Discrete State with the Name
‘NumberStationsWorking’ that represents how many stations have operations in progress that would prevent the line
from moving.
Using Add-On Process Triggers
On the two internal nodes representing the workcenters, in the Entered trigger for add-on processes, add the process
named ‘TransferLineNode_Entered’. Open the Processes Window and define the logic for this process.
Add an Assign step that increases the State Variable Name ‘NumberStationsWorking’ to ‘NumberStationsWorking +
1’ to indicate that this operation is in-process. In the same Assign step, assign the ‘Conveyor*.DesiredSpeed’ of each
conveyor to 0.
Use a Delay step for the processing time at that workcenter (if you needed processing resources you would seize
before the delay and release after the delay).
Add another Assign step to decrement ‘NumberStationsWorking’ to indicate that this operation is complete.
Use the Decide step to determine if all other operations are done (‘NumberStationsWorking == 0’) and if all other
operations are done, restore the ‘Conveyor*.DesiredSpeed’ of each conveyor using an Assign step.
339 / 1277
Simio Reference Guide
TransporterListForVehiclesOnDifferentSchedules
- SimBit
Problem:
I require vehicles to transport my entities and there are vehicles that follow different work schedules. I would like to select
whichever vehicle is currently On Shift. If more than one vehicle is On Shift, I will select whichever is closest to the entity
that requires a ride.
Categories:
Schedules / Changeovers, Vehicles
Key concepts:
Entity Destination Type, Initial Node ( Home), On Shift, Ride On Transporter, Schedules, TransporterList, Transporters,
WorkSchedule
Technical Approach:
The entity needs a ride on a Transporter to get from Server1 to Sink1. There are two possible Vehicles; one follows a
standard day shift and the other is on second shift, which begins at 3:00pm. A Transporter List is used so the entity selects
whichever Vehicle is available at the time.
Details for Building the Model:
Creating Vehicle Schedules
Go to the Schedules window by selecting Schedules along the left panel from within the Definitions window.
Click on the Day Patterns tab and change the Name of the Day Pattern to ‘StandardFirstShift’. Keep the contents of
the Day Pattern with the default 8am-12pm (1) and 1pm-5pm (1).
Create a second Day Pattern by starting to type in the next row of the Day Pattern table. Name this new Day Pattern
’StandardSecondShift’.
Click onto the ‘+’ next to this new Day Pattern to enter the times for this new shift.
Create a row where the Start Time is ‘3:00 PM’ and the End Time is ‘7:00 PM’. The Value should be ‘1’.
Create another row where Start Time is ‘8:00 PM’ and the End Time is ’12:00 AM’. The Value should be ‘1’.
Click back onto the Work Schedules tab. Change the Name of the default Work Schedule listed to ‘FirstShiftWeek’.
Set the Days column to ‘1’ so that this schedule will repeat the same daily schedule for the duration of the simulation.
Set the Day1 column to ‘StandardFirstShift’.
Create a new Work Schedule by creating another row in the table. Name the new Work Schedule ‘SecondShiftWeek’.
Set the Days column to ‘1’ and the Day1 column to ‘StandardSecondShift’.
Simple System Setup
Place a Source, Server and Sink object in the Facility window. Place a TransferNode between the Server and Sink.
Connect the Source to the Server with a Path. Connect the Server to the Sink, then the Sink to the TransferNode, and
the TransferNode back to the Server with Paths. This should form a circle so that traffic will travel in one direction
from the Server to Sink to TransferNode and back to the Server.
In the Source, set the Interarrival Time property to ‘Random.Exponential(4)’ minutes.
Set the Processing Time of the Server object to ‘Random.Triangular(3,4,5)’ minutes.
Place two Vehicle objects and change the Name properties to ‘FirstShift’ and ‘SecondShift’.
Set the Initial Node (Home) property of both Vehicles to the name of the TransferNode that was placed. Set
the Idle Action and the OffShift Action to ‘ParkAtHome’.
Set the Initial Desired Speed of each Vehicle to ‘.1’ Meter per Second.
Set the Capacity Type of each Vehicle to ‘WorkSchedule’ and set the FirstShift vehicle’s Work Schedule property
to ‘FirstShiftWeek’ and the SecondShift vehicle’s Work Schedule property to ‘SecondShiftWeek’.
Defining the Vehicle List
Go to the Lists window by selecting Lists along the left panel from within the Definitions window.
340 / 1277
Click on the Transporter in the ListData ribbon to create a new Transporter List. Add the names of two vehicles that
were placed into the model.
Selecting the Vehicle From the List
Within the Facility window, click onto the Output@Server1 node. Set the Entity Destination Type to ‘Specific’ and the
Node Name property to ‘Input@Sink1’. This will ensure that the entity is dropped off at the Sink and that it will not
return back to the Server. Set the Ride On Transporter property to ‘True’. Set the Transporter Type property to ‘Select
From List’ and set the Transporter List Name to the name of the Transporter List that was created.
Testing the Model
Run the model beginning at 1:00pm. At this point in time, the First Shift vehicle is available. At 3pm, the Second Shift
vehicle will come On Shift and they are both available until 5pm, which is when the First Shift vehicle is no longer
available.
341 / 1277
Simio Reference Guide
TravelWithSteeringBehavior - SimBit
Problem:
Demonstrate more flexible modeling of entity movement in free space. This uses Travel step to illustrate various options.
These features are generally used when you want to show more realistic movement of pedestrians and people. These
concepts are often used in agent-based modeling.
Categories:
People, Add-on Process Logic, Decision Logic -- Paths
Key Concepts:
SteeringRule, Pedestrian, People, Agent, Transfer Step
Assumptions:
We are modeling with the Standard Library but would like to use process logic to attain additional realism in modeling
people movement.
Technical Approach:
The Steering Behavior options on the Travel step only work in Free Space. We will supplement the Standard Library objects
with process logic that will Transfer the entity into free space, initiate realistic movement with the Travel step, then Transfer
the entity onto its target destination. We will repeat this process with three different configurations to illustrate optional
ways of using the Travel Step:
A - Using a simple path (a line) and specify on the Travel step the width of the travel path (e.g. how far from the line)
in which entity can travel.
B - Follow along a network (but still in free space) and use the defined width of each path to constrain the entity
travel.
C - Enhance option B using a rule to have entities avoid colliding with each other.
Details for Building the Model:
Option A Setup
Place a Source ( SourceA ), two BasicNodes ( BasicNodeA1 and BasicNodeA2), and a Sink ( SinkA ) in the Facility
window. Connect with Paths.
Place a ModelEntity object ( DefaultEntity) and change its Initial Network to ‘No Network ( Free Space)’ so that all
movements will be made in Free Space, instead of on the network.
Change Interarrival Time of SourceA to ‘Random.Exponential(.03)’.
In the Processes Window, Create Process and name ‘OutputSourceA_Exited’.
Add a Transfer Step with From set to ‘CurrentNode’ and To set to ‘FreeSpace’.
On the OK branch add a Travel step with Steering Behavior set to ‘Follow Network Path’. This indicates that even
though the entity is now in free space (not on the network), we want to use the drawn network paths to guide its
movement.
Also on the Travel step:
Set Starting Node to ‘Output@SourceA’ to tell the entity where on the network to start.
Set Ending Node to ‘Input@SinkA’ to tell the entity where on the network to end.
Set Path Width to ‘4’ meters to let the entity travel 2 meters to either side of the line.
Add a second Transfer Step to the end of the process with From set to ‘FreeSpace’, To set to ‘Node’, and Node Name
set to ‘Input@SinkA’.
Moving back to the Facility window, click on the output node of the source ( Output@SourceA ) and in the Add-On
Process Triggers Category set Exited to ‘Output_SourceA_Exited’.
At this point you should be able to run the model. You will see that instead of following the line exactly that entities will
stray within the 4 meters surrounding the line. But it will still get its direction from the network almost as though it is really
on the network. But it is not on the network (it is in free space) so it will not respect any of the options specified on the
paths.
342 / 1277
Option B Setup
Execute all of the steps in Option A with the following changes:
Wherever an ‘A’ appears in a name make it a ‘B’.
For the three paths, change the path Width (under the General category > Physical Characteristics > Size) to ‘6’, ‘3’,
and ‘2’ respectively. You can also set the color of the Paths using the Color button on the Drawing ribbon.
On the Travel step:
Leave Path Width set to its default of ‘Candidate.Link.Size.Width’ which lets the entity react to the width of the
path it is traveling on.
Set Update Time Interval to ‘0.3’ to indicate your sensitivity to it straying off the path. You can experiment with
this number. A smaller number will provide better animation performance, but it will do so at the cost of
execution speed.
Option C Setup
Execute all of the steps in Option B with the following changes:
Wherever an ‘B’ appears in a name make it a ‘C’.
On the Travel step:
Set Avoid Collisions to ‘True’ to indicate that you want the entities to try to avoid colliding with each other.
You should now be able to run the model and see how the three sets of options compare to each other. You can adjust the
various parameters to customize the performance.
Embellishments:
The Steering Rules for the Travel step are implemented in user code. More advanced users can use the example C# code
found in the Examples\UserExtensions folder to implement their own, more complex or customized rules. An alternate
approach to using the Travel step in processes in the way illustrated above is to instead customize the process logic
included in the ModelEntity definition.
343 / 1277
Simio Reference Guide
TurnaroundMethod - SimBit
Problem:
I would like to explore the different options that are available for an entity turnaround method on a network.
Categories:
Entity Characteristics
Key Concepts:
Deadlock, Network Turnaround Method
Technical Approach:
We set up three options each with a source, three bidirectional paths and 2 transfer nodes.
Details for Building the Model:
Simple System Setup
For each option, place a Source and two TransferNodes in parallel. Change the Maximum Arrivals property on each
Source to ‘1’. This allows you to see the movement of a single entity at a node as it transfers between links.
Use three bidirectional paths to link each node to the Source and to link the two nodes.
Place three ModelEntities ( Exit_Entity, Rotate_Entity & Reverse Entity) and assign each one to a Source by setting the
Entity Type in the Source Arrival Logic to the corresponding entity name.
The Exit_Entity Network Turnaround Method will keep its default value, ‘Exit & Re-enter’.
Set the Rotate_Entity Network Turnaround Method to ‘Rotate In Place’.
Set the Reverse_Entity Network Turnaround Method to ‘Reverse’.
Discussion:
Exit_Entity:
This entity will 'Exit & Re-enter' a node when it is changing directions on a bidirectional link. This is the default setting for
entities, workers and vehicles. The entity actually exits the link, and re-enters it as it turns around. This method is the most
deadlock avoidance friendly option.
Rotate_Entity:
This entity will 'Rotate in Place' at a node when it is changing directions on a bidirectional link. The entity never exits the
link, but simply rotates and continues on the same link in the opposite direction. This method could cause deadlocks.
Reverse_Entity:
This entity will 'Reverse' its animation symbol at a node when it is changing directions on a bidirectional link. The entity
never actually leaves the link when changing directions, it simply goes in a reverse direction (tail first). This allows for
modeling such things as elevators.
344 / 1277
Simio Reference Guide
UpdateStateInModelFromObject - SimBit
Problem:
I have a user-created object in my model and want to update a state variable in the main model from within that object. **
NOTE: This is an extension of the SimBit ‘ProcessModelWithinModel.spfx’.
Categories:
Building New Objects / Hierarchy
Key Concepts:
BasicNode, ContinueProcess, Delay Step, EndTransfer Step, Expression Property, ExternalNode, Object Instance Property,
Release Step, Resource, Seize Step, Station Element, Submodel, Transfer Step, State Property
Assumptions:
The SimBit ‘ProcessModelWithinModel.spfx’ is used as a baseline for this example. The steps show how to add a state
property reference to an object so that a state in the main model can be appropriately updated.
Technical Approach:
A state type property will be utilized within the user-created object. Once the object is placed in a model, the property will
then reference the state defined within the model.
Details for Building the Model:
ProcessModelWithinModel.spfx
Open the SimBit ‘ProcessModelWithinModel.spfx and review the corresponding *.pdf file for logic details.
Defining a State-Type Property
Within the Navigation bar, click on thte SeizeDelayRelease object.
Go to the Definitions window, Properties panel to add a new property to the object. This is done by selecting
Standard Property and then clicking on State within the pull-down list.
Rename the state ‘WhichState’ and change the Category Name to ‘Properties’ so that it appears in the same area with
the ResourceName and DelayTime properties for the object.
Assigning the State within the SeizeDelayRelease Object
Click on the Processes window of the SeizeDelayRelease object. After the Seize step, add an Assign step.
Within the Assign step, right click on the State Variable Name property, select ‘Set Referenced Property’ and click on
‘WhichState’. This will cause ‘WhichState’ to be placed in the property field with a green arrow, indicating a reference
from an object property.
Within the New Value field, enter the value ‘WhichState + 1’. This will cause each token going through this process to
increase the associated state by 1.
Defining the State within the Model
Within the Navigation window, click on the Model and go to the Definitions tab, States panel.
Add a new Integer type State and change the Name to ‘Model_Count’.
Within the Facility window of the model, add an animated status label of this state by going to the Animation ribbon,
selecting and placing a Status Label and entering the Expression ‘Model_Count’.
Defining Which State to Reference within the Object
Click on the SeizeDelayRelease object within the Model’s Facility Window.
Notice in the Properties window, under the category Properties, there is a new property called WhichState, which you
will specify as ‘Model_Count’.
345 / 1277
Send comments on this topic to Support
346 / 1277
Simio Reference Guide
UserDefinedListState - SimBit
Problem:
I would like to create my own, custom List State that will produce time persistent statistics on each value that is assigned to
the state.
Categories:
Buffering, Custom Statistics, Discrete States
Key Concepts:
Before Exiting, Buffer Capacity, List State, Math.If(), On Entering, State Assignments, Status Pie, StringList
Technical Approach:
We set up a system that has two servers in series ( Server1 and Server2), which are in parallel with two other servers ( Server3
and Server4) in series. We would like statistics on when either Server1 or Server2 are busy and statistics on when either
Server3 or Server4 is busy. In other words, we’d like to know when the top line of servers is busy and when the bottom line
of servers is busy. By creating a custom ListState for Line1 (which includes Server1 and Server2) and a custom ListState for
Line2 (which includes Server3 and Server4), we will get statistics such as the average amount of time spent in the Busy state
and the number of occurrences that each Line was in the Busy state.
Details for Building the Model:
Simple System Setup
Place a Source and a Sink object in the Facility window
In between these two objects, place 4 Server objects. Set the Input Buffer Capacity and the Output Buffer Capacity to
‘0’ for all 4 servers so that we do not have any buffering in the system. Server1 and Server2 are in series so therefore
connect the Source to Server1 with a Path, connect Server1 to Server2 with a Connector and connect Server2 to the
Sink with a Path.
Server3 and Server4 are in series so therefore connect the Source to Server3 with a Path, connect Server3 to Server4
with a Connector and connect Server4 to the Sink with a Path.
Create the two List States:
From the Definitions window, go to the States panel. Create new List State by clicking on ‘List’ in the States ribbon.
Name this new state ‘Line1ListState’. Create another new ListState and name is ‘Line2ListState’.
Leave the States Panel and go to the Lists panel (found on the left side of the interface). Create a new String List by
clicking on ‘String’ in the ribbon menu. Name this new List ‘Line1’. Enter the word ‘Idle’ into the first row of the List
and the word ‘Busy’ into the second row of the List.
Create another String List by clicking on ‘String’ in the ribbon menu. Name this new List, ‘Line2’. Enter the word ‘Idle’
into the first row of the List and the word ‘Busy’ into the second row of the List.
Go back to the States panel where you created the List States and select Line1ListState. In the properties window of
this State, set the String List Name property to ‘Line1’ and set the Initial State Value property to ‘Idle’.
Select Line2ListState. In the properties window of this State, set the String List Name property to ‘Line2’ and set the
Initial State Value property to ‘Idle’.
Assign Values to List States:
Go back to the Facility window where we’ll assign values to our new List States. Select the first Server in the top series
( Server1) and expand the State Assignments property category in the properties window. Click on the ellipse (the …
button) in the On Entering property and when the On Entering Repeating Property Editor window appears, click Add.
Set the State Variable Name to ‘Line1ListState’ and the New Value to ‘1’. Assigning a value of 1 to this List State is
equivalent to setting it to the list value of ‘Busy’ (the List is 0-indexed so Idle =0 and Busy = 1).
Click on the second Server in the top series ( Server2) and expand the State Assignments property category in the
properties window. Click on the ellipse (the … button) in the On Exiting property and when the On Entering
Repeating Property Editor window appears, click Add. Set the State Variable Name to ‘Line1ListState’ and the New
Value to ‘Math.If( Server1.Processing.Contents>0, 1, 0)’. This Math.If statement says that if there is an entity being
processed at Server1, then keep the value of the Line1ListState at ‘1’. If not, then set it to ‘0’, which is Idle.
Select the first Server in the bottom series ( Server3) and expand the State Assignments property category in the
347 / 1277
Select the first Server in the bottom series ( Server3) and expand the State Assignments property category in the
properties window. Click on the ellipse (the … button) in the On Entering property and when the On Entering
Repeating Property Editor window appears, click Add. Set the State Variable Name to ‘Line2ListState’ and the New
Value to ‘1’.
Click on the second Server in the bottom series ( Server4) and expand the State Assignments property category in the
properties window. Click on the ellipse (the … button) in the On Exiting property and when the On Entering
Repeating Property Editor window appears, click Add. Set the State Variable Name to ‘Line2ListState’ and the New
Value to ‘Math.If( Server2.Processing.Contents>0, 1, 0)’. This Math.If statement says that if there is an entity being
processed at Server2, then keep the value of the Line2ListState at ‘1’. If not, then set it to ‘0’, which is Idle.
Place two Status Pie charts from the Animation ribbon into the Facility window. Set the Data Type property of the
Status Pie to ‘List State’ and the List State property to ‘Line1ListState’ (and ‘Line2ListState’ for the second chart).
Embellishments:
Consider adding additional values to each List and then assigning the appropriate index into the ListState to see that a
ListState can contain more than just the two values (0 and 1) that this SimBit demonstrated.
Discussion:
The statistics for these new ListStates are displayed in the Results window after the run is complete. For each ListState,
there are statistics for Average Time, Total Time, Percent Time and Number of Occurences for each State Value (i.e. Busy,
Idle in our example).
Most of the Simio Standard Library objects contain a built in ListState, called ResourceState, which is automatically
updated with values such as “Busy”, “Idle”, “OffShift”, etc.
There are functions available for a ListState, such as MyListState.AverageTime(stateValue),
MyListState.TotalTime(stateValue), MyListState.PercentTime(stateValue), MyListState.NumberOccurences(stateValue)
348 / 1277
Simio Reference Guide
UsingAddRowandOutputTable - SimBit
Problem:
I want to be able to write entity specific output information to an output data table at the end of the simulation run. *Simio
Professional and RPS (Enterprise) Editions only*
Categories:
Data Tables
Key Concepts:
Add-On Process, Assign Step, AddRow Step, Data Table, Output Table, Real State Variable, Run.TimeNow, State
Assignments, String State Variable, Maximum Arrivals
Assumptions:
All data is added to the output table when the entity is about to leave the system. Both functions and state variable
information is used to write the appropriate state information to the output table.
Technical Approach:
An output data table is utilized to write out information regarding an entity to a table at the end of the simulation run. The
AddRow step is used to add a new row to the table with each entity leaving the system, while the Assign step will assign
values to the various columns in the table for that given entity instance.
Details for Building the Model:
Simple System Setup
Place a Source, two Servers and a Sink in the Facility window. Use paths to connect the Source to each of the Servers,
and each of the Servers to the Sink.
Within the Source, open the Stopping Conditions section and change the Maximum Arrivals property to ‘20’.
Within the Run Setup section of the Run ribbon, change the Ending Type to ‘Unspecified ( Infinite)’ so the simulation
will stop when there are no more entities in the system.
Defining an Entity State
Within the Navigation window, click on the ModelEntity. Go to the Definitions window, States panel and add a String
state variable with the Name ‘WhichServer’. This will be used to store (with the entity) which of the two servers it
utilized. This state can be referenced as ModelEntity.WhichServer.
Within the Navigation window, click on the Model and place a ModelEntity from the Project Library into the Facility
window.
Defining the Output Table
Still within the Model, open the Data window, select the Tables panel and add an Output Table.
Still within the Data window, click on the States ribbon to add several states to the output table. First, add a Real
state variable and change the Name to ‘TimeEntered’. This will store the simulation time that the entity entered the
system.
Then, add a String state variable with the Name ‘EntityName’. This will store the entity name, such as
DefaultEntity.94.
The next column added should be another Real state variable with the Name ‘TimeLeaving’ that will store the
simulation time that the entity finished in the system.
Finally, add another String state variable with the Name ‘ServerName’ that will indicate which of the two Servers
through which the entity was processed.
Adding a Row to an Output Table During the Run
Because output tables are tables with no data at the start of the simulation run, data must be added during the run
through the use of object states. To add a row to an output table, the AddRow step is used.
Within the Navigation window, go back to the Model. In the Facility window, within the input node of the Sink
( Input@Sink1), double click directly on the Entered add on process trigger so that it automatically creates a process
within the Processes window named ‘Input_Sink1_Entered’. This should reference the process from within the 349 / 1277
input
within the Processes window named ‘Input_Sink1_Entered’. This should reference the process from within the input
node, as well as place you within the Processes window to begin defining the process.
Within the process, add an AddRow step with a Table Name of ‘OutputTable1’. Each time an entity goes through the
Sink, a new row will be added to the output table.
Next, add an Assign step and make the following assignments to the states in the table:
State Variable Name – ‘OutputTable1.TimeEntered’, New Value – ‘ModelEntity.TimeCreated’
State Variable Name – ‘OutputTable1.EntityName’, New Value – ‘ModelEntity.Name’
State Variable Name – ‘OutputTable1.TimeLeaving’, New Value – ‘Run.TimeNow’
State Variable Name – ‘OutputTable1.ServerName’, New Value – ‘ModelEntity.WhichServer’
Assigning the ModelEntity.WhichServer Value
Within Server1, under the State Assignments section of properties, click on On Entering to enter an assignment
through the repeating property editor. Assign the State Variable Name ‘ModelEntity.WhichServer’ to the New Value
of ‘Server1.Name’.
Within Server2, do the same thing, except assign the State Variable Name ‘ModelEntity.WhichServer’ to the New
Value of ‘Server2.Name’.
Running the Model
You will notice that the output table, while it has column headers, does not include any data. Once the simulation has
been run, the output table will be filled with data upon clicking the Stop button.
350 / 1277
Simio Reference Guide
UsingaMonitor - SimBit
Problem:
I have is a simple model with a source, server and sink and would like to know at what point in time during the simulation
run the queue for the server exceeds 9 for the first time.
Categories:
Add-On Process Logic, Custom Statistics
Key Concepts:
Add-On Process, Contents, CrossingStateChange, Event, InputBuffer, Monitor, On Entered, Process Triggering Event, Real
State Variable, Stopping Condition, TimeNow
Assumptions:
Since the time is the only information desired, the simulation stops running after the queue reaches 9 for the first time.
Technical Approach:
A state variable is updated with the number of entities in the server queue each time a new entity enters the server. A
Monitor element is used to track this state variable and trigger an event when the state variable goes over the value of 9.
The triggering of this event executes a process that updates another variable with the current simulation time and the
simulation stops. The variable with the simulation time is displayed in the Results Window as a State Statistic.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink in the Facility Window. Update the Processing Time property of the Server to be
‘Random.Triangular(.2,.3,.5)’ so that the Server has some queuing.
Connect the Source and Server, as well as the Server and Sink with Paths.
Creating Discrete State Variables
Click on the Definitions tab and select the States panel. Create two discrete state variables, one called
‘NumberInQueue’ and the other called ‘TimeWhenOver9’.
Using an Add-On Process Trigger
Within the Server object, create an Add-On Process by double-clicking on Entered. This will take you to the Processes
Window. In this process, add an Assign step that assigns the State Variable Name ‘NumberInQueue’ to the New Value
of ‘Server1.InputBuffer.Contents’. ( Note: this is a function that returns the number in the inputbuffer queue for this
Server).
Creating and Using a Monitor
Select the Elements Panel within the Definitions tab to add a Monitor element with its Name as ‘Monitor_Over9’. The
Monitor Type property should be changed to ‘CrossingStateChange’. The State Variable Name that it is monitoring
should be set to ‘NumberInQueue’ and the Threshold Value is ‘9’.
Adding a New Process
Create a new process using the Create Process icon in Processes Window. Set the Triggering Event property for the
process to the name of the Monitor you just created, followed by .Event, ‘Monitor_Over9.Event’.
Place an Assign step in this new process and have that Assign step update the State Variable Name ‘TimeWhenOver9’
to the current simulation time, using with the function ‘Run.TimeNow’ as the New Value.
Stopping the Simulation Run
Click on the Definitions Window and select the Elements panel to create a new State Statistic.
Set the State Variable Name to ‘TimeWhenOver9’ and the Stopping Condition to ‘TimeWhenOver9 > 0’. This will stop
the simulation run once this threshold is met for the first time.
351 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
352 / 1277
Simio Reference Guide
UsingAStorageQueue - SimBit
Problem:
I would like entities to wait in a queue and then I’d like to search the queue for a particular entity and remove it from the
queue.
Categories:
Add-On Process Logic, Combining and Separating Entities
Key Concepts:
Add-On Process, Allow Passing, Assign Step, Batch Step, BatchLogic Element, Candidate, Decide Step, Detached Queue,
Entities Per Arrival, Insert Step, ModelEntity, Movement.X, Node, NodeList, On Entered, AssociatedStationLoad, Random
Symbol, Real State Variable, Remove Step, Route Step, RoutingGroup Element, Search Step, Selection Goal, SetNode Step,
SmallestValue, Storage Element, Storage Queue, Time Offset, TimeCreated, UnBatch Step
Technical Approach:
Entities arrive in pairs by the Source creating two entities per arrival and batching them together. When the pair reaches the
first node, they are un-batched. One entity is routed to an available Server and the other entity is put into a Storage queue,
where it sits until its partner has finished processing. In order to match up the entities again, we search the Storage queue
for an entity that has the exact same “TimeCreated” stamp on it, which indicates that these two entities were originally
paired together upon creation. Once the correct entity is found in the queue, it is removed and batched with its partner,
before traveling to the Sink.
Details for Building the Model:
Simple System Setup
Place a Source, a Sink and one TransferNode into the Facility window. Place the TransferNode so that it is in between
the Source and the Sink. Connect the Source to the TransferNode with a Path and connect the TransferNode to the
Sink with a Path.
Click on the Source, and set the Time Offset property to ‘.1’ and set the Entities Per Arrival to ‘2’.
In both Paths, set the Allow Passing property to “False” so that we are able to see the entities traveling one by one on
the paths.
Place three Servers into the Facility window. Set the Initial Capacity property of each Server to ‘2’.
Draw a Path from the TransferNode to the Input Node of each Server. Draw a Path from the Output Node of each
Server back to the TransferNode – for a total of 6 new paths.
Animating the Entity as People:
We animate the entities as different people so it is easier to see the different partners splitting and pairing back
together. Drag the ModelEntity object from the Project Library on the bottom left into the Facility window.
Select the new DefaultEntity within the window. Select a symbol of a person from the Symbols dropdown in the
Ribbon. The entity should change from a green triangle to the person that was selected.
With the DefaultEntity selected, click on the Add Additional Symbol button in the Ribbon. The Active Symbol button
in the Ribbon should now show (2 of 2) because there are now two symbols associated with DefaultEntity. You can
change the hair color, skin color or clothing color of the person symbol by clicking on Color in the Ribbon and then
clicking on the specific part of the person symbol.
Keep adding additional symbols and altering their colors, in order to provide variety to the entities traveling in the
model.
With the DefaultEntity selected, change the Random Symbol property, in the properties window, to ‘True’. This will tell
Simio to randomly select a symbol from the multiple symbols you’ve created for DefaultEntity.
Create Elements – Storage, Batch Logic and Routing Group:
From within the Definitions window, click on the Elements panel and add a Storage element by clicking on the
Storage button in the Ribbon. Rename it ‘WaitingArea’
Add a Batch Logic element by clicking on the Batch Logic button in the Ribbon. The default property values are fine.
Click on the Lists panel within the Definitions window and create a Node list by clicking on the Node button in the
Ribbon. Enter Input@Server1, Input@Server2, Input@Server3 as the nodes within the List. ( In order to add a new row
353 / 1277
Ribbon. Enter Input@Server1, Input@Server2, Input@Server3 as the nodes within the List. ( In order to add a new row
to the list, click outside of the list or hit Tab)
Back in the Elements panel, add a Routing Group element by clicking on the Routing Group button in the Ribbon. In
the Node List Name property, select the node list that you just created.
Create new State Variables:
Add a State to the ModelEntity that will tracked when it has finished processing at a Server. Click on the ModelEntity
within the Navigation window (top right). Once the ModelEntity is highlighted (you are within the ModelEntity
model), click on the Definitions window. Click on the States panel and click on Discrete State in the ribbon, to add a
new State to the ModelEntity. Rename it ‘Processed’.
Within the Facility window, within each Server, go to the State Assignments section of properties and add a new
assignment Before Exiting. Within the repeating property editor, assign the State Variable Name
‘ModelEntity.Processed’ (created in above step) to a New Value of ‘1’. This state for the entity will later be evaluated
once it enters the TransferNode1 to determine if the entity is entering or exiting.
Add a State to the main Model that will help us keep track of which entity will be the Parent and which will be the
Member. With the Model selected in the Navigation window, go to the Definitions window and click on the States
panel. Add a new Discrete State named ‘TrackBatching’. Set the Initial State Value property to ‘1’. Also, add a state
named ‘WhichOne’ which will store the associated token found in the Search step so that we can Remove the correct
entity from the Storage queue.
Add Processing Logic:
From within the Processes window of the main Model, create a new process by clicking on the ‘Create Process’
button in the Ribbon.
Place a Decide Step. Set the Decide Type property to ‘ConditionBased’ and set the Expression to ‘TrackBatching
== 1’. This checks to see if this is the first created entity and if so, it will become the parent.
In the True segment leaving the Decide Step, place an Assign Step. This step should set the TrackBatching state
to the value of ‘2’.
After this Assign Step, place a Batch Step. Use the BatchLogic element created earlier and set the Category
property to ‘Parent’.
In the False segment leaving the Decide Step, place a Batch Step. Use the BatchLogic element created earlier
and set the Category property to ‘Member’.
After this step, place an Assign Step. This step should set the TrackBatching state to the value of ‘1’, which
indicates that this batch is finished and a new batch will start.
In the Facility window, click on the Output Node of the Source object and select this new Process from the drop
down of the Entered Add On Process trigger. This will cause this new process to be triggered whenever an entity
enters this output node.
While in the Facility window, click on the TransferNode and select ‘Create New’ from the drop down of the Entered
Add On Process trigger. This will create a new process that will be triggered whenever an entity enters this node.
From within the Processes window, place a Decide Step within this new process. Set the Decide Type property to
‘ConditionBased’ and set the Expression to ‘ModelEntity.Processed == 0’. This checks to see if the entity is just arriving
to the node and it not yet processed or if the entity is leaving the system and just finished processing at a Server.
In the True segment leaving the Decide step, place a Route step. Set the Routing Group Name property to the
Routing Group element that was created earlier. Set the Selection Goal to ‘Smallest Value’ and and the Selection
Expression to ‘Candidate.Node.AssociatedStationLoad’. This step will set the destination node for the entity to
one of the three possible Servers, based on the number of entities currently en-route and processing at the
various stations ( AssociatedStationLoad).
After the Route Step, place an UnBatch step (the defaults are fine).
In the Member segment leaving the UnBatch Step, place an Insert Step. Set the Queue State Name property to
‘WaitingArea.Queue’, the storage queue created earlier.
After the Insert Step, place an Assign Step. Set ’ModelEntity.Movement.X’ to ‘1000’.
Back in the False segment of the first Decide Step, place a Search step. Set Collection Type to ‘QueueState’. Set
Queue State Name to ‘WaitingArea.Queue’. And set Match Condition to ‘ModelEntity.TimeCreated ==
Candidate.Entity.TimeCreated’. This searches the Waiting Area queue and finds the entity that was originally
created at the same time as this entity. Click on the Advanced Options within the Search step and specify the
Save Index Found property as ‘WhichOne’ to save which token in the storage was found in the Search.
In the Original segment leaving the Search step, place a Batch step. Use the BatchLogic element created
earlier and set the Category property to ‘Parent’.
After this step, place a SetNode step. Set Destination Type to ‘Specific’ and the Node Name to ‘Input@Exit’ (or
Input@Sink). This will route entities that have already been processed, out of the system and ensure that they
do not follow a path back to the Servers.
354 / 1277
do not follow a path back to the Servers.
In the Found segment of the Search step, place a Remove step. Set the Queue State Name to
‘WaitingArea.Queue’. Under Advanced Options, set the Removal Type to ‘AtRankIndex’ and Rank Index to
‘WhichOne’. This will remove the partner entity from the queue (after it’s been found by the Search step).
In the Removed segment of the Remove step, place a Batch step. Use the BatchLogic element created earlier
and set the Category property to ‘Member’. This will batch up this removed entity as a member to its parent
partner that searched for it.
Animate the Waiting Area Storage Queue:
And finally, animate the Storage queue within the Facility window. Click on the Detached Queue button from within the
Animation ribbon. Draw the queue within the Facility window. Set the Queue State within the properties window to
‘WaitingArea.Queue’.
See Also:
Help topics for Storage, Batch Logic, Routing Group, Insert Step, Remove Step, Search Step, Batch Step, Route Step,
SetNode step.
355 / 1277
Simio Reference Guide
UsingButtonsToAffectSystem - SimBit
Problem:
I want to use external buttons to control the arrival rate of my system and to Stop/Start the conveyor within my system.
Categories:
Arrival Logic
Key Concepts:
Assign Step, Button, Conveyor, Decide Step, DesiredSpeed, Event, Math.Max(), Maximum, Process Triggering Event, Real
State Variable
Assumptions:
The initial arrival rate is set to 0.5 (unit/minute), each time the arrival rate is increased/decreased, the rate changes
(increases/decreases) 0.05 (unit/minute). The minimum arrival rate should be 0.05 (unit/minute), it means that when the
arrival rate is 0.05 (unit/minute), it cannot be decreased further. There is no upper limit for increasing the arrival rate.
The initial speed of the conveyor is set to 0.5 (meters/sec). To start the conveyor again when it’s stopped, the resume speed
is set to be the speed just before it’s stopped. We only control the Stop/Start for Conveyor1 which connects the Server to
the Sink.
Technical Approach:
Four events will be created: StopConveyor, StartConveyor, IncreaseRate, DecreaseRate. Those four events will trigger four
processes which will implement corresponding actions. Also, we create four buttons by using Animation tool, each one of
these buttons is logically connected to an event which has the corresponding function with the Button.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink from the Standard Library into the Facility Window. Connect them with Conveyors.
Conveyor2 connects Source and Server, Conveyor1 connects Server and Sink. Set the Desired Speed for both the
Conveyors to .5.
Creating Discrete State Variables
Open the Definitions Window and select the States panel, add two Discrete State Variables with Names ‘Rate’ and
‘ResumeSpeed’.
‘Rate’ will track the arrival rate of the Source; its Initial State Value is ‘0.5’.
'ResumeSpeed’ will save the speed of Conveyor1 before it’s stopped, and resume it with the saved speed. Its Initial
State Value is ‘0’.
Set the Interarrival Time of the Source to ‘1/Rate’.
Creating Events
Open the Definitions Window and select the Events panel.
Create four events with names: StopConveyor, StartConveyor, IncreaseRate, DecreaseRate.
Generating Processes Corresponding to Events
Open the Processes Window; add four processes by clicking on the Create Processes ribbon.
Name the first process ‘Decrease’. Then go to the Properties Window, set the Triggering Event to ‘StartConveyor’. Add
an Assign step to this process, within this Assign step, set the State Variable Name to ‘Conveyor1.DesiredSpeed’, the
New Value is ‘ResumeSpeed’.
Name the second process ‘Increase’. Then go to the Properties Window, set the Triggering Event to ‘StopConveyor’.
Add two Assign steps to this process. For the first Assign, set the State Variable Name to ‘ResumeSpeed’, the New
Value is ‘Conveyor1.DesiredSpeed’. This step will save the current speed of Conveyor1 to the state variable
‘ResumeSpeed’. For the second Assign, set the State Variable Name to ‘Conveyor1.DesiredSpeed’, the New Value is ‘0’.
This will stop Conveyor1.
356 / 1277
Name the third process ‘RateDown’. Then go to the Properties Window, set the Triggering Event to ‘DecreaseRate’.
Add an Assign step to this process. For this Assign, set the State Variable Name to ‘Rate’, the New Value is
‘Math.Max(.05, Rate-0.05)’.This will ensure that the arrival rate will not be decreased below 0.05 (unit/minute).
Name the fourth process ‘RateUp’. Then go to the Properties Window, set the Triggering Event to ‘IncreaseRate’. Add
an Assign step to this process; then set the State Variable Name to ‘Rate’, the New Value is ‘Rate+.05’.
Creating Buttons
Click on Animation ribbon under the Facility Tools, choose Button, and create four Buttons.
Put two of them near the Source. For the first Button, input ‘Increase Interarrival Rate’ for the Button Text, set the
Event Name to ‘IncreaseRate’. For the second Button, input ‘Decrease Interarrival Rate’ for the Button Text, set the
Event Name to ‘DecreaseRate’.
Put the other two Buttons near Conveyor1 (which connects Server and Sink). For the first Button, input ‘Stop
Conveyor’ for the Button Text, set the Event Name to ‘StopConveyor’. For the second Button, input ‘Start Conveyor’ for
the Button Text, set the Event Name to ‘StartConveyor’.
Embellishments:
We can add some animation to show the current Arrival Rate of the Source while we’re running this model. Choose Status
Label from Animation, Set the Expression to ‘Rate’.
357 / 1277
Simio Reference Guide
UsingRelationalTables - SimBit
Problem:
I have data that exists in different tables and the tables are linked together with Foreign Keys, as in a relational database. I
would like an Entity to reference data from these tables.
Categories:
Data Tables
Key Concepts:
Arrival Table, Expression Property, Foreign Key, Key, ModelEntity, Numeric Property, Picture, Relational Table, Selection
Weight, State Assignments, String Property
Assumptions:
To easily witness that the entity is reading the correct information from the tables from within the Facility window, only red
Entities will visit the TireService, blue Entities will visit the OilService and green Entities will visit the BrakeService.
Technical Approach:
Three Data Tables are created that are all linked together with Foreign Keys so that an Entity can reference information
from all three tables easily. The Source gets entity Arrival Times from the Arrivals table and each Server gets its Processing
Time from the ServiceTimes table. The Entity’s color (symbol) is determined from the Picture table.
Details for Building the Model:
Simple System Setup
Add a Source, a Sink and three Servers to the Facility window. Connect the Source to each of the Servers and each
Server to the Sink with Paths. Also, drag a ModelEntity object into the window. Rename the Source 'Entrance', the
Sink 'Exit' and the three Servers 'TireService', 'OilService' and 'BrakeService', respectively.
Setting up the Data Tables
To add Data Tables, click on the Data tab and select the Tables panel.
Add a Data Table named ‘Picture’ with the following Properties and in the following order:
( Integer) PictureIndex : 0, 1, 2
( String) Color: Green, Red, Blue
Make this column the Primary Key to this table by clicking the Set Column as Key icon in the ribbon.
Add a Data Table named ‘ServiceTimes’ with the following Properties and in the following order:
( String) TypeOfService : Brakes, Oil, Tires
Make this column the Primary Key to this table by clicking the Set Column as Key icon in the ribbon.
( Expression) ServiceTime: Random.Triangular(1.5, 2, 2.5), 1 , Random.Triangular(.5, 1, 1.2)
( Foreign Key) CarColor: Green, Blue, Red
To add this column, click the Foreign Key icon in the ribbon and then rename the property to ‘CarColor’.
Set the TableKey property to ‘Picture.Color’.
Add a Data Table named ‘Arrivals’ with the following Properties and in the following order:
( Real) ArrivalTime : 0, .25, .5, .75, 1
Make this column the Primary Key to this table by clicking the Set Column as Key icon in the ribbon.
( Foreign Key) TypeOfService: Brakes, Tires, Oil, Oil, Tires
To add this column, click the Foreign Key icon in the ribbon and then rename the property to
‘TypeOfService’. Set the TableKey property to ‘ServiceTimes.TypeOfService’.
Changing Object Properties
In the Source:
Change the Arrival Logic Arrival Mode property of the Source to ‘Arrival Table’ and the Arrival Time Property to
‘Arrivals. ArrivalTime’.
358 / 1277
Change the Arrival Logic Maximum Arrivals to '5'.
Within the State Assignments section, open the Before Exiting repeating property editor and assign the State
Variable Name to ‘ModelEntity.Picture’ and the New Value to ‘Picture.PictureIndex’
In each Server:
Change the Processing Time property to ‘ServiceTimes.ServiceTime’
In each Path:
Change the Selection Weight to:
‘ModelEntity.Picture == 1’ for the Path linking Entrance to TireService
‘ModelEntity.Picture == 2’ for the Path linking Entrance to OilService
‘ModelEntity.Picture == 0’ for the Path linking Entrance to BrakeService
Adding Additional Symbols
In the Facility window, with the ModelEntity selected, click the Add Additional Symbol icon in the ribbon twice to
add two additional symbols for this object. Keep the color of symbol 0 as green, change symbol 1 to red and symbol
2 to blue. For additional details on this process, see the Adding Additional Symbols Help page.
359 / 1277
Simio Reference Guide
UsingRelationalTablesToDefineNodeLists -
SimBit
Problem:
I want to model a system where the entities being processed have different routings based on type, and each job step in a
routing is performed at a work center area that consists of two or more identical servers. It is desired that all product mix,
job routing, lists of possible server input nodes for each job entering a work center area, and operation data is defined in a
set of relational data tables.
Categories:
Data Tables, Decision Logic -- Processing, Sequence Tables
Key Concepts:
By Sequence, Data Table, Entity Destination Type, RandomRow, Sequence Table, Server, Source, Table Row Referencing
Assumptions:
The modeled system has four possible work center areas where entities are processed. An entity will enter the system and
visit one or more of the work centers in a sequence that is dependent on the job type. Each work center area consists of two
identical servers, either of which can be used to process a job. Not all of the work centers have to be visited and a work
center may be visited more than once.
Technical Approach:
The product mix, job routing, lists of possible server input nodes for each job entering a work center, and operation data is
defined in a set of relational data tables using the design shown in Figure 1.
360 / 1277
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
Source object – Specify the Entity Type property as ‘JobTypes.JobType’. Go to the Table Row Referencing ->Before
Creating Entities properties, and specify the Table Name as ‘JobTypes’ and the Row Number as
‘JobTypes.MixPercentage.RandomRow’. The Source will then randomly create entities of the types specified in the
JobTypes table using the specified mix percentages.
For Each ‘Output’ TransferNode object – Specify the Entity Destination Type as ‘By Sequence’. Then, when an entity
exits the Source or any of the Server objects, it will set its next destination based on the JobRoutings sequence table.
For Each Server object – Specify the Processing Time as ‘JobRoutings.ProcessingTime’. Go to the Buffer Logic
properties and set the input and output buffer capacities to zero.
For Each Standalone TransferNode Representing a Work Center Entry Point – Go to the Routing Logic
properties and specify the Entity Destination Type property as ‘Select From List’, the Node List Name property as
‘NodeListMembers.NodeName’, and the Selection Condition property as ‘NodeListMembers.Exclude == False’.
Embellishments:
Experiment with different product mix, job routing, and operation data in the relational data tables. Trying to add more
servers to the work center areas, or using the Exclude column in the ‘NodeListMembers’ data table to remove a server as a
choice for a particular job step at a work center.
See also:
ServersUsingTaskSequencesWithDataTables_JobShop.spfx
361 / 1277
Simio Reference Guide
UsingRelationalTablesToDefineTaskResourceLists
- SimBit
Problem:
I want to model a server where the entity processing is a task sequence, and where all operation data is defined in a set of
relational data tables including lists of possible resources that can perform specific tasks.
Categories:
MultiTask Server, Data Tables, Resources
Key Concepts:
Server, Auto-Set Table Row Reference, Data Table, Process Type, Task Sequence, Secondary Resources
Assumptions:
The modeled system is a flow line that consists of two server locations visited in a fixed sequence. Entities enter the system
at the front of the line and then are processed through the two servers before finishing at a sink.
Technical Approach:
The operation data for each server, including lists of possible resources that can perform specific tasks, is defined in a set of
relational data tables using the design shown in Figure 1.
362 / 1277
Mapping the Table Data to the Objects in the Facility Window
Go to the Facility window and do the following:
Source object – Make sure the Entity Type property is specified as the model entity type that you placed in the
model.
For Each Server object – Specify the Process Type as ‘Task Sequence’. Then, right-click on the Processing Tasks
repeat group and set a reference to the ‘ProcessingTasks’ table. This indicates that the ProcessingTasks table will be
used as the referenced data source for getting processing task information. Finally, in the Process Logic->Other Task
Sequence Options properties, specify the Task Resources Referenced Table Name as the ‘TaskResources’ table. This
indicates that specific table will be used as the referenced data source for getting task resource requirements.
For Each Server object – Open the Processing Tasks repeat group. Map the columns from the ProcessingTasks and
TaskResources tables to the appropriate corresponding properties in the repeat group (refer to the SimBit if
necessary as a guide).
In the Servers table, make sure that the Auto-set Table Row Reference property for the ServerName column is set to
‘True’.
Embellishments:
Experiment with different server operation data in the relational data tables.
See also:
ServersUsingTaskSequencesWithDataTables_FlowLine.spfx
363 / 1277
Simio Reference Guide
UsingTheStipulateStepForNodeLists - SimBit
This SimBit project includes three models that demonstrates the ways to allocate entities to multiple Servers using a either
the Gantt drag and drop node list requirements / routing dependencies or Stipulate steps. Models included in this SimBit:
1. ServerProcessesFIFO – Demonstrates allocation of fixed number of entities to one of multiple Servers using a node
list and simple Preferred Order rule.
2. ServerProcessesFromDependenciesInGantt – Demonstrates forced sequence of entities to one of multiple Servers
based on drag and drop method of node list requirements and routing dependencies in the Resource Plan Gantt
( RPS ( Enterprise) version only).
3. ServerProcessesFromStipulateStep – Demonstrates forced sequence of entities to one of multiple Servers based
on Stipulate steps within the Processes window.
Model 1: ServerSelectedFromNodeList
Problem:
I wish to have a fixed number of entities transferred into one of a group of Servers selected from a node list.
Categories:
Arrival Logic, Data Tables, Decision Logic -- Processing, RPS ( Enterprise)
Key Concepts:
Arrival Table, NodeList, Server
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table. Entities
will select the Server to transfer into based upon a node list and selection rule.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model. A node list and selection goal will be
used to determine the routing.
Details for Building the Model:
Simple System Setup
Place a Source, three Servers and a Sink object into the Facility window. Connect the Source to all three Servers and
all Servers to the Sink with paths and change the Allow Passing property on the paths between the Source and
Servers to ‘False’ to graphically see the entities each enter the Server area.
Place 4 ModelEntity objects from the Project Library and rename them ‘Green’, ‘Blue’, ‘Red’ and ‘Yellow’. Change the
color of each to match accordingly. Change the Display Name for each ModelEntity object to ‘Table.OrderOfArrival’.
This will show the associated column value for each entity within the Resource Plan Gantt.
Data Table Structure
Go to the Data tab and add a data table.
First, add an Object Reference type property of type Entity. Change the Name to ‘EntityType’ and enter the names of
the entities in the following order from the entity list – Blue, Green, Red, and Yellow.
Add a DateTime Standard Property that will be used as the arrival time of the entity. Change the Name to
‘ArrivalTime’ and set the arrival time for each of the 4 rows (entities) to the same start of simulation time value
(9/9/2016 12:00:00 AM in SimBit). This will cause all entities to be generated at the same time.
Add a Standard Property of type Color to the table and select a matching color for each entity type. This column is
used within the Resource Plan Gantt.
Add a fourth column to the table of type String. Name the column ‘OrderName’ and type in an associated name for
each entity – in this case BlueOrder, GreenOrder, RedOrder and YellowOrder.
Create the Node List for the Servers
Go to the Definitions tab, List panel and add a node list with the Name ‘ServerNodeList’. Add ‘Input@Server1’,
‘Input@Server2’ and ‘Input@Server3’ to the list in that order. 364 / 1277
‘Input@Server2’ and ‘Input@Server3’ to the list in that order.
Configure the Facility Window Objects
In the Facility window, change the following Source properties. Set the Entity Type to ‘Table1.EntityType’. Change the
Arrival Mode to ‘Arrival Table’ and the Arrival Time Property to ‘Table1.ArrivalTime’.
Within the output node of the Source, change the Entity Destination Type to ‘Select From List’ and the Node List
Name to ‘ServerNodeList’. Leave the Selection Goal as ‘Preferred Order’ so that the entities select Server1 if possible.
Within each the Servers, under the Advanced Options section, change Log Resource Usage to ‘True’ so that the usage
of the Servers will be tracked for the Resource Gantt.
Running the Model in Planning Tab:
For Simio RPS ( Enterprise) users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on
the Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the order of entity
processing is FIFO, or BlueOrder – GreenOrder – RedOrder – YellowOrder, which is the same order in which the entities
were created within Table1.
Model 2: ServerSelectedFromDependenciesInGantt
Problem:
I wish to have a fixed number of entities process through a group of Servers based on the order in which I specify in the
Simio RPS ( Enterprise) Edition – Resource Plan Gantt using drag and drop for node list routing dependencies and
requirements.
Categories:
Arrival Logic, Data Tables, Decision Logic -- Processing, RPS ( Enterprise)
Key Concepts:
Arrival Table, NodeList, Node List Routing Dependencies, Node List Requirements, Server
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table. *
IMPORTANT NOTE * - users will only see the order of entity processing interactively through the Facility Model view in the
Planning tab and NOT through the Facility window, as drag and drop Node List Routing Dependencies and Node List
Requirements are only used for planning mode.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model. A node list and selection goal will be
used to determine the routing although drag and drop will be used to modify such routing in the planning mode.
Details for Building the Model:
Building the Base Model
Follow the same steps as shown in Model 1: ServerSelectedFromNodeList above.
Running the Model in Planning Tab:
For Simio RPS ( Enterprise) users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on
the Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the order of entity
processing is FIFO, or BlueOrder – GreenOrder – RedOrder – YellowOrder, which is the same order in which the entities
were created within Table1. Now, click on the RedOrder entity and drag and drop it to Server2. Move the YellowOrder
entity to Server3 using the same method of drag and drop. Click on the GreenOrder and move it to be before the
BlueOrder at Server1. Note the Node List Routing Dependencies and Node List Requirements that are created after these
steps are complete.
365 / 1277
Model 3: ServerSelectedFromStipulateStep
Problem:
I wish to have a fixed number of entities process through a group of Servers based on the order in which I specify using the
Stipulate steps in the Processes window for node list requirements and node list routing dependencies.
Categories:
Arrival Logic, Data Tables, Decision Logic -- Processing, RPS ( Enterprise)
Key Concepts:
Arrival Table, NodeList, OnRun Initialized Process, Node List Routing Dependencies, Node List Requirements, Server,
Stipulate Step
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table.
Through the use of the Stipulate steps, the Server that is selected from the node list can be controlled.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model. A node list and selection goal will be
used to determine the routing. A string value must be associated with each entity to specify the exact entity information in
the Stipulate steps.
Details for Building the Model:
Building the Base Model
Follow the same steps as shown in Model 1: ServerSelectedFromNodeList above.
Adding the Stipulate Steps
Within the Processes window, use the Select Process button to select the OnRunInitializedProcess. Within this
process, place three (3) Stipulate steps.
Within the first Stipulate step, leave the Stipulation Type to ‘NodeListRoutingDependency’. Specify the Candidate
Entity as ‘”BlueOrder”’, the Node List as ‘ServerNodeList’ and the Entity to Follow as ‘”GreenOrder”’. Change the Prior
Usage Count to ‘1’. This will cause the Blue entity to follow the Green entity.
Within the second Stipulate step, change the Stipulation Type to ‘NodeListRequirement’. Specify the Candidate Entity
as ‘”RedOrder”’, the Node List as ‘ServerNodeList’ and the Required Node as ‘Input@Server2’. This will cause the Red
entity to always select Server2 from the list.
Within the third Stipulate step, change the Stipulation Type to ‘NodeListRequirement’. Specify the Candidate Entity as
‘”YellowOrder”’, the Node List as ‘ServerNodeList’ and the Required Node as ‘Input@Server3’. This will cause the
Yellow entity to always select Server3 from the list.
Running the Model in Planning Tab:
For Enterprise users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on the
366 / 1277
For Enterprise users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on the
Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the entities are processed as
follows - Green then Blue at Server1, Red at Server2 and Yellow at Server3, which is the logic defined within the Stipulate
steps.
See Also:
UsingTheStipulateStepForResourceAllocation.spfx
367 / 1277
Simio Reference Guide
UsingtheStipulateStepForResourceAllocation
- SimBit
This SimBit project includes three models that demonstrates the ways to allocate entities through a Server using a either
the Gantt drag and drop resource dependencies or Stipulate steps. Models included in this SimBit:
1. ServerProcessesFIFO – Demonstrates allocation of fixed number of entities through Server based on standard FIFO
rule.
2. ServerProcessesFromDependenciesInGantt – Demonstrates forced sequence of entities through Server based on
drag and drop method of resource dependencies in the Resource Plan Gantt ( RPS ( Enterprise) version only).
3. ServerProcessesFromStipulateStep – Demonstrates forced sequence of entities through Server based on Stipulate
steps within the Processes window.
Model 1: ServerProcessesFIFO
Problem:
I wish to have a fixed number of entities process through a Server first in first out ( FIFO) based on the order in which they
arrive to the system.
Categories:
Arrival Logic, Data Tables, RPS ( Enterprise)
Key Concepts:
Arrival Table, Server
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table. Entities
will flow through the Server in the order in which they are created.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model.
Details for Building the Model:
Simple System Setup
Place the Source, Server and Sink objects into the Facility window. Connect the objects with paths and change the
Allow Passing property on the path between the Source and Server to ‘False’ to graphically see the entities each enter
the Server area.
Place 4 ModelEntity objects from the Project Library and rename them ‘Green’, ‘Blue’, ‘Red’ and ‘Yellow’. Change the
color of each to match accordingly.
Data Table Structure
Go to the Data tab and add a data table.
First, add an Object Reference type property of type Entity. Change the Name to ‘EntityType’ and enter the names of
the entities in the following order from the entity list – Blue, Green, Red, and Yellow.
Add a DateTime Standard Property that will be used as the arrival time of the entity. Change the Name to
‘ArrivalTime’ and set the arrival time for each of the 4 rows (entities) to the same start of simulation time value
(9/9/2016 12:00:00 AM in SimBit). This will cause all entities to be generated at the same time.
Add a Standard Property of type Color to the table and select a matching color for each entity type. This column is
used within the Resource Plan Gantt.
Configure the Facility Window Objects
In the Facility window, change the following Source properties. Set the Entity Type to ‘Table1.EntityType’. Change the
Arrival Mode to ‘Arrival Table’ and the Arrival Time Property to ‘Table1.ArrivalTime’.
368 / 1277
Within the Server, under the Advanced Options section, change Log Resource Usage to ‘True’ so that the usage of the
Server will be tracked for the Resource Gantt.
Running the Model in Planning Tab:
For Enterprise users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on the
Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the order of entity
processing is FIFO, or Blue – Green – Red – Yellow, which is the same order in which the entities were created within
Table1.
Model 2: ServerProcessesFromDependenciesInGantt
Problem:
I wish to have a fixed number of entities process through a Server based on the order in which I specify in the RPS
( Enterprise) Edition – Resource Plan Gantt using drag and drop for resource allocation dependencies.
Categories:
Arrival Logic, Data Tables, RPS ( Enterprise)
Key Concepts:
Arrival Table, Resource Allocation Dependencies, Server
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table. *
IMPORTANT NOTE * - users will only see the order of entity processing interactively through the Facility Model view in the
Planning tab and NOT through the Facility window, as drag and drop Resource Allocation Dependencies are only used for
planning mode.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model.
Details for Building the Model:
Building the Base Model
Follow the same steps as shown in Model 1: ServerProcessesFIFO above.
Running the Model in Planning Tab:
For Enterprise users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on the
Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the order of entity
processing is FIFO, or Blue – Green – Red – Yellow, which is the same order in which the entities were created within
Table1. Now, click on the Red entity and drag and drop it ahead of the Blue and Green. Move the Blue entity after the
Green by using the same method of drag and drop. Note the Resource Allocation Dependencies that are created after
these steps are complete.
Model 3: ServerProcessesFromStipulateStep
Problem:
I wish to have a fixed number of entities process through a Server based on the order in which I specify using the Stipulate
369 / 1277
I wish to have a fixed number of entities process through a Server based on the order in which I specify using the Stipulate
steps in the Processes window for resource allocation dependencies.
Categories:
Arrival Logic, Data Tables, RPS ( Enterprise)
Key Concepts:
Arrival Table, OnRun Initialized Process, Resource Allocation Dependencies, Server, Stipulate Step
Assumptions:
Four entities will be created at the start of the simulation and enter into the system based on the order in the table.
Through the use of the Stipulate steps, the order in which the entities are processed at the Server can be controlled.
Technical Approach:
A table will be used to create the entities at a specific time in the simulation model. A string value must be associated with
each entity to specify the exact entity information in the Stipulate steps.
Details for Building the Model:
Building the Base Model
Follow the same steps as shown in Model 1: ServerProcessesFIFO above.
Within the Data tab, add another column to the table of type String. Name the column ‘OrderOfArrival’ and type in
an associated name for each entity – in this case Order1, Order2, Order3 and Order4. These values will be referenced
in the Stipulate steps.
Within the Facility window, change the Display Name for each ModelEntity object to ‘Table.OrderOfArrival’. This will
show the associated column value for each entity within the Resource Plan Gantt.
Adding the Stipulate Steps
Within the Processes window, use the Select Process button to select the OnRunInitializedProcess. Within this
process, place an Execute step. Enter the Process Name as ‘Process1’.
Use the Create Process button to create a new process named ‘Process1’. Place three (3) Stipulate steps within this
process.
Within the first Stipulate step, change the Stipulation Type to ‘ResourceAllocationDependency’. Specify the Candidate
Entity as ‘”Order2”’, the Resource or List as ‘Server1’ and the Entity to Follow as ‘”Order3”’. Change the Prior Usage
Count to ‘1’. This will cause the Green entity to follow the Red entity.
Within the second Stipulate step, change the Stipulation Type to ‘ResourceAllocationDependency’. Specify the
Candidate Entity as ‘”Order1”’, the Resource or List as ‘Server1’ and the Entity to Follow as ‘”Order2”’. Change the Prior
Usage Count to ‘1’. This will cause the Blue entity to follow the Green entity.
Within the third Stipulate step, change the Stipulation Type to ‘ResourceAllocationDependency’. Specify the
Candidate Entity as ‘”Order4”’, the Resource or List as ‘Server1’ and the Entity to Follow as ‘”Order1”’. Change the Prior
Usage Count to ‘1’. This will cause the Yellow entity to follow the Blue entity.
Running the Model in Planning Tab:
For Enterprise users, go to the Planning tab and select the Resource Plan view. Press the Create Plan button on the
Operational Planning ribbon. Zoom in using the + on the Gantt ribbon as necessary. Note that the order of entity
processing is FIFO, or Red – Green – Blue – Yellow, which is the order defined within the Stipulate steps.
See Also:
UsingTheStipulateStepForNodeLists.spfx
370 / 1277
Simio Reference Guide
VehicleDoingSimultaneousLoading - SimBit
Problem:
Standard Vehicle/Worker behavior is to sequentially load items to be transported. But in some cases, like a bus with
multiple doors, you may want to load several entities concurrently. This model illustrates three entity types waiting to be
picked up by a vehicle at the same time. Each entity type has a different load time and the vehicle departs after the last
entity finishes loading.
Categories:
Add-On Process Logic, Vehicles
Key Concepts:
Add-On Process, Bidirectional Path, Simultaneous Load, Pickup Step, Search Step, Vehicle, Wait Step
Technical Approach:
The Vehicle event ‘Entered Node’ contains custom add-on process logic. When the Vehicle enters the TransferNode named
‘TransferNode1’, a search is performed for all entities that have arrived and are waiting at the RidePickupQueue of the
Vehicle. The Vehicle has a ride capacity of 10. The load time is defined in the Pickup step for the different entity types and
the vehicle waits until all of the entities that are waiting to ride are picked up. The entities are then transported to the input
node of the Sink object and dropped off.
Details for Building the Model:
Facility Window Setup
Add three Sources, a Transfer Node, a Sink, and a Vehicle from the Standard Library. Connect each Source to the
TransferNode using Connectors. Then connect the TransferNode to the Sink with a Bidirectional Path.
Place three ModelEntity instances in the Facility window next to each Source.
Name the entity instances ‘EnitityType1’, ‘EntityType2’, and ‘EntityType3’.
In the first Source, change the Entity Type to ‘EntityType1’ then set the other Sources to their corresponding Entity
Types.
Set the Maximum Arrivals under the Stopping Conditions Properties to ‘1’ on all the Sources.
In the Properties of the TransferNode that has already been placed, change the Entity Destination Type to ‘Specific’
and the Node Name to ‘Input@Sink1’. Under the Transport Logic Properties, change Ride On Transporter to ‘True’.
Specify the Vehicle’s name for the Transporter Name.
Select the Vehicle object, change the Initial Ride Capacity to ‘10’. Change the Initial Desired Speed to ‘0.1’ and Select
‘Input@Sink1’ as the Vehicle’s Initial Node (Home).
Defining the Process Logic for the Vehicle
Within the Vehicle object, under the Add-on Process Triggers Properties, double right click on the words Entered
Node. A new process will be automatically created.
Select the Processes tab to open the Processes window. A new empty process is now available to edit. Place the
Decide step and change the Condition Or Probability to ‘Vehicle.RideStation.Capacity.Remaining > 0 &&
Vehicle.CurrentNode.RidePickupQueue > 0’.
Place an Assign step to assign the State Variable Name ‘LoadingTime.Rate’ to have a New Value of ‘1’.
Place a Search step after the Assign step and change the Collection Type to ‘QueueState’ and the Queue State Name
to ‘Vehicle.CurrentNode.RidePickupQueue’. This will search through the RidePickupQueue at the TransferNode.
Change the Limit under Advanced Options to the expression ‘Vehicle.RideStation.Capacity.Remaining’.
Place a Pickup step under the Search step so that all the entities that were found are picked up. Change the Node
Name in the Wait step to ‘Vehicle.CurrentNode’ and the Load Time to ‘Math.If( Entity.Is.EntityType1, 8,
Entity.Is.EntityType2, 10, 2)’. And change the Units to ‘Minutes’. This expression defines how long the load time of
each Entity Type is. If the Entity is EntityType1, then it’s load time is 8 minutes. If it is EntityType2, it’s load time is
defined as 10 minutes and any other Entity Type (in this case it’s EntityType3) will have a load time of 2 minutes.
Change the Transporter Type to ‘SpecificObject’ and the Transporter Object will automatically be defined as ‘Vehicle’.
A Wait step is placed after the Search step for the original entity that was used for the Search. Change the Event
Name under the Basic Logic Properties to the expression ‘Vehicle.RideStation.Entered’. The Event Condition should
be set to ‘Vehicle.RideStation.Capacity.Remaining == 0 || ( Source1.OutputBuffer.Contents +
371 / 1277
be set to ‘Vehicle.RideStation.Capacity.Remaining == 0 || ( Source1.OutputBuffer.Contents +
Source2.OutputBuffer.Contents+Source3.OutputBuffer.Contents) == 0’. This says the Vehicle will wait until the event
called ‘Vehicle.RideStation.Enter’ occurs and the additional Event Condition is met where there aren’t any entities in
the RideStation or there aren’t any entities in the output buffer queues of the Sources.
Finally, place an Assign step after the Wait step. Assign the State Variable Name ‘LoadingTime.Rate’ a New Value of
‘0’.
372 / 1277
Simio Reference Guide
VehicleFinishesAndParksWhenOffShift -
SimBit
Problem:
I want a Transporter to follow the same Work Schedule as a Server in my system. If the Server goes Off Shift when the
Transporter is the middle of traveling on a link, the Transporter should finish traveling to the end, park and stop working.
When the Server goes back On Shift, the Transporter will begin working where it left off.
Categories:
Vehicles
Key Concepts:
Add-On Process, Off Shift, On Off Shift, On On Shift, On Shift, Real State Variable, Ride on Transporter, Schedules, Vehicle,
Wait Step, Fire Step
Assumptions:
The Vehicle and Server will follow the same WorkSchedule. If the vehicle goes Off Shift while transporting an entity, it will
continue and drop off the entity before parking. If the vehicle goes Off Shift while moving to pick up an entity, it will not
perform the pickup until it is On Shift.
Technical Approach:
When a vehicle goes off shift, it will automatically drop off and/or pick up any entities that it is scheduled to drop off / pick
up. Because we would like our vehicle to stop at a node when it is off shift, we will use Add-On Process Logic at the node
where it may pick up to ensure that the vehicle stops until the off shift period has ended. This will be done with a Decide
step condition and Wait / Fire steps.
Details for Building the Model:
Simple System Setup
Add a Source, a Server and a Sink to the Facility Window.
Connect the objects together with Paths. Ensure that the Type property of the path from the Server to the Sink is set
to ‘Bi-directional’ so the vehicle can travel back and forth.
In order to slow down the entity arrival to best view the vehicle’s behavior, change the Interarrival Time of the Source
object to ‘Random.Exponential(4)’ minutes.
Adding the Vehicle
Add a vehicle object from the Standard Library with the Name ‘Vehicle1’.
Select the Output Node of the Server and set the Ride On Transporter property to ‘True’, the Transporter Type to
‘Specific’ and then select your Vehicle for the Transporter Name property.
In order to slow down the animation to best view the vehicle’s behavior, change the Desired Speed property of the
Vehicle to ‘0.04’ (meters per second).
Change the Initial Ride Capacity to ‘Infinity’ and set the Initial Node (Home) property of the Vehicle to
‘Output@Server1’.
Creating a Work Schedule
Go to the Data Window and click on the Schedules panel. Click the Work Schedule icon in the Schedule ribbon to
add a new Work Schedule. Change the Name to ‘Schedule1’ and set the Days to ‘1’.
Add a Day Pattern with the Name ‘DayPattern1’ to include the following entries: 8:00 AM – 8:15 AM, 8:30 AM – 8:45
AM and 9:00 AM – 12:00 PM. All of these rows should have the Value of ‘1’ indicating a capacity of one or on shift.
The times when there aren’t any values are assumed to be off shift.
Under Work Schedules, select ‘DayPattern1’ for day 1.
Adding the Schedule to the Server and Vehicle
In the Facility window, select the Server object and set the Capacity Type property to ‘WorkSchedule’. Select the work
373 / 1277
schedule that was just created for the Work Schedule property.
Do the same for the Vehicle object. Under the Process Logic section of properties, change the Capacity Type to
‘WorkSchedule’ and add the new work schedule that was created.
Adding Vehicle Off Shift Logic
Within the Definitions window, States panel, add a new Real state variable with the Name ‘OffShift’. We will assign
this variable to ‘1’ when the vehicle goes off shift and back to ‘0’ when on shift.
Within the Definitions window, Events panel, add a new event with the Name ‘Event1’. This will be used within the
Wait/Fire steps placed shortly.
Within the Facility window, highlight the Vehicle and add On Shift and Off Shift add-on processes, named
‘Vehicle1_OnShift’ and ‘Vehicle1_OffShift’, respectively.
Within the Processes window, ‘Vehicle1_OffShift’ process, add an Assign step and specify the State Variable Name
‘OffShift’ to the New Value of ‘1’.
Within the Processes window, ‘Vehicle1_OnShift' process, add an Assign step and specify the State Variable Name
‘OffShift’ to the New Value of ‘0’.
Within the Facility window, highlight the Vehicle and add Entered Node add-on processes, named
‘Vehicle1_EnteredNode’. Within this process, we will evaluate if the vehicle is off shift and if so, will wait at the node.
Within the Vehicle1_EnteredNode process, place a Decide step. Change the Decide Type to ‘ConditionBased’ and
enter the Expression ‘OffShift==1&&Is.Vehicle&&Vehicle.NumberRiders==0’. From the True exit of the Decide, place
a Wait step, with the Event Name of ‘Event1’. Looking at the condition specified, we are checking to see if the vehicle
is off shift ( OffShift==1) and the associated object is the vehicle ( Is.Vehicle) as opposed to the entity itself and the
vehicle has no riders ( Vehicle.NumberRiders==0), then the token must wait at the node for Event1 to be fired. Thus, if
the vehicle is off shift but has riders, the vehicle will not wait, but will drop off its riders and by default will park.
Within the ‘Vehicle1_OnShift’ process, after the Assign step, place a Fire step, with the Event Name of ‘Event1’. Here,
we will fire Event1 when the off shift period is over (thus releasing the vehicle waiting in the above logic, if
necessary).
Enhancing the Animation
If you’d like the Server to appear different when it is Idle vs. Busy vs. OffShift, you need to select the Server object in
the Facility Window and click on the Add Additional Symbol icon in the Ribbon. Do this twice so there are now three
symbols associated with this object. Change which symbol is ‘Active’ with the Active Symbol icon. Once the symbol is
active, you can change the appearance of that symbol.
The Current Symbol Index property of the Server controls which symbol is displayed during the run. The value of this
property is used in the symbol index (the numbers listed next to the symbols in the Active Symbol drop down). In this
example, the following expression is used so symbol 1 is displayed when the Server is On Shift (capacity = 1) but not
busy, symbol 2 is displayed when the Server is On Shift and Busy and symbol 0 is displayed when the server goes Off
Shift (capacity = 0): ( Server1.Capacity.Allocated + 1) * Server1.Capacity
• Changing the appearance of the Vehicle during the run is done in a similar fashion. This example has two symbols
for the vehicle, one that is Blue and one that is Red. The Current Symbol Index of the Vehicle is set to the state
'OffShift', which we set within the Vehicle’s add-on processes.
374 / 1277
Simio Reference Guide
VehicleFixedRoute - SimBit
Problem:
I have a vehicle, such as a bus, that loops around a specific route picking up and dropping off entities at varying locations.
Categories:
Vehicles
Key Concepts:
Entity Destination Type, Fixed Route, Ride on Transporter, Sequence Table, Vehicle
Assumptions:
There are four specific pickup / drop-off locations in the fixed route for the vehicle. Entities must wait at their pickup
location for the vehicle to come to them, based on the vehicle’s route sequence. Therefore, entities are not picked up based
on a first in first out basis for requesting the vehicle, but are picked up based on the vehicle’s location on the route at the
time. All entities that are picked up at a given location are dropped off at a different, fixed location in this example.
Technical Approach:
Each pickup / drop-off location in the system is represented by Source and a Sink objects. By placing these objects near
each other, they can be virtually the same physical location represented by two objects. The vehicle in the system will move
along a fixed route that is specified in a clockwise manner. All Source and Sink objects are then connected using
unidirectional Paths to show the direction of the vehicle movement. Entities entering at the various Sources will each have
specific destination location Sinks to be dropped off by the vehicle.
Details for Building the Model:
Simple System Setup
Place four Source objects and four Sink objects in the Facility Window. Move the nodes on these objects to be close
to each other, as you will be connecting them to represent the vehicle path.
Connect the various sink and source objects with Paths in the following order – Source1-Sink1-Source2-Sink2-
Source3-Sink3-Source4-Sink4-Source1. This will form a circular path between all the objects in the system. Set the
Allow Passing property for all the paths to ‘False’ (in case there are multiple vehicles).
Defining the Vehicle Route
Open the Data Window and select the Tables panel. Here you will define the fixed route that the vehicle will take
when moving between the objects. Click on Add Sequence Table and enter the various nodes that the Vehicle will
visit, in order. These include ‘Output@Source1’, ‘Input@Sink1’, ‘Output@Source2’, ‘Input@Sink2’... ‘Output@Source4’,
‘Input@Sink4’. When the vehicle has gotten to the last destination in the table, it will move to the first one listed and
continue through the list again and again until the simulation ends. This table will automatically have the Name
‘SequenceTable1’.
Defining the Vehicle
Place a Vehicle in the Facility Window. Within the Vehicle’s Properties window, change the Routing Type to ‘Fixed
Route’ and the Route Sequence to the ‘SequenceTable1’ table that was just defined.
The Initial Ride Capacity for the vehicle specifies the maximum number of entities on the vehicle simultaneously.
Change this value to 'Infinity', such that the Vehicle statistics can later be evaluated to determine the minimum,
maximum and average number of entities riding on the vehicle.
Set the Load Time and the Unload Time to ‘0.02’ minutes each to provide a brief pause while each entity is loaded or
unloaded.
We will also replace the default animated queue on the transporter ( Vehicle1.RideStation.Contents) with a U shaped
one that will display more entities.
Creating the Part Types
The Source objects will generate entities to enter the system. In the example, four different types of ModelEntity
objects were placed in the Facility Window, with Name properties of ‘PartA’, ‘PartB’, ‘PartC’ and ‘PartD’. For each of
the Source objects, change the Entity Type property to generate a different entity type. 375 / 1277
the Source objects, change the Entity Type property to generate a different entity type.
Transferring using a Vehicle
In this example, entities get on the Vehicle at each Source and are taken by the vehicle to any destination node (to be
specified by the user). Click on the Source1 TransferNode. Under the Routing Logic, specify the Entity Destination
Type as ‘Specific’ and the Node Name as ‘Input@Sink3’. In the example, we have specified that Source1 goes to
Sink3, Source2 goes to Sink4, Source3 goes to Sink1 and Source4 goes to Sink2. You can specify your different
sources go to whichever sink input nodes you like. This will give the entity a “destination” so that when it is moved by
the vehicle along the designated path, the entity knows which node to exit, at which time it will be dropped off by
the vehicle.
Finally, in order for the entity at each Source node to be moved along the path using the vehicle, click on Source1’s
TransferNode and change Ride on Transporter to ‘True’. This will allow you then to select a Transporter Type (‘Specific’)
and Transporter Name (‘Vehicle1’). Do the same for the other three transfer nodes.
Embellishments:
Within the Vehicle object, change the Initial Number In System (under Population) to ‘3’ and the Initial Ride Capacity
(under Transport Logic) to ‘5’ to evaluate multiple vehicles that can take a fixed number of entities.
376 / 1277
Simio Reference Guide
VehicleFleetManagement - SimBit
Problem:
I have multiple vehicles that are responsible for transporting entities. Each vehicle is responsible for transporting to a
specific destination, for example Vehicle1 takes entities from any origin to Sink1, Vehicle2 takes entities from any origin to
Sink2 and so on.
Categories:
Decision Logic -- Paths, Entity Characteristics, Vehicles
Key Concepts:
Entity Destination Type, Find Step, NodeList, OnRun Initialized Process, PlanVisit Step, Ride On Transporter, Search Step,
Selection Condition, Selection Goal, Subscribe Step, Transporter Reference State, Vehicle
Assumptions:
There are three pickup and three drop-off locations for the vehicle. Entities must wait at their pickup location for the
vehicle to come to them and are then taken by vehicle to a random drop-off location. The fleet management strategy is
that Truck #1 can only service requests to destination Input@Sink1, Truck #2 can only service requests to destination
Input@Sink2, and Truck #3 can only service requests to destination Input@Sink3.
Technical Approach:
Each pickup location is represented by a Source and each drop-off location is represented by a Sink object. A
‘TruckFleetManagement’ process logic is invoked whenever a new ride pickup request occurs or an entity has been
unloaded from a truck. There is a delay of ‘Math.Epsilon’ to force the fleet management decision making to occur as a late
event at the end of the current time step. The process logic then checks for any available trucks and searches the global visit
request queue to attempt to assign a truck to a waiting request, based on the above assumption logic. If a pickup request
has been assigned to a truck, the fleet management process logic does a PlanVisit step to notify the truck and the truck
then accordingly handles the pickup.
Details for Building the Model:
Simple System Setup
Place three Source objects and three Sink objects in the Facility window.
Change the Interarrival Time for each of the Source objects to ‘Random.Exponential(.5)’ minutes.
Defining the Vehicle
Place a Vehicle in the Facility window. Change the Name to ‘Truck’ and the Initial Number in System to ‘3’.
While the Vehicle is highlighted, click on the Animation ribbon and place a Status Label above the vehicle symbol (it
should be Attached To ‘Truck’). Enter the Expression ‘”Truck#” + String.FromReal( Population.Index)’ so that the truck
number will appear above the vehicle symbol. The “Truck#” is simply a string, while the function for Population.Index
will return 1, 2 or 3.
Defining the Entity
Within the Navigation window, click on the ModelEntity model, go to the Definitions window / States panel. Add a
new State Variable of type Transporter Object Reference and change the Name to ‘AssignedTruck’. This can then be
referenced as ‘ModelEntity.AssignedTruck’ within the Model.
In the Facility window, place a ModelEntity. While the entity is highlighted, click on the Animation ribbon and place a
Status Label above the entity symbol (it should be Attached To ‘DefaultEntity’). Enter the Expression
‘DestinationNode’ so that when the entity destination is determined, it will appear above the entity symbol.
Defining the Node Lists and Model State Variable
Within the Definitions window, add a Node list named ‘EntityDestinationNodeList’. Include in the list the three Sink
options, Input@Sink1, Input@Sink2 and Input@Sink3. This list will be used within the output node of each Source to
determine where the entity goes after leaving the Source.
Add a Node list named ‘EntitySourceNodeList’. Include in this list the output nodes for each of the Source objects,
such as Output@Source1, Output@Source2 and Output@Source3. This list will be used within process logic to
subscribe to a process when an entity waits for a ride at the node. 377 / 1277
subscribe to a process when an entity waits for a ride at the node.
Within the Definitions window, States panel, add a new Integer state variable with the Name ‘PickupRequestIndex’.
This will be used in the TruckFleetManagement logic.
Transferring using a Vehicle
In this example, entities get on the Vehicle at each Source and are taken by the vehicle to any destination node
(randomly selected from list). Click on each of the Source object TransferNodes and, under the Routing Logic, specify
the Entity Destination Type as ‘Select From List’, the Node List Name as ‘EntityDestinationNodeList’ and the Selection
Goal as ‘Random’. With this logic, entities from any of the Source objects may move to any of the Sink objects, as
assigned randomly. Then, based on their assigned destination, we will use logic to determine which Truck vehicle to
request.
Also within each of the Source object TransferNodes, under the Transport Logic, specify the Ride On Transporter as
‘True’, the Transporter Name as ‘Truck’ and the Selection Condition as
‘ModelEntity.AssignedTruck==Candidate.Vehicle’. We will be adding process logic to assign the entity’s
AssignedTruck value based on its destination location logic.
Process Logic for OnRunInitialized Process
Within the Processes window, click on the Select Process button from the Process ribbon and select OnRunInitialized.
Within this process, add two Search steps. In the first Search step, change the Collection Type to ‘NodeList’ and the
Node List Name to ‘EntitySourceNodeList’. Change the Limit to ‘Infinity’. This step will provide a token related to
each source in the list ( Output@Source1, Output@Source2 and Output@Source3) that will exit the Found exit of the
step.
From the Found exit of the first Search discussed above, add a Subscribe step. Within the Subscribe step, specify the
Event Name as ‘TransferNode.Riding’, the Event Condition as
‘TruckFleetManagement.TokensInProcess.NumberItems==0’ and the Process Name as ‘TruckFleetManagement’.
When the RiderWaiting based event for each TransferNode is entered, the process named ‘TruckFleetManagement’
will be activated (while the condition specifies that only one entity necessary within that process).
Now, enter the second Search step (which should be connected from the Original exit of the first Search described
above). Keep the Collection Type as ‘EntityPopulation’, and change the Entity Type to ‘Truck’ and the Limit to ‘Infinity’.
Then, associated with each of the 3 trucks in the system, a token will be generated from the Found exit.
From the Found exit of the second Search, add a Subscribe step. Change the Event Name to
‘Vehicle.RideStation.Exited’, the Event Condition to ‘TruckFleetManagement.TokensInProcess.NumberItems==0’ and
the Process Name to ‘TruckFleetManagement’. When the truck drops off an entity at a Sink object, the
‘TruckFleetManagement’ process will be activated (again, given there is only one entity in that process at a time).
Process Logic for TruckFleetManagement Process
Within the Processes window, click on the Create Process button on the Process ribbon to add a new process. Specify
the Name as ‘TruckFleetManagement’.
Add a Delay step as the first step in the process with the Delay Time specified as ‘Math.Epsilon’. This will cause the
event to be handled last on the calendar of events that occur at the same specific time.
Add a Search step with the Collection Type of ‘EntityPopulation’, the Entity Type of ‘Truck’, the Match Condition of
‘Candidate.Vehicle.ResourceState == 0’ and the Limit of ‘Infinity’. This will return a token for each of the trucks that
are idle ( ResourceState == 0).
From the Found exit, add a Decide step. Specify the Condition or Probability as
‘Global.VisitRequestQueue.NumberWaiting > 0’. This will determine if there are any entities waiting to be assigned a
vehicle (once assigned, they move from the global request queue to the vehicle’s specific queue while awaiting
pickup).
From the True exit of the Decide step, add a Find step. Change the Index Variable Name to ‘PickupRequestIndex’. The
Starting Index should be ‘1’ and the Ending Index should be ‘Global.VisitRequestQueue.NumberWaiting’. The Search
Expression should be ‘Math.If( Vehicle.Population.Index==1,
Global.VisitRequestQueue.ItemAtIndex( PickupRequestIndex).ModelEntity.DestinationNode==Input@Sink1,
Vehicle.Population.Index==2,
Global.VisitRequestQueue.ItemAtIndex( PickupRequestIndex).ModelEntity.DestinationNode==Input@Sink2,
Global.VisitRequestQueue.ItemAtIndex( PickupRequestIndex).ModelEntity.DestinationNode==Input@Sink3)’. Since a
token for each idle vehicle is sent through this Find step, note that the Math.If statement determines which
population.index (1/2/3) the vehicle is and then finds the first entity in the visit request queue that has its destination
node set to the corresponding Sink input node (1/2/3). If there is nothing in the visit request queue for a particular
vehicle token, the Find step Index Variable Name ‘PickupRequestIndex’ is set to ‘0’ and the token exits the NotFound
exit of the step. If there is an entity found that matches the vehicle destination assignment, then the
‘PickupRequestIndex’ is set to the index in the queue that the entity resides and the token continues from the Found
378 / 1277
exit to the next step.
Place an Assign step from the Found exit of the Find step. Set the State Variable Name
‘Global.VisitRequestQueue.ItemAtIndex( PickupRequestIndex).ModelEntity.AssignedTruck’ equal to the New Value of
‘Vehicle’. This will assign the entity’s transporter reference state, AssignedTruck, to the appropriate Vehicle based on
the entity destination.
Add a PlanVisit step to the process after the Assign step. Under Advanced Options, select Entity Type to be ‘Specific
Object’ and Entity Object to be ‘Vehicle’. The PlanVisit step will cause the particular vehicle to search the
Global.VisitRequestQueue for any requests, which then the output nodes on the Sources include the Selection
Condition ‘Candidate.Vehicle==ModelEntity.AssignedTruck’ to assure the correct entity is paired with the vehicle.
379 / 1277
Simio Reference Guide
VehicleMovingBackward - SimBit
Problem:
I would like to model a vehicle moving back and forth on a path and not have unrealistic “jumps” in the animation.
Categories:
Vehicles
Key Concepts:
Allow Passing, Detached Queue, Entity Destination Type, ParkingStation Queue, Ride on Transporter, Vehicle
Assumptions:
When a vehicle changes direction at a node it often appears to jump to a new position. This is because the head of the
vehicle determines the position of the vehicle on a link or when it enters a node. For example, the vehicle will enter a node
from the right and when the vehicle tries to turn around, it will appear to be entering the node from the left; making an
undesired “flip” around the node.
Technical Approach:
The vehicle used will look the same in both directions, meaning the head and tail of the vehicle cannot be distinguished
from each other. A mixture of Paths and Connectors will be used between four TransferNodes to model the course that the
Vehicle will follow. In order to make it appear like the vehicle is moving backward, a path will be used to animate its
normal movement between the TransferNodes at the ends of the course and a connector will be used to animate the
vehicle’s turn around movement.
Details for Building the Model:
Simple System Setup
Add a ModelEntity, Source, Sink and four TransferNodes to the Facility Window. Connect the Source to
TransferNode2 and TransferNode4 to the Sink using Paths.
Add a Path from TransferNode2 to TransferNode4 and another Path from TransferNode3 to TransferNode1.
Add a Connector from TransferNode1 to TransferNode2 and another Connector from TransferNode3 to
TransferNode4. The Connectors have been made visible in this example by drawing them without overlapping the
Paths.
Animating the Vehicle
Add a Vehicle to the Facility Window. Set the Initial Node (Home) to ‘TransferNode1’ and the Idle Action to ‘Park at
Home’.
It is very important that the distance between TransferNode1 and TransferNode2 and the distance between
TransferNode3 and TransferNode4 is greater than the length of the Vehicle. This is because the Vehicle needs to have
enough room to instantly turn itself around on the Path and Connector without getting stuck. Otherwise it could
block itself from turning around.
Animating the Entities
Select the Output Node on the Source and change the Entity Destination to ‘Specific’ and select ‘TransferNode4’ and
the destination.
Select the Path between the Source and TransferNode2 and change the Allow Passing property to ‘False’. This will
cause the Entities to line up in order as they wait to be transported by the Vehicle.
Select TransferNode2 and change the Ride on Transporter property to ‘True’ and select ‘Vehicle1’ as the Transporter
Name.
Select TransferNode4 and change the Entity Destination Type property to ‘Specific’ and the Node Name to
‘Input@Sink1’.
Animating the Parking Queues
In order to make it appear that the Vehicle is parking on its route while idle, the Parking Queues for TransferNode1
and TransferNode4 must be drawn and placed directly on the route.
380 / 1277
Add two detached queues to the Facility Window and change the Queue State of one to
‘TransferNode1.ParkingStation.InProcess’ by choosing it from the drop down menu. Change the Queue State of the
other queue to ‘TransferNode1.ParkingStation.InProcess’. Then move these queues to their respective places in
between the TransferNodes.
Embellishments:
Try changing the Interarrival Time of the Source or the Desired Speed of the Vehicle. Also, try different a Idle Action for
the Vehicle.
381 / 1277
Simio Reference Guide
VehiclesPassingOnRoadway - SimBit
Problem:
Model a simple version of a roadway with sections that allow passing and sections that do not.
Categories:
Vehicles
Key Concepts:
Allow Passing, Path, Path Decorators
Assumptions:
There are separate Source/Path/Sink sets for each direction of the road. Multiple vehicles can pass a vehicle simultaneously
without regard for oncoming traffic.
Technical Approach:
Two sources, placed at opposite ends of the model, create the entities with random speeds mimicking vehicles entering
separate sides of a roadway. The roadway is separated into three sections – two curved sections that do not allow passing
and one straight section that does. After the vehicle has driven the entire roadway it exits the system.
Details for Building the Model:
Creating the Roadway
Place two Sources and two Sinks in the model, with one source and sink on each side of the model. Position them so
that there are 2 Source/Sink pairs representing either side of the road. Separate them so that the vehicles have
enough room to illustrate the vehicle movement.
Place 4 TransferNodes in between the Source/Sink pairs (2 for each pair) to represent the passing section.
Move left Sink’s BasicNode and the right Source’s TransferNode so that that both Source/Sink Pairs have their nodes
facing eachother.
Double-click on Path to create the lanes of the road. Start at one of the Sources and start clicking to create a curved
section of the roadway. End this section at one of the TransferNodes.
From this TransferNode draw a straight line connecting it to a second TransferNode.
Then create another curved section ending at a Sink.
Create the other lane in the same manner. Start at the other Source and create another curved section leading to a
new TransferNode, followed by a straight section to the final TransferNode, then a section leading to the second Sink.
Make sure to mimic the contour of the first lane.
To each path, add a single lane path decorator and set the path width ( Size – Width) to 2 meters.
Adding Entity Symbols
Add a Vehicle to the Facility Window. Set the Initial Node (Home) to ‘TransferNode1’ and the Idle Action to ‘Park at
Home’.
It is very important that the distance between TransferNode1 and TransferNode2 and the distance between
TransferNode3 and TransferNode4 is greater than the length of the Vehicle. This is because the Vehicle needs to have
enough room to instantly turn itself around on the Path and Connector without getting stuck. Otherwise it could
block itself from turning around.
Animating the Entities
Place a ModelEntity from the Project Library into the Facility Window.
After making sure the ModelEntity is selected, click on Add Additional Symbol in the Symbols tab. Click on the
button repeatedly until you have reached an appropriate level of Active Symbols (in this example there are 9 Active
Symbols).
Go through all of the Active Symbols in the dropdown list and change each vehicle symbol to a different color or
different symbol.
Set the ModelEntity’s Random Symbol property to ‘True’.
382 / 1277
Modeling the Vehicle Movement
Change the ModelEntity’s Initial Desired Speed to ‘Random.Uniform(1,5)’ Meters per Second.
To prevent the vehicles from passing on the curved sections of the road, click on the curved sections and change the
Allow Passing in the Travel Logic to ‘False’.
383 / 1277
Simio Reference Guide
VehicleStopsWhenServerOffShift - SimBit
Problem:
I want a Transporter to follow the same Work Schedule as a Server in my system. The Transporter should stop working
immediately when the Server goes Off Shift.
Categories:
Vehicles
Key Concepts:
Add-On Process, AssociateObjectMovement, Off Shift, On Off Shift, On On Shift, On Shift, Real State Variable, Resume
Step, Ride on Transporter, Schedules, Search Step, Subclass, Suspend Step, Vehicle
Assumptions:
The Vehicle object’s capacity cannot be controlled by a Work Schedule so the Vehicle’s logic will be suspended when the
Server goes Off Shift and it will resume its logic when the Server goes back On Shift.
Technical Approach:
Subclass the standard Vehicle object and change the OnVisitingNode processes property Public from ‘False’ to ‘True’. This
will allow this process to appear in the selection list of the Suspend Step. The Suspend Step will suspend this process from
within the OffShift Add On Process of the Server. Similarly, the Resume Step will resume the OnVisitingNode process from
within the OnShift Add On Process of the Server. The Vehicle’s movement is also suspended and resumed with a Suspend
Step from within the same Add On Processes.
Details for Building the Model:
Simple System Setup
Add a Source, a Server and a Sink to the Facility Window.
Connect the objects together with Paths. Ensure that the Type property of the path from the Server to the Sink is set
to ‘Bi-directional’ so the vehicle can travel back and forth.
In order to slow down the entity arrival to best view the vehicle’s behavior, change the Interarrival Time of the Source
object to ‘Random.Exponential(4)’ minutes.
Subclassing the Vehicle Object
Select MySimioProject in the Navigation Window and highlight the Models panel. On the Edit ribbon, press the
Subclass From Library button and select the Vehicle. This will create a sub-classed ‘MyVehicle’ object.
Highlight Model in the Navigation Window to return the main model and place the MyVehicle object from the
Project Library into the Facility Window. In order to make it look like a true vehicle, when the object is selected in the
Facility Window, select a vehicle symbol from the Project Symbols dropdown in the Ribbon.
Select the Output Node of the Server and set the Ride On Transporter property to ‘True’, the Transporter Type to
‘Specific’ and then select your Vehicle for the Transporter Name property.
In order to slow down the animation to best view the vehicle’s behavior, change the Desired Speed property of the
Vehicle to ‘0.04’ (meters per second).
Set the Initial Node (Home) property of the Vehicle to ‘Output@Server1’.
Creating a Work Schedule
Go to the Data Window and select the Schedules panel. Click the Work Schedule icon from the Schedule ribbon and
change the Name to ‘Schedule1’ and the Days to ‘1’.
In the Day Patterns tab, add a new one with the Name ‘DayPattern1’ and press the ‘+’ to open the pattern.
Add three rows to reflect the following schedule: 8:00 AM – 8:15 AM with a Value of ‘1’, 8:30 AM – 8:45 Am with a
Value of ‘1’ and 9:00 AM – 12:00 PM with a Value of ‘1’. NOTE: The times when there aren’t on shift times are
considered to be off shift (capacity value of 0).
Go back to the Work Schedules Tab and select ‘DayPattern1’ for Day 1.
Add the Schedule to the Server and Create logic to Stop Vehicle
384 / 1277
Highlight the MyVehicle object in the Navigation Window and open the MyVehicle’s Processes Window. Find the
process OnVisitingNode and click on the process. Click the Override icon in the top Ribbon and then change the
Public property from ‘False’ to ‘True’.
In the Model’s Facility Window, select the Server object and set the Capacity Type property to ‘WorkSchedule’. Select
the work schedule that was just created for the Work Schedule property.
From within the Server properties window, select the dropdown icon from the Add On Process trigger OffShift and
select ‘Create New’. Do the same for the trigger OnShift. (if you double click on the name of the Property, i.e. On
Shift, you will be taken to the Process Window)
In the Model’s Processes Window, you should see the two new processes that were created from the Server’s Add On
Process triggers. In the Off Shift process, place a Search Step (found under All Steps). The Search Step is needed to
create a token that points at the Vehicle instance so the Vehicle can be suspended. The Collection Type of the Search
Step is set to ‘ObjectInstance’ and the Object Instance Name is set to the name of the subclassed Vehicle. The other
properties can be kept with their default values.
Place a Suspend Step (found under All Steps) in the Found segment leaving the Search Step. The Suspend Type of
this step is set to ‘AssociatedObjectMovement’. This will stop the vehicle’s movement immediately.
Place a second Suspend Step directly after the first Suspend Step in the Found segment. The Suspend Type of this
step is set to Process and the Process Name is set to the OnVisitingNode process of the Vehicle. (i.e.
MyVehicle.OnVisitingNode)
Almost the exact same logic should be put in the On Shift process, except instead of the Suspend Steps, Resume
Steps should be used to both resume the vehicle’s movement and the OnVisitingNode process.
Enhancing the Animation
If you’d like the Server to appear different when it is Idle vs. Busy vs. OffShift, you need to select the Server object in
the Facility Window and click on the Add Additional Symbol icon in the Ribbon. Do this twice so there are now three
symbols associated with this object. Change which symbol is ‘Active’ with the Active Symbol icon. Once the symbol is
active, you can change the appearance of that symbol.
The Current Symbol Index property of the Server controls which symbol is displayed during the run. The value of this
property is used in the symbol index (the numbers listed next to the symbols in the Active Symbol drop down). In this
example, the following expression is used so symbol 1 is displayed when the Server is On Shift (capacity = 1) but not
busy, symbol 2 is displayed when the Server is On Shift and Busy and symbol 0 is displayed when the server goes Off
Shift (capacity = 0): ( Server1.Capacity.Allocated + 1) * Server1.Capacity
Changing the appearance of the vehicle during the run is done in a similar fashion. This example has two symbols for
the vehicle, one that is Blue and one that is Red. The Current Symbol Index of the Vehicle is set to a State Variable
called Off Shift. This state is set to ‘1’ with an Assign Step after the Suspend Step that stops the vehicle. It is set to ‘0’
when the Vehicle resumes its movement.
385 / 1277
Simio Reference Guide
VehicleVisitsServiceCenter - SimBit
Problem:
I want to model a system that contains a vehicle that is subject to random failures. And upon failure, the vehicle finishes its
delivery, if not idle, and then proceeds to a Service Center to be repaired or serviced.
Categories:
Vehicles
Key Concepts:
Capacity.Initial, Capacity.Remaining, Contents, Decide Step, Event, Failure, Failure.Active, ID, Node Property, OnInitialized
Process, Override, Park Step, ParkingStation, ParkingStation Queue, Real State Variable, Ride on Transporter, Search Step,
SetNode Step, Subclass, Time To Repair, UnPark Step, Uptime Between Failures, Vehicle, Wait Step
Assumptions:
There is only one Vehicle in the system.
Technical Approach:
Changes are required to the standard Vehicle object, therefore it is subclassed into the Project Library. A new Node
Property is added to this object to hold information about the service center node. From within the Vehicle object, the
OnFailed, FailureOccurenceLogic, OnRepaired and OnVisitingNode processes are updated with custom logic to indicate
that the vehicle must not immediately stop in place upon Failure, but instead finish delivery, if appropriate, and then travel
to the service node before starting its repair time delay.
Details for Building the Model:
Simple System Setup
Add a Source, two Servers and a Sink to the Facility Window. Change the mean Interarrival Time on the Source to
‘Random.Exponential(1)’.
Connect the Source to the first Server, connect the first and second Server together and connect the second Server to
the Sink with Paths. Add a Basic Node and connect it to the Output Node of Server 1 and the Input Node of Server
2.
Make the path between the two Servers bi-directional, along with the two paths connecting the Basic Node. To make
a path bi-directional, set its Type property to ‘Bidirectional’.
Click on the Output Node of Server 1.
Set its Entity Destination property to ‘Specific’ and the Node Name property to ‘Input@Server2’. Entities will
always go to Server2.
Set its Ride On Transporter property to ‘True’, it’s Transporter Type property to ‘Specific’. You’ll need to set the
Transporter Name property to ‘MyVehicle1’ but this cannot be done until your custom Vehicle is in your Facility
Window and this happens later.
Customize a Vehicle
Because we want our vehicle to have some unique behavior (e.g. go to a specified node before failing) we will start by
creating a new vehicle object based on the existing Vehicle, then add a new property and other definitions that it will need.
Subclass the standard Vehicle object into your Project Library. This is done by clicking on MySimioProject in the
Navigation Window, then selecting the Models panel. Click on the Subclass From Library button from the ribbon and
select Vehicle. This adds a subclassed MyVehicle object to the library.
Highlight the Model in the Navigation Window and select the Definitions tab, Properties panel. Add a new Node
Property (from the Object Reference icon in the ribbon) and name it ServiceNode. If you put ‘Reliability’ in the
Category Name property of this new property, it will appear in that category of the Vehicle, next to the other
information about Failures.
In the Definitions Window, select the Events panel and add a new Event that is named 'ArrivedAtServiceNode'.
FailureOccurenceLogic Process
In the Processes Window, find the FailureOccurenceLogic process and select Override from the ribbon. This will allow
386 / 1277
In the Processes Window, find the FailureOccurenceLogic process and select Override from the ribbon. This will allow
you to make changes to this process.In the Processes Window, find the OnFailed process and select Override from
the ribbon. This will allow you to make changes to this process.
Place a SelectVisit Step in the Failed segment leaving the Allocate Step. The existing PlanVisit Step will then be in
the Failed segment of this new SelectVisit step
Place a Decide Step in the OK segment leaving the Select Visit Step. The expression should be “IsParked” to check if
this vehicle is parked. Place a UnPark Step in the True segment, so the vehicle will unpark itself if it indeed is parked.
OnFailed Process
We want our vehicle to automatically move to a repair location on failure, so we need to replace the default failure logic
with some custom logic.
In the Processes Window, find the OnFailed process and select Override from the ribbon. This will allow you to make
changes to this process.
Delete the first two Suspend steps which suspend the ParentObjectMovement and OnVisitingNode. When the failure
occurs, we don’t want the vehicle to immediately stop. Additionally, if the vehicle is transferring an entity, we need it
to continue (including going through OnVisitingNode) until the entity is dropped off.
After the Suspend Failure Occurence Logic step, add a Decide step to see if there are riders on the Vehicle or if its
capacity is not seized, meaning that it is not on its way to get a rider. ( Expression is NumberRiders == 0 & &
Capacity.Remaining == Capacity.Initial)
From the True branch of this step, place a SetNode step. The Object Type is ‘ParentObject’, the Destination Type is
‘Specific’ and the Node Name should be set to the new ServiceNode property. To set a property here, right click on
Node Name and select SetReferencedProperty and then select ServiceNode.
After the SetNode Step, place a Decide step that checks if the Vehicle is parked. ( IsParked).
From the True branch of this step, place a UnPark step. The UnPark Type is set to ‘Parent Object’.
After this UnPark Step, place a Fire step to fire the Event Name ‘RemainInPlaceEnded’. This will cause the parked
vehicle logic to continue in the OnVisitingNode process (where the Wait step for ‘RemainInPlace’ step exists).
After the Fire step, place a Wait step. The Event Name is set to ‘ArrivedAtServiceNode’.
Connect the False branch of both Decide steps to the Wait step (‘ArrivedAtServiceNode’).
The Wait step will flow into the Execute step (‘FailedAddOnProcess’) that was part of the original process. All the
other steps in the process remain untouched.
OnRepaired Process
Because the two Suspend steps in the OnFailed process were deleted, you will also need to delete the corresponding
Resume steps in this process, the Resume ‘ParentObjectMovement’ and the Resume ‘OnVisitingNode’ process.
OnVisitingNode Process
As part of implementing our custom failure logic, we need to special handle the case when the vehicle arrives at the repair
location and also when the vehicle is failed but arrives at the location with an entity to dropoff.
Find the OnVisitingNode process and Override it.
Find the IfNotVisitingNode Decide step. Place a new Decide step in the False branch, directly before the Decide
( IfBusy) step. This new Decide step checks to see if the Vehicle is at the Service Node. ( CurrentNode != ServiceNode)
If not, it continues with the normal logic.
In the False branch of this new Decide step, place a Park step. The Entity Type is ‘Parent Object’ and the Node Name is
the ServiceNode property. Set this by right clicking on the Node Name and selecting SetReferencedProperty and the
selecting ServiceNode.
After this Park step, place a Fire Step. This will fire the event ‘ArrivedAtServiceNode’. The branch then exits this
Process.
Go to the bottom, right of this process and find a Decide step titled “IfOffShift”. In the False branch of this Decide
step, place a Decide Step that determines if the vehicle is failed ( ResourceState==List.ResourceStateName.Failed).
You’ll need to disconnect the False branch from it’s current connection in order to add the new Decide Step.
The True branch should contain a new Dropoff step where the Unload Time references ‘UnloadTime’ property,
followed by a Wait step where Event Name is ‘RiderUnloaded’. These can be copied / pasted from earlier logic prior
to the Pickup step. The Wait step connects back around to the Dropoff step. The Wait step should have an Exclusion
Expression of ‘!UnloadedAddOnProcess.HasValue’ so that the vehicle doesn’t wait if it has failed carrying an entity but
doesn’t have an unload add-on process.
The Failed branch of the Dropoff step should connect to a Release step (also can be copied from earlier logic) where
Object Type is ‘Parent Object’, and Units per Object is SeizedResources.CapacityOwnedOf( ParentObject). The Owner
in Advanced Options is ‘ParentObject’.
From the Release step, place a SetNode step. Object Type is ‘Parent Object’ and the Node Name is the ServiceNode
property.
387 / 1277
The False branch of the Decide step that was added and the segment leaving the Set Node step should both connect
to the second step ( Decide) in the process with Name ‘IfNotVisitingNode’. The ‘-‘ and ‘+’ keys on the keyboard can
be used within the process to zoom in/out. This may be necessary to connect these steps.
The rest of this process remains unchanged.
Place the Vehicle into the Model
Here we will customize how the default vehicle looks.
Before you place the Vehicle into the Facility Window of the model, you might want to change the External view of
the Vehicle (how it looks in the Facility window). To do this, go to the External panel of the Definitions Window for
the Vehicle object. Place a symbol of a vehicle and place the RideStation.Contents queue on the Vehicle.
Place the new customized Vehicle into the Facility Window of the model.
Set the Initial Node property to ‘Output@Server1’.
Set the Failure Type to ‘Calendar Time Based’. Set Uptime Between Failures to 3 minutes. Set Time to Repair to 1
minute.
Set ServiceNode to 'BasicNode1'.
Click onto Output@Server1 and set the Ride On Transporter property to ‘True’ and the Transporter Name to the
name of the customized vehicle you placed into the model.
388 / 1277
Simio Reference Guide
VehicleWithVariableRideCapacity - SimBit
Problem:
I have a vehicle that can pick up a variable number of entities at any given location, based on a distribution.
Categories:
Vehicles
Key Concepts:
Add-On Process, Assign Step, Decide Step, Is.Vehicle, Math.Floor(), NumberRiders, On Evaluating Transport Request, On
Exited, ReturnValue, Round, Token, Vehicle
Assumptions:
There is a single vehicle that can pick up anywhere from one to five entities at Source1.
Technical Approach:
A state variable, RidersNeeded, will be used to sample from a distribution to determine how many entities the vehicle will
pick up at a given time for each pickup. The Initial Ride Capacity of the vehicle will be set to 5, which will be the maximum
number of entities the vehicle can move. The Evaluating Transport Request add-on process will be used to compare the
RidersNeeded value sampled with the number of current riders function of the vehicle to determine if a ride request is
accepted or not.
Details for Building the Model:
Simple System Setup
Add a Source and Sink from the Standard Library to the Facility window. Connect the objects with a Path.
Change the Type of the Path to ‘Bidirectional’ so the vehicle may go back and forth between the Source and Sink.
Adding and Using a State Variable
Within the Definitions tab, States panel, add a Discrete State and change the Name to ‘RidersNeeded’.
Set the Initial State Value to ‘1’, which will allow the vehicle to pick up one entity for its first pickup.
Within the Processes window, use the Create Process button and create a process with the Name
‘ResetRiderNumber’. Within this process, add a Decide step and change the Decide Type to ‘ConditionBased’ and
Expression to ‘Is.Vehicle’.
Add an Assign step to the process from the True branch of the Decide step. Within the Assign step, change the State
Variable Name to ‘RidersNeeded’ and the New Value to ‘Math.Floor( Random.Triangular(1,3,6))’. This will assign the
RidersNeeded state to a new value each time the vehicle leaves the Source for its next pickup. The Math.Floor
function is used to truncate the values generated from the distribution to integer values.
Within the Facility window, highlight the output node of the source ( Output@Source1) and, under the Add-On
Process Triggers Exited property, add the process ‘ResetRiderNumber’ that was just defined above.
Defining the Vehicle
Place a Vehicle object in the Facility window and change the Initial Ride Capacity to ‘5’. This will set the maximum
capacity of the vehicle.
Within the Add-On Process Triggers section, create a new process for the Evaluating Transport Request property
called ‘Vehicle1_EvaluatingTransportRequest’.
Open the Processes window. In the Vehicle1_EvaluatingTransportRequest process, add a Decide step with the Decide
Type of ‘ConditionBased’ and the Expression of ‘Vehicle.NumberRiders<RidersNeeded’. The Vehicle.NumberRiders is
a function that looks at the current number of entities on the vehicle. The RidersNeeded is the state variable that we
use to determine the number of riders for a particular pickup. This process will be evaluated with each entity awaiting
transport at Source1.
From the False connection of the Decide step, add an Assign step. Within the Assign step, set the State Variable
Name to ‘Token.ReturnValue’ and the Value to ‘0.0’. When the Token.ReturnValue is set to less or equal to 0.0, the
transport request is rejected, which is what will happen for those requests above the RidersNeeded state value.
389 / 1277
Embellishments:
The RidersNeeded state variable can be animated by using a Status Label from the Animation tab and changing the
Expression to ‘RidersNeeded’. This is useful in making sure that the vehicle is picking up the number of riders as determined
by the RidersNeeded state variable value sampled from the distribution.
390 / 1277
Simio Reference Guide
VisitAllServersInAnyOrder - SimBit
Problem:
An entity must process through ServerA, then Servers 1, 2, and 3 in any order but must do all three, then finish with ServerC.
This model illustrates how a simple modification can be made to an object to permit more intelligent use, in this case
allowing selection of only objects that still need the service it provides.
Categories:
Building New Objects / Hierarchy, Decision Logic -- Paths, Discrete States
Key concepts:
Entity Destination Type, State Variable, Selection Goal, Selection Condition, Candidate, NodeList
Assumptions:
The three pooled servers have the same processing time and each has a single buffer position. The entities can process
through the 3 servers in any order, but must process at each of the 3 servers exactly once before moving on to Server C. The
server with the smallest overload is selected. If no server is available that is still needed, the entity will wait in the
Dispatching area (a node).
Technical Approach:
There are two key requirements:
Each entity must keep track of which of the three servers it needs to visit and which have already been visited. This is
done by adding three states to the ModelEntity.
The easiest way to select between servers is to use the TransferNode’s built-in Entity Destination Type and in
particular it’s Selection Condition. In order to take advantage of this, we created a custom MyServer by subclassing
from Server. The only change to MyServer is to add a HasEntityVisited property into which can be passed the
appropriate entity state corresponding to that server.
Other logic includes path weights on Path9 and Path10 for determining if entity should return to dispatching or continue to
ServerC.
Embellishments:
We added 3 status labels (one for each custom state) on each entity picture so you can see which stations have been
visited.
We added 3 pictures to the entity that gets successfully darker as more stations are visited so you can tell its status at a
glance.
391 / 1277
Simio Reference Guide
WF_AdditionalResource - SimBit
Problem:
I want to model the ability of some process-aware information systems to allocate a work item to an additional resource.
Categories:
Worker
Key Concepts:
Functions, Lists, Server, Secondary Resources, Worker
Assumptions:
There are two entity types in the system and two Workers. A productivity function is used to calculate the processing times
of each entity type.
Technical Approach:
Entities will seize randomly a Worker from a list. EntTypeB entities require 2 resources for processing. This is specified in
Number of Objects property of the Secondary Resources seize in order to an EntTypeB entity seizes 2 workers.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink into the Facility window. Put the objects in series and connect them with paths.
Place another Source object and connect the Output@Source2 to Input@Sever1 using a Path.
Add two Worker objects into the Facility window. Set the Park While Busy to ‘True’ and the Initial Network as ‘No
Network ( Free Space)’.Set ‘Output@Source1’ Node as the Initial Home for each Worker. Set the Idle Action and Off
Shift Action properties of each worker to ‘Part At Home’. Change Worker2 color to Red by clicking in Color in the
ribbon.
Defining the Entity Types
Place two ModelEntity objects into the Facility window and change their names to ‘EntTypeA’ and ‘EntTypeB’. Click
on EntTypeB and change its color to Red by clicking in Color in the Ribbon. Set Entity Type property of Source2 to
‘EntTypeB’, while the Entity Type for Source1 should be ‘EntTypeA’.
Creating a List of Workers
In the Definitions window, go to the Lists panel. Add a new Object list. Name it ‘Resources’ and add Worker1 and
Worker2 to the list.
Creating a Function and Set Processing Times
In the Definitions window, go to the Functions panel. Add a new Function. Name it ‘Productivity’ and change
Expression property to ‘Math.If( Entity.SeizedResources.NumberItems > 1, 1.5, 1)’.
Click in Server1 and change Processing Time property to ‘Random.Triangular(3,5,7)/Productivity’.
Seizing the Secondary Resources Within the Server
Click on Server1 and within the Secondary Resources, Other Resource Seizes section, enter the Before Processing
repeat group. Use the Add button and change Object Type to ‘Select From List’, Object List to ‘Resources’, Request
Move to ‘To Node’ and Destination to ‘Input@Server1’. Expand Advanced Options, change the value of Number of
Objects property to ‘Math.If( ModelEntity.Is.EntTypeB,2,1)’ and change the value of Selection Goal to ‘Random’. This
will cause the entities of EntTypeB to require 2 workers from the set, while any other entities require only 1.
Within the Secondary Resources section of Server1, under the Other Resource Releases section, enter the After
Processing repeat group and Add a release of Object Type ‘Select From List’, Object List Name to ‘Resources’ and
Number of Objects to ‘Math.If( ModelEntity.Is.EntTypeB,2,1)’ to release the resource(s) that were seized.
392 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
393 / 1277
Simio Reference Guide
WF_Authorization - SimBit
Problem:
I want to model the ability of some process-aware information systems to specify the range of authorized workers able for
processing entities in a given server.
Categories:
Worker
Key Concepts:
Data Table, Lists, Secondary Resources, Server, State Assignments, Table Row Referencing, Worker
Assumptions:
There are two entity types created from the same entity instance in the system. Green and Red workers are authorized to
process green and red entities while the yellow worker can process both.
Technical Approach:
Lists of Workers are used to represent authorized workers per each entity type. A Data Table is used to store for each entity
type its symbol reference, percentage of arrival and a reference to the list of authorized resources for processing in Server1.
A table row reference is associated randomly to each created entity at the Source object by percentage of arrival. Add-on
process triggers are used to seize and release the authorized workers in Server1.
Details for Building the Model:
Simple System Setup
Place a Source, Server and Sink into the Facility window. Put the objects in series and connect them with Paths.
Add three Worker objects into the Facility window. Set ‘Output@Source1’ Node as the Initial Home for each Worker.
Set the Idle Action of each worker to ‘Park at Home’, the Initial Network to ‘No Network ( Free Space)’ and the Park
While Busy to ‘True’.
Clicking in Worker1, 2 and 3 and change their color to Green, Yellow and Red respectively by selecting Color in the
ribbon.
Place a ModelEntity into the Facility window and change its the name to ‘ProcessCaseType’. Click on it and add an
additional symbol. Change the color of active symbol 1 to Red in order to distinguish the entity types.
Creating Lists of Workers Representing Authorized Resources
In the Definitions window, go to the Lists panel. Add 2 new Object lists. Name them ‘AuthorizedGroup_One’ and
‘AuthorizedGroup_Two’ respectively. Add Workers 1 and 2 into the AuthorizedGroup_One list and Workers 3 and 4
into AuthorizedGroup_Two list. These lists represent authorized resources.
Creating a Data Table
Go to the Data window, and within the Tables panel, click the Add Data Table icon the ribbon to add a new table.
Name it ‘EntityData’.
Add 3 columns that are a String, Integer and Real standard properties by selecting each data type from the Standard
Property drop down in the ribbon. Change the names of each column to ‘Name’, ‘Symbol’ and ‘Percentage’
respectively.
Add fourth column to the table – an Object List reference by selecting Object List from the Object Reference drop
down in the ribbon. The column can be renamed to ‘AuthorizedResources’.
Fill the table with data – such as:
TypeA, 0, 40, AuthorizedGroup_One
TypeB, 1, 60, AuthorizedGroup_Two
Associating a Data Table Row Reference to the ModelEntity and Changing Its Color
Click on the Source object and expand Table Row Referencing property category. Expand On Created Entity and set
Table Name property to ‘EntityData’ and Row Number property to ‘EntityData.Percentage.RandomRow’. This will
associate a table row reference to a created entity based on the percentage of arrival specified in the table.
394 / 1277
Click on the Source Object and expand State Assignments property category. Click on the “…” button to open the
Repeating Property Editor. Click the Add button and change State Variable Name to ‘ModelEntity.Picture’ and New
Value to ‘EntityData.Symbol’. This will change the color of a new created entity by its corresponding active symbol.
Specifying the Secondary Resources Required
Click on Server1 and within the Secondary Resources, Resource for Processing properties, specify the Object Type as
‘Select From List’, Object List Name to ‘EntityData.AuthorizedResources’, Selection Goal as ‘Random’, Request Move as
‘To Node’ and Destination Node as ‘Input@Server1’. This will require each entity to seize the appropriate resource to
be used during the processing delay.
Change the Server Initial Capacity to ‘Infinity’ to that multiple workers can process entities at the same time at this
location.
395 / 1277
Simio Reference Guide
WorkerPoolWithEfficiency - SimBit
This SimBit project includes two models that demonstrate the use of the Worker pools or lists, including efficiency of the
worker and skill level. Models included in this SimBit:
1. SimpleWorkerPool – Demonstrates how to incorporate individual worker walking speed and efficiency based on
worker selection.
2. ComplexWorkerPool – Demonstrates how to incorporate worker skill level or ability to work at particular servers.
The selection of the worker from a pool (list) is based on efficiency factor.
Model 1: SimpleWorkerPool
Problem:
I have a group of workers that have different efficiencies and would like to adjust the processing time at my workcenters
based on the worker efficiency.
Categories:
Add-On Process Logic, Data Tables, Entity Characteristics, Schedules / Changeovers, Worker
Key Concepts:
Add-On Process, Assign Step, Candidate, Dynamic Label Text, Request Move, Search Step, SeizedResources, Select From
List, Server, Transporter List, Worker
Assumption:
We will request a worker from the worker pool and then determine the worker efficiency from the data table.
Technical Approach:
There are three types of workers within the WorkerPool. The WorkerInfo table includes data such as the workers’ walking
speed and efficiency factor. Once the worker is allocated to the entity at the Server, an entity state will be used to store the
efficiency factor related to the seized worker. This value is then used as a divisor within the Server’s Processing Time entry.
Details for Building the Model:
Simple System Setup
Place a Source, three Servers and a Sink in the Facility window. Connect the Source to each of the three Servers and
connect each Server to the Sink with Paths. Place a BasicNode anywhere with the Name ‘WorkerHomeNode’.
Change the Interarrival Time on the Source to ‘Random.Exponential(.5)’.
Defining the Workers and WorkerInfo Table
Place three Worker objects in the Facility window and name them WorkerA, WorkerB and WorkerC. Change the color
of both the idle and busy symbols for the workers to easily distinguish them.
Go to the Definitions window and click on Lists in the panel. Add a Transporter list named 'WorkerPool' and add
WorkerA, WorkerB and WorkerC to the list. *This can also be done by group selecting the three worker objects within
the Facility window, right-clicking and selecting Add To Transporter List.*
Go the Data window and add a new Data Table with the Name ‘WorkerInfo’. Add an Object Reference column of
type Transporter ( Name ‘WorkerType’) and add the three worker names to the table. Within the column properties,
change the Auto-set Table Reference to ‘True’. This assures that at run initialization, the worker will have an association
with its specific table row, and thus all the data in that row as well. In the same table, add a Real property with the
Name ‘WalkingSpeed’. Change the Default Value to ‘0.0’, the Unit Type to ‘TravelRate’ and the Default Units to ‘Meters
per Second’. Add a third column of type Expression with the Name ‘EfficiencyFactor’. For WorkerA, add a value of ‘2’
for WalkingSpeed and ‘1.5’ for EfficiencyFactor. For WorkerB, add a value of ‘1’ for WalkingSpeed and ‘1.2’ for
EfficiencyFactor. For Worker3, add a value of ‘0.5’ for WalkingSpeed and ‘1’ for EfficiencyFactor.
Go to the Facility window and for each worker, set the Initial Desired Speed to ‘WorkerInfo.WalkingSpeed’ to
reference the speed from the data table. Change the Initial Node (Home) to ‘WorkerHomeNode’, which is the
BasicNode placed within the window earlier in the process. Change both the Idle Action and OffShift Action to ‘Park
At Home’ so that the workers go to the home node when not working at a Server. Change the Park While Busy to
‘True’. 396 / 1277
‘True’.
Adding a ModelEntity State
Within the Navigation window (top right), all above work has been in the ‘Model’. Now, click on the ModelEntity, as
a state to the entity will be added for keeping the efficiency factor. Go to the Definitions window (of ModelEntity)
and select the States panel. Add a Real state variable to model entity with the Name ‘EfficiencyFactor’. This will be
used to store the efficiency factor of the worker that the entity seizes once in a server. It can be referenced as
‘ModelEntity.EfficiencyFactor’.
Within the Navigation window, highlight the Model and go to the Facility window. Place a ModelEntity object from
the Project library. Change the Dynamic Label Text (under Animation section of properties) to
‘ModelEntity.EffiencyFactor’. This will then show the value of the worker efficiency once the entity has entered a
server and seized a worker from the list.
Calculating the ModelEntity.Efficiency
Go to the Processes window and add a new process with the Name ‘WhichWorkerAllocated’.
Add a Search step to the process and specify the Collection Type as ‘SeizedResources’. This will search the associated
object (entity) for all seized resources that it has, including the server itself, as well as the worker allocated (provided
this process is called AFTER both resources have been seized). To filter out the server and only include the worker in
the search candidates, add a Match Condition of ‘Candidate.Object.Is.Worker’.
Under the Found exit of the Search, add an Assign step. Here, we will use the token associated with the seized worker
that is found to determine the efficiency of that worker from the WorkerInfo table. Assign the State Variable Name of
‘ModelEntity.EfficiencyFactor’ to the New Value of ‘WorkerInfo.EfficiencyFactor’.
Changing Server Logic
The following steps should be done for each of the three Servers. They can be done simultaneously by using Ctrl-
click to highlight all three Servers.
Within each Server, change the Processing Time to '1 / ModelEntity.EfficiencyFactor'. This will take the standard
processing time (assumed in this case to be 1 minute) and divide by the efficiency of the worker that is allocated to
the entity (in the above step).
Under the Secondary Resources section, change the Object Type to ‘Select From List’ and Object List Name to
‘WorkerPool’. To move the worker to the server, change the Request Move to ‘ToNode’ and the Destination Node to
‘Server.Input’.
Under the Add-On Process Triggers, specify ‘WhichWorkerAllocated’, which is the process added in above section, to
the Processing field. Note that this add-on process will occur after the server and worker have been allocated, just
prior to starting the processing time.
Enhancements (done within this model):
Add a work schedule to one or more of the workers so that one goes off-shift for a portion of time. In this model, the
StandardWeek work schedule has been modified and added to WorkerA.
Model 2: ComplexWorkerPool
Problem:
I have a group of workers that have different efficiencies and skill abilities for particular workcenters. I want to pick the
most efficient worker with the skill level for the workcenter and then adjust the processing time accordingly.
Categories:
Add-On Process Logic, Data Tables, Entity Characteristics, Worker
Key Concepts:
Add-On Process, Assign Step, Candidate, Dynamic Label Text, Request Move, Search Step, SeizedResources, Select From
List, Selection Condition, Selection Expression, Selection Goal, Server, Table List, Transporter List, Worker
Assumption:
We will request the most efficient worker from the worker pool that has the appropriate skill requirements and then
determine the worker efficiency from the data table.
Technical Approach:
There are three types of workers with information regarding each, such as walking speed, efficiency, cost and skill abilities,
defined within a table. The entity will seize the most efficient worker available, given the skill level requirement for the
397 / 1277
defined within a table. The entity will seize the most efficient worker available, given the skill level requirement for the
server. Once the worker is allocated, an entity state will be used to store the efficiency factor related to the seized worker.
This value is then used as a divisor within the Server’s Processing Time entry.
Details for Building the Model:
Simple System Setup
Same as Model 1 above.
Defining the Workers and WorkerInfo Table
Same as Model 1 above except do not define a Transporter List within the Definitions window, as a table list (using
WorkerInfo.WorkerType as the list) will be used.
Witihin the Data window, change the values in the EfficiencyFactor column so that WorkerA is ‘1.8’, WorkerB is ‘1.6’
and WorkerC is ‘2’ (meaning WorkerC will be most efficient and processing time calculation smallest).
Add an Expression type column named ‘Cost’ and enter ’20’ for WorkerA, ‘16’ for WorkerB and ‘21’ for WorkerC. Add
three Boolean columns named ‘Server1’, ‘Server2’ and ‘Server3’. These will be used to determine whether a worker is
skilled on a Server. Change the following to ‘True’ (checked). WorkerA is skilled on all servers, WorkerB is skilled on
Server1 and Server3, and WorkerC is skilled on all servers.
In the Facility window within each of the worker instances, add the Idle Cost Rate and Usage Cost Rate (under
Financials) as ‘WorkerInfo.Cost’.
Adding a ModelEntity State
Same as Model 1 above.
Calculating the ModelEntity.Efficiency
Same as Model 1 above.
Changing Server Logic
The following steps should be done for each of the three Servers. They can be done simultaneously by using Ctrl-
click to highlight all three Servers.
Within each Server, change the Processing Time to '1 / ModelEntity.EfficiencyFactor’.
Under the Secondary Resources section, change the Object Type to ‘Select From List’ and Object List Name to
‘WorkerInfo.WorkerType’. Instead of selecting the worker from the table in preferred order ( WorkerA, WorkerB, then
WorkerC), change the Selection Goal to ‘Largest Value’ and the Selection Expression to
‘Candidate.WorkerInfo.EfficiencyFactor’. This will select the worker with the largest efficiency factor (and thus most
efficient based on processing time calculation). To move the worker to the server, change the Request Move to
‘ToNode’ and the Destination Node to ‘Server.Input’.
To incorporate the skill level selection of the worker based on the server location, change the Selection Condition to
‘Candidate.WorkerInfo.Server** == True’ where ** is either 1/2/3 depending on Server Name.
Under the Add-On Process Triggers, specify ‘WhichWorkerAllocated’, which is the process added in above section, to
the Processing field. Note that this add-on process will occur after the server and worker have been allocated, just
prior to starting the processing time.
Enhancements:
Note that the work schedule enhancement with the above Model 1 was not included in this example. Potential
enhancement includes changing the Selection Goal and Selection Condition to select the lowest cost worker.
398 / 1277
Simio Reference Guide
WorkersArriveLateToShift - SimBit
Problem:
I would like to model the fact that my Worker will sometimes arrive late to Shift.
Categories:
Building New Objects / Hierarchy, Custom Statistics, Decision Logic -- Processing, Discrete States, Schedules /
Changeovers, Worker
Key Concepts:
Active Symbol, Assign Step, Decide Step, Floor Label, NumberOccurences, Off Shift, On Shift, Schedules, Secondary
Resources, Server, TallyStatistic, WorkSchedule, Worker
Assumptions:
This model assumes that the worker could arrive late to all shifts, including the shift that begins after the lunch hour break.
Technical Approach:
A Server seizes a Worker object before processing and releases it after processing. The standard Worker object is
subclassed in order to keep the original object definition, but allowing the user to make a few changes to the logic to
account for the fact that the Worker might arrive late. The new Worker’s OnCapacityChanged process is Overridden and
five new Steps are added to this logic. A Decide step checks the ProbabilityOfArrivingLate property and if the Worker is
late, the MinutesLateToShift property is assigned to a State variable and the picture of the Worker is set to Red. The
Worker delays for the assigned amount of time, a Tally step updates a TallyStatistic that keeps track of the minutes that this
Worker is late to the shift. Finally the picture of the Worker is set back to Blue and they return On Shift.
Details for Building the Model:
System Setup
Place a standard Source, Server and Sink object from the Standard Library into the Facility window and connect them
with Paths. Alternatively, click on the Actions (under Add-Ins) button on the Project Home ribbon and select the
Source, Server, Sink option.
Place a Transfer Node somewhere near the Server and name it WorkForServer1. Place another Transfer Node a short
distance away from the Server and name this WorkerHome. Connect these two nodes with a Path and set the Path’s
Type property to ‘Bidirectional’. This will be the path that the Worker object takes.
Subclass a Worker
Right click on the Worker Object in the standard library and select Subclass. This will create a new object in the
Project Library called MyWorker. You’ll find this new object in the Project Library located in the bottom left part of
the interface, underneath the Standard Library
The new object definition for MyWorker appears in the Navigation window in the upper right corner. Click onto
MyWorker to enter into this new object. You’ll be in MyWorker’s Processes window at first.
Go to this object’s Definitions window and then click into the Properties panel. Create two new Expression properties
by selecting Expression from the Standard Property drop down menu in the ribbon.
Name the first property ProbabilityOfArrivingLate. In the CategoryName property of this new expression
property, type in ‘ArrivingLateToShift’. This creates a new property category which helps us keep our new
properties organized.
Name the second expression property MinutesLateToShift In the CategoryName property of this new
expression property, select ‘ArrivingLateToShift’ so this appears in the same category as the other new
property.
Click onto the States panel to add two new States to this object. Add a Real State by clicking on Real in the ribbon.
Name this new state, “MinutesLateToShift_State”. Add another Real State and name this new state
“AnimationPicture”. We’ll discuss how these are used in the details below.
Go to the Object’s Processes window. Find the OnCapacityChanged process. Click anywhere inside this process and
then click Override in the Process ribbon. The process should then turn white and you can now make changes to the
process.
399 / 1277
Place a Decide step directly after the first Decide step in that process, which is named IfOnShift. Name the new
Decide Step, “Late?”. Enter the expression “1-ProbabilityOfArrivingLate” into the Expression property of this new
Decide Step. The True segment leaving this step will tell the token to continue with the original logic (i.e. go to the
Notify Step). The False segment will contain additional new logic.
Place an Assign step in the False segment leaving that Decide step. Set the State Variable Name to
‘MinutesLateToShift_State’ and the New Value to ‘MinutesLateToShift’. Note: Because the property can be entered as
a Random distribution, we want to get a value from this random distribution once (now) and assign it to a State
Variable. And then we’ll use this State variable in the upcoming Delay Step and Tally Step. If we were to instead use
the property in the Delay step and the Tally step, we’d sample the random distribution each time and therefore has
different values for the Delay and the Tally, thus making our statistics wrong).
In this same Assign step, add another Assignment where the State Variable Name is ‘AnimationPicture’ and the New
Value is ‘1’. This will allow us to turn the Worker Red when it’s late for its shift.
Place a Delay step next and set the Delay Time property to ‘MinutesLateToShift_State’.
Place a Tally step next and select ‘CreateNew’ from the drop down in the Tally Statistic Name property. Name the
new Tally Statistic ‘LateToShift’. In the Value property of this step, enter ‘MinutesLatetoShift_State’ so that we record
the value of the state into the new Tally Statistic. Note: The Simbit has a BreakPoint on this Step to help the user
easily see when the Worker arrives late.
Place an Assign step and set the State Variable Name to ‘AnimationPicture’ and the New Value to ‘0’. This will allow
us to change the color of the Worker back to Blue when its going back On Shift. Connect the process back up to the
beginning of the Notify Step so that the token will continue with the original logic to go back OnShift.
Add to the MyWorker1 Instance
Go back to the main model by clicking Model in the Navigation window. Drag an instance of MyWorker into the
Facility window.
Select MyWorker1 in the window and set the following properties:
Capacity Type to ‘WorkSchedule’
Work Schedule to ‘StandardWeek’
Initial Node (Home) to ‘WorkerHome’
OffShift Action to ‘GoToHome’
Find the new property category called “ArrivingLateToShift” where you should see the two new properties that were
created.
Set the ProbabilityOfArrivingLate to ‘1’ (100%)
Set the MinutesLateToShift to ‘Random.Uniform(5,10)’
With the MyWorker1 instance still selected, click on the Add Additional Symbol button in the Symbols ribbon. This
will add another symbol for this instance. Symbol 2 of 2 should be selected so click onto the Color ribbon button and
select Red and then click back onto the instance of MyWorker so that it turns Red. If you go back to symbol 1 by
selecting symbol 0 in the Active Symbol ribbon drop down, you’ll see that it is still Blue.
Ensuring that the MyWorker1 instance is still selected, open its Animation property category and find the property
Current Symbol Index. Set it to ‘MyWorker.AnimationPicture’ So when the logic in our MyWorker object sets the State
AnimationPicture to 1, the Red symbol will be displayed and when the logic sets it back to ‘0’, the Blue symbol will be
displayed.
Embellishments:
The SimBit includes some Floor Labels to describe the model and the properties of MyWorker1. One of the Floor Labels
displays the current value of the Tally Statistic we added to the MyWorker object. The expression
{ MyWorker1[1].LateToShift.Average * 60} displays the Average value of the Tally Statistic. Note: The expression must point
to a specific member of the MyWorker1 population (in this case [1]). This is because there might be more than 1
MyWorker1 in the model at any given time and this expression needs to know which MyWorker1 to look at.
400 / 1277
Simio Reference Guide
WorkerUsedForMultipleTasks - SimBit
Problem:
I have a system where my worker is responsible for both transportation type tasks, as well as inspection type tasks.
Therefore, the worker must move entities from one location to another, but also must be available at the inspection area to
perform stationary tasks.
Categories:
Worker
Key Concepts:
Add-On Process, BasicNode, Decide Step, Is.ModelEntity, On Entered, Request Move, Ride on Transporter, Seize Step,
Worker
Assumptions:
There is one worker who is responsible for both transport and stationary tasks. The worker does not take breaks or go off-
shift.
Technical Approach:
The worker will be responsible for moving entities from the Source to the Server so that the entities may continue
processing at the Server. This will be done by using the Worker as a Transporter type object. Additional entities are sent
through a node in need of inspection by the Worker. The Worker will move to the node for inspection and later return to
the transport tasks. Add-on Process Triggers at the node will be used to Seize and Release the Worker for this stationary
task.
Details for Building the Model:
System Setup
Add a Source, a Server, and a Sink to the Facility window. Connect the Source to Server and also the Server to the
Sink with Paths. Since the Worker will be moving the entities between the Source and Server, change the Type of path
to ‘Bidirectional’. Change the Source1 Interarrival Time property to ‘Random.Exponential(.5)’ minutes.
Add a Worker object to the Facility window.
Add a second Source, a BasicNode and a second Sink. Connect Source2 to BasicNode1 and also BasicNode1 to
Sink2 with Paths. The Worker’s inspection task will occur at the BasicNode. Change the Source2 Interarrival Time
property to ‘5’ minutes.
Finally, add a Path between the input node of Server1 and the BasicNode1. This will allow the worker to move
between the various tasks. Change the path’s Type property to ‘Bidirectional’.
Requesting the Worker for Transport Task
Within the output node of Source1 – Output@Source1, change the Transport Logic properties to reflect that a
worker is needed to move the entity from location to location. This is done by setting the Ride on Transporter
property to ‘True’ and Transporter Name to ‘Worker1’.
Requesting the Worker for Stationary Task
Entities coming from Source2 will require the Worker for the inspection process, which will be done at BasicNode1.
Within BasicNode1, create a new process in the Entered Add-On Process Trigger named ‘BasicNode1_Entered’.
Within the Processes window, place a Decide step into the BasicNode1_Enterer process. This will be used determine
whether the object entering the node is the entity (coming from Source2) or the worker (coming to do the
inspection). The Decide Type should be ‘ConditionBased’ and the Expression should be ‘Is.ModelEntity’.
In the True segment leaving the Decide step (which will be the ModelEntity objects), place a Seize step, Delay step,
then Release step.
Within the Seize step, set the Object Name property to 'Worker1', the Request Move to ‘ToNode’ and the Destination
Node to ‘BasicNode1’. This will not only give control of the Worker to the entity by using the Seize, but will cause the
Worker to move to the entity’s location at BasicNode1.
Within the Delay step, change the Delay Time to ‘2’ and the Units to ‘Minutes’. In the Release step, set the Object
Name to 'Worker1'. 401 / 1277
Name to 'Worker1'.
In the False segment leaving the Decide step, there will be no additional logic. Only the token associated with the
incoming Worker will be coming out the False exit and no additional logic is required. However, we used the Decide
so that the Worker would not also try to Seize (itself) upon entry to the node.
Placing Parking Queues for the Worker
When Worker1 is not being utilized, it can be animated at its node location by placing a parking queue. In the Facility
window, click on the Animation tab and select Detached Queue. Place a queue by left clicking once to start the
queue, dragging the mouse and left clicking again to place the end of the queue. Right click to end the queue
placement. The Queue State for the Source1 location should be ‘[email protected]’.
Parking areas should also be added to the Server 1 (‘[email protected]’) and BasicNode1
(‘BasicNode1.ParkingStation.InProcess’).
402 / 1277
Simio Reference Guide
WorkerUsesWorkSchedule - SimBit
Problem:
I have a system where my worker is responsible for helping with operations at two different locations. The worker takes
breaks and goes off-shift based on a work schedule.
Categories:
Worker, Schedules / Changeovers
Key Concepts:
Off Shift, On Shift, Request Move, ResourceState, Schedules, Secondary Resources, Worker, WorkSchedule
Assumptions:
There is one worker who is responsible who performs stationary tasks at two server locations. The worker goes on break at
a different location.
Technical Approach:
The Worker will be responsible for helping processing at both Server1 and Server2. Add-On Process Triggers will be used
to specify that the Worker is required at node locations associated with the Servers. A Work Schedule will be defined to
specify when the worker is On Shift and Off Shift.
Details for Building the Model:
Simple System Setup
Add a Source, two Servers, and a Sink to the Facility window. Connect the Source to each Server and also both
Servers to the Sink with Paths. Set the Allow Passing property on all paths to ‘False’.
Change the Source1 Interarrival Time property to ‘10’ minutes. Change the Server1 and Server2 Processing Time
properties to ‘Random.Triangular(6,8,10)’. Keep all Time Units as ‘Minutes’.
Add a Worker object to the Facility window.
Add three BasicNode objects to the Facility Window. Place one directly below Source1, one directly above Source2
and the third one to the right and middle of the other 2 BasicNodes. These will be used as the locations between
which the worker moves. Connect the three paths in a triangle by using Paths and change the Type of each to
‘Bidirectional’.
Requesting the Worker for Stationary Tasks
Worker1 will be required at for processing at both Server1 and Server2.
Within Server1, enter the Secondary Resources / Resources for Processing section of properties and set the Object
Name property to ‘Worker1’, the Request Move to ‘ToNode’ and the Destination Node to ‘BasicNode1’. This will not
only give control of the Worker to the entity, but will cause the Worker to move to BasicNode1.
Within Server2, do the same thing except set the Node Name to ‘BasicNode2’ so the Worker moves to the
BasicNode2 node to process at Server2.
Defining the Worker’s Work Schedule
Within the Data tab, Schedules panel, click on the Work Schedule button to create a new work schedule with the
Name ‘Schedule1’. Change the Days to ‘1’.
Add a Day Pattern with the Name ‘DayPattern1’ and click the ‘+’ to enter the information for the day pattern.
Add four rows to reflect the on shift times, which will all have a Value of ‘1’. The times are 12:00 AM – 12:30 AM, 1:00
AM – 2:00 AM, 2:30 AM – 4:00 AM and 4:30 AM – 12:00 PM. All other times are assumed the capacity value of 0 or
off shift.
IMPORTANT NOTE: With Worker object schedules, the Value field within the Day Pattern should be set at either 0 or
1 (but not greater than 1). This is because the capacity of the dynamic set of Worker objects is based on the Initial
Number in System property defined within the Worker. The work schedule is used to define only On Shift and Off
Shift times for the ‘group’ of workers.
Back in the Work Schedule tab, select ‘DayPattern1’ for Day 1.
403 / 1277
Defining the Worker’s Characteristics
Within the Worker1 object, change the Capacity Type to ‘Work Schedule’ and the Schedule Name to ‘Schedule1’.
Within the Routing Logic properties, add an Initial Node (Home) property of ‘BasicNode3’. Worker1 will start out the
simulation at this location. When the worker is idle, it will stay where it is located, so set the Idle Action property to
‘Remain In Place’. When the worker goes off shift, however, we will move it back to BasicNode3, so change the Off
Shift Action to ‘Go To Home’.
Optional: Changing Worker Animation Symbol
Change the Current Symbol Index property of the worker ( Animation) to ‘Worker.ResourceState’ such that the value of
the worker’s resource state will be used to animate the worker in various colors depending upon the state that it is in
(i.e., Idle, Busy, OffShift, etc.).
The resource state values for a Worker are Idle = 0, Busy = 1, OffShift = 4, OffShiftBusy = 6, Transporting = 7 and
OffShiftTransporting = 9. In this example, the worker doesn’t do any transporting, thus states Transporting and
OffShiftTransporting are not used. Highlight the Worker1 object and select the Add Additional Symbols button from
the Symbols tab. To animate all possible states, there should be 7 symbols (numbered 0 – 6).
Change the color of the various symbols to reflect the states by clicking on Active Symbol (1 of 7) and selecting the
symbol to change. Once the Active Symbol has changed, the Color can be changed by selecting the appropriate
color and then clicking on Worker1.
404 / 1277
Simio Reference Guide
WorkerUsesWorkSchedule_InterruptWorkingOffShift
- SimBit
Problem:
I would like a Server and the secondary resource, a Worker, to stop processing an entity when the Worker goes off shift.
When the Worker comes back on shift, the Server and Worker will continue processing the interrupted entity for the
remaining processing time.
Categories:
Add-On Process Logic, Schedules / Changeovers, Worker
Key Concepts:
Add-On Process, Assign Step, Candidate, Interrupt Step, Math.If, Off Shift, Picture, Priority, Processing, Ranking Rule, Real
State Variable, Release Step, ResourceOwners, Save Remaining Time, Search Step, Secondary Resources, SeizedResources,
Status Pie, Transfer Step, Token, Token State, Worker, WorkSchedule
Technical Approach:
Entities are sent to one of two servers, and each server requires the worker to perform a process. Every 30 minutes, the
worker goes off shift for 30 minutes. If the worker goes off shift while processing an entity, the process is interrupted, the
entity priority is increased, and the entity goes back to the server’s input buffer. When the worker goes back on shift, the
unfinished entity is processed first for its remaining processing time because it has the highest priority.
Details for Building the Model:
Simple System Setup
Place a Source, 2 Servers, a Sink, a Worker and 3 BasicNodes into the Facility window. Place BasicNode1 next to
Server1, BasicNode2 next to Server2 and BasicNode3 between BasicNodes 1 and 2.
Using Paths, connect Source1 to both Servers and each Server to the Sink.
Connect BasicNode1 to BasicNode2, BasicNode2 to BasicNode3, and BasicNode3 to BasicNode1 (creating a
triangle). Change the Path Type property to ‘Bidirectional’ for each path connecting the three BasicNodes.
Place a ModelEntity object from the Project Library into the Facility window.
Within the Source, change the Interarrival Time to ‘10’ minutes.
Edit the Worker, change the Initial Node (Home) property to ‘BasicNode3’. Change the Idle Action to ‘Remain In
Place’ and the Off Shift Action property to ‘Go To Home’. Change the Ranking Rule property to ‘Largest Value First’
and set the Ranking Expression as ‘ModelEntity.Priority’.
Change Server1 Ranking Rule property to ‘Largest Value First’ and set the Ranking Expression as ‘ModelEntity.Priority’.
Also expand the Secondary Resources property category, and in Resource for Processing set the Object Name
property to ‘Worker1’. Change the Request Move to ‘To Node’ and the Destination Node to ‘BasicNode1’.
Repeat the above step for Server2, but set the Destination Node property to ‘BasicNode2’ instead of ‘BasicNode1’.
Work Schedules
Go to the Data Window and click on the Schedules View. Change the first row Name on the Day Patterns tab to
‘DayPattern1’ and expand DayPattern1. In the Start Time column set the rows as 12:00 AM, 1:00 AM, 2:00 AM,…,11:00
AM. Set all the rows in the Duration column to ’30 minutes’ and set the End Time column as 12:30 AM, 1:30 AM, 2:30
AM,…,11:30 AM respectively. The Value of the Worker Capacity during these times is 1 (on shift), otherwise it is 0 (off
shift).
Change the first row Name on the Work Schedule tab to ‘Schedule1’, set the Days column to ‘1’, and set the Day 1
column to ‘DayPattern1’.
Click on the Worker1 object in the Facility window and change the Capacity Type property to ‘WorkSchedule’ and
change the Work Schedule to ‘Schedule1’.
ModelEntity
Within the Navigation window, click on ModelEntity. On the ModelEntity Definitions window, click the States panel
and add a new State (type Real) with the Name ‘RemainingProcessingTime’. Change the Unit Type property to ‘Time’.
This will be referenced as ‘ModelEntity.RemainingProcessingTime’ in the main model.
In the Model Facility window, change the Processing Time property of both Servers to
‘Math.If( ModelEntity.RemainingProcessingTime > 0, ModelEntity.RemainingProcessingTime, Random.Triangular(16,
18, 20))’.
405 / 1277
Add On Process Logic for Worker1
In the Definitions window, under the Tokens panel, click Add Token to add a new token called ‘MyToken1’. Add two
Object Reference States and call them ‘WorkerInstance’ and ‘ServerInstance’.
In the Processes Window, click Create Process and rename the process ‘ResourceOffShift’. In the process logic do the
following:
Open the process properties by clicking the white space in the process. In the Advanced Options, change the
Token Class Name property to ‘MyToken1’. This process will use MyToken1 instead of the base token so the two
object reference states can be used.
Place an Assign step and set the State Variable Name property to ‘MyToken1.WorkerInstance’ and set the New
Value to ’Worker’.
Place a Search step after the Assign step and change its Collection Type to ‘ResourceOwners’. This will search
for the entity that seized the worker for processing.
On the Found segment of the Search step, place another Search step. Change its Collection Type to
‘SeizedResources’ and its Match Condition property to ‘Candidate.Object != MyToken1.WorkerInstance’. This
will search for the objects seized by the associated object (the Entity) but only find objects that are not the
Worker.
In the Found segment of the second Search step, place an Assign step and set the State Variable Name to
‘MyToken1.ServerInstance’ and New Value to ’Server’.
Place an Interrupt step after the Assign step. Change the Process Name to
‘MyToken1.ServerInstance.Server.OnEnteredProcessing’ and under Advanced Options, set Save Remaining Time
to ‘ModelEntity.RemainingProcessingTime’.
On the Interrupted segment place an Assign step. Change the State Variable Name property to
‘Modelentity.Priority’ and the New Value to ‘2’.
Place a Transfer step after the Assign step. Change the From property to ‘CurrentStation’, the To property to
‘Station’ and the Station Name to ‘MyToken1.ServerInstance.Server.InputBuffer’.
On the OK segment leaving the Transfer step, place a Release step. Click the 3 dots on Resource Releases and
add 2 Resource Releases. In the first one, set the Object Name to ‘MyToken1.WorkerInstance’ and in the second
one, set the Object Name to ‘MyToken1.ServerInstance’.
In the Facility window, select Worker1 and expand the Add-On Process Triggers property category. Set Off Shift to
process ‘ResourceOffShift’. This process will be triggered whenever the Worker changes its state to OffShift.
Animation
Select the Entity and click the Add Additional Symbol button on the Symbols Ribbon to add a second entity picture.
Click the Active Symbol button and select the symbol index 1. Click the Color dropdown and select Red. Then click
the Entity Instance to turn the entity red.
Select a Server object and expand the Add-On Process Triggers property category. Add a process in Processing by
double clicking the name Processing. This automatically creates a new process and moves to the Processes Window.
This new process will be triggered whenever the Server starts processing.
Place an Assign step in the process and change the State Variable Name property to ‘Modelentity.Picture’ and
the New Value to ’1’. That will help to visualize the entity that is being processed and locate the interrupted
entity when the worker goes off shift.
Add the name of the process created above to the other Server object in the Processing Add-On Process
Trigger.
Add a Status Pie to the Facility window and change the Data Type property to ‘ListState’ and the List State to
‘Worker1[1].ResourceState’. Also change its Text Scale to '0.75'.
In the Run ribbon, set the Speed Factor to '30'.
406 / 1277
Simio Reference Guide
WritingToAFile - SimBit
Problem:
I’d like to write values to a file during the run.
Categories:
File Management
Key Concepts:
Assign Step, Event, File Element, Monitor, Write Step, Write Step
Assumptions:
This model writes to a .csv file.
Technical Approach:
This model has a state variable that keeps track of the number of entities in the queue for Server 1. A monitor watches this
variable and writes the value of the variable and the current simulation time to a .csv file every time the value of that
variable changes.
Details for Building the Model:
Simple System Setup
Add a Source, Server and Sink object to the Facility Window.
Creating a New State Variable
Create an Add On Process that is triggered when an entity enters the Input Buffer of the Server.
Add an Assign Step to this process and in the State Variable drop down, select Create New.
Name the new state variable ‘ServerQueue’.
The New Value property should be set to ‘ServerQueue + 1’.
Create an Add On Process that is triggered when an entity hits the Processing station of the Server.
Add an Assign Step to this process and select ‘ServerQueue’ as the State Variable.
The New Value property should be set to ‘ServerQueue – 1’.
Creating a Monitor Element
Create a new Monitor Element from the Definition Window’s Element panel. The Monitor Type is
‘DiscreteStateChange’ and the State Variable should be set to ‘ServerQueue’.
Creating a File Element
While in the Elements panel, create a new File Element from the User Defined ribbon icon. Set the FilePath to a
location where you have permission to create a new file. The example uses the file name ‘WritingToAFile.csv’.
Adding Logic to the Model
In the Processes Window, add a new process by clicking the Create Process icon in the ribbon.
Set the Triggering Event for this new process to be ‘Monitor.Event’ – where “Monitor” is replaced with the actual
name of your Monitor element.
Add a Write Step to this process. It can be found in the User Defined Steps. Select the new File element that
was created. Add two items to the Items property. The first item should be the ‘TimeNow’ function, which gives
the current simulation time. And the second item should be the ‘ServerQueue’ state variable.
The format property is set to ‘{0}, {1}’. The {0} is replaced with the value of the first item, in this case,
‘TimeNow’. The {1} is replaced with the value of the second item, in this case, ‘ServerQueue’. The values are
written to the file each time the Monitor element fires its event, which is each time the value of ServerQueue
changes.
407 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
408 / 1277
Simio Reference Guide
Basic Search
The Basic Search a general search that allows the users to search categories, Simbits name and Simbits related keywords
and descriptions at the same time. The user can enter any word or set of words in the search field. The search engine will
look for all the Simbits that contain the word(s) within its keywords, categories or description.
Advanced Search
The Advanced Search is a more refined search that allows the users to look up Simbits by filtering on one category and up
to three keywords. The Category field includes twenty four (24) different general areas under which a SimBit may be
classified. Some SimBits are shown under multiple categories. The main SimBits help page shows the various categories
and the SimBits within them. The three Keyword fields include more than 250 words that may be used to find a specific
modeling concept or Simio step, function or property.
The default behavior searches the SimBits for the Category AND [Keyword1 OR Keyword2 OR Keyword3] specified. A
User may choose not to enter a category and only search by one or more keywords. This is accomplished by leaving the
category field blank.
The “Require all keywords (and)” button allows for “AND” logic search that will list the results of searching for Keyword1
AND Keyword2 AND Keyword3. Thus the default search logic is replaced by Category AND [Keyword1 AND Keyword2
AND Keyword3]. The search engine will ignore any empty fields when performing the search, be it a keyword or category.
The 'Reset' button to the right of the keywords will reset all keywords and the category to blank fields.
In the following example, the Category is 'Decision Logic -- Processing' and two keywords are used 'Add-On Process' and
'ResourceState'. This will search only the SimBits within the specified category looking for either of the the keywords
specified. If the “Require all keywords (and)” button was on, the search would require both the 'Add-On Process' and
'ResourceState' keyword to be in the SimBit's description, name and/or key concepts section.
409 / 1277
Search Results
The number of SimBits found by the search is displayed in the Search Results section. Note that even if a SimBit is
displayed in multiple categories, it is only counted as a single SimBit found.
The user is given the option of displaying the list of results by Category or Simbit Name. When displaying the results by
Category, some simbits will be displayed more than once as one SimBit can be classified under different categories. The
name of the SimBit is listed, along with the general description. Additional information, including the categories, keywords
and general description of the SimBit are also shown.
410 / 1277
Simio Reference Guide
Examples
An Example is a complete Simio model that illustrates how to use Simio. Each example has description that explains the
details of the model within a *.pdf file that will open automatically when the example is loaded. The example *.spfx files
can be found in [public documents]\Simio\Examples.
Below is a list of the Examples.
AirportTerminal
ClaudesPizza
HospitalEmergencyDepartment
InfectiousDiseasePlanning
ManufacturingAssembly
MiningExample
MultiEchelonSupplyChain
PackagingSystem
SchedulingBatchBeverageProduction
SchedulingBicycleAssembly
SchedulingDiscretePartProduction
WarehouseExample
Note that the SchedulingDiscretePartProduction (formerly named RPSExample) and other scheduling examples were
developed in Simio RPS (Enterprise) Edition. On-line help is available on all Simio RPS (Enterprise) features discussed in
Scheduling examples within the Scheduling in Simio RPS (Enterprise) help sections.
There is a folder within the [public documents]\Simio\Examples area named ProcessImprovementPrinciples. This folder
contains many small models that correspond to the Process Improvement Principles discussed in the book that is available
through the Support ribbon, Books section.
411 / 1277
Simio Reference Guide
AirportTerminal - Example
General Description
This model represents an Airport Terminal. The general process flow is as follows:
Passengers enter the airport
Passengers move to one of three check-in areas (2 self check-in and 1 full service counter)
Passengers move into security check
Bags are ‘separated’ from passengers and continue through xray
Passengers go through xray area
Bags and passengers are reunited
Passengers move to one of two large waiting areas for plane departure
* This example includes an ‘Experiment’ that utilizes input variables to run various configuration scenarios.
Detailed Description
Model Properties
Within the model’s properties, there are 4 options that can be set, including the number of self CheckinKiosks,
CheckInClerks, IDChecks and ScannerStations. These 4 properties can be varied within the experiment to evaluate various
scenarios. Additionally, the value of these properties may change the logic within the model itself.
In addition to the 4 visible properties discussed above, there are a number of hidden properties ( Visible property set to
‘False’) that are used to track the costing information. These are used in the calculations for the Cost, Revenue and Profit
output statistics for the simulation model.
Passenger Arrival
Two sources create passengers into the airport – one ( EarlyPassengers) that creates 20 groups of between 1-3 to start up
the system, the other ( Entrance) on an arrival rate basis. Passengers move with their bags from the entry doorway to one of
three areas – two self checkin areas (with up to 4 servers each) and one full service counter (with up to 3 checkin clerks).
As the passengers enter the airport, there are three paths. The selection weight on the two of the paths is based on the
value of the properties for CheckInKiosks and CheckInClerks. The value of IDCheck passes directly into the capacity of the
IDCheck server. The ScannerStations capacity (1 or 2) will turn on/off the path that is leading to the second scanner station.
This is done through an add on process for the path and will turn the direction to ‘none’ if there is only a single scanning
station to prevent passengers from entering that path.
Security Area
Upon creation of the passenger, a bag was created and they were batched. After checkin, all passengers move to the
security area, where they are moved through one of two xray areas. Bags are ‘separated’ from the passengers and continue
through their own xray process. A separator is used at the scanners to split the passenger and his/her bag. Bags and
passengers are reunited after the xray processes. Batch steps at the end of the scanners for both parent and member are
used.
Plane Departure Waiting Areas
The passengers ‘wait’ in the two large waiting areas for a plane. Timer elements are used to schedule plane events, causing
the passengers to leave the waiting area once the event occurs.
Experiment
This example is unique in that it has a defined experiment that includes 4 controls, 3 responses and 1 constraint. The
controls are the properties discussed above and include the capacities for the main resources within the model. In Simio
Personal Edition, only 2 of these controls can be included in the optimization; however, in versions with an OptQuest
license, all 4 controls can be used. The responses include the costing information related to those resources and are
calculated based on the number of each of those resources. The constraint requires there to be at least one clerk for every
two checkin kiosks.
412 / 1277
Send comments on this topic to Support
413 / 1277
Simio Reference Guide
ClaudesPizza - Example
General Description
This model represents a Pizza by the slice restaurant. The general process flow is as follows:
Group of customers enter the restaurant
Individual customer places an order
Customer pays for order
Employee places slices in the oven to reheat
Customer waits for Pizza to come out of the oven
Once reheating is complete the customer waits for the rest of the group (or joins waiting group)
Group sits down at table (or waits for an available table)
Group eats pizza
Throws away trash at the trash can
Leave restaurant
*When the Trash Cans have 15 or more Dirty Trays, an employee will collect them and bring them back to the counter.
Detailed Description
Creating Unique Individuals in Groups
Groups enter the restaurant, each group consists of 1 to 4 customers, and each customer will order 1 to 3 pieces of pizza.
Upon entering the restaurant ( Before Exiting the Source) we assign CustomerEntity.GroupSize,
CustomerEntity.GroupNumber, CustomerEntity.EatingTime, and CustomerEntity.Picture. Then, in the Output@Source Node
we create a process that creates the rest of the group via a Create step set to Create Copies. We then re-assign a Picture so
they are not the same throughout the group. This process allows the group to have the same values for the GroupSize,
GroupNumber, and EatingTime which all come into play later in the model. Then, at various points in the model we assign
State values for the number of pieces of pizza and if the customer is considered a parent. By Creating Copies before
assigning these States, we allow some parts of the entities to be the same, and others to differ.
Creating the Pickup Counter Object
After the Pizza has been taken out of the oven, the pieces go onto a Tray according to the State TrayEntity.OrderSize that is
based off the state CustomerEntity.Ordersize (which is assigned when the customer enters the Path leading to the Cash
Register). Then the customer carries the Tray (that is carrying the Pizza) to the Table. This can be done using 2 Combiner
Objects, or in this model we made one simple object that combines all three Entities.
There are three Entities that are going to enter this object with two separate Batch Logic Elements that are to be used to
join the Entities together - first the Pizza gets batched to the Tray, then the Tray gets batched to the Customer. The
PickUpCounter Object uses Station Elements to do the batching, each Station is designed to do a portion of the batching.
There are 3 Input Nodes: one for Tray, Pizza, and Customer. Each one of these nodes corresponds to an InputBuffer where
the object waits for the corresponding Parent/Member for its batch logic. After the Tray and Pizza are combined, the pair is
transferred to an intermediate station where it attempts to Batch the Pizza/Tray as a Member with the Customer. After
everything is batched together, the Customer is transferred to the OrderFulfilled node.
Creating the Trash Can Object
The Trash Can is Similar to the Counter except it was created using Standard Library Objects instead of processes. The trash
can consists of 2 separators, the first one separates the customer from the Tray and Pizza, and the second separates the tray
and pizza – with the pizza going into a Sink to destroy it.
Then, we defined an external view with one input node and 2 output nodes: one for the customer that leads to the Exit, and
one for the tray which (in the model) is set to RideOnTransporter = True so that the worker can come pick up the waiting
trays.
Creating the Table Objects
After the group is together (leaves the WaitForGroup Combiner), the group is routed to an available table. After routing to
the table, the group is Unbatched so that they can each sit in their own seat at the table. One difficulty is that if the group is
smaller than 4 members, there is still remaining capacity at the table and some groups could be routed to the table even
though it is technically occupied. This requires some add-on processes to a standard Server Object. To avoid having to
create add-on processes at each table, we created a new table object.
414 / 1277
This object consists of two stations, SplitStation and EatingStation. When the SplitStation is entered, we Unbatch the group
and transfer the Parents and Members to the EatingStation. After the transfer we assigned the SplitStation.CurrentCapacity
to 0 – this means that the table is no longer considered available and no customers can be routed to this table, even if
there is available capacity.
Then, after Delaying for EatingTime, we assign the Capacity of the SplitStation back to its original value, signifying that the
table is available for new customers.
415 / 1277
Simio Reference Guide
HospitalEmergencyDepartment - Example
General Description
This model represents a small Emergency Department ( ED ) consisting of a waiting area, a registration desk, a triage room,
a radiology station, a billing area, 6 beds and 6 rooms that are used for patients that are admitted into the hospital.
Patients enter the ED through the front door entrance and go directly to the registration desk. After they are registered,
they wait in the waiting area to be sent to the triage room. After they are seen in the triage room, they wait in the waiting
area for an available bed. When a bed and a nurse are both available, the nurse greets the patient and walks them to the
bed. The patient waits in the bed for an available doctor, who is accompanied by a nurse. They finish treating the patient
and the patient either visits billing before exiting the ED or is sent to the Radiology room. If a patient is seen at Radiology,
they are either sent to billing and then sent home or they are admitted into a room for a longer stay. Once admitted into a
room, the patient is again visited by a doctor and a nurse and then released to billing and then home.
Patients also enter the ED from an ambulance. The ambulance can carry up to 2 patients . They arrive at the emergency
entrance and are greeted by a nurse who will walk them directly into a room. After being treated by a doctor, an
emergency patient will either visit billing or the Radiology department.
There are several statistics collected in this model. The details of these statistics are discussed below. The Facility window
contains two different floor labels with statistics and the Console window contains floor labels, status pie charts and status
plots.
A small experiment can be used to vary the number of nurses, the number of doctors and the number of radiologists to see
the impact on Average Wait Time for Doctor, Number of Patients in System and Average Length of Stay.
Detailed Description
System Initialization
The system does not begin empty. It is initialized so that there are patients in the system at the beginning of the model run.
This is controlled by a process called “OnInitialization” which is executed when the main model is first initialized. This
process searches a Data Table called 'Initialization' and uses the content of this table to create a set number of patients,
with certain priorities and place them in a specific location (station) within the model. This is done with the combination of
a Search step, Create step, Assign step and Transfer step.
Patient Arrivals
The large main door is the Source of the main arrivals of patients. This Source uses a Rate Table to determine the rate of
arrivals into the system. The Source also references a Data table named 'PatientPriority' which determines the type of
patient to create and therefore which symbol to display for the entity.
Arrivals are created for the Emergency entrance from a Source that can be found off on the “road” to the side of the ED
near the ambulance. This Source also references the PatientPriority table to assign a priority to a patient. There is an Add-
On Process on this Source that checks to see if all the Rooms are full after the patient is created. If there is no room in this
Emergency Department for this patient, a state variable is incremented to keep track of the number of Diversions from this
hospital and then this patient is destroyed and not sent into the ED. But for most patients created, they request a ride on
the ambulance vehicle and are dropped off at the emergency entrance where they are met by a nurse who walks them to a
room.
Registration, Waiting Area and Triage
The registration desk is a standard Server with Initial Capacity of '3'. After the patients are registered, they visit the Server
named 'WaitingAreaBeforeTriaged', which has the symbol of a set of waiting rooms chairs. They visit Triage when it is
available and then sit at the Server named 'WaitingArea_PostTriaged' until a bed and nurse are available. The nurse arrives
to walk the patient to the bed. The nurse is a standard Worker object that is requested in the TransferNode 'ToBeds', by a
patient.
Beds, Rooms, Radiology and Billing
A Bed is an object that is part of the Project Library. It is a subclassed version of the standard Simio Server object. A
patient will arrive at a bed and lay down using the assignment of State Variable Name ‘ModelEntity.Animation’ with a New
Value of ‘Sleep’.
Each instance of the Bed requests a Doctor to visit using the Resource For Processing section of the Secondary Resources
properties. The Before Processing property in the Other Resource Seizes properties requests a Nurse to visit this bed. Once
416 / 1277
properties. The Before Processing property in the Other Resource Seizes properties requests a Nurse to visit this bed. Once
the Doctor and the Nurse arrive, the processing begins at this Bed and then both the Doctor and Nurse are released. Link
Weights on the Paths leaving the output node of each Bed determine the percentage of patients that visit Radiology vs
Billing.
A Room object is very similar to a Bed object. Patients are only routed to a Room if they are sent there after visiting
Radiology or if they arrive through the Emergency entrance.
The Radiology department is a standard Server object, with the capacity of '1'. The Billing desk is a also a standard Server
object. All patients leaving the Billing desk travel to the front door and exit the system.
Statistics
The following statistics are collected and displayed in the Facility window. Utilization statistics, status charts and plots can
be found in the Console window ( Definitions tab, Console panel). The Math.Round function is used within the floor labels
to truncate display of real numbers to a single decimal point.
Average Wait Time to See Doctor: The wait time is calculated with a Tally Statistic on the Bed object and this
overall value is found by taking an average of the wait times of all the beds.
Number of Patients Admitted: This is calculated with a Tally Statistic that records the number of patients that are
admitted into a Room.
Percentage of Beds and Rooms Occupied: This is calculated with a State variable that tracks the number of Beds
and Rooms occupied at the current time.
Number of Diversions From Hospital: This is calculated with a State variable that tracks the number of times that a
patient wanted to enter the ED through the Emergency entrance but could not visit this hospital because all the
Rooms were full.
Average Number of Patients in System: This is a function on the ModelEntity, named
Population.NumberInSystem.Average
Average Wait Time for a Bed (min): This is calculated with a Tally Statistic that records the amount of time that a
patient waits for a Bed.
Average Length of Stay (min): This is calculated with a Tally Statistic that records the amount of time that a patient
is in a Bed or a Room.
Total Leave Without Being Seen ( LWBS): This is calculated with a State variable that tracks the number of patients
who arrive in the main entrance but leave because the waiting area is too full or the average wait time is too long.
Cost
Each Bed object, Room object, Nurse, Doctor and the Radiologist object have their Parent Cost Center property set to
‘CostOfStaff’. This will ensure that all the costs associated with these objects will get rolled up to the CostOfStaff cost
center. The Nurse, Doctor and Radiologist objects have their Usage Cost Rate and Idle Cost Rate properties populated
with a cost so that the model will calculate the cost of the staff both when they are idle and being utilized. Each time a staff
member is used by either a Bed or a Room object, the usage cost of the staff member is rolled up to the cost center of the
Bed or Room object, which is why these objects also have their Parent Cost Center set to ‘CostOfStaff’. The total cost for
this cost center can be found in the Results Pivot Grid. CostOfStaff is also used as a Response in the Experiment.
Experiment
An Experiment exists on the main model that varies the input of three Controls; 'Number of Nurses' and 'Number of
Doctors'. These controls appear in the experiment because they are all properties on the main model. The 'Number of
Nurses' property is referenced from the Initial Capacity property on the Nurse Worker object. The 'Number of Doctors'
property is referenced from the Initial Capacity property on the Doctor Worker object.
There are three Responses defined in this experiment.‘CostOfStaff.Cost’ indicates the cost that has been associated to the
Cost Center named CostOfStaff, while ‘Average Length of Stay’ contains the expression ‘LengthOfStayStatistic.Average *
60’, which references the Tally Statistic that tracks this duration. ‘Average Leave Without Being Seen’ references the State
Statistic that references the average number of patients that leave the system because the wait was too long.
Selecting the ‘Cost of Staff’ response will show that this Response has its Upper Bound set to ‘40000’, while the ‘Average
Length of Stay’ response Upper Bound is ‘36’ and the Upper Bound for the ‘Leave Without Being Seen’ is ‘120’. Notice on the
Experiment Properties (right click on experiment in the navigation window), you’ll see that the Objective Type property is
set to ‘Multi-Objective Weighted’, which will tell the OptQuest Add-In to take into account the three responses when
determining the best scenario, based on the objectives and weights of each response.
See the Experiments page, Experiment Dashboard Reports section, for more information on building a Dashboard Report
for this hospital example.
Dashboards
Patients Leave Without Being Seen – Shows patients that leave the hospital over time compared to current waiting times
for beds and rooms.
417 / 1277
Radiology – Show the time for each patient to be seen in Radiology as well as admitted vs non admitted comparisons.
Number Admitted – Shows the average number of patients admitted in the hospital by day of week and time of day…Also
shows the time of day that the patients were admitted.
418 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
419 / 1277
Simio Reference Guide
InfectiousDiseasePlanning - Example
Infectious Disease Planning
Purpose
During an infectious disease outbreak, the strain on health systems and healthcare professionals is unprecedented. There is
uncertainty in what demand a healthcare facility might see, and when it might surge. In response, the Simio team has
created a model to assess the capacity of critical resources for a hospital. The model uses a data-driven approach so users
could tailor the data to meet specifications of their service area and healthcare provider. It also demonstrates, more
generally, how a simulation model can act as decision support tool and provide value in dealing with change.
A healthcare provider’s ability to combat an infectious disease is directly impacted by their critical resource availability. All
inpatient cases will require a hospital bed, while machines like ventilators are crucial for patients that require intensive care.
The ability to anticipate demand for these resources in a facility is vital for a proactive planning strategy. With the model,
you will be able to experiment with the number of beds, ventilators, and personal protective equipment ( PPE ) items such as
masks, gloves, and gowns, to estimate the capacities and quantities needed for care delivery to the infected population.
This model may be instructional in its current state or used as a starting point to model a specific service area population
and healthcare provider.
Approach
Initialization and Tracking Infected Cases
The model accepts several user-adjustable parameters including the hospital’s Service Area Population,the initial number of
Reported Cases, the Contagion Factor (Ro), and a Social Distancing Factor, to calculate how the infection will spread over
the planning horizon: 20 weeks by default. The values of these parameters (or model “Controls”) may be set in the Model
Properties, shown in the Properties window, upon clicking blank space in the Facility window or right-clicking the name of
the model in the Navigation window towards the top right.
An OnRunInitialized Process called ‘DailyAssessmentOfInfectedCases’ will initialize the number of infectious cases in the
system by assuming that the Service Area Population minus Reported Cases is healthy. This process uses an Execute step to
start the ‘TrackingInfectedCases’ process which creates Tokens for each new infected case. The Tokens are delayed
stochastically until the onset of infection, at which time they are mapped to a row in the Table Population Mix data table
using a Set Row step. Notice that this step uses the RandomRow function to assign a row ( Age Group) using the
probabilities in the Population Mix column as selection weights. Then the table data is used, throughout the rest of the
process, to determine whether hospitalization and critical care are needed for each patient.
As new cases occur, a percentage of infected cases will remain asymptomatic or otherwise not require hospitalization as
specified by the table data. In ‘DailyAssessmentOfInfectedCases’, the model will create new cases based on the following
expression: ‘Infected Not Hospitalized Population’ * Contagion Factor (Ro) * (1 - Social Distancing Factor). Note that the
Social Distancing Factor should be interpreted implicitly for its effect on Contagion Factor (Ro). For example, Social
Distancing Factor ‘0.5‘ effectively halves the effect of Contagion Factor (Ro) based on the previous equation – but the factor
should not be interpreted as a percentage of people who social distance.
Hospitalized Cases and Arrivals
The objects shown in the model’s Facility view represent the healthcare provider’s facility. Of the cases that require
hospitalization, a portion will need intensive care as specified by the Table Population Mix data. Notice that the likelihood
of both hospitalization and critical care (ventilator) increase with Age Group. Keep in mind that the table data could be
updated in accordance a healthcare providers service area.
The ‘TrackingInfectedCases’ process uses a Create step called ‘CreatePatient’ to generate entities that require
hospitalization. Recall that each entity belongs to a certain age group in the Table Population Mix data. The Simio team
chose to create entities, only for hospitalized cases, and track all other population members using Tokens since the focus of
the model is on the healthcare provider and its critical resource management.
Hospital Processing
The hospitalized cases enter the model as a Patient Entity and are sent to the Hospital Server. At the Hospital, they will
claim a unit of the Hospital’s capacity representing a bed. If they need a ventilator, they will attempt to seize the secondary
Ventilator Resource. Then the patient remains at the hospital for their assigned length of stay.
The model keeps track of the PPE material used by patients each day and uses a continuous review reorder point / reorder
quantity replenishment policy to restock on masks, gloves, and gowns. Order lead time is also accounted for in the
replenishment policy via the ‘ProducePPEMaterial’ process. All PPE data is found is in the ‘Table PPE Supplies’ data table
420 / 1277
replenishment policy via the ‘ProducePPEMaterial’ process. All PPE data is found is in the ‘Table PPE Supplies’ data table
which also could be manipulated to experiment with stock levels and replenishment policies that suit your facility.
While running the model, interactive buttons are available to change the current number of beds and ventilators. This
allows you to dynamically experiment with the model as events unfold. For example, the hospital could have reallocated
more beds for infection cases in the middle of the planning horizon. The charts and labels in the model will update to
reflect changes made using the buttons.
Statistics
The model tracks important metrics such as the number of times a critical resource was not available. A variable counts
each time that an infected person was turned away from the Hospital due to a lack beds. Another variable counts how
many times a person had a bed, needed a ventilator, and there were no ventilators available. When there is a shortage of
any type PPE material, the deficit is also tracked and saved.
Experiments
Two experiments are defined in the model to demonstrate how changing the model Controls will impact the Responses, in
this case, counts of resource and material deficits. Various Output Statistics (see Definitions -> Elements) and a Simio
expression are used to define the Responses. Review them by selecting a Response and observing its properties. For
instance, the HospitalBedDeficit Response reports the NumberBalked, from the Hospital Input Buffer. Patients that were
unable to get a hospital bed balk immediately from the Hospital Input Buffer. The other deficit counts were collected by
State Variables reported out by Output Statistic Elements.
The experiment called SocialDistancingImpact performs Sensitivity analysis on Social Distancing Factor. Scenarios 1-6
consider a Hospital Bed Capacity of 100, and Scenarios 7-12 double the bed capacity. One objective of this
experimentation may be to identify parameters that estimate no bed or ventilator deficiencies, then evaluate the PPE
separately. Upon running the experiment, notice that the Ventilator Capacity is ampler in Scenarios 1-4 (than Scenarios 7-
10) since beds are the primary constraint. In Scenarios 7-10 ventilators, and PPE are more strained as the hospital can treat
double the patients at full capacity.
The SocialDistancingImpact results suggest that a Social Distancing Factor somewhere between the values of 0.3 and 0.4
produce a ‘0’ for both the HospitalBedDeficit and VentDeficit responses. To examine this further, a second experiment
called ResourceCapacityAnalysis fixes Social Distancing Factor at ‘0.35’ and analyzes the impact of varying Hospital Bed
Capacity and Ventilator Capacity values. A potential enhancement would be to specify, for instance, initial quantities of PPE
as referenced properties ( Controls) and perform additional experimentation.
Model Assumptions
The input for the number hospital beds is the number the hospital can allow strictly for infected patients. Expect to
keep beds reserved for other emergencies.
When the hospital has no available beds for infected cases, the cases turned away are sent to another hospital or are
self-quarantining. They do not infect others.
Once a person recovers, they are no longer in the pool of people who can become infected. It is assumed the
infectious disease strain cannot mutate quick enough to cause reinfection.
Patients who need a ventilator are assumed to be in the ICU and require the ventilator the entire duration of their
hospital stay.
Patients who need a ventilator and cannot acquire a ventilator are prematurely discharged.
Note: A similar model was used in a May 2020 Simio Webinar called “Redefining Your Business Planning Strategy”. Some
enhancements were made to the latest version that may reflect slightly different results than the Webinar version.
421 / 1277
Simio Reference Guide
ManufacturingAssembly - Example
General Description
This model represents an assembly line manufacturing Lamps. The general process flow is as follows:
Pallets containing lamp bases are withdrawn from inventory by a fork lift
Individual lamps bases are sent to preparation ( Prep)
Lamps bases and shades are assembled
Lamps are sent to repair if any defects are detected
Finished lamps are packaged
Packages of lamps are shipped randomly through 2 docks
Detailed Description
Model States
This model has two defined model states – 'NumberInPrep' and 'TotalShipped'. These states are meant to respectively
track the number of lamps bases in preparation and the total number of assembled lamps shipped.
Lamps bases Arrival
Lamps bases are withdrawn from two inventories which are modeled as sources. On the model initialization, the lamp
bases are taken from inventory 1. During the model run, if the the number of lamps bases in Prep is less than 2 the lamp
bases are randomly created at either inventory 1 or 2. This is modeled through the use of a Monitor element on the
'NumberInPrep' state variable with a Threshold Value of '2' and a 'Negative' Crossing Direction. When this threshold value
becomes less than 2 (i.e 1) the monitor will fire an Event triggering Process1 to create new bases at the inventories.
Pallets Discharge
Each pallet holds 10 lamp bases. The pallet’s contents are emptied at the Separator object at the beginning of the line. The
bases are sent down the Conveyor while the pallets are taken to a storage rack that is represented with a Sink.
Lamps Bases Preparation
The number of lamp bases in preparation is tracked through a user defined state that is incremented and decremented
respectively as lamps bases enter and leave the Prep server. After preparation, the lamps bases are randomly sent to one of
the two existing combiners.
Lamps Assembly
The lamps shades are generated by two sources each linked to a combiner. Each base is combined with one shade. The
lamp base represents the combiner parent while the lamp shade represents the combiner member.
Lamps Packaging
All lamps assembled at Combiner2 go directly to packaging. 70% of lamps assembled at Combiner1 are sent directly to
packaging, while the remaining 30% are taken by the repair staff to the RepairStation. After the lamps are repaired, the
repair staff takes them to packaging.
Lamps Shipping
After the packaging, the assembled lamps are randomly taken by the DockResource to one of the two available docks that
are modeled as Sinks. The random selection is enforced through the use of a 'Random' Selection Goal at the output node of
the packaging server where the Entity Destination Type is set to 'Select From List' and the Node List Name is a list
containing the docks’ input nodes.
Useful Tips
Note the use of processes to change the appearance of the entity after each station
At the separator member output node to model the lamp bases
At the separator parent output node to model the pallets
At the combiners output to model the assembled lamps
At the packaging output node to model the ready to ship package
422 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
423 / 1277
Simio Reference Guide
MiningExample - Example
General Description
This example represents an ore mine. The general process flow is as follows:
Ore is extracted from three different Chutes.
A MineTrain will pick up the ore and drop it off at the Dump.
Three MineTrains are available and will pick up ore according to when the ore was created.
* A two scenario experiment is used with two distinct values of the control 'OverallHoursBetweenLoads'.
Detailed Description
Ores Extraction
The ores are extracted from three different chutes modeled as sources. Each source’s interarrival time is defined as an
expression using the property 'OverallHoursBetweenLoads'. Each created entity is assigned a priority based on the time it
was created through assigning the New Value to 'Run.TimeNow'.
All resources output nodes Entity Destination Type are set to 'Input@Dump' so that all the entities are dropped off at the
dump.
Ores Transportation
Three mine trains are available for the transportation of the extracted ore. The trains are modeled as a Vehicle with an
Initial Number in System equals to '3'. The trains Transport Logic Task Selection Strategy is based on 'Smallest Priority'.
Because the Ore’s priority was set to the time it was created, the trains will pick up the ore in the order it was created.
Bypass Siding
Because the Bi-Directional track only allows traffic moving in one direction at a time, we must make use of a bypass area
to allow for passing. This area consists of a separate track for each direction of traffic. It allows for the train to exit the bi-
directional portion of the track and park temporarily to avoid another train moving in the opposite direction. If this section
were not there, then the trains would collide and it would result in a deadlock.
*Please see the SimBit ‘BidirectionalPaths’ for a more detailed description of bypass sidings.
Custom Statistics
The 'TimeBetweenLoads' is a user defined Tally Statistic to track the time between loads at the dump. A Tally step is used
where the Value Type is assigned to 'TimeBetween' to record the time between loads arrival to the dump.
Useful Tips
The Network Turnaround Method for the MineTrain vehicle has been set to 'Reverse' to allow for the train to reverse while
on the path – as opposed to exiting and re-entering the path in a forward direction.
424 / 1277
Simio Reference Guide
MultiEchelonSupplyChain - Example
General Description
This Simio example has been adapted from Melamed, B. & Altiok, T. (2007) Simulation Modeling and Analysis with ARENA.
Chapter 12, Example 12.3: A Multiechelon Supply Chain.
The modeled system is a single-product, multi-echelon supply chain consisting of a retailer ( R ) that faces a customer
demand stream, a distribution center ( DC) that replenishes the retailer, a manufacturing plant ( P) that replenishes the DC,
and a raw material supplier ( S ). The manufacturing plant interacts with two buffers: an input buffer ( IB ) storing incoming
raw material, and an output buffer ( OB ) storing outgoing finished product. The system is depicted schematically in Figure 1.
3. The plant manufactures one product unit at a time. The bill of materials needed to make 1 unit of finished product is
1 unit of raw material. The processing time per unit is triangularly distributed with a minimum, mode, and maximum
of 0.8, 1.8, and 2.2 hours respectively.
4. If a stock out occurs at the distribution center or plant, then replenishment orders are backordered. Order fulfillment
(shipment) is always deferred until the full order becomes available. In other words, there is no shipping of partial
orders.
5. All transportation time delays in the system are drawn from the distribution Erlang(1,2) hours.
The Simio Project File
The MultiEchelonSupplyChain Simio project file (.spfx) contains two models: BasicApproach & DataTableDrivenApproach.
These two models simulate the same example system and produce identical animation and statistical results. The key
difference between the two models is the latter illustrates how to define all required model input in a set of relational data
tables.
Basic Modeling Approach Overview
The Facility View
The library objects used are illustrated in Figure 2:
425 / 1277
1. BasicNode objects have been placed to represent the four physical locations in the supply chain network: the
supplier, plant, distribution center, and retailer. Each basic node is supplemented by Stacked Bar animation and Status
Labels to show current inventory levels.
2. TimePath objects have been drawn between the basic nodes to model the transportation time delays between sites.
3. A Server object connected to a Sink object has been added. The server is used to transform raw material into
finished product at the plant. Its processing is modeled as a task sequence with a conditional, processing count-
based loopback to simulate the manufacturing of one product unit at a time.
4. A ModelEntity object named ProductionEntity has been added to represent a manufacturing order at the plant.
Production entities are processed through the plant’s server.
5. A ModelEntity object named ShipmentEntity has been added to represent a transportation shipment of raw
material or finished product. Shipment entities use the drawn time paths for travel. The symbol of the ShipmentEntity
has been changed to a box.
Note that user-defined Material, OrderQuantity, & ProducedQuantity state variables have been added to the ModelEntity
object definition to store either ProductionEntity or ShipmentEntity details.
Additional animation-related items provided in the Facility View include a grid that displays inventory metrics during the
simulation run. This grid was drawn using Floor Labels and Status Labels. Below the grid, a Status Plot was added to show
inventory on hand over time at both the retailer and distribution center. Finally, a Floor Label placed near the retailer
location displays total satisfied and lost demand.
The Definitions -> Elements View
The elements defined in the model are as follows:
1. Two Material elements defining the raw material and finished product. The Location Based Inventory property for
both elements is set to True. The Bill of Materials for one unit of finished product is one unit of raw material. Figure 3
shows the properties for the material element that represents finished product.
2. Five Inventory elements defining the five distinct stocks of material in the system: raw material at the supplier, raw
material at the plant, finished product at the plant, finished product at the distribution center, and finished product at
the retailer. Figure 4 shows the properties for the inventory element that represents finished product at the retailer.
Note that the inventory control parameters for all the inventory elements are as listed in Table 1.
426 / 1277
3. A single Timer element named CustomerOrderTimer that is used to signal customer order arrivals at the retailer. This
timer is configured to fire its event every Exponential(1.5) hours.
The Processes View
The processes defined in the model are as follows:
1. OnCustomerOrder Process – This process is triggered whenever the CustomerOrderTimer has fired its event,
signaling a customer order arrival at the retailer. The process logic here simply tries to consume 1.0 unit of finished
product at the retailer. Note that since the Allow Backorder Policy property of the FinishedProductAtRetailer
inventory element is set to ‘Never’, any material consumption request that cannot be immediately satisfied from on-
hand inventory is treated as lost demand.
2. OnReplenishmentOrder Processes – These processes are triggered whenever replenishment is required at an
inventory site and are used to model inventory sourcing behavior including ProductionEntity or ShipmentEntity
creation (if necessary). Note that these processes are linked to the inventory replenishment policies via the On
Replenishment Order Process property on each inventory element.
For example, the process logic that handles the replenishment of finished product at the retailer is shown in Figure 5.
When the execution of that specific process is initiated, the created token first attempts to consume the required
quantity of finished product at the distribution center, with the material consumption request being backordered if
there is not enough on-hand inventory. The built-in function Token.MaterialOrderDetail.Quantity is used to get the
recommended replenishment order size. Once the material consumption request has been filled, a new
ShipmentEntity is created and assigned its shipment details - the material and order quantity. That entity then has its
destination node set to the retailer and is transferred to the distribution center node (as an outbound shipment) so it
can proceed with its travel from the distribution center to the retailer using the drawn time path in the Facility View.
As another example, the process logic that handles replenishment of finished product at the plant is shown in Figure
6. Here, the inventory sourcing assumption is ‘Make’. When the execution of that specific process is initiated, a new
ProductionEntity is created and assigned its production details – the material and order quantity. The entity is then
transferred to the plant’s Server object in the Facility View to manufacture the inventory.
3. ShippingReceivingLogic Process – This process is triggered whenever a ShipmentEntity enters one of the BasicNode
objects in the Facility View that represents an inventory site location. The process logic is shown in Figure 7. Here, if
the entity is an inbound shipment, then the received material is added to the destination inventory (using a Produce
step) and the entity is then destroyed. Otherwise, if an outbound shipment, then the entity simply continues its travel
out of the node.
427 / 1277
Data Table Driven Approach Overview
The DataTableDrivenApproach model provided in the MultiEchelonSupplyChain project file is the same system and
produces identical animation and statistical results as the BasicApproach model covered previously in this document. The
key difference is most of the required model input is now defined in a set of relational data tables and there are also some
differences particularly in the process logic design to better fit the defined data table schema.
Note that although the example system being modeled here is rather simple, a much more complex supply chain
simulation could potentially be accommodated using the same presented data table structure.
Figure 8 shows the relationships of the data tables that are defined in the model.
428 / 1277
Demand Table Schema
Defines the end-customer demand streams in the system.
429 / 1277
Defines the production entity types in the system.
430 / 1277
Task State Assignments Table Schema
Defines state variable assignments related to processing tasks defined in the Processing Tasks table.
References
Altiok, T., & Melamed, B. (2007). Simulation modeling and analysis with Arena. Burlington, MA: Elsevier.
431 / 1277
Simio Reference Guide
PackagingSystem - Example
General Description
This model represents a packaging system. The general process flow is as follows:
Four types of products are created.
Products are transported on conveyors.
Pallets are transported from the Pallet Supply to the palletizer through a conveyor.
The packaging is done at the palletizer.
Packages are transported through a conveyor for shipment.
Products
Four Sources create four types of products each flowing on a separate conveyor. The merging takes place in three stages.
The Soda and Toy products merger
Grab Bags and Golf Clubs merger
Complete merge of the four products at the merging zone
After the last merger, the products continue their way to the Palletizer on a conveyor.
Pallets
The Source PalletSupply creates pallets that are transported to the Palletizer through a Power and Free Monorail that is
modeled as a Conveyor. The conveyor travel logic Entity Alignment is set to ‘Cell Location’ to represent the hooks position
along the conveyor.
Palletizer
Packaging is done at the Palletizer which is modeled using a Combiner. In this model, products represent the Combiner
members while the pallet represents the Combiner parent. A Pallet holds six products.
Shipping
Pallets are transported through a Conveyor to the Shipping station where they get destroyed. The Shipping station is
modeled as a Sink.
432 / 1277
Simio Reference Guide
SchedulingBatchBeverageProduction -
Example
General Description
This example uses Simio RPS (Enterprise) Edition to schedule a batch processing system that mixes and fills a beverage
product. Although Simio RPS Edition is required to build this model, it may be viewed using Simio Design or Professional
Edition.
To understand the data schema and scheduling results in this example you should first read the Planning and Scheduling
with Simio document found on the Support ribbon / Books. This problem description assumes that you are familiar with
the standard data schema and scheduling concepts that are presented in that document.
In this example, we wish to generate a 30-day production schedule for this facility that fully accounts for the limited
resources in the system. This example contains orders for both manufactured material and finished material. Raw materials
are also modeled as a constraint in this system. The manufactured materials, named Green Bulk, Red Bulk and Blue Bulk,
must be mixed at a mixing machine and then put into a Tank. The finished good materials, such as Green Pack, Red Pack
and Blue Pack, begin at a Filler machine and are then packed at a Packing machine. Workers are required at each of these
steps in the process and the appropriate manufactured material must be available in the Tanks in order for the finished
goods produce to be processed. Raw materials, such as bottles and labels, are also modeled in this system and are
required as part of the finished goods filling process.
Detailed Description
Arrival of Manufacturing Orders
The ManufacturingOrderArrivals source creates ManufacturingOrderEntity type entities, which represent manufacturing
orders. This source produces arrivals according to the ReleaseDate column in the Manufacturing Orders table. The system
does not begin empty. It is initialized with a few orders already in the system and having completed a portion of their
processes. These orders are listed in the table named WorkInProcess, which also indicates the current step in the routing,
the quantity that has already been completed and any cost that has been accrued up to this point in time. The WIP orders
that have started on a resource will be schedule before the NEW orders.
Manufactured Material (GreenBulk, RedBulk, BlueBulk)
If an order is a manufactured material, it will first route to a Mixing machine and then to a TankFill machine, as outlined in
the Routings table. In the Mixing TransferNode, the entity checks to see if the raw materials that are required to be
consumed at the Mixing Server are available. If they are not available, the entity will wait at the Mixing TransferNode,
instead of waiting at the Mixing Server.
Once the materials are available, they can be selected to be run on a Mixing Server. The Mixing TransferNode uses a Route
Request Dynamic Selection Rule determine the sequence of jobs for Mixing1, Mixing2 and Mixing3. The Route Request
Dynamic Selection Rule is set to a Referenced Property so that a user can experiment with using different routing rules. By
default, this Mixing Selection Rule property is set to ‘Standard Dispatching Rule’ which has many child properties. For the
Standard Dispatching Rule, the Dispatching Rule property is set to 'LeastSetupTime' and the Tie Breaker Rule property is set
to 'EarliestDueDate'. Using these Standard Dispatching Rule properties, entities will be selected based on least amount of
setup time on a Mixing server. If more than one entity has the same least setup time, the entity with the earliest due date
will be selected.
Before Setup occurs at each Mixing Server, the process AddManufacturingOrdersOutput adds a row in the table named
ManufacturingOrdersOutput and records the start time of this order on this Mixing Server. The endtime is recorded after
this order is finished on this Mixing server. After processing, the “WaitingForTankFillProduce” process is called from the
WaitingForTankFillProduce task on the Mixing Server. This process will create the downsteam entity and route it to the
TankFill TransferNode. The original entity will then wait until the 'Produce' task is completed on the TankFill Server.
The order will route to the TankFill transfer node, where it will select to route to either the TankFill1 or TankFill2 workcenter
by selecting from the node list ‘TankFillList’. Similar to what occurs at the Mixing workcenter, before Setup occurs at each
TankFill workcenter, the process AddManufacturingOrdersOutput adds a row in the table named
ManufacturingOrdersOutput and records the start time of this order on this TankFiller machine. The endtime is recorded
after this order is finished on this TankFiller workcenter. After the order is completed at the TankFiller, it is routed to the
server named HoldingTankStorageServer where it waits until it is needed by an entity at the Filler machine. At that point,
the entity representing this manufactured material order will get transferred to the DisposeBulkOrders sink, where the
current time and cost is recorded in the Manufacturing Orders table for this manufactured material order.
After the order is completed at the TankFiller, it is routed to the server named HoldTank. First, the material for the mixing
entity is produced and it is given a lot id. Since it is given a lot id, only entities consuming the same material and lot id is
possible. After the produce, the ‘WaitForTankRelease’ process is called. Using this process, the entity will wait in the Server
its until it is needed by an entity at the Filler. It is not until a pack order consumes the bulk that the entity produced and the
trigger is called to complete the ‘WaitForTankRelease’ process that the entity in the Hold Tank Server and the Tank are
released.
Finally, after the entity exists to HoldTank Server that it is routed to the OrderDispose Sink. At the OrderDisponse Sink, the
current time and cost is recorded in the Manufacturing Orders table a for this manufactured material order. The entity is
then disposed.
Finished Material (GreenPack, RedPack, BluePack)
If an order is a finished material, it will first route to a Filler Server (PackFill) and then to a Packer Server, as outlined in the
Routings table. In the PackFill TransferNode, entity checks to see if the raw materials that are required to be consumed at
the Filler Server are available. If they are not available, the entity will wait here at the PackFill TransferNode, instead of
waiting at the Filler Server.
Once the materials are available, they can be selected to be run on a Filler Server. The PackFill TransferNode uses a Route
Request Dynamic Selection Rule determine the sequence of jobs for Filler1 and Filler2. The Route Request Dynamic
Selection Rule is set to a Referenced Property so that a user can experiment with using different routing rules. By default,
this Packing Selection Rule property is set to ‘Standard Dispatching Rule’ which has a number of child properties. For the
Standard Dispatching Rule, the Dispatching Rule property is set to LargestPriorityValue and the Tie Breaker Rule property
is set to EarliestDueDate. Using these Standard Dispatching Rule properties, entities will be selected will based on largest
priority value. If more than one entity has the same largest priority value, the entity with the earliest due date will be
selected.
At the Filler, bill of materials is first consumed. After an order is finished with the consume task on the Filler server, it
executes a process named ‘Filler_ConsumeFinishedTask’. This process populates the TankReleaseOrderId state and then
fires the ‘TankRelease’ event. This will release the mixing order from the Hold Server and release its Tank. Next, the process
task requires a secondary resource. The RoutingsSecondaryWorkers will be used to identify which workers to consider for
the task. If more than one worker pool is defined in the RoutingsSecondaryWorkers table, the first available worker pool
will be selected.
Once the process step is completed, an entity representing the Finished Material order will leave the Filler Server and get
routed to a Packing TransferNode. When a Packer Server is available, the entity is routed to the Packer. After processing at
a Packer Server, the entity is routed to the AddToStorage TransferNode, where it will select the appropriate storage
location based on its picture, which indicates if it is a RedPack, GreenPack or BluePack. The ship date in the Manufacturing
Orders table for this finished material order is updated when the entity enters the Storage Server.
Data Tables
Resources:
A list of resources that are in the manufacturing facility.
A compelling advantage of the Simio scheduling solution is the flexibility offered by a custom-built model of the
production system. However, for simple applications that do not require this flexibility, the Resource table can be used to
eliminate the need to manually build the Simio model. The Object Type column, in combination with the
‘AutoCreateInstance’ option on the Resource Name column, will automatically generate the appropriate object at the x/z
location specified.
Materials:
A list of material that can be produced at the manufacturing facility.
433 / 1277
Note that the Gantt color defines the bar color to use for drawing entities associated with this material in the Entity
Workflow Gantt. All orders for this material will be drawn using this color. The Material Color is used in the sequence
dependent changeover matrix for determining the color dependent changeover time. By default, this table is configured
for changeovers that are dependent on color. This column could be changed to Size or another attribute that determines
the sequence dependent changeover time.
Material Lots:
A list of material lots and quantities for materials in the facility.
Manufacturing Orders:
A list of all production orders to be processed during this planning period.
Note that the Ship Date and Production Cost are both output columns in the Manufacturing Orders table; they are written
from the simulation model to the table as the schedule is generated by the deterministic simulation run. Also note that the
last four columns are targets.
Routings:
A list of job routings for each material specifying the resource and processing time for each task required to produce the
material.
Bill of Materials:
A list of component materials that are required at a specific routing sequence location to produce a material.
The Routing Key is a foreign key reference to Routing table. Note that there is a many-to-one relationship that supports
multiple materials consumed/produced for the same Routing Key. All the materials that are listed in this table with the
same Routing Key will be consumed/produced at that routing step.
Work In Process:
A list of current orders that are in the system, along with their current status.
The information in this table is typically imported from the MES system and defines the current state of all the active
orders that are being processed in the system. The Order Id is a foreign key reference to the orders that are listed in the
Manufacturing Orders table with their Order Status specified as WIP. The information in this table defines the current route
number and resource where the order is being processed, along with the quantity completed at this resource. The Accrued
Cost is also specified in applications where activity-based costing is being used to track the production cost for the orders.
Manufacturing Orders Output:
An Output Table defining order start and end time on each resource used for creating table reports. The output is also
exported to “publish the schedule”. See Published Schedule table.
434 / 1277
The foreign key reference for the Order Id and Routing Key ties this output data to the other tables in the model. This
makes it easy to create custom Table Reports on the relations data set that display relevant information on the orders and
routings as well as the scheduled start and end time for each order on each resource in the system.
Published Schedule
The Published Schedule is typically bound to the last published schedule information. Typically, to publish a schedule the
Manufacturing Orders Output table will be exported to a CSV file. Then, the Published Schedule will be bound to this CSV
file and imported each time the schedule is run.
The Published Schedule is used for Freezing the schedule. See Freezing Schedule section below.
Resource Group Events
This table is used by the auto-creation of Routing Group elements in the Resources table. This table is used to define the
Event and the Event Condition when the routing group will be fired.
FutureRoutingGroupEvents
This output table is used for the Complex look ahead logic. This table logs the time when future events will happen. The
table is used to determine whether a future event has already been scheduled for the StartingTransferNode and EventTime.
FreezeRoutingDependencies
This output table is used OnRunInitialized_FreezeSchedule process that gets called at the start of run. This table shows the
Routing Dependencies that are initialized by the Freeze Schedule. Once the rows are populated into this table, each row in
the table is then used to create stipulations using the Stipulate step.
FreezeListRequirements
This output table is used OnRunInitialized_FreezeSchedule process that gets called at the start of run. This table shows the
List Requirements that are initialized by the Freeze Schedule. Once the rows are populated into this table, each row in the
table is then used to create stipulations using the Stipulate step.
ResourceReservations
This output table is used for the Complex look ahead logic. This stores the reservation information for the primary and
secondary resources for each order id and routing key. Once the reservation information is used and the operation is
schedule, the reservation is removed from the table.
Model Properties
Here are the model properties in the model:
Freeze Schedule
Freeze schedule is used to generate the same schedule that was generated the last time the schedule was published. Freeze
schedule ensures that the short-term plan that was laid out is not changed the next time the schedule is run. The freeze
schedule also takes WIP into consideration.
There is a property defined on the model called 'Freeze Period Hours'. It is found under Advanced Options. The Freeze
Period Hours is the number of hours from the start of the plan run that the schedule is considered frozen. The end of the
freeze period is shown in 'Run.FreezePeriod' state.
The 'OnRunInitialized_FreezeSchedule' process is used freeze the schedule. The process searches all the resources in the
Resources table. Then on each resource, it first freezes the Work In Process. This is done by adding rows into the
FreezeRoutingDependencies and FreezeListRequirements tables. Once the work in process is recorded, if a resource has it
435 / 1277
FreezeRoutingDependencies and FreezeListRequirements tables. Once the work in process is recorded, if a resource has it
Resources.FreezeSchedule checked, it will search the Published Schedule table for any orders / route keys that are schedule
to start before Run.FreezePeiod. The order/route keys are also adding rows into the FreezeRoutingDependencies and
FreezeListRequirements tables.
Once all the rows of the resources table have been searched, the FreezeRoutingDependencies and FreezeListRequirements
tables are searched and their values recorded in the model using the Stipulate step. The Stipulate step will use these
dependencies / requriements when scheduling the entities in the transfer node. The Stipulations are first taken into
consideration. Second, any drag and drops from the Gantt chart. Lastly, the selection rules on are used.
LookAheads
LookAheads are used by the routing groups to determine whether secondary resources and downstream operation will be
available once the entity is routed to a primary resource. By default, the routing groups only look ahead to the primary
resources to ensure that they are available using the Blocked Destination Rule. In this example, since the Servers have an
Input Buffer Capacity = '0', the routing groups will only route an entity to the server if there is capacity available for
processing. When the LookAheads control on the model is ‘None’, the routing groups works this way.
When the LookAheads control on the model is ‘Simple’, the routing group will check to ensure that the secondary resource
is also available for the operation prior to scheduling the operation on a primary resource. This is done using the
'OnEvaluatingRouteRequest' process. If a secondary resource is available, it will be reserved by the entity to ensure other
entities cannot seize the secondary resource. If the secondary resource is not available, the entity will wait in the routing
group's RouteRequestQueue for a secondary resource to become available. The secondary resources have a
'Workers_Available' process that get fired when they go on shift and when they are released by another entity. In the
'Workers_Available' process, the StartingTransferNode gets set to 'Nothing' and the TriggerRoutingGroups event gets fired.
Since StartingTransferNode == Nothing, all the routing groups will try to schedule their entities in their
RouteRequestQueue. Each routing group has its Evaluate Route Requests Triggers mapped to the RoutingGroupEvents
table. The event trigger and event condition for the routing groups is defined in the RoutingGroupEvents table.
When the LookAheads control on the model is ‘Complex’, the routing group will check to ensure that the secondary
resource is also available as well as whether any downstream primary and secondary resource are available. The
downstream operations are indicated using the Routings. SuccessorRouteNumber field. If this field is populated with a
value greater than zero, the complex lookaheads will search for the downstream operation and make sure their primary
and secondary resources are available. This process is recursive. If the 2nd operation has a SuccessorRouteNumber, the
complex lookaheads will search for downstream operation for its SuccessorRouteNumber.
The complex lookaheads logic uses 2 output tables. They are the FutureRoutingGroupEvent and ResourceReservations. The
reservation capability on a resource is not time based in Simio. Instead, the ResourceReservations table is used. The order
id, route key, resource, start and end times are all recorded when reserving a resource. This information is used to block
other orders and route keys from reserving the resource.
If are resource cannot be reserved, the complex lookaheads determine when to try and schedule the entities again. The
time to reschedule is either based on availability of the resource or when a reservation expires. Once the time is
determined, the starting routing group is triggered again to try and schedule the entities. The time of when the starting
routing group will be trigger is recorded in the FutureRoutingGroup events table.
436 / 1277
The next step is to enhance the model with some custom dashboards. We will import three standard dashboards to our
model that are designed to work with the default data schema. These dashboards are saved in XML format and included in
the DiscretePartProductionFiles folder that is saved with this example. These dashboards display material, order details,
and a dispatch list for use by operators.
To import these dashboards go to Dashboards Report view of the Results window and select the Dashboards ribbon. Click
in the Import button and browse to the folder, and select the three dashboard xml files named DispatchList, Materials, and
OrderDetails.
Set the Model Run Time
Our final step is the set the run parameters for the model. From the Operational Planning ribbon in the Planning window
specify the starting time as 12/1/2017 8am and select the ending time as 30 days.
Experiments
There are two experiments on this model. One experiment is setup to use OptQuest to minimize cost by the setting of the
model properties listed above. The Lateness response references a Tally Statistic that is recorded on the input node of the
DisposeBulkOrders sink object. It records any late orders and by how much time they are late. There is also a response for
Number Completed because it is critical that all orders are processed so the user does not want to choose a scenario where
some orders are not filled.
The second experiment is used to compare the alternative routing logic at both the Mixing machines and the Filler
machines by changing the values of the Mixing Rule and the PackFillRule.
The Scheduling Interface
The model can now be used to generate a plan. Go to the Planning tab and click Create Plan in the Operational Planning
Ribbon. This will generate the deterministic plan, which will populate the Resource Plan, Entity Workflow, Logs, Tables and
Results. Click onto Analyze Risk in the Operational Planning Ribbon and multiple replications, with variability, will be run to
assess the risk of the plan. The Entity Workflow, Tables and Results will be updated with risk analysis for all the Targets
defined in the model.
437 / 1277
Simio Reference Guide
SchedulingBicycleAssembly - Example
General Description
The example uses Simio RPS (Enterprise) Edition to schedule a bicycle assembly line. Simio RPS Edition is a simulation
tool for developing applications in Risk-based Planning and Scheduling (RPS). RPS is the dual use of a simulation model
to generate both a detailed resource constrained deterministic schedule as well as a probability-based risk analysis of that
schedule to account for variation in the system. RPS is used to generate schedules that minimize risks and reduce costs in
the presence of uncertainty. Although Simio RPS Edition is required to build this model, it may be viewed using Simio
Design or Professional Edition.
To understand the data schema and scheduling results in this example you should first read the Planning and Scheduling
with Simio document found on the Support ribbon / Books. This problem description assumes that you are familiar with
the standard data schema and scheduling concepts that are presented in that document.
The system to be scheduled in this example is a bicycle assembly facility. The facility is a job shop that produces finished
goods on a final assembly line as well as parts or components for final assembly based on the customer orders. The
schedule also includes a number of purchased parts required for final assembly. We wish to generate a 7-day production
schedule for this facility that fully accounts for the limited resources and parts in the system.
The facility consists of three (3) functional areas named Component Manufacturing, Assembly Line, and Shipping and
Receiving. These areas are described in more detail below.
The Component Manufacturing area consist of (5) work centers (Cut, Shape, Weld, Machine and Paint) with each work
center containing 2 processing areas. The entry point to the work center is modeled a TransferNode with the corresponding
processing areas are modeled using Server objects. The TransferNodes are used to select the order to process based on a
standard dispatching rule.
Each Server also requires an Operator that is modeled as a Worker named 'Operators' with an initial capacity of five (5)
and managed by a work schedule. Initially, the operators use a work schedule named '5Day8Hour1stShift' which is 5 days a
week for 8 hours during first shift. The Paint Servers have sequence dependent setup times where the setup time is specified
in a changeover matrix based on the item color. Possible item colors are defined in a string list named 'MaterialColor' with
values None, Green, and White. The Component Manufacturing area produces six (6) manufactured items for final assembly
(GreenFinishedFrame, WhiteFinishedFrame, GreenFinishedFork, WhiteFinishedFork, GreenFinishedHandleBar and
WhiteFinishedHandleBar). Each of these items has its own routing and unique processing time and material requirements at
each Server within its routing.
The Assembly Line area produces six (6) finished goods to satisfy the customer orders for Walmart, Costco and Ambridge
Bike Shop (EcoBikeSTDGreen, EcoBikeSTDWhite, EcoBikeEXTGreen and EcoBikeEXTWhite). The Assembly Line area consist
two (2) identical assembly lines with four (4) work centers in each line named Mainframe, Power, Final and Test. The
selection of the two assembly lines is controlled by a TransferNode called AssemblyNode to allocate the selected line from
a list called AssemblyList.
Each of the four (4) machines per assembly line is modeled using a Server object with a capacity of one (1). All the Servers
also require an Assembler that is modeled as a Worker named Assemblers. There are 2 pools for Assemblers;
Assemblers1stShift and Assemblers2ndShift. One assembly pool for first shift and one pool for second shift. The initial
capacity of each pool is ten (10). Initially, the Assemblerst1stShift pool uses the ‘5Day12Hour1stShift’ work schedule and
Assemblers2ndShift pool uses the ‘5Day12Hour2stShift’ work schedule.
The MainFrame Servers use task sequences to first consume the correct components. These final assembly components are
listed per final product in the Bill Of Materials table. Once material is consumed, one of two tasks are completed. If the
number of Assemblers1stShift in the system is <= 8, one assembler is used for the task and the processing time is set to 12
minutes. If the number of Assemblers1stShift in the system is > 8, two assembers are used for the task and the processing
time is set to 6 minutes. A condition on the 20 Sequence Number tasks are used to select which number of operators and
processing times. In addition, the task sequences call 2 processes named 'MainFrame_StartingTask' and
'MainFrame_FinishedTask' that are used to control animation that delivers stock and receiving material to the AssemblyLine
using Forklifts.
The Shipping and Receiving area consists of a PackAndShip Combiner that assembles final product, as well as a Receiving
(Server) area that stores material and a PurchasedMaterials Source that generates initial product based on the
PurchaseOrders table.
The B2MML-based data schema discussed in the Planning and Scheduling with Simio document is used to hold the
production data for this example.
Detailed Description
System Initialization
The system begins with no Work In Progress (WIP) and starts with an empty production line. It is initialized by reading the
orders, both for components and finished goods, from the ManufacturingOrders table. In the OnRunInitialized process, we
initialize ManufacturingOrders table, then iterate through each Materials row and its associated MaterialLots row to sum
total quantity involved. If it’s a ManufacturingMaterial then create that quantity of MfgOrders and send to Stock. Otherwise
create that quantity of PurchaseOrders and send to Receiving.
Arrival of Manufacturing Orders
The manufacturing orders fall into two (2) categories being Production Orders for manufactured components required for
final assembly as well as the Manufacturing Orders for final assembly that includes both the manufactured components as
well as procured items required to produce the finished products. These manufacturing orders are released into the system
and scheduled based on the release and due dates provided in the ManufacturingOrders table. This is modeled by using a
Source object (MRPOrders) that is reading the ArrivalsTable.
Manufactured Material (GreenFinishedFrame, WhiteFinishedFrame, GreenFinishedFork, WhiteFinishedFork,
GreenFinishedHandleBar and WhiteFinishedHandleBar)
If an order is a manufactured material, it will route to a combinations of workcenters (Cut, Shape, Machine, Weld and Paint)
as outlined in the Routings table. The output node of the Source object (MRPOrders) is routing the orders to the relevant
workcenters based on the required Sequence per component as setup in the Routing table. At the Paint workcenters, the
setup times are dependent on the color of the component and it is controlled by a changeover matrix to provide the
required setup time based on the color change required for the next item to be painted. At three (3) of the workcenters
(Cut, Shape and Paint) the transfer node is used for the entity to check if the raw materials that are required to be
consumed at the workcenter are available. If they are not available, the entity will wait at the relevant transfer node, instead
of waiting at the workcenter.
Before processing occurs at each workcenter, the process AddManufacturingOrdersOutput adds a row in the table named
ManufacturingOrdersOutput and records the start time of this order on the workcenter. The end time is recorded after this
order is finished on the workcenter.
After the manufacturing order is completed at the last operation in the manufacturing process the sequence will route the
entity to the workcenter called Stock in the Shipping and Receiving area to record the completion time for availability for
use at the Assembly Line for the production of the finished material. At that point, the entity representing this
manufactured material order will get transferred to the Sink1 object to be disposed of.
Finished Material (EcoBikeSTDGreen, EcoBikeSTDWhite, EcoBikeEXTGreen and EcoBikeEXTWhite)
If an order is a finished material, it will first route to the Separator object (AssemblyLine) in the Assembly area to create
two entities, one to represent the order for consolidation at Shipping and one to drive the assembly line, providing the
processing and material information required. The entity created to drive the assembly process is routed via a path to a
transfer node (AssemblyNode) where it is routed to one of two assembly lines reading the destination from a node list
called AssemblyList. The two assembly lines are identical with 4 workcenters each (Mainframe, Power, Final and Test) to
complete the final assembly of the finished material and then routed to a Pack and Ship Station modelled by a Combiner
object to match the customer order with the actual material manufactured to complete the customer order. The entity is
routed by just following a sequential path from one workcenter to another. The manufacturing order is marked completed
by removing the quantity from the material list by using a process trigger (PackAndShip_Exited) in the Combiner object
before disposing of the entity in the Sink object called Customer.
Purchased Materials (Seat, BrakeSet, WheelSet, Motor, FenderSet, StdBattery, ExtBattery)
Entities activating the purchased material process are created by the Source object PurchasedParts. This source object
point to the appropriate row in the PurchasedMaterials table so the entity has a reference to the purchased material items’
arrival date and time. The material then becomes available in the system for consumptions by the Assembly line.
Data Tables
The following is a summary of the default tables that are based on the B2MML standard. It is important to note that the
base model can also be generated by importing these files in CSV format as described in the Planning and Scheduling with
Simio document and explained in detail in the Discrete Part Production example also included as one of the scheduling
examples as part of the Simio 9 install.
Resources:
A list of all resources that are in the manufacturing facility.
438 / 1277
A compelling advantage of the Simio scheduling solution is the flexibility offered by a custom-built model of the
production system. However, for simple applications that do not require this flexibility the Resource table can be used to
eliminate the need to manually build the Simio model. The Object Type column, in combination with the
‘AutoCreateInstance’ option on the Resource Name column will automatically generate the appropriate object at the x/z
location specified.
Resource Secondary Workers:
A list of resource secondary workers that will be seized along with the primary resource.
Materials:
A list of materials that can be produced at this manufacturing facility.
Note that the Gantt color defines the bar color to use for drawing entities associated with this material in the Entity
Workflow Gantt. All orders for this material will be drawn using this color. The Picture Id determines which entity symbol
should be used for drawing the entity that is associated with this material in the Facility view of the model. All entities
representing orders for this material will be depicted in the Facility view using the specified Picture Id. The Material Color
is used in the sequence dependent changeover matrix for determining the color dependent changeover time. By default,
this table is configured for changeovers that are dependent on color. This column could be changed to Size or another
attribute that determines the sequence dependent changeover time.
Material Lots:
A list of material lots and quantities for materials in the facility.
Manufacturing Orders:
A list of all production orders to be processed during this planning period.
Note that the Ship Date and Production Cost are both output columns in the Manufacturing Orders table; they are written
from the simulation model to the table as the schedule is generated by the deterministic simulation run. Also note that the
last four columns are targets.
Purchase Orders:
A list of raw materials that are purchased at this production facility and are scheduled to arrive.
Depending on the application there can be various purchased raw material items that are required as part of the
manufacturing process. These items with their arrival dates and quantities can be imported into the model.
Routings:
A list of job routings for each material specifying the resource and processing time for each task required to produce the
material.
439 / 1277
Depending upon the application this table might be extended with additional columns specifying a setup time, operator,
tooling, etc. The Routing Key is a key column that requires a unique name and is typically specified as a material name with
an underscore and step number appended. For example, FinishedGoodA_10 would be step 10 for producing
FinishedGoodA. The step numbers are typically specified as 10, 20, 30, etc. The sequence is the resource location where this
step is performed. This is typically the input node of a specific server or a TransferNode from which downstream servers are
dynamically selected. For example the TransferNode might be located at a group of five similar machines, and then the
entity is dynamically routed to one of the five machines based on availability and a selection rule – e.g. smallest
changeover time.
Bill of Materials:
A list of component materials that are required at a specific routing sequence location to produce a material.
The Routing Key is a foreign key reference to Routing table. Note that there is a many-to-one relationship that supports
multiple materials consumed/produced for the same Routing Key. All the materials that are listed in this table with the
same Routing Key will be consumed/produced at that routing step.
Work In Process:
A list of current orders that are in the system, along with their current status.
The information in this table is typically imported from the MES system and defines the current state of all the active
orders that are being processed in the system. The Order Id is a foreign key reference to the orders that are listed in the
Manufacturing Orders table with their Order Status specified as WIP. The information in this table defines the current route
number and resource where the order is being processed, along with the quantity completed at this resource. The Accrued
Cost is also specified in applications where activity-based costing is being used to track the production cost for the orders.
Manufacturing Orders Output:
An Output Table defining order start and end time on each resource used for creating Table Reports.
The foreign key reference for the Order Id ties this output data to the other input tables for the model. This makes it easy
to create custom Table Reports on the relations data set that display relevant information on the orders as well as the
scheduled start and end time for each order on each resource in the system.
Routing Destinations:
A list of each possible destination node for each resource. The entity is routed to one the nodes specified in this list based
on the selection rule.
Resource Plan
The Resource Plan provides a summary of how each resource in the system is utilized by each entity/order that is processed
by that resource. The Resource Plan presents this information in both a graphical view (Gantt) and tabular view (Usage and
State Logs). The resource view show the resource usage for both the parts manufacturing as well as the final assembly
areas. Also available on the Gantt chart view is the material levels for both the manufactured and the purchased material.
By selecting the “plus” sign associated with each resource in the resource list on the left of the Gantt chart will expand the
view showing the orders that are constrained by the resource as a result of material, capacity or operator constraints as well
as the resource state (idle, busy, etc.).
The thick black lines on the Gantt chart indicate the various summary views and by selecting the “plus” or “minus” sign for
that row will expand or collapse the view associated with that specific section of the chart to select only the view of interest
to the planner. The time horizon on the Gantt view can be changed by using the zoom function after selecting the Gantt
440 / 1277
to the planner. The time horizon on the Gantt view can be changed by using the zoom function after selecting the Gantt
view from the top ribbon.
By double clicking on any of the orders the view will change to the Entity Workflow view to observe the constraints
associated with each specific order.
Entity Workflow
By selecting the Entity Workflow tab on the left the planner can view all the orders in the system. This includes both the
manufactured material orders as well as the finished material orders. By expanding the view for the various order types by
selecting the “plus” or “minus” sign on the order list at the left-hand side of the Gantt chart will show all the customer
orders as indicated by the screenshot below.
By further expanding the view for each order will also show the resource and material constraints associated with each
order providing direct feedback to the planner as to the reasons for order lateness.
441 / 1277
Tasks can also be separated out within Entity Workflow Gantt using the Task Group and Task Row (with custom columns
from the Task Log).
Results
By selecting the results tab the planner will get access to a host of information regarding the schedule that has been
produced by the system. These results include a pivot table, Dashboard reports, Risk plots, Table reports, Target detail and
more. Below is an example of a resource state dashboard view.
442 / 1277
These results tab can be used to do a detail analysis of the schedule results to fully understand the system behavior to try
alternative options to improve the plan such as increasing resource capacity or providing additional material, etc.
443 / 1277
Simio Reference Guide
SchedulingDiscretePartProduction - Example
General Description
The example uses Simio RPS (Enterprise) Edition to schedule discrete part production. Simio RPS Edition is a simulation
tool for developing applications in Risk-based Planning and Scheduling. RPS is the dual use of a simulation model to
generate both a detailed resource constrained deterministic schedule as well as a probability-based risk analysis of that
schedule to account for variation in the system. RPS is used to generate schedules that minimize risks and reduce costs in
the presence of uncertainty. Although Simio RPS Edition is required to build this model, it may be viewed using Simio
Design or Professional Edition.
To understand the data schema and scheduling results in this example you should first read the Planning and Scheduling
with Simio document within the Support ribbon / Books. This problem description assumes that you are familiar with the
standard data schema and scheduling concepts that are presented in that document.
The system to be scheduled in this example is a discrete part manufacturing facility. The facility is a job shop that produces
finished goods. We wish to generate a 30-day production schedule for this facility that fully accounts for the limited
resources in the system.
The facility consists of functionally grouped machine groups named Cut, Weld, Shape, and Finish, with two machines within
each machine group. Each of these machines is modeled using a Server, with a TransferNode that is named for the machine
group (e.g. Cut) and is used to dynamically route based on a scheduling rule to the selected machine (Cut1 or Cut2) within
the group. The Cut and Weld Servers require a secondary resource that is modeled as a Worker. The Worker named Team1
operates at Cut1 and Cut2 Servers while Team2 Worker operates at Weld1 and Weld2 Servers. The Cut Servers have a
sequence dependent setup time where the setup time is specified in a changeover matrix based on material color. Possible
material colors are defined in a string list named MaterialColor with values Other, Red, Green, and Blue.
There are three finished goods (FinishedGoodA, FinishedGoodB, and FinishedGoodC) that are produced in this facility, and
each has its own routing and unique setup and processing time and material requirements at each Server within its routing.
The B2MML-based data schema discussed in the Planning and Scheduling with Simio document is used to hold the
production data for this example.
Although we are modeling the material consumption at each Server, in this example we are not explicitly modeling the
material resupply logic. The consumed materials are defined in the Material Lots table and include MaterialX and
MaterialY, and each has sufficient levels to supply production during the planning horizon. The Bicycle example model that
is installed with Simio illustrates modeling of the material resupply based on a Purchased Material arrival table.
In this example we are provided a set of CSV files for automatically generating the major components of the model, and
populating the required data tables. This illustrates the concept of “data-generated” modeling where the model is created
automatically by populating the object data into the Resource table. In this example, the objects that are created from this
table are already mapped to the scheduling tables.
Detailed Description
For this example, we provide the following additional data files that we will use for building the model and populating the
data tables:
These files are located in the DiscretePartProductionFiles folder that is located in the same directory as this example.
To build this model we execute the following steps:
1. Click the File > New From Template option and select ISA95 Schema Product Based Routings template. This will
create the tables and the subclass objects used for scheduling.
2. Import the Resources.csv into the Resources table. This will generate the objects for the model.
3. Import the remaining csv files into the data tables.
4. Add custom Dashboards and Reports.
5. Enhance the model logic as necessary (in this example no enhancements are made).
Although the default Gantt display and Logs work fine for many applications, it is convenient to be able to extend the Logs
with additional information, and to use this extra information to augment the Gantt display. This add-in will also add three
new custom columns to the Resource Usage Log for this purpose. The first specifies the name of the material being
produced on the resource. The second is the desired fill color for drawing bars on the Gantt. The third is the desired outline
color for drawing these same bars.
In addition to creating the tables, the template includes the sub-classed objects that are used for scheduling. These objects
are the same as their Standard Library objects except the default value for the object properties are mapped to the
Scheduling tables. In the case of the Server, task sequences are also added to model the setup and processing phases of
the server. As the objects are added to the model, they will already be mapped to use the data in the scheduling tables. All
the objects in the Navigation window that start with “Sched” are the sub-classed scheduling objects.
446 / 1277
Generating the Schedule
Once our model is complete we can generate the schedule by clicking on Create Plan on the Operational Planning ribbon
in the Planning window. This generates the deterministic schedule by automatically removing the randomness from the
model. We can then generate the risk analysis for this schedule by clicking on the Analyze Risk button on the same ribbon.
Our model was created using a global scheduling rule that can be easily changed in the model properties. By default,
orders are processed first-in-first-out, however this global rule can be easily changed to any of the standard dispatching
rules supported by Simio. The following depicts a zoom-in portion of the Resource Plan for this example using the
LargestAttributeValue rule.
As discussed in the Planning and Scheduling with Simio document, there are many different ways to view the schedule and
the associated risk. For example, the following is the dashboard for the dispatch list that we imported using the XML file.
This dashboard shows the resource utilization and dispatch list for the currently selected resource (Cut2).
Data Tables
The following is a summary of the default tables that are based on the B2MML standard.
Resources:
A list of resources that are in the manufacturing facility.
447 / 1277
Routing Destinations:
A list of each possible destination node for each resource. The entity is routed to one the nodes specified in this list based
on the selection rule.
Materials:
A list of materials that can be produced at this manufacturing facility.
Material Lots:
A list of material lots and quantities for materials in the facility.
Manufacturing Orders:
A list of all production orders to be processed during this planning period.
448 / 1277
Note that the Ship Date and Production Cost are both output columns in the Manufacturing Orders table; they are written
from the simulation model to the table as the schedule is generated by the deterministic simulation run. Also note that the
last four columns are targets.
Routings:
A list of job routings for each material specifying the resource and processing time for each task required to produce the
material.
Bill of Materials:
A list of component materials that are required at a specific routing sequence location to produce a material.
Work In Process:
A list of current orders that are in the system, along with their current status.
449 / 1277
An output table defining order start and end time on each resource used for creating table reports.
450 / 1277
Simio Reference Guide
SchedulingLaborEfficiencies - Example
General Description
This example uses Simio RPS Edition to build a data-generated model for scheduling orders, at a manufacturing facility,
requiring laborers with varying efficiencies. Simio RPS Edition is a simulation tool for developing applications in Risk-
based Planning and Scheduling. RPS is the dual use of a simulation model to generate both a detailed resource
constrained deterministic schedule as well as a probability-based risk analysis of that schedule to account for variation in
the system. RPS is used to generate schedules that minimize risks and reduce costs in the presence of uncertainty. Although
Simio RPS Edition is required to build this model, in its entirety, it may be viewed using Simio Design or Team Edition.
To understand the data schema and scheduling results in this example it is recommended to read the “Planning and
Scheduling with Simio” document, within Simio, under the Support ribbon -> Books. This problem description assumes
familiarity with the standard data schema and scheduling concepts that are presented in that document.
The facility is a job shop that produces four types of finished goods. It is intended to create a 6-month (180 day)
production schedule that fully accounts for the limited resources in the system. The facility consists of four functionally
grouped workstations named Press, Anodize, Mill and Paint. Each workstation has a staging area from which orders are
routed to a few machines. There are four machines in Press, two in Anodize, two in Mill, and one in Paint. The template
used to start building this model provides custom Object definitions created by using the Subclass feature on Standard
Library Objects. These are called SchedSource, SchedServer, etc. and have been specifically designed for use in scheduling
models.
The staging areas are modeled using a SchedTransferNode while the machines are SchedServer Objects. In this document,
let “machines” be used to refer to all SchedServer Objects in the model. Each machine requires a Secondary Resource,
modeled using a SchedWorker in this case, to complete its Processing Tasks. Additionally, each machine has a sequence
dependent setup time specified in a changeover matrix and based on material color. Material colors are defined in a string
list named MaterialColor with values ‘Green’, ‘Red’, ‘Blue’ and ‘Other’.
There are four finished goods ( FG1, FG2, FG3 and FG4) produced in this facility. Each has its own routing, unique
setup/processing times, and material requirements at each machine within its routing. The
ISA95SchemaProductBasedRoutings template ( File -> New From Template) discussed in the Planning and Scheduling with
Simio document is used to organize the production data for this example. Some other data tables are defined and used in
conjunction with those generated by the template.
Although material consumption is modeled at each machine, this example does not explicitly model the material resupply
logic. The consumed materials are defined in the Material Lots table and include ‘Tool1’ and ‘Tool2’. It is assumed that each
material has enough levels to supply production during the planning horizon.
This example illustrates the concept of “data-generated” modeling where the model is created automatically by storing
Object data in a table called Resources. In this example, the Objects that are created from this table are already mapped to
the other standard scheduling data tables.
Detailed Description
To build this model, execute the following steps after opening Simio ( Version 11.193 or newer required):
1. Open the ISA95 Schema Product Based Routings template
2. Import the Resources table ( Auto-Create Objects)
3. Import the remaining csv files
4. Create the Labor table schema, import data, and configure Objects accordingly
5. Define the Work Schedules
6. A few quick revisions
7. Create Manufacturing Orders Sec Res Output table
8. Create Press Capability And Times table schema, import data
9. Design Add-On Process logic
10. Generate the Schedule
11. Create OptQuest Experiment
Each of these steps will be described in detail. Note that the csv files may be obtained by opening the
SchedulingLaborEfficiencies model and using Export ( Data tab -> Content ribbon) for each table therein. This document is
nearly a complete set of instructions on how to build this model, and a learning tool to better understand aspects of the
(already built) example model. As a convention, property names are typed in italics while property values, table column
451 / 1277
(already built) example model. As a convention, property names are typed in italics while property values, table column
names and instance names are typed in ‘single quotes’. Object, table and process names are simply typed in uppercase as
they appear in the model.
Open the ISA95 Schema Product Based Routings Template
The ISA95 Schema Product Based Routings is opened at File > New From Template. This opens a project including the
Resources, Routing Destinations, Materials, Material Lots, Manufacturing Orders, Routings, Bill of Materials, Work In
Process, and Manufacturing Orders Output data tables; and the related string lists. These data tables will be populated at a
later step by importing data from csv files.
The Order Status string list is used to define orders as one of two types: ‘New’ orders that are being released to the facility,
and ‘WIP’ orders that are currently in process. The Material Color string list is a default string list for use with change
dependent setup times. In a typical application, this list would be renamed to size, part group, etc., based on the attribute
that triggers a dependent setup change. In this example, the default Material Color list is used to define the changeover
attribute.
The following entity relationship diagram depicts the template-generated data tables that are used in this example, along
with the relations between them ( Note: see Appendix A – Data Tables for a detailed description of the fields in each table).
This data schema assumes a product-based routing where the routing is defined for each material that can be produced in
the facility, and the manufacturing orders refer to each material being produced for that order. It is also possible to
configure the tables where a unique routing is specified for each order. This later approach is useful in an engineered to
order manufacturing environment.
Although the default Gantt display and Logs work fine for many applications, it is convenient to be able to extend the Logs
with additional information, and to use this extra information to augment the Gantt display. In this case, the template adds
three new custom columns to the Resource Usage Log for this purpose. The first specifies the name of the material being
produced on the resource. The second is the desired fill color for drawing bars on the Gantt. The third is the desired outline
color for drawing these same bars.
In addition to creating the tables, the template includes the custom subclassed Object definitions that have been defined
specifically for Simio scheduling models. These objects are comparable to the Standard Library Objects that they were
subclassed from, but some properties are different, or removed altogether, and several property default values are mapped
to the scheduling tables generated by the template. For the machines, task sequences are added (to the SchedServer
definition) to model setup and processing phases. As Objects are added to the model, via the Auto-Create feature, they
will already be configured to use data from the scheduling tables due to their property default values. The custom
scheduling Object definitions are found in the Navigation window, and all start with “Sched”.
452 / 1277
Import the Resources table ( Auto-Create Objects)
Recall that, in order to build this model from scratch, all data tables in the SchedulingLaborEfficiencies model must be
exported ( Data tab -> Content ribbon) to csv. First, the Resources table is populated by importing data from the
Resources.csv data file. To do so first bind the file, to Simio, by navigating to the Data window, selecting the Resources
table and then selecting Create Binding on the Content ribbon. Then browse to, and select, the Resources.csv file saved
locally.
Next use the Binding Options dropdown to select Manual, and then use the Import Table dropdown to select Import
Current Table. Going forward, this general procedure is used to bind a file and import data from it. Once the table is
populated with data, the objects are automatically instantiated in the model Facility window. They are placed in the Facility
window at the XLocation and ZLocation coordinates in the Resources table. The resulting model setup is depicted below:
453 / 1277
Create the Labor table schema, import data, and configure Objects accordingly
The Labor table specifies which Secondary Resource is required for Processing Tasks, at each machine, and a Secondary
Resource Efficiency value expressed as a fraction. Resource Efficiency, in Simio, is implemented such that the actual task
duration is the planned task duration divided by the efficiency for each task requiring a Secondary Resource.
In general, refer to Appendix A – Data Tables for a complete list of table and column names along with descriptions of
them. Notice that the ‘ResourceName’ column is a Foreign Key Property with its Table Key Property to
‘Resources.ResourceName’. Also, the ‘SecondaryResourceEfficiency’ column has its Default Value set to ‘1’.
Next, bind to Labor.csv and import its data (for the remaining tables this step is not explicitly stated). Notice that multiple
Secondary Resources might be eligible to perform tasks at a certain machine in the ‘ResourceName’ column, while others
are not eligible. Ineligibility to perform a certain task may generally be specified by an Efficiency value of 0, or in this case,
the exclusion of a certain Secondary Resource in the Secondary Resource Name column – for a given machine. This will be
clearer after configuring the machines to reference the data in this table.
Select the ‘Press13’ machine and open the Repeating Property Editor for its Processing Tasks. Notice the following changes
made for each of the six tasks therein:
In this case, a table column is used as a list, and more information about this is presented in the “Data Tables” help topic,
specifically “Using a Table Column as a List” subtopic. With this configuration, the machines will attempt to seize the most
efficient, available Secondary Resource. The ResourceSelectionConcepts SimBit includes more examples of data-driven
approaches to modeling Resource Efficiency. Since the Labor table ‘ResourceName’ column is a Foreign Key reference to
Resources.ResourceName (which has Auto-set Table Row Reference of ‘True’), each machine knows to only search the
Labor.SecondaryResourceName rows that pertain to it.
After all Processing Tasks are updated for ‘Press13’, right-click and ‘Update ‘SchedServer’ Property Defaults From This’ to
extend these changes to the other machines. Then verify that all other machines now have their Processing Tasks revised to
account for Resource Efficiency.
Define the Work Schedules
One Pattern Based Work Schedule and two Table Based Work Schedules are defined. Navigate to Work Schedules in the
Data tab. A Day Pattern called ‘AllDay’ is used in the ‘AllDaySchedule’ Work Schedule whose pattern contains just 1 day.
‘AllDay’ specifies a 24hr shift – Duration set to ‘1 day’.
454 / 1277
Two data tables called DaySchedule and NightSchedule specify the work periods, and corresponding capacity value (in
this case, a Boolean Property – numerically 0 or 1), to be used in two corresponding Repeating Table Based Work
Schedules. These are created and configured, in the Table Based tab ( Data tab -> Work Schedules view) to reference the
data tables. Notice that the properties of each Table Work Schedule are set to reference the appropriate columns in
DaySchedule and NightSchedule. Also note that the Repeating property is set to ‘True’ with an Interval of ‘1’ ( Weeks).
A few quick revisions
These details serve to resolve the errors mentioned in section 3. In the Resources table, notice that the ‘WorkSchedule’
column has Default Value of ‘AllDayWeek’ and Required Value set to ‘False’. In the Material Lots table, the Change Type
feature ( Schema ribbon) is used to make the ‘Quantity’ column an Expression Property. The same Change Type adjustment
is made to the ‘RequiredQuantity’ column in the Bill Of Materials table. Then, in the Definitions tab, a Standard Property
named ‘ToolQty’ is defined, and its Default Value is set to ‘3’.
Create Manufacturing Orders Sec Res Output table
An Output Table called Manufacturing Orders Sec Res Output is used to record information, throughout the run, about the
Secondary Resources and to specifically highlight details about the Resource Efficiency features. Recall that an Output
Table contains only State columns and typically uses Add-On Process logic to add rows throughout the run and populate
the table with output data. Think about how this is different than simply adding a State column, to a table already
populated with data, and when each approach might be useful. Consider referencing the Manufacturing Orders table for an
example of using State columns in a standard data table.
Create Press Capability And Times table schema, import data
The last data table called Press Capability And Times specifies which machines, in the Presses workstation, can process the
various Finished Goods – and the corresponding processing times. Notice how the Foreign Key column properties are
configured. And ‘ProcessTime’ has Unit Type ‘Time’ with Default Units set to ‘Hours’.
Design Add-On Process logic
Particularly in this section, it is recommended to follow along in the SchedulingLaborEfficiencies model provided. If
building the model from scratch, consider opening it side-by-side with the example. This section will give an overview of
the processes, and their purposes, but will not provide explicit step-by-step design instructions. They are presented
chronologically in terms of execution during the run.
OnRunInitialized
In the Processes tab, an OnRunInitialized Add-On Process is created. It uses data in the Press Capability And Times table
to assign values in the ‘ValidPressResources’ column of the Materials table, for each finished good. This is achieved using a
Search Step to find rows in the Materials table. There is no Match Condition so notice (using Model Trace, and perhaps a
Breakpoint on the Search Step) that all six rows in the Materials table are found. For each found item a new Token exits the
Found branch and, in this case, initiates another Search in the Press Capability And Times table. It can be informative to
Step through the Trace and observe how the ‘ValidPressResources’ column ( Materials table) is populated.
SchedServer_BeforeProcessing
Create a ModelEntity Real State Variable called ‘ProcessTime’ – beware of the common mistake to define this in Model,
rather than ModelEntity, in the Navigation window! The next Add-On Process is called SchedServer_BeforeProcessing and
it is assigned the Category ‘Press Add-On Processes’. This Process occurs when an entity has been allocated Server capacity,
but before entering (or ending transfer into) its processing station. It serves to check whether an Entity is at one of the Press
machines, and if so, assign its ProcessTime from the Press Capability And Times table. Otherwise, ProcessTime is assigned
from the Routings table. After designing this process, use ctrl+click to multi-select all the machines and assign it as the
value of Before Processing (under Add-On Processes). Now this Add-On Process is triggered at each machine.
LaborAllocated
This process serves to populate the Manufacturing Orders Sec Res Output table. The Add Row Step specifies the Table
Name ‘Manufacturing Orders Sec Res Output’ and that the Token should carry the row reference to the added row. In
perusing the Assign Steps, notice that the Output Table is populated with information from some of the data tables, the
SchedWorker Object itself, the ModelEntity who seizes the SchedWorker, and the system in general. Since this process is
ultimately triggered on Allocated, the Token.AssociatedObject is the ModelEntity who seized SchedWorker and the
Token.ContextObject is the specific realization of SchedWorker who was seized. Therefore, information about both Objects
is accessible in the process. The PerPartProcessing column reflects the effect of Efficiency on Processing Time. To see it
clearly, filter the ParentName column to a specific SchedServer, and observe that lower efficiency corresponds to longer
Processing Time.
LaborReleased
First create two model Entity String State Variables called ‘OrderId’ and ‘RoutingKey’. This process simply populates the
ScheduledEndTime column of the Manufacturing Orders Sec Res Output table. The Search Step starts with the last row in
the table and finds the row whose OrderId matches that of the Entity who released the SchedWorker. It also verifies that
455 / 1277
the table and finds the row whose OrderId matches that of the Entity who released the SchedWorker. It also verifies that
the RoutingKey matches as a given OrderId has multiple RoutingKeys throughout the simulation. Recognize that the
LaborAllocated and LaborReleased processes are triggered on Allocated and on Released for all five SchedWorker
instances.
OnRunEnding
First go to the Tokens view in the Definitions tab and use the Add Token button to create a new custom Token. Name it
‘OrderToken’ and add two String State Variables called ‘ParentName’ and ‘OrderId’. Back in the Processes tab an
OnRunEnding process is created. Notice that the Token Class Name, for the process itself, is ‘OrderToken’. This indicates
that the custom Token, just created, is used to execute this process. Note that this process is only visible in model Trace
upon hitting the Stop button after run completion.
Embellishments: Dispatching Rule, Tally Statistic
The GlobalSelectionRule property is deleted and two Enumeration Properties named ‘DispatchingRule’ and
‘TieBreakerRule’ are defined. The Enum Type property, for each of these, is set to
‘SimioSelectionRules.StandardDispatchingRuleDefinition+DispatchingRule’. Consider experimenting with different values
of Enum Type and observing how the dropdown options for Default Value change. For ‘DispatchingRule’ the Default Value
is set to ‘LeastSetupTime’ and for ‘TieBreakerRule’ Default Value is set to ‘EarliestDueDate’.
Notice that, for the Anodize SchedTransferNode (under Routing Logic -> Other Routing Out Options), Route Request
Dynamic Selection Rule is set to ‘Standard Dispatching Rule’. Dispatching Rule and Tie Breaker Rule reference the recently
defined Enumeration Properties. The right-click and ‘Update ‘SchedTransferNode’ Property Defaults From This’ is used to
extend these changes to all other SchedTransferNodes.
Also, for only the ‘Presses’ SchedTransferNode, the Selection Condition (under Entity Destination Type) is appended with
‘&& String.Contains( Materials.ValidPressResources, Candidate.Resources.ResourceName.Object.Name) == True’. This
checks the Materials table ‘ValidPressResources’ column to ensure that a Press is valid for the ( Finished Goods)
‘MaterialName’ of the Order that is requesting routing.
Notice the items in the Repeating Property Editor, of Before Processing State Assignments, for the machines. One item
assigns ‘ModelEntity.OrderId’ a New Value of ‘ManufacturingOrders.OrderId’ and the other assigns
‘ModelEntity.RoutingKey’ a New Value of ‘Routings.RoutingKey’. This adjustment is made for one machine, then ‘Update
‘SchedServer’ Property Defaults From This’ extends the changes to all machines.
Select a SchedWorker instance and notice its Dispatching Rule of ‘SmallestAttributeValue’, with Attribute Value Expression
to ‘Candidate.ModelEntity.DirectDistanceTo.Object( SchedWorker)’. This dispatches the SchedWorker to the physically
closest Entity within its Allocation Queue. Additionally, right click Tie Breaker Rule and use Set Referenced Property to
select ‘TieBreakerRule’. Again, these updates are made to just one SchedWorker instance, then ‘Update ‘SchedWorker’
Property Defaults From This’ extends the changes to all SchedWorkers.
Generating the Schedule
Once the model is complete the schedule can be generated by clicking on Create Plan on the Operational Planning ribbon
in the Planning tab. This generates the deterministic schedule by automatically removing the randomness from the model.
Then risk analysis can be generated for this schedule by clicking on the Analyze Risk button on the same ribbon.
The model was created using a Standard Dispatching Rule of ‘LeastSetupTime’, and this can be easily changed in the
model Properties. Some other options include ‘FirstInQueue’, ‘ShortestProcessingTime’, ‘LongestTimeWaiting’, etc. This is
the primary criteria used to dynamically select an Entity from competing requests waiting to be assigned an available
destination, while the secondary criteria is specified by the TieBreakerRule also accessible in model properties. The
following depicts a zoomed-in portion of the Resource Plan for this example using the Least Setup Time rule.
456 / 1277
Create OptQuest Experiment
A Tally Statistic Element called ‘Lateness’ is defined. For the Input@Ship Node, observe the On Entering Repeating
Property Editor under Tally Statistics. Each time an Entity enters the node, an observation of ‘Lateness’ is tallied along with
the Expression ‘TimeNow - ManufacturingOrders.DueDate’. Observe the ‘OptQuest’ experiment. The OptQuest Add-In may
be selected from the experiment Design ribbon. It has three Responses: ‘AverageLateness’, ‘Cost’ and ‘NumberCompleted’.
Notice the property values for each of the three Responses, especially the Weight property which corresponds to the
optimization objective function. Note that, in the Experiment Properties, Objective Type is set to ‘Multi-Objective Weighted’
so each Response (considering both Weight and Objective) is included in the optimization objective.
OptQuest uses an optimization algorithm to search for the input controls that will produce the best result for the objective
function. OptQuest works by obtaining results, for a set of input controls, then running again with different controls and
comparing the corresponding objective values repeatedly until it meets one of the terminating criteria – either reaching the
maximum number of iterations or determining that the objective has stopped improving.
Appendix A – Data Tables
The following is a summary of the default tables that are based on the B2MML standard.
Resources:
A list of resource that are in the manufacturing facility.
Routing Destinations:
A list of each possible destination node for each resource. The entity is routed to one the nodes specified in this list based
on the selection rule.
Materials:
A list of materials that can be produced at this manufacturing facility.
457 / 1277
Material Lots:
A list of material lots and quantities for materials in the facility.
Manufacturing Orders:
A list of all production orders to be processed during this planning period.
Note that the Ship Date and Production Cost are both output columns in the Manufacturing Orders table; they are written
from the simulation model to the table as the schedule is generated by the deterministic simulation run. Also note that the
last four columns are targets.
Routings:
A list of job routings for each material specifying the resource and processing time for each task required to produce the
material.
458 / 1277
Bill Of Materials:
A list of component materials that are required at a specific routing sequence location to produce a material.
Work In Process:
A list of current orders that are in the system, along with their current status.
Labor:
A list of all resources and the secondary resources eligible to work at each one. Secondary resource efficiency, for a given
resource, is also specified.
459 / 1277
Day Schedule:
A list of work periods, their duration, and the OnShift capacity to be used for a repeating table-based Work Schedule.
Night Schedule:
A list of work periods, their duration, and the OnShift capacity to be used for a repeating table-based Work Schedule.
460 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
461 / 1277
Simio Reference Guide
WarehouseExample - Example
General Description
This model represents a warehouse. The general process flow is as follows:
Products are generated and processed at the finish machine.
A forklift picks up the products for storage.
A second forklift picks up the stored products from the storages to the shipping dock.
Products are loaded into a truck for shipment.
462 / 1277
Simio Reference Guide
464 / 1277
Simio Reference Guide
Modeling in Simio
In Simio, the user should think in terms of the physical objects that make up the system. The users places these objects in
the Facility Window and they interact based on their internal logic. The objects that are placed in the Facility Window are
user-defined and are stored in libraries. A Simio library contains object definitions that represent the physical components
of a system. Simio has a Standard Object Library that includes 14 pre-built object definitions that can be used to model a
wide range of systems.
Simio also provides the user with the ability to create their own object definitions. These can be created from any of the
five classes of Object Types. The user defined objects are stored in the Project Library.
Simio allows a user to create their own Design Add-Ons (such as the Source, Server, Sink Add On avialable in the Project
Home tab), User Selection Rules, Steps, Elements, and Data Table importers. For more information on integrating custom
code into Simio, see Custom Simio Extensions.
Modeling and animation are done as a single step in Simio. And Simio provides a number of tools for enhancing the
animation and for importing and downloading symbols into the model.
465 / 1277
Simio Reference Guide
Navigation
The Navigation window is found in the top right side of the interface, above the Properties window. It is used to navigate
between different models within the project, navigate to the Project window, to Experiments, and to project Symbols.
Navigating between the different models within the project is done through the Navigation window. When a user clicks on
a model in this window, it becomes the active model. Therefore, the model windows in the main part of the interface are
now associated with the model that is highlighted in the Navigation window. The type of windows that are available for a
particular model depend on the object class of the active model. For example, for a model of object class Fixed, the
Facility, Processes, Definitions, Data, and Results windows are shown. However, for a model of object class Entity, only
Processes, Definitions, and Data are shown. This is because it does not make sense for an Entity object to have a Facility
window or a Results window.
When a Model is selected in the Navigation window, a right click will give the user a choice to add a new fixed object class
Model, add a new Entity model, add a new Experiment to this model, rename the selected model, view the model
properties or delete the selected model. There is an additional option to view / modify the object references in a given
model, as well as add / remove explicit object references. See Versioning of Simio Objects for more information on object
references. When the Project is selected in the Navigation window, a right click will give the user a choice to add a new
fixed object class Model, add a new Entity model, rename the project and view the project properties. When an
Experiment is selected in the Navigation window, a right click will give the user a choice to add a new fixed object class
Model, add a new Entity model, add a new experiment, duplicate the experiment, rename the experiment, view the
experiment properties or delete the experiment.
Within the Navigation window, users have the ability to re-order project items in the window via drag and drop. Moving a
model can be done by simply highlighting the model, dragging it to a location in the list and dropping it. A small blue
curved “insert here” arrow will appear when moving it to display where it will be located when dropped into a new
location. For example, a user may wish to move the ModelEntity model below the various project related models.
Note that the various sections of the ‘tree’ are collapsible as well. When you click on one of the “v” symbols next to a model
that has multiple experiments, for example, it will close the items and then contain a “>” next to it instead of a “v”.
Users may re-arrange the order of sibling items (nodes) by dragging them around. That is, you can re-order items within the
same parent node:
Top-level models within the project
Experiments within their parent model (actually, the “Experiments” node for that model)
Baseline models within their parent model (similarly, the “Baselines” node for that model)
Symbols within the “Symbols” node
466 / 1277
Simio Reference Guide
Project Window
The Project Window is accessed by clicking on the name of the project from within the Navigation window. It contains all
of the models, experiments, symbols, textures, and path decorators that a user has in their project.
468 / 1277
Simio Reference Guide
Model Windows
Windows
The following windows can be accessed using the Model Window tabs.
The Facility Window
The Processes Window
The Definitions Window
The Data Window
The Results Window
469 / 1277
Simio Reference Guide
470 / 1277
Model Level Properties
Listed below are the properties of a Model:
Property Description
Model Name The name of this model object. This is what is shown in the Navigation window and what is
used if this model object is placed within a different model.
Description Description text for this instance. The description text will be displayed in the Project window
when the object model is to be selected for placement into a different model.
Object Type The type of this object model as Fixed, Node, Link, Agent, Entity or Transporter.
Parent Class The name of the parent class from which this object is subclassed.
Resource Object This property indicates whether an object of this definition type is a resource object with
capacity that can be seized and released.
Runnable This property indicates whether an object can be run or not. For example, an object model
defining a vehicle would not be runnable, while a model containing Source, Servers, Sink would
be runnable.
Library Visibility This property indicates if this object is shown when the project is attached as a library.
'Always' indicates the object will always be shown. 'Never' indicates the object will never be
shown. 'Deprecated' indicates the object will not be shown unless the active model uses this
object, or the user has explicitly enabled "Show Deprecated Objects" in the library view.
Table Imports If 'True', an explicit import into a data-bound table will be undoable. Set to 'False' if memory
are Undoable usage by the records of previous rows being held in memory for undo-ability becomes a
concern.
Load Action This property is visible when the Runnable property is 'True'. It indicates if the model should
automatically enter a run mode immediately after loading. Options include None, Reset, Step,
Run and FastForward.
471 / 1277
Update Interval Provides a model-level value that may be used in models or custom objects to trigger periodic
user-specified actions. This value, while not used directly by Simio, is available at run-time via
Run.UpdateInterval.
Check Base for Indicates if Simio should include this object's inherited properties when checking if it has any
Advanced Advanced properties.
Properties
Available in If True, this object can be used to build models in the Express Edition of Simio.
Express Edition
( RPS ( Enterprise)
Only)
Freeze Period The value that will be returned by the Run.FreezePeriod function.
Hours ( RPS
Only)
Concurrent Specifies the maximum number of replications that will be run simulataneously. The default
Replication value of 0 allows Simio to determine this value.
Limit ( Risk
Analysis - RPS
( Enterprise)
Only)
Parse Element If 'True', element functions will be the last thing searched to get a match to an identifier in an
Functions In expression. If False, element functions will be searched before states, expression functions, child
Expressions elements and objects, external nodes, and schedules. If this value is changed, the model must
( Compatability) be saved and reloaded in order for it to take effect across all expressions. This was implicitly
'False' in models built in Sprint 106 and prior sprints.
Parse Non- If 'True', then non-entity types are allowed for the ObjectType.PropertyName property
Entity reference syntax for all properties. The recommended value for this is 'True'. If this value is
Associated changed, the model must be saved and reloaded in order for it to take effect. This was
Objects for implicitly 'False' in models built in Sprint 166 and prior sprints.
Property
Reference
( Compatability)
Allow non- Simio RPS Edition allows the creation of elements and objects with non-standard names. While
standard standard names contain only letters, digits and underscores, non-standard names can contain
element/object ANY characters. RPS Edition enables the entry of non-standard names into table columns that
names are set to automatically create element or object instances.
( Compatability - This setting determines if the user may additionally enter non-standard names interactively, in
RPS Only) this model's Facility or Elements windows.
Allow Trace If False, does not allow trace to be written for the entire model.
( Protection -
Professional /
RPS Only)
Allow Profile If False, does not allow runtime profiling for the entire model.
( Protection -
Professional /
RPS Only)
Allow Watch If False, disables watch window functionality for the model.
( Protection -
Professional /
RPS Only) 472 / 1277
RPS Only)
**NOTE** - With Protection properties, if the functionality is disabled, the user is notified, as shown below. Additionally, if
the model is password protected, users cannot set the values for the Protection properties, even if they have the proper
license.
Note: Within our SimBits, we utilize the Description, Keywords and Categories properties to separate the various files, as
seen when using the Support ribbon, Sample SimBit Solutions button that allows users to search the various SimBits files.
Users may add models to the default SimBit directory (documents/Simio/SimBits) and any *.spfx model files will be
indexed and categorized based on the Category and Keyword properties listed. Categories are used in both the Basic and
Advanced Search, while Keywords are used in the Advanced Search. The Description text property will be displayed below
the specific Category and is used for searching specific terms as well.
473 / 1277
Simio Reference Guide
More information regarding the various object queues and animating queues can be found on the Queues page.
The user can add a Status Label for displaying static text or the value of an expression inside a text display rectangle. After
selecting Status Label left click in the window to place the first vertex, and then drag and left click again to add the
opposite vertex.
The following is an example of first using the Status Label for text and then using it to display an expression. In this case
the expression shown is Server1.Processing.NumberExited.
The Status Plot displays the value of an expression over time inside a display rectangle. After selecting Status Plot left click
in the window to place the first vertex, and then drag and left click again to add the opposite vertex. The Plot displays a
maximum of 100 data points, eliminating the oldest 25 points every time it reaches a total of 100. The Status Plot allows
for more than one expression. The Appearance ribbon (as seen above the plot shown below) allows the user to change the
Labels, Time Range and Style of the plot.
The following is an example of a Status Plot with two expressions: Number Waiting in Queue at the Server and the Total
Number of Failures at the Server.
474 / 1277
The Status Pie shows the values of a list of expressions (in percentages of their total summation). In other words, the
percentages shown in the pie chart are percentages relative to the total of all values in the pie chart. The Appearance
ribbon (as seen below) allows the user to change the Title, Legend and Style of the status pie. There is also an option to
Show Zero Values in Legend, which will enable or disable repeat group or list values that result in zero within the legend.
When displaying the Status Pie legend with List States that have no spaces, Simio will automatically insert spaces when
there is a capital letter in the name. For example, a List value of Line2Idle will appear in the status pie legend as Line2 Idle.
The following is an example of a Status Pie can displays the Maximum value of two different State Statistics (i.e.
MissedDeliveries.Maximum where MissedDeliveries is a State Statistic).
A Status Pie
The Circular Gauge will display the value of an expression in a the style of a circular gauge. The Appearance ribbon (as
seen above the circular gauge shown below) allows the user to change the Style and Scale of the gauge.
The following is an example of a circular gauge displaying the value of Server1.Capacity.Allocated.Average.
475 / 1277
A Circular Gauge in the Facility Window
The Linear Gauge will display the value of an expression in a the style of a linear gauge. The Appearance ribbon (as seen
above the linear gauge shown below) allows the user to change the Style and Scale of the gauge.
The following is an example of a linear gauge displaying the value of Server1.NumberWaitingAllocation.
The Stacked Bar adds a status stacked bar for displaying information in the simulation. After selecting the Stacked Bar, left
click in the window to place the first vertex, then drag and left click again to add the opposite vertex.
The Stacked Bar can be rectangular or ellipse shaped. The scale type of the Stacked Bar can be specified as either Volume
or Linear. If Volume is selected, the value of the expression will be used for the volume of each block. Alternatively, if
Linear is selected, the value of the expression will be used for the height of each block. The large portion of this animation
symbol is best viewed in 3D, as the expressions or queue contents are displayed on top of each other. The Floor Display
options of Left and Right, however, allow the contents to be shown in 2D within a gauge type rectangle to the left or right
of the main stacked bar.
The types of stacked bars include Container, Queue and Expression. If the Type is Container, then simply indicate the
Container element to animate, and the stacked bar will display Container contents by Volume. To visualize a Container by
weight, the Queue Type stacked bar can be used. If the Container referenced has a non-infinite weight capacity, but an
infinite volume capacity, the stacked bar will display Container contents by Weight. If the Type is Queue, then the options
include Queue State, Queue Item Expression and Total Expression are available. Total Expression allows a user to specify a
total space available. If Expressions is selected, then a repeat group of Expression Values is displayed, where users can
specify an Expression and a Color. Like Queue, a Total Expression can also be specified.
Any texture can be applied to a stacked bar (the middle blue part), and that material will be the one used to display the
total volume available.
476 / 1277
The following is an example of a stacked bar displaying the Server's processing contents queue,
Server1.Processing.Contents, in terms of the ModelEntity.Size.
Adding a Button will provide the user the opportunity for firing an event within the model while it is running. After
selecting Button left click in the window to place the first vertex, and then drag and left click again to add the opposite
vertex. The text size of the button can be adjusted by specifying the Text Scale property for the Button on the Appearance
ribbon. A button can be used during the run to trigger a Process, create a new Entity at a Source, etc. During a run, if the
focus is not on the Facility Window when the user wants to click the button, the user will need to first click somewhere in the
Facility Window to return focus to this window and then click on the button to fire the Event.
477 / 1277
Simio Reference Guide
A user can also add one of the standard processes that are automatically executed by Simio by selecting one from the
drop down under the Select Process icon. There is no need to define a triggering event for these processes because Simio
executes them automatically. For example, the OnRunInitialized process is executed when this object/model is first
initialized. The OnCapacityReleased is executed as soon as the capacity of this object/model has been released. The
capacity related standard processes will only appear in the drop down if this object is a Resource object. (An object is a
Resource object if its Resource Object property is set to 'True'.)
Steps are added to processes by clicking and dragging from either the Common Steps panel on the left or from the All
Steps(A-Z) panel on the bottom left. All of the Common Steps are also listed in the All Steps panel. Any custom user
created steps will appear in the User Defined steps panel on the bottom left.
Process Element Properties
Listed below are the properties of a Process:
Property Description
Triggering The name of an event that will trigger a new token to execute the steps in this process. Refer to the
Event Subscribe and Unsubscribe steps to dynamically add or cancel triggering events for a process during
Name a simulation run.
Triggering Optional condition to be evaluated whenever a triggering event occurs, and which must also be true
Event to cause the execution of this process.
Condition
Token Class The token class that all tokens executing this process will be created from.
Name
Input A list of input arguments that will be passed to the process if it is executed using an Execute step.
Arguments
State Name of the token state variable that will store the value for the input argument when a token
Variable begins executing the process.
Name
(Input
Arguments)
Return A list of values that will be returned by the process if it is executed using an Execute step.
Values
Token The action taken by a token in this process if the token's associated object is destroyed. If the action
Action On is 'EndProcess', then the token will automatically end processing upon exiting its current step. Note
Associated that this proprety setting will be ignored by a token if it is directly responsible for the associated
Object object being destroyed (e.g., the token is executing a Destroy step in the process). In that case, the
Destroyed token will continue processing regardless.
Token The action taken by a token in this process if the token's associated object requests a transfer to a
Action On new location. If the action is 'EndProcess', then the token will automatically end processing upon
Associated exiting its current step. Note that this property setting will be ignored if it is directly responsible for
Object the transfer request (e.g., the token is executing a Transfer step in the process). In that case, the token
Transfer will continue processing regardless.
Requested
Initially Specifies whether the process is enabled when the system is initialized. Any attempt to execute a
Enabled disabled process will be ignored by the simulation engine.
Allow Step Allows or suppresses trace messages from steps in this process. (Note: This applies ONLY to steps in
Trace this process; it does not propagate to steps in other processes that might be called from this one.)
TokensInProcess.NumberItems Returns the number of tokens that are currently executing the
process.
TokensInProcess.FirstItem Returns a reference to the first token in the list of tokens that
are currently executing the process.
TokensInProcess.LastItem Returns a reference to the last token in the list of tokens that
are currently executing the process.
TokensInProcess.Contains(token) Returns True (1) if the list of tokens that are currently executing
the process contains the specified token. Otherwise, the value
False (0) is returned.
479 / 1277
Multiple entire processes can be selected for copy/paste into the same Processes window or a different model Processes
window. This can be done by clicking the first process to copy to select it. Shift-click on another process will highlight the
first selected, the last selected and all processes in between. Ctrl-click will keep the current selection and highlight the
process that is selected as well, allowing for multiple processes to be highlighted that are not next to each other. When the
processes are highlighted, the light blue hatching can be seen in the background of the process. From the keyboard, Ctrl-C
/ Ctrl-V / Ctrl-X can be used to then cut/copy/paste the multiple processes, or alternatively, the Cut/Copy/Paste buttons
within the Project Home ribbon may be used.
A user can change where any segment from a step goes. To do this, select the step, then move the endpoints of its
outgoing segments by clicking and dragging on the little circles on the end of the segment. A segment cannot be moved
from a step if it leaves part of the process disconnected from the begin step.
Within the Processes window, there is an autoscroll capability which is useful when editing large processes. If you are
moving a step from one part of the process to another, you can either use the '-' key to zoom out to view the process, or
simply click on the step to move and Simio will autoscroll to the left or right as you move the step. Autoscrolling is also
helpful in connecting the step's exit to another step that is several steps away. By selecting the step's segment circle and
moving it to the left or right, the processes window will autoscroll in that direction. When working with larger processes,
you are able disconnect a segment by selecting the step and right-clicking, as seen below. The options for Disconnect Exit
and/or Disconnect Alternate Exit are available if the step's exit can be disconnected without leaving part of the process
disconnected from the Begin step.
The Properties Spreadsheet Window is available for editing information within a Process or particular Step type in a grid-
like format. Copy/paste may be used within the grid to easily change information in multiple columns for processes or
steps. Additionally, multiple steps can be multi-selected by using Ctrl-click. This allows common properties to be edited
within the Properties window on the right side of the Simio interface.
481 / 1277
Simio Reference Guide
Steps
Steps are used to define logic within your simulation model. Each step performs an action such as seize, delay, decide, or
wait. Steps are stateless, but may change the state of an element/token/entity/object. Steps are organized into groups
within the Processes Window.
They include the Common Steps, All Steps and User-Defined Steps.
If you hover over a step within a process, you can view the information specified in the Properties and/or Repeat Group
without having to open the details in the properties window.
482 / 1277
Simio Reference Guide
Common Steps
The Common Steps library includes some of the most commonly used steps including:
Assign step is used to assign a new value to a state variable.
Create step may be used to create new entity objects of a specified type, create copies of an existing entity, or to simply
create new tokens that reference existing objects.
Decide step may be used to determine the flow of a token through process logic.
Delay step delays the arriving token in the step for the specified time duration.
Destroy step destroys either the parent object or the executing token's associated object.
EndTransfer step may be used to indicate that the entity object associated with the executing token has completed transfer
into an object or station.
Execute step may be used to execute a specified process.
Find step may be used to search the value of an expression over a specified range of one or more index variables. The
expression will typically involve array variables (vectors or multi-dimensional arrays) or indexing related functions.
Fire step may be used to fire an object event.
Move step may be used to request a move from one or more moveable resources that have been seized by either the
parent object or object associated with the executing token. The executing token will be held in the Move step until the
resources have arrived to the requested locations.
Release step releases capacity of one or more objects on behalf of the parent object or the object associated with the
executing token.
Scan step may be used to hold a process token at the step until a specified condition is true.
Search step may be used to search a collection of objects.
Seize step may be used to seize capacity of one or more objects on behalf of the parent object or the object associated
with the executing token.
SetNode step may be used to set the destination node of any entity object.
Tally step tallies an observation for each token arriving to this step.
Transfer step may be used to transfer the entity object associated with the executing token between objects and between
free space and objects.
Wait step may be used to hold the arriving token in the step until a specified event occurs.
Customizable "Common Steps" Panel
The Common Steps panel can be customized. If you're looking at a different steps panel ( All Steps or User Defined), you
can right-click on a step and add or remove it from Common Steps. You can also use drag and drop to re-arrange the steps
on the Common Steps panel. There is also an option to restore the Common Steps to their default steps and order. This is a
product-level feature (not per-project or per-model).
483 / 1277
Simio Reference Guide
All Steps
The All Steps ( A-Z ) library includes all of the Simio steps. These steps provide the runtime logic for the simulation and
include:
AddRow step may be used to add a new row to a specified output table. A reference to the added row is assigned to the
executing token or object.
Allocate step may be used to manually trigger an allocation attempt of the parent object's available resource capacity (if
any) to other objects waiting for units of that capacity.
Arrive step may be used by an entity object to notify its accepted visit requests that the entity has 'arrived' to its current
location.
Assign step is used to assign a new value to a state variable. The Set* steps are used to set the values of other items.
Batch step may be used in conjunction with the BatchLogic element to match multiple entities together, form those entities
into a batch, and then attach the batched members to a parent entity.
Changeover step may be used used in conjunction with a ChangeoverLogic element to model a sequence dependent setup
at a specified resource.
ClearStatistics step may be used to clear model statistics.
Consume step consumes the specified quantity of a material - either at the top level only - or the exploded bill of material.
Create may be used to create new entity objects of a specified type, create copies of an existing entity, or to simply create
new tokens that reference existing objects.
Decide step may be used to determine the flow of a token through process logic.
Delay step delays the arriving token in the step for the specified time duration.
Destroy step destroys either the parent object or the executing token's associated object.
Disengage step may be used to unlock an entity's location from a location on the parent link so that the link and entity may
move independently.
Dropoff step may be used by a transporter object to drop off a riding entity into the transporter's current node.
EndRun step ends the simulation run.
EndTransfer step may be used to indicate that the entity object associated with the executing token has completed transfer
into an object or station.
Engage step may be used to lock an entity's location to a location on the parent link object.
Execute step may be used to execute a specified process.
Fail step starts a downtime of type Failure Name.
Find step may be used to search the value of an expression over a specified range of one or more index variables. The
expression will typically involve array variables (vectors or multi-dimensional arrays) or indexing related functions.
Fire step may be used to fire an object event.
Insert step may be used to insert an object into a specified queue.
Interrupt step may be used to interrupt process delays.
Move step may be used to request a move from one or more moveable resources that have been seized by either the
parent object or object associated with the executing token. The executing token will be held in the Move step until the
resources have arrived to the requested locations.
Notify step may be used to output a user defined trace or warning message.
NotifyConstraint step may be used to add a custom log entry to the model's constraint log.
484 / 1277
Park step may be used to move an entity object into the parking station of a node.
Pickup step may be used by a transporter object to pick up an entity waiting in the ride pickup queue of the transporter's
current node.
PlanVisit step may be used by a transporter object to search for and accept a pickup reservation request in the system.
Produce step produces the specified quantity of material - either at the top level only - or at the exploded bill of material..
Release step releases capacity of one or more objects on behalf of the parent object or the object associated with the
executing token.
Remove step may be used to remove an object from a specified queue.
RemoveRows step may be used to remove all existing rows from an output table.
Repair step ends a downtime of type Failure Name.
Reserve step allows the reservation of a specific resource capacity.
RestartRun may be used to set the ending time of the simulation run to the current time. This will cause the run to end once
all simulation events scheduled for the current time have been processed.
Resume step may be used to resume a process or to resume the movement of an object.
Ride step may be used to initiate a transporter ride request for an entity object at a node.
Route step may be used with a RoutingGroup element to route an entity object to a destination selected from a list of
candidate nodes.
Scan step may be used to hold a process token at the step until a specified condition is true.
Search step may be used to search a collection of objects.
Seize step may be used to seize capacity of one or more objects on behalf of the parent object or the object associated
with the executing token.
SelectDropoff step may be used to set the destination node of the parent transporter object to the dropoff location of a
riding entity.
SelectVisit step may be used to set the destination node of the parent transporter object to a pickup location that was
accepted using the PlanVisit step.
SetNetwork step may be used to set the network of links used by an entity to travel between node locations.
SetNode step may be used to set the destination node of any entity object.
SetRow step may be used to assign a data table row or sequence table row to a token or object.
SetWorkSchedule step may be used to assign a new work schedule to a resource object.
StartTasks step may be used to initiate a task sequence that is associated with an object in the model.
Stipulate step may be used to add dependencies and requirements that entities must satisfy before processing.
Subscribe step may be used to add a new triggering event for a process, indicating that the process is to be executed if the
event occurs.
Suspend step may be used to suspend a process or to suspend the movement of an object.
Tally step tallies an observation for each token arriving to this step.
Transfer step may be used to transfer the entity object associated with the executing token between objects and between
free space and objects.
Travel step may be used to do a direct (straight-line) movement of an entity in free space to a specified location.
UnBatch step may be used to remove batch members from the parent entity object associated with the executing token.
UnPark step may be used to move an entity object out of the parking station of a node.
UnReserve step ay be used to cancel any reservations for a resource made by a specified owner up to a desired number of
reserved capacity units cancelled.
UnSubscribe step may be used to cancel a triggering event for a process.
485 / 1277
VisitNode step may be used within a node object's logic to initiate the OnVisitingNode process of the entity associated
with the executing token.
Wait step may be used to hold the arriving token in the step until a specified event occurs.
486 / 1277
Simio Reference Guide
487 / 1277
Simio Reference Guide
CloseGate
CloseGate
The CloseGate user defined step may be used to close a specific gate name.
The CloseGate step is used in conjunction with the OpenGate and PassThruGate user defined steps and the BinaryGate user
defined element.
Listed below are the properties of CloseGate:
Property Description
Gate The name of the gate to close.
488 / 1277
Simio Reference Guide
DbExecute
DbExecute
The DbExecute is a user defined step may be used to execute an SQL statement on a database.
The DbExecute step is used in conjunction with the DbConnect user defined element.
Listed below are the properties of DbExecute:
Property Description
DbConnect The name of the DbConnect element to reference.
SQL Statement used to execute database calls. It can be used to insert, update and delete data. Since
Statement the Db Write uses expressions instead of states, the position is to populate data into the SQL
statement.(e.g. @1 is expression 1 ).
Items The list of expressions. NOTE: Datetimes need to be converted into a string that is recognizable
by the database. (e.g., String.FromDateTime( Entity.TimeCreated, "yyyy/MM/dd HH:mm:ss")
489 / 1277
Simio Reference Guide
DbQuery
DbQuery
The DbQuery is a user defined step may be used to query data from a database.
The DbQuery step is used in conjunction with the DbConnect user defined element.
Listed below are the properties of DbQuery:
Property Description
DbConnect The name of the DbConnect element to reference.
SQL The SQL statement that is called to retrieve the data. The column names returned are mapped
Statement into the states in the same order. First column into first state, second column into second state,
etc.. For the where statement, the state value used is based on position in the states repeating
properties.
In the example below, the 6th state (@6) ( RowID ) will be used to populate the value used by the
where statement. The position is used instead of the state name to be consistent with the DbRead
step: Select String1, Integer1, Real1, DateTime1, DateTime2 from TestReadWrite where ID = @6
490 / 1277
Simio Reference Guide
DbRead
DbRead
The DbRead is a user defined step may be used to read data from a database.
The DbRead step is used in conjunction with the DbConnect user defined element.
Listed below are the properties of DbRead:
Property Description
DbConnect The name of the DbConnect element to reference.
Table Name The database table name from which the data will be read.
Columns These will be used to select the data from database columns into states.
Where The column names and values from which to select data.
491 / 1277
Simio Reference Guide
DbWrite
DbWrite
The DbWrite is a user defined step may be used to write data to a database.
The DbWrite step is used in conjunction with the DbConnect user defined element.
Listed below are the properties of DbWrite:
Property Description
DbConnect The name of the DbConnect element to reference.
Table Name The database table name where the data will be written.
Columns These will be used to enter data from expressions into the database columns.
492 / 1277
Simio Reference Guide
ExcelRead
ExcelRead
The ExcelRead is a user defined step may be used to read values from an Excel worksheet.
The ExcelRead step is used in conjunction with the ExcelConnect user defined element.
Listed below are the properties of ExcelRead:
Property Description
ExcelConnect The name of the ExcelConnect element to reference.
States The states within the model to populate data from the worksheet.
493 / 1277
Simio Reference Guide
ExcelWrite
ExcelWrite
The ExcelWrite is a user defined step may be used to write values to an Excel worksheet.
The ExcelWrite step is used in conjunction with the ExcelConnect user defined element.
NOTE: When running the ExcelWrite step, you must stop the model before you can look at the data. If you don’t, you will
get a file lock warning.
Listed below are the properties of ExcelWrite:
Property Description
ExcelConnect The name of the ExcelConnect element to reference.
Worksheet The name of the worksheet to use within the Excel file.
494 / 1277
Simio Reference Guide
OpenGate
OpenGate
The OpenGate user defined step may be used to open a specific gate name.
The OpenGate step is used in conjunction with the CloseGate and PassThruGate user defined steps and the BinaryGate user
defined element.
Listed below are the properties of OpenGate:
Property Description
Gate The name of the gate to open.
495 / 1277
Simio Reference Guide
PassThruGate
PassThruGate
The PassThruGate user defined step allows tokens through a specific gate name if it is opened.
The PassThruGate step is used in conjunction with the OpenGate and CloseGate user defined steps and the BinaryGate user
defined element.
Listed below are the properties of PassThruGate:
Property Description
Gate The name of the gate to pass through. If the gate is currently closed, the token will wait here until
the gate opens.
496 / 1277
Simio Reference Guide
Read
Read
The Read user defined step may be used to read data into the model from a file.
The Read step is used in conjunction with the File user defined element. If the Separator property is left blank, one entire
line in the file will be read into one State. In order to read in individual values, enter the appropriate character into the
Separator property. For example, a .csv or. xls file should have a comma listed in the Separator property so that each
individual cell is read into a State. Note that if you read values into a State, it must be numeric since States cannot hold
non-numeric characters.
The Read step supports reading to and from Numeric states, as well as String states and DateTime states.
Listed below are the properties of Read:
Property Description
File The name of the file from which to read.
Separator The character that is separating the numeric values in the file.
497 / 1277
Simio Reference Guide
RelocateObject
RelocateObject
The RelocateObject user defined step may be used to instantaneously change the location of an object, including fixed
objects and unconnected nodes, at runtime.
When relocating or moving a fixed object, such as a Server or Combiner, the Include Associated Nodes property set to 'True'
will move the object location (and animation) as well as nodes that are attached to the object.
Note that attempting to change the location of a Link or a Node with attached Links will result in a runtime error.
Note that there is a LocationAt.Geographic function that can be used in conjunction with this step. To assign cartesian
coordiantes, the LocationAt.Geographic function is available for conversion from geographic coordinate to equivalent
cartesian. For example, Entity.Movement.X = LocationAt.Geographic(latitude, longitude).X. See the Functions in Simio -
Automatic page for more information on the function.
Listed below are the properties of RelocateObject:
Property Description
Object The name of the object to move.
Include Associated If true, when moving a fixed object, its associated nodes will be offset by the same
Nodes amount.
498 / 1277
Simio Reference Guide
Write
Write
The Write user defined step may be used to write data from the model to a file. To reference an item from the items
specified in the Item Property when writing to a text file, use balanced brackets {}. {0} will reference the first item specified,
{1} the second item, etc. For example, the following sentence can be specified in the format property: There are {0} parts of
type {1} at time {2}. When writing to a .csv type file, the format field can be left empty since it uses a common-separated
format by default.
The Write step is used in conjunction with the File user defined element. See the WritingToAFile SimBit for an example on
how to use the File Element.
The Write step supports writing to and from Numeric states, as well as String states and DateTime states.
Listed below are the properties of Write:
Property Description
File The name of the file into which to write. File is defined with the File User Defined Element on the
Elements tab of the Process Window.
Format This provides the format of the string to write out. If none is provided, it will use a comma-
separated format.
Items The item(s), specified by this expression, that will result in a value to write out.
499 / 1277
Simio Reference Guide
Steps Reference
This Steps Reference section has detailed information for all steps in Simio.
500 / 1277
Simio Reference Guide
Allocate
Allocate
The Allocate step may be used to manually trigger an allocation attempt of the resource's available capacity (if any) to
other objects waiting for units of that capacity. The Cancel All Reservations First property, if set to 'True', will cancel any
active reservations (done through the Release step, if any) before the allocation is started.
The Allocate step will force the designated resource to step through its allocation queue using its designated Ranking Rule
and Dynamic Selection Rule, giving each waiting seize request in turn an opportunity to re-evaluate its seize. This may
result in the designated resource being allocated, or re-evaluation of the seize request may result in a different resource
being allocated, or possibly no resource allocation at all.
Listed below are the properties of Allocate:
Property Description
Resource The resource object whose capacity units are to be allocated. May be specified as either the
Type object associated with the executing token, the parent object, or as a specific resource
reference.
Resource The specific resource object whose capacity units are to be allocated.
Object
Cancel All Indicates whether to first cancel all active reservations (if any) for the resource before
Reservations attempting to allocate its capacity.
First
501 / 1277
Simio Reference Guide
AddRow
AddRow
The AddRow step and associated Output table can only be used with Simio Professional and RPS ( Enterprise) Editions.
The AddRow step may be used to add a new row to a specified Output table. The Add Row Condition may be specified to
evaluate a conditional expression before adding a row. A reference to the added row is assigned to the executing token or
object.
The AddRow step is used only with Output tables (not standard data tables). To assign the data within the row, use an
Assign step, where you assign the State Variable Name of 'OutputTableName.ColumnName' to a New Value based on the
type of column specified (i.e., real, integer, string, object reference, etc.).
The RemoveRows step may be used to remove all rows or a single row from an output table.
For an example of using the AddRow step, please refer to the SimBit UsingAddRowandOutputTable_Enterprise.
Listed below are the properties of AddRow:
Property Description
Table The name of the sequence or data table.
Name
Key The unique key value for this row. This property should only be used with RPS licensing.
Column
Value
Object Indicates the item for which a reference to the newly created table row will be assigned. It may be a
Type reference to the parent object, to the executing token, to the object associated with the executing
token, or to a specific object or element.
Object or The name of the object or element to be assigned a reference to the newly added table row.
Element
Add Row Optional condition that, if specified, must evaluate to true to perform the add row action.
Condition
502 / 1277
Simio Reference Guide
Arrive
Arrive
The Arrive step may be used to have an entity object notify its accepted visit requests that the entity has 'arrived' to its
current location.
Within the Standard Library, the Vehicle and Worker objects both use the Arrive step in their OnVisitingNode process logic
(logic related to be used as a moveable resource for processing tasks).
The step’s current usage is for modeling a moveable resource entity. It may be used by a resource entity to explicitly notify
a token waiting at a Seize or Move step that the entity resource has officially ‘arrived’ at the requested destination node
location and thus the token responsible for the resource move request may now be released from the Seize or Move step
to execute any subsequent process logic.
Listed below are the properties of Arrive:
Property Description
Entity The entity object that is notifying accepted visit requests of its arrival. May be specified as either the
Type object associated with the executing token, the parent object or as a specific object reference.
Entity The specific entity object that is notifying accepted visit requests of its arrival.
Object
503 / 1277
Simio Reference Guide
Assign
Assign
The Assign step may be used to assign a new value to a state variable.
The state specified can be owned by the token, visiting entity, parent object, or member element.
The Assignments ( More) section can be used for conditional assignments using the Skip Assignment If property.
For examples of using the Assign step, please refer to the SimBits LearningCurveWithFunction, LeveledArrivals,
LogicBasedOnEntityState, RecordDistanceTraveled and SimpleTank.
Other steps, such as the Set* steps, are used for assigning the values of other items. The SetRow step can be used to assign
a table name and row to an object or token. The SetNode step may be used to assign the destination node of an entity.
The SetNetwork step is used to assign a network of links to an entity for travel.
Listed below are the properties of Assign:
Property Description
State Variable Name Name of the state variable that will be assigned a new value.
Assignments ( More).State Variable Name of the state variable that will be assigned a new value.
Name
Assignments ( More).Skip Assignment Optional condition indicating whether to skip the state variable
If assignment.
504 / 1277
Simio Reference Guide
Batch
Batch
The Batch step may be used in conjunction with the BatchLogic element to group multiple entities together and then
attach the batch members to a parent entity. Use the UnBatch step to later remove batch members from a parent entity.
Listed below are the properties of Batch:
Property Description
BatchLogic The name of the BatchLogic element used to execute the batching logic.
Name
Batch Indicates which queue of the Batch Logic element to insert the entity.
Queue
Type
Entity Type The entity that executing the batching logic. May be specified as either the object associated with
the executing token, the parent object or a s specific object reference.
Entity The specific entity object that is executing the batching logic.
Object
505 / 1277
Simio Reference Guide
Changeover
Changeover
The Changeover step may be used in conjunction with a ChangeoverLogic element to model a sequence dependent setup
at a specified resource.
The executing token will be held in the Changeover step for the total changeover time. Any suspension of the Changeover
step’s parent process will extend the token’s delay time accordingly.
The Delay Multiplier property allows for dynamic adjustments to the Changeover Time. If the process that is executing the
Changover step is suspended, then the base changeover time remaining is saved. When the process is resumed, the Delay
Multiplier expression property is re-evaluated and the base changeover time remaining multiplied by that number to
schedule the end of the changeover back on the simulation event calendar.
For example, suppose the changeover time is calculated as '1' hour and the Delay Multiplier expression returns the value of
'2' (based on model entity state or table value). This results in a changeover time of 2 hours. If the process is suspended
after 0.5 hours have elapsed and the changeover thus 25% completed, then the base changeover time remaining is 0.75
hours. When the process is resumed, if the Delay Multiplier expression property now returns the value ‘1.5’ then the end of
the changeover is scheduled back on the calendar to occur at TimeNow + (0.75*1.5 =) 1.125 hours. If the Delay Multiplier
expression property returns a negative value, then a runtime error is thrown.
Listed below are the properties of Changeover:
Property Description
Resource The name of the resource object to which the changeover applies.
Name
Changeover The name of the ChangeoverLogic element used to determine any sequence dependent setup
Logic times.
Name
Entity Type The operation entity used to determine any sequence dependent setup times, by comparing its
attributes to those of the previous entity. May be specified as either the object associated with
the executing token, the parent object, or as a specific object reference.
Delay Increases or decreases the total setup time due to the changeover by some factor. Specify 2, for
Multiplier example, to mean that the delay is twice as long. Note that this expression is automatically
reevaluated if the process is suspended and resumed, potentially adjusting the remaining delay
time.
Entity The specific operation entity object used to determine any sequence dependent setup times, by
Object comparing its attributes to those of the previous entity.
Save Setup Optional discrete state variable to store the total setup time required due to the changeover.
Time
506 / 1277
Simio Reference Guide
ClearStatistics
ClearStatistics
The ClearStatistics step may be used to clear model statistics. Users can easily reset either all model statistics or only the
statistics for specific objects or elements.
State variables have a property named Auto Reset When Statistics Cleared that will indicate whether or not the particular
state variable will be automatically reset to its initial value if the statistics are cleared by this step.
Possible uses for this step include wanting to clear all statistics during an interactive run based on some triggering event or
‘warmup’ time, or wanting to collect and report periodic statistics (e.g., some logic that every hour writes out some object
or element statistics and then clears them).
Listed below are the properties of ClearStatistics:
Property Description
Statistics Type Indicates whether to clear all model statistics or only the statistics for specific
objects or elements.
Objects or Elements The repeating list of specific objects or elements whose statistics are to be
cleared.
Objects or Elements.Object or The specific object or element whose statistics are to be cleared.
Element
507 / 1277
Simio Reference Guide
Consume
Consume
The Consume step consumes the specified quantity of a material - either at the top material level only - or the exploded
bill of material. A Consume Materials (More) repeat group is provided that allows the definition of repeating material
consumption data. Alternatively, a data table may be mapped to that repeat group.
For the single material type, the specified quantity of this material is directly consumed. For the bill of material type, the
material listed in the "bill of materials" is consumed by the token, where quantity is the quantity in the bill times the top
level quantity (typically 1). A token waits at this step until all quantities have been allocated. Allocations are made
incrementally as material becomes available, if the Must Simultaneously Consume property is set to 'False' (default
behavior). If the Must Simultaneously Consume property is 'True', the full quantity of all materials must be available before
any are allocated. Only the first waiting entity in the Material queue is eligible for allocation.
If the Lot ID property is specified, then only quantities of the material assigned to that specific lot identifier may be
consumed. The Lot ID property may be specified as a string literal enclosed in double quotes (e.g., “Lot1”), the name of a
string state variable or string column in a table, or any other expression that returns a string value.
If the Lot ID property is not specified, then only quantities of the material that are not pegged (i.e., not assigned to any lot)
may be consumed.
If consuming a single material that is location-based inventory, then Simio will look up the Inventory element holding the
specified material at the specified inventory site. If consuming a bill of materials, then Simio will look up the Inventory
elements holding the component materials at the specified inventory site.
If the Inventory Site Type property value is ‘None’ but a site object reference is required because the material is location-
based inventory, or if an inventory reference for a material-site object pair cannot be found, then a runtime error will occur.
The Consume step works in conjunction with the Produce step. If the quantity of all the bill of materials in the Consume
step is not available, the token waits at the Consume step. Elsewhere in the model, the Produce step should be used to
increase a material's quantity and once that is done, the Consume step will use the material produced.
The Owner Object property provides a context when determining which object will be allocated the consumed material.
A process token created to execute an On Consumed Process will have the following characteristics:
Its associated object reference will be set to the object that consumed the material.
508 / 1277
It will be initialized with the same table row references as the original token executing the Consume step.
Its material order detail reference will provide the detail of the material consumption.
If specified, the On Consumed Process will be executed any time a quantity of material is consumed; either a full or partial
allocation case.
Listed below are the properties of Consume:
Property Description
Consumption Type Indicates whether to consume a single material or bill of materials.
Material Name The name of the material which is to be either specifically consumed or whose bill of
materials is to be consumed.
Inventory Site Type Indicates the fixed object that is the inventory location. Applies only to material
elements whose Location Based Inventory property is set to 'True'.
Site Object Name The name of the fixed object that is the inventory location.
Lot ID Optional string value indicating the lot identifier of the consumed material.
Consume Materials The name of the material which is to be either specifically consumed or whose bill of
( More).Material materials is to be consumed.
Name
Consume Materials Indicates the fixed object that is the inventory location. Applies only to material
( More).Inventory Site elements whose Location Based Inventory property is set to 'True'.
Type
Consume Materials The name of the fixed object that is the inventory location.
( More).Site Object
Name
Consume Materials Optional string value indicating the lot identifier of the consumed material.
( More).Lot ID
Consume Materials Indicates whether costs of the consumed material will be recorded (charged) to the
( More).Record cost of the owner object.
Material Cost
Consume Materials Optional process to be executed when material is consumed. The created token's
( More).On Consumed material order detail reference will provide the detail of the material consumption.
Process
Consume Materials Optional condition indicating whether to skip the material consumption.
( More).Skip
Consumption If
509 / 1277
Must Simultaneously Indicates whether all of the required materials must be available before any can be
Consume consumed.
Owner Type The object that is the owner of the material consumption request. May be specified as
either the object associated with the executing token, the parent object, or as a specific
object reference.
Owner Object The specific owner object that the material consumption is in behalf of.
Record Material Indicates whether the cost of the consumed material will be recorded (charged) to the
Costs cost of the owner object.
On Consumed Optional process to be executed when material is consumed. The created token's
Process material order detail reference will provide the detail of the material consumption.
510 / 1277
Simio Reference Guide
Create
Create
The Create step may be used to create new entity objects of a specified type, create copies of an existing entity, or to
simply create new tokens that reference existing objects. New tokens associated with the created or referenced objects will
exit the 'Created' exit point of the step.
If the Create Type is 'NewObject' and Entity Type property is not specified, no object will be created. If the Create Type is
'CopyParentObject' or 'CopyAssociatedObject' and the Entity Type is not specified, the newly created object will be of the
same type as the original.
If the Create Type is 'NewToken' and the Token Associated Object and/or Token Context Object are not specified, the
references of the original token executing the Create step will be assumed.
If the Create Type is 'NewObject' and Entity Type property is specified, a newly created object of the specified type will be
created. The object will have its default values for all states and properties. If the Create Type is 'CopyParentObject' or
'CopyAssociatedObject' and Entity Type is specified, much information from the original object is copied to the newly
created object. This includes all table references assigned to the original, all the original object’s state values, and the
original’s assigned network and destination. If the original is following a sequence table, the current sequence table index is
copied as well. Note that if the entity type of the copy is different than the original’s type, then only the state values of
common inherited object states can be copied. Also, the size state values will not be copied and thus a copy of a different
type will be sized according to the default size for that different type.
When an object is created using Create Type 'NewObject', it is placed into Free Space within the Facility Window, at the
object instance location. When an object is created by Create Type= ’CopyParentObject’ or ‘CopyAssociatedObject’, it is
initially located in Free Space at the same location as the original object that was copied. Therefore, the user may need to
use a Transfer step directly following a Create step, in order to place the new object in a specific location, such as on a Link
or into a Station or Node.
Within the Advanced Options section of properties, the Save Created Entity Reference may be used to optionally save the
name of a state variable that stores a reference to the entity created by the step (will be the last entity if multiple were
created). Note that the assigned state variable may be a state on the original token executing the Create step or simply a
model state variable.
There are two exits from the Create step, including the Original and the Created exits. The order in which the tokens exit
the step is based on the Token Wait Action property value. By default, the property value is 'NewTokensExitFirst' and a
token for the newly created entity (or token) will first exit from the 'Created' exit and proceed until a delay type step occurs
for the token or its associated entity. Then the original token will exit the 'Original' exit.
For examples of using the Create step, please refer to the SimBits CONWIP and DynamicallyCreatingVehicles.
Listed below are the properties of Create:
Property Description
Create The creation method. If creating copies of an existing entity, then the original entity object to copy
Type may be specified as either the object associated with the executing token, the parent object, or as
a specific object reference. 'NewObject' creates new objects of the specified instance type.
'CopyParentObject' creates a copy of the parent object. 'CopyAssociatedObject' creates a copy of
the object associated with the token executing the Create step. 'CopySpecificObject' creates a
copy of a specified source entity object. 'NewToken' creates a new token that may reference
existing objects.
Original Specified if the Create Type is 'COpySpecificObject'. The specific original entity objects to copy.
Entity
Object
Entity Specified if the Create Type is anything except 'New Token'. The type of entity objects to create. If
Type left unspecified and creating copies, then the same type as the original entity being copied will be
assumed.
511 / 1277
Token Specified if the Create Type is 'New Token'. The primary object reference associated with the new
Associated token(s). If left unspecified, then the associated object reference of the original token executing
Object the Create step will be assumed.
Token Specified if the Create Type is 'New Token'. The secondary object reference associated with the
Context new token(s). If left unspecified, then the context object reference of the original token executing
Object the Create step will be assumed.
Number The number of entity objects or tokens to create. May be specified as an expression truncated to
To Create integer.
Save Specified if the Create Type is anything except 'New Token'. Optional entity reference state
Created variable to save a reference to the created entity. Note that if the number of entities created is
Entity greater than one, then the saved reference will be to the last created entity.
Reference
Token The wait action to be taken by the token arriving to the Create step.
Wait If the action is ‘NoWait’, then the execution of all new tokens associated with the created or
Option referenced objects will be scheduled on the simulation’s current event calendar as an early priority
event. The original token will then immediately exit the step.
If the action is 'NewTokensExitFirst', then all new tokens associated with the created or referenced
objects will exit the step first before the original token exits.
If the action is 'WaitUntilNewTokenProcessingCompleted', then the original token will wait until
the processing of all new tokens associated with the created or referenced objects has been
completed before exiting the step.
If the action is 'NoWait', then the execution of all new tokens associated with created entities will
be scheduled on the simulation’s current event calendar as an early priority event. The original
token will then immediately exit the step.
If the action is 'NewTokensExitFirst', then all new tokens associated with created entities will exit
the step first before the original token exits.
If the action is 'WaitUntilNewTokenProcessingCompleted', then the original token will wait until
the processing of all new tokens associated with created entities has been completed before
exiting the step.
512 / 1277
Simio Reference Guide
Decide
Decide
The Decide step may be used to determine the flow of a token through process logic. The Decide Step evaluates an
Expression so any properties that are referenced in the Decide step must be expression properties.
The arriving token exits either the 'True' or 'False' exit point based on the specified probability or condition.
For examples of using the Decide step, please refer to the SimBits SequentialProcessingByBatchSpecifiedInTable and
MoveableOperator.
Listed below are the properties of Decide:
Property Description
Decide Indicates whether the decision is based on a probability or condition.
Type
Expression The probability or condition specified as an expression. If a probability, then enter the chance of
selecting 'True' as a value between 0 and 1 (including values of 0 or 1). If a condition, then enter
the logical condition.
Random The random number stream to be used by the probability-based decision type.
Number
Stream
513 / 1277
Simio Reference Guide
Delay
Delay
The Delay step delays the arriving token in the step for the specified time duration.
The Delay Multiplier property allows for dynamic adjustments to the Delay Time. If the process that is executing the Delay
step is suspended, then the base delay time remaining is saved. When the process is resumed, the Delay Multiplier
expression property is re-evaluated and the base delay time remaining multiplied by that number to schedule the end of
the delay back on the simulation event calendar.
For example, suppose the Delay Time is specified as '1' hour and the Delay Multiplier expression returns the value of '2'
(based on model entity state or table value). This results in a delay time of 2 hours. If the process is suspended after 0.5
hours have elapsed and the delay thus 25% completed, then the base delay time remaining is 0.75 hours. When the process
is resumed, if the Delay Multiplier expression property now returns the value ‘1.5’ then the end of the delay is scheduled
back on the calendar to occur at TimeNow + (0.75*1.5 =) 1.125 hours. If the Delay Multiplier expression property returns a
negative value, then a runtime error is thrown.
NOTE: Simio will produce an error if a delay time expression returns a negative value. This can occur if you use an
unbounded distribution that might produce negative values, such as a Normal Distribution, within the Delay Time of the
Delay step. See Distributions for more information.
Listed below are the properties of Delay:
Property Description
Delay Time The duration of the delay. This property may be specified with any expression, including using a
random sample from a distribution. A special case is to use the keyword 'Math.Epsilon', which
causes the token or entity to be delayed to the end of the current time advance -- still executing
at the same simulated time but after all normal events have been processed.
Delay Increases or decreases the delay time by some factor. Specify 2, for example, to mean that the
Multiplier delay is twice as long. Note that this expression is automatically reevaluated if the process is
suspended and resumed, potentially adjusting the remaining delay time.
Interruptible Indicates whether token delays at this step can be interrupted using the Interrupt step.
514 / 1277
Simio Reference Guide
Destroy
Destroy
The Destroy step destroys either the parent object, the executing token's associated object or the object specified as an
object reference.
Only object types supporting dynamic creation may be destroyed. All processes are immediately terminated for the
destroyed object. All schedule events (e.g. end of step delays) are cancelled from the calendar. If the parent is destroyed
then the token does not exit the step.
Listed below are the properties of Destroy:
Property Description
Destroy Type The object to be destroyed. Specified as either the object associated with the executing token,
the parent object, or as a specific object reference.
Record Entity Indicates whether or not to record time in system and accrued cost statistics for the entity
Statistics being destroyed.
515 / 1277
Simio Reference Guide
Disengage
Disengage
The Disengage step may be used to unlock an entity's location from a location on the parent link so that the link and entity
may move independently. The Engage step is used to engage an entity.
Once disengaged an entity is free to move across the link at its on speed, and the link is free to move at its own speed
without being affected by the movement (or stoppage) of the entity.
Note
This Step can only be used from within a Link object.
516 / 1277
Simio Reference Guide
Dropoff
Dropoff
The Dropoff step may be used to attempt a transporter drop-off of a riding entity into a node.
Use the Pickup step to pick up an entity waiting to ride.
NOTE: Simio will produce an error if a delay time expression returns a negative value. This can occur if you use an
unbounded distribution that might produce negative values, such as a Normal Distribution, within the Unload Time of the
Dropoff step. See Distributions for more information.
Listed below are the properties of Dropoff:
Property Description
Node The name of the node that is the dropoff location. If left unspecified, and the transporter is
Name currently at a node, then defaults to that node.
Transporter The transporter object that is to perform the drop-off. May be specified as either the object
Type associated with the executing token, the parent object, or as a specific object reference.
Transporter Visible if Transporter Type is 'SpecificObject'. The specific transporter object that is to perform the
Object drop-off.
Fail If Indicates whether to cancel the dropoff attempt if the location where the entity is to be physically
Blocked dropped into is considered blocked. If the dropoff attempt is cancelled, then the arriving token
will immediately exit the 'Failed' exit point of the Dropoff step.
517 / 1277
Simio Reference Guide
EndRun
EndRun
The EndRun step ends the simulation run.
This step ends the current simulation run. ( Note that the OnRunEnding process will not be triggered by this step during an
interactive run, but instead the user must press the Stop or Reset button to trigger that process.)
518 / 1277
Simio Reference Guide
EndTransfer
EndTransfer
The EndTransfer step may be used to indicate that the parent object, object associated with the executing token, or specific
entity object reference has completed transfer into an object or station.
Listed below are the properties of EndTransfer:
Property Description
Entity The entity object that is ending the transfer. Specified as either the object associated with the
Type executing token, the parent object, or as a specific object reference.
519 / 1277
Simio Reference Guide
Engage
Engage
The Engage step may be used to lock an entity's location to a location on the parent link object. The method used to align
the entity on the link is determined by the link's EntityAlignment property. The Disengage step is used to disengage an
entity.
Once engaged, an entity remains engaged until it is disengaged by the Disengage step. The entity engages the link using
the link's EntityAlignment property setting of 'AnyLocation' or 'CellLocation'. If 'CellLocation', then the entity can only
engage the link at fixed cell locations along the link's length. The entity will wait for the next cell to arrive before engaging
the link. If 'AnyLocation', then the entity can engage the link at any location without waiting. When engaged both the entity
and moveable link location are co-aligned and must move in unison. When an engaged entity arrives to the end of a link it
forces the link to stop to remain co-aligned at the engaged position.
Note
This Step can only be used from within a Link object.
520 / 1277
Simio Reference Guide
Execute
Execute
The Execute step may be used to execute a specified process.
The owner of the process can be the parent object or the associated entity. The arriving token either exits immediately or
waits on the process to finish based on the Token Wait Action.
If the Token Wait Action is 'None ( Continue)', the execution of the specified process is scheduled on the simulation calendar
as an early current event. The original token then immediately exits the step. For example, suppose a token passes through
multiple Execute steps (with action ‘None ( Continue)’) in sequence. Once the original token stopped running, you would
see the execution of the specified processes occur in the same sequence that the Execute steps were hit ( FIFO order).
If the Token Wait Action is 'WaitUntilProcessCompleted', the specified process is immediately executed. If that process is
completed with no delays, then the original token can immediately exit the Execute step and continues its processing.
Otherwise, if the specified process did have delays, then the original token is held at the Execute step until that other
process is completed. For example, suppose the OnRunEnding interface process has an Execute step with action
‘WaitUntilProcessCompleted’. As long as the specified process runs with no delays, you would see the full logic of that
specified process executed as part of the ‘OnRunEnding’ call.
Listed below are the properties of Execute:
Property Description
Process Name The name of the process to execute.
Token Wait Action The action to take while the process is executing.
521 / 1277
Simio Reference Guide
Fail
Fail
The Fail step starts a downtime of type Failure Name.
Listed below are the properties of Fail:
Property Description
Failure Name The type of failure to start.
522 / 1277
Simio Reference Guide
Find
Find
The Find step may be used to search the value of an expression over a specified range of one or more index variables. The
expression will typically involve array variables (vectors or multi-dimensional arrays) or functions that index into collections.
Search types supported by the Find step include finding the index variable value(s) that satisfy the specified expression as a
logical condition, as well as searches that minimize or maximize the expression. The arriving token exits either the 'Found'
or 'NotFound' exit point of the step based on whether or not a successful result was found by the search.
The starting index of an index variable can be smaller or larger than the ending index, corresponding to a forward or
backward search.
If the Search Type is ‘Condition’, then the token will exit the ‘Found’ exit point of the Find step with the index variable(s) set
to the first value(s) within the search range that satisfy the conditional search expression. Additionally, the value ‘True (1)’
will be stored into the ReturnValue state of the executing token.
If the condition is not satisfied by an result within the search range, then the token will exit the ‘NotFound’ exit point of the
Find step with the index variable(s) set to 0 and the value ‘False (0)’ stored into the ReturnValue state of the executing
token.
If the Search Type is specified as ‘MinimizeExpression’ or ‘MaximizeExpression’, then the token will exit the ‘Found’ exit
point of the Find step with the index variable(s) set to the value(s) within the search range that minimized or maximized the
expression. Additionally, the minimum or maximum expression value found will be stored into the ReturnValue state of the
executing token.
If multiple index variables are specified, then the search range will be conducted as a nested indexed search in the order
that the index variables are listed. For example, if two index variables ‘J’ and ‘K’ are specified with search ranges 3-4 and 4-
6 respectively, then the search expression will be evaluated using the following index value order:
J=3,K=4
J=3,K=5
J=3,K=6
J=4,K=4
J=4,K=5
J=4,K=6
For examples of using the Find step, please refer to the SimBits FindAMinimumStateValue or VehicleFleetManagement.
Listed below are the properties of Find:
Property Description
Index The name of the state variable used to hold the index value.
Variable
Name
524 / 1277
Simio Reference Guide
Fire
Fire
The Fire step may be used to fire an object event. It can be used in conjunction with the Wait step.
For examples of using the Fire step, please refer to the SimBits VehicleFinishesAndParksWhenOffShift and
EntityStopsOnLink.
Listed below are the properties of Fire:
Property Description
Event Name The name of the event to fire.
526 / 1277
Simio Reference Guide
Insert
Insert
The Insert step may be used to insert an object into a specified queue. Refer to the Storage element to define a custom
queue in the model.
Listed below are the properties of Insert:
Property Description
Queue The name of the queue state into which the object will be inserted.
State
Name
Object The object to be inserted into the queue. May be specified as the object associated with the
Type executing token, the parent object or as a specific object reference.
Object Visible if Object Type is 'SpecificObject'. The specific object to be inserted into the queue.
Rank If specified, this overrides the queue state's ranking rule. If the queue's ranking rule is FirstInFirstOut
Placement or LastInFirstOut, then this expression is interpreted as a specific rank index to place the inserted
object. If the queue's ranking is SmallestValueFirst or LargestValueFirst, then this expression is
interpreted as the inserted object's ranking value.
527 / 1277
Simio Reference Guide
Interrupt
Interrupt
The Interrupt step may be used to interrupt process delays. A token delaying at a process' Delay step is considered a
candidate for interruption if the 'Interruptible' property of the Delay step evaluates to 'True'. To add logic for handling
interrupted items (e.g., re-routing logic), the Interrupt step can create new tokens that are associated with the interrupted
items. These tokens will exit the 'Interrupted' exit point of the step.
The Interrupt step may be used to model resource preemption scenarios, allowing model logic to interrupt a process delay
activity that is using a resource, in order to release the resource for a higher priority activity. This approach allows very
flexible preemption capability with precise control over which entities are preempted and how the preempted entities are
subsequently processed.
Objects within the Standard Library that may be interrupted with the Interrupt step include the Server, Combiner and
Separator. Within each of these objects, the processing time delay is 'interruptible'. To interrupt a token at a Server,
Combiner or Separator, simply specify ObjectName.OnEnteredProcessing as the Process Name property of the Interrupt
step.
When a token enters the Interrupt step, it will interrupt the specified process and then the token will exit the "Original" exit
of the step and continue processing. Once this original token completes its steps (or begins a delay type step), a token
associated with the interrupted entity is created and will leave the "Interrupted" exit of the step and continue any specified
steps.
For examples of using the Interrupt step, please refer to the SimBits InterruptibleOperator,
InterruptingAcrossMultipleServers, InterruptingServerWithMultipleCapacity and
WorkerUsesWorkSchedule_InterruptWorkingOffShift.
Listed below are the properties of Interrupt:
Property Description
Process The name of the process with interruptible delay activity.
Name
Selection The rule used to select which process delay(s) to interrupt from one or more candidates.
Rule
Interrupted Indicates how an interrupted process delay is to be handled once the new token created by the
Process Interrupt step to handle the interruption occurence ends its processing. If the action is
Action 'EndProcess', then the processing of the interuppted token will be ended. If the action is
'ResumeDelay', then the interrupted token will resume delaying at the Delay step for its
remaining delay time. If the action is 'EndDelay', then the interrupted token will end its delay
and exit the Delay step.
Process The names of the additional processes with interruptible delay activity.
Names( More)
Save Number Optional discrete state variable to store the number of process delay activities that were
Interrupted interrupted. This state variable assignment will be applied to the original token executing the
Interrupt step.
Save Optional discrete state variable to store an interrupted process delay's remaining time (in
Remaining hours). This state variable assignment will be applied to each token exiting the 'Interrupted' exit
Time point of the Interrupt step.
528 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
529 / 1277
Simio Reference Guide
Move
Move
The Move step may be used to request a move from one or more moveable resources that have been seized by either the
parent object or object associated with the executing token. The executing token will be held in the Move step until the
resources have arrived to the requested locations.
A list of objects for moving may be specified by using the Definitions / Lists and referencing the 'ListName'. Alternatively, a
list of objects may be specified within a table column and referencing the 'TableName.ColumnName' as the Object List
Name property.
This step may be used in conjunction with the Seize step and the Release step.
Listed below are the properties of Move:
Property Description
Resource Move The objects that will be requested to move.
Requests
Resource Move The method for specifying the resource object(s) that will be requested to move.
Requests.Object
Type
Resource Move The name of the resource object that will be requested to move.
Requests.Object
Name
Resource Move The name of the object list from which one or more resource objects will be requested
Requests.Object List to move.
Name
Resource Move The name of the specific node location that the resource(s) will be requested to move
Requests.Destination to. If not specified, and the owner object requesting the movement is an entity object at
Node a node, then this property defaults to that owner entity's current node.
Resource Move The number of resource objects that will be requested to move.
Requests.Number Of
Objects
Resource Move The priority of the move request if a PlanVisit or SelectVisit step is used by a resource to
Requests.Move choose a visit destination from multiple candidates. If not specified, and the owner
Priority object requesting the movement is an entity object, then this property defaults to that
entity's Priority state value.
Resource Move The order in which to request moves from resources that have been seized by the owner
Requests.Move object.
Request Order
Resource Move Optional condition evaluated for each seized resource that must evaluate to true for the
Requests.Selection object to be moved. In the expression, use the syntax
Condition Candidate.[ ObjectClass].[ Attribute] to reference an attribute of the seized resource
objects (e.g. Candidate.Object.Capacity).
Resource Move Optional condition indicating whether to skip the resource move(s).
Requests.Skip Move
If
530 / 1277
Owner Type The object that owns the seized resources to be moved. May be specified as either the
object associated with the executing token, the parent object, or as a specific object
reference.
Owner Object The specific object that has seized the resources to be moved.
531 / 1277
Simio Reference Guide
Notify
Notify
The Notify step may be used to output a user defined trace, warning message or error, depending on the Notification Type.
The Warning Level in the Run ribbon is used to determine where warning messages are displayed.
A warning notification from the same “warning source” is only shown once per timeslice. For example, a warning from the
Notify at time zero will only be shown once. Also note that the identification for the “warning source” from Notify steps is
the process and step name. Therefore, if two Notify steps have the same name in the same process, and both gives
Warnings in the same timeslice, only the first will be shown.
Listed below are the properties of Notify:
Property Description
Notification The context of the outputted message. If specified as 'Trace', and the model trace is enabled,
Type then the message will be displayed in the trace window. If specified as 'Warning', then the
message will be handled according to the model's warning settings.If specified as 'Error', the
model will terminate with the provided message.
Message Optional text used as the heading for the outputted message. May be specified as either a string
Heading expression or as a literal string of characters enclosed in double quotes.
Message Optional text used as the content for the outputted message. May be specified either as a string
Content expression or as a literal string of characters enclosed in double quotes.
Notify Optional condition that, if specified, must evaluate to true for the message to be outputtted to
Condition the user.
532 / 1277
Simio Reference Guide
NotifyConstraint
NotifyConstraint
The NotifyConstraint step may be used to add a custom log entry to the model's constraint log. To enable constraint
logging during the simulation run, select Enable Interactive Logging in Run, Advanced Options. These entries, by extension,
will then also be seen in the Entity Gantt chart.
When a NotifyConstraint step is used, with Notification Type set to 'StartConstraint', Simio creates a new entry in the
Constraint Log, setting the StartTime column to TimeNow. Then later, when a NotifyConstraint step is executed with
Notification Type set to 'EndConstraint', with matching values for the other properties, Simio 'closes' that entry in the log by
setting the EndTime column to the current TimeNow.
Note that the Entity Id, Entity, Facility Location adn Station columns come from the specified constrained entity, while the
Constraint Item Id, Constraint Item and Constraint Description columns are populated from the step’s Object or Entity
property.
Simio 'matches' the StartConstraint and EndConstraint steps based on the property values. As long as Constraint Type,
Object or Element, and Entity Type (along with Entity Object, if appropriate) have the same values, it is considered a
match.
Simio requires that the StartConstraint is encountered before a matching EndConstraint step. If not, a runtime warning is
reported if an EndConstraint is executed before a matching StartConstraint (that is, if the model is trying to close a log
entry that doesn’t yet exist). Similarly, if a StartConstraint is executed for some combination of property values, and then
another StartConstraint with those same values (that is, we’ve opened up a log entry, and before closing it we try to open
another for the same values), a warning will be reported.
The resulting entries in the Constraint Log should populate the Owner Gantt view, just like the built-in constraint types.
Listed below are the properties of NotifyConstraint:
Property Description
Notification Indicates the type of notification sent to the model's constraint log. If specified as
Type 'StartConstraint', then a new constraint log entry will be created. If specified as 'EndConstraint',
then the end timestamp will be logged for the activve constraint log entry whose fields match
the same entity, constraint type and constraining object or element.
Constraint The value of the Constraint Type field in the constraint log entry. May be specified as an
Type expression that evaluates to a string. ( Note: literal strings must be in quotes.)
Object or The constraining object or element. Determines the values of the Constraint Item Id, Constraint
Element Item, and Constraint Description fields in the constraint log entry.
Entity Type The entity object that is being constrained. May be specified as either the object associated with
the executing token, the parent object, or as a specific object reference.
533 / 1277
Simio Reference Guide
Park
Park
The Park step may be used to move an entity object into the parking station of a node.
The Token Wait Action property indicates whether the token is going to wait in the step until the transferring entity
‘Transferring’ or ‘Transferred’ event is fired.
Listed below are the properties of Park:
Property Description
Node Name of the node owning the parking station where the entity will be parked. Defaults to the
Name entity's current node or, if not at a node, then the first node found in the system.
Entity The entity object to be parked. Specified as either the object associated with the executing token,
Type the parent object or as a specific object reference.
Entity Visible if Entity Type is 'Specific Object'. The specific entity object to be parked.
Object
Token The wait action to be taken by the token arriving to the Park step. Options include
Wait WaitUntilTransferred and WaitUntilTransferring.
Action
534 / 1277
Simio Reference Guide
Pickup
Pickup
The Pickup step may be used to attempt a transporter pick-up of an entity waiting in the ride pickup queue of a node.
The waiting entities are examined in the order of the pickup queue. Note that both the entity and the transporter have to
"Accept" the selected entity pickup. If the entity/transporter accept the pickup, the Pickup step removes the entity from the
RidePickupQueue of the node and transfers it into the ride station of the transporter using the standard transfer mechanism
(i.e., the EndTransfer step completes the transfer). The token is held in the Pickup step until the entity transfer is completed.
If no TransferIn process handler is provided for the ride station on the transporter then a zero time transfer is provided by
default. The token exits one of two exit points depending on the result of the pickup attempt. It exits the primary exit point
if a pickup was successful. It exits the secondary exit if the pickup attempt failed. Entities that are picked up by a
transporter may be later dropped off using the Dropoff step.
NOTE: Simio will produce an error if a delay time expression returns a negative value. This can occur if you use an
unbounded distribution that might produce negative values, such as a Normal Distribution, within the Load Time of the
Pickup step. See Distributions for more information.
For an example of using the Pickup step, please refer to the SimBit VehicleDoingSimultaneousLoading.
Listed below are the properties of Pickup:
Property Description
Node The name of the node that is the pickup location. If left unspecified, and the transporter is
Name currently at a node, then defaults to that node.
Selection The goal used to rank pickup preference when selecting from multiple candidates.
Goal
Load Time A delay required for loading a rider onto the transporter.
Transporter The transporter object that is to perform the pick-up. May be specified as either the object
Type associated with the executing token, the parent object, or as a specific object reference.
Transporter Visible if Transporter Type is 'SpecificObject'. The specific transporter object that is to perform the
Object pick-up.
535 / 1277
Simio Reference Guide
PlanVisit
PlanVisit
The PlanVisit step may be used to have an entity object search for and accept a not yet reserved visit request in the system.
Possible visit requests may include pickup requests initiated at Ride steps (applicable to transporter entities) as well as
move requests initiated at Seize or Move steps (applicable to resource enabled entities). The SelectVisit step can be later
used to have an entity actually set its current destination node to an accepted visit location.
The trip is selected based on the selection goal specified. The goal can be SmallestDistance, LargestDistance,
SmallestPriority, LargestPriority or FirstInQueue. When selecting a trip, the entities in the global visit request queue are
examined in order based on the selection goal. A candidate entity is not selected unless accepted by the entity. Once an
entity is selected, this same process is done for the transporter. Hence both the candidate entity and the transporter have to
agree to the trip before the reservation is booked.
For an example of using the PlanVisit step, please refer to the SimBit VehicleFleetManagement.
Listed below are the properties of PlanVisit:
Property Description
Selection The goal used to rank pickup destination preference when selecting from multiple candidates.
Goal
Entity The entity object that is searching the system for a visit request. May be specified as either the
Type object associated with the executing token, the parent object, or as a specific object reference.
Entity The specific entity object that is searching the system for a visit request.
Object
536 / 1277
Simio Reference Guide
Produce
Produce
The Produce step produces the specified quantity of material - either at the top material level only - or at the exploded bill
of material. A Produce Materials (More) repeat group is provided that allows the definition of repeating material
production data. Alternatively, a data table may be mapped to that repeat group.
The Lot ID property may be specified as a string literal enclosed in double quotes (e.g., “Lot1”), the name of a string state
variable or string column in a table, or any other expression that returns a string value.
If producing a single material that is location-based inventory, then Simio will look up the Inventory element holding the
specified material at the specified inventory site. If producing a bill of materials, then Simio will look up the Inventory
elements holding the component materials at the specified inventory site.
If the Inventory Site Type property value is ‘None’ but a site object reference is required because the material is location-
based inventory, or if an inventory reference for a material-site object pair cannot be found, then a runtime error will occur.
NOTE: Simio will produce an error if a delay time expression returns a negative value. This can occur if you use an
unbounded distribution that might produce negative values, such as a Normal Distribution, within the Production Delay
Time of the Produce step. See Distributions for more information.
If the Record As Order Received If condition property returns 'True' and the material is location-based inventory, then the
inventory's quantity on order is automatically decremented by either the produced quantity or to zero, the latter if the
produced quantity is greater than the quantity on order.
For examples of using the Produce step, please refer to the SimBits ScheduledMaterialArrivals and
WorkstationWithMaterialConsumptionAndReplenish.
Listed below are the properties of Produce:
Property Description
Production Type Indicates whether to produce a single material or a bill of materials.
Material Name The material which is to be either specifically produced or whose bill of materials is to be
produced.
537 / 1277
Inventory Site Indicates the fixed object that is the inventory location. Applies only to material elements
Type whose Location Based Inventory property is set to 'True'.
Site Object Name The name of the fixed object that is the inventory location.
Lot ID Optional string value indicating the lot identifier of the produced material.
Produce Materials The material which is to be either specifically produced or whose bill of materials is to be
( More).Material produced.
Name
Produce Materials Indicates the fixed object that is the inventory location. Applies only to material elements
( More).Inventory whose Location Based Inventory property is set to 'True'.
Site Type
Produce Materials Optional string value indicating the lot identifier of the produced material.
( More).Lot ID
Produce Materials An optional delay time until the material is actually added to the system. The executing
( More).Production token always immediately exits the Produce step, but the material production does not
Delay Time occur until after this time duration has elapsed.
Produce Materials Optional condition indicating whether to skip the material production.
( More).Skip
Production If
Owner Type The object that is the owner of the material production request. May be specified as either
the object associated with the executing token, the parent object, or as a specific object
reference.
Owner Object The specific owner object that the material production is in behalf of.
Production Delay An optional delay time until the material is actually added to the system. The executing
Time token always immediately exits the Produce step, but the material production does not
occur until after this time duration has elapsed.
Record As Order Indicates whether to record the produced material as a received order.
Received If
538 / 1277
Simio Reference Guide
Release
Release
The Release step may be used to release capacity of one or more objects on behalf of the parent object or the object
associated with the executing token.
A list of objects for releasing may be specified by using the Definitions / Lists and referencing the 'ListName'. Alternatively,
a list of objects may be specified within a table column and referencing the 'TableName.ColumnName' as the Object List
Name property.
This step may be used in conjunction with the Seize step.
The Release step has an option to allow an owner object to keep the released resource capacity 'reserved' for possible later
reuse. Reserved resource capacity is capacity that although unallocated has been set aside for a specific future owner thus
preventing its use by anyone else. Whenever resource capacity becomes available, that capacity cannot be allocated to a
seize request waiting in the resource’s allocation queue unless that there is either sufficient unreserved capacity available or
the owner of the seize request has sufficient reservation(s). For example, if all of a resource’s available capacity has been
reserved, a seize request without a reservation will have to wait in the allocation queue until either active reservations for
the desired resource have been cancelled or sufficient unreserved capacity has been released or scheduled. Note that seize
requests with reservations will be allowed to seize a resource even if ranked in that resource’s allocation queue behind
requests with no reservations.
A resource reservation will be automatically cancelled if one of the following events occurs - the Reservation Timeout
property is used and the specified timeout period expires OR the reservation owner is an entity that is destroyed. Note that
if the Reservation Timeout is specified as the value ‘Math.EPSILON’ then the resource reservation will be automatically
cancelled at the end of the current simulation time step if there has been no immediate re-seize of the resource by the
same owner object. When a reservation is cancelled, the OnCapacityReservationCancelled process for that particular
resource is executed.
The Allocate step provides an option to cancel all active reservations for a resource (regardless of who has made the
reservations) before attempting to allocate the resource’s capacity to any waiting seize requests.
The Immediately Try Allocate property can be set to 'False' to allow all resources to be released at a given time period
before any resource allocations are made to entities waiting in an allocation queue(s).
For examples of using the Release step, please refer to the SimBits OverflowWIP, ResourcesWithWorkSchedules,
SeizingVehicle and SelectingResourceFromList.
Listed below are the properties of Release:
Property Description
Releases The objects to be released.
Releases.Object List The name of the object list from which one or more objects will be released.
Name
Releases.Release Indicates the type of resource quantity to release. If 'Specific', then the exact quantities
Quantity Type entered in the Number of Objects and Units Per Object are released. If 'All', then all
currently seized resources of the specified resource type are released.
539 / 1277
Releases.Release The order in which to release objects that have been seized by the owner object.
Order
Releases.Selection An optional condition evaluated for each seized resource that must be true for the
Condition object to be eligible to release. In the condition, use the keyword 'Candidate' to
reference an object in the collection of candidates (e.g. Candidate.Object.ID )
Releases.Keep Optional condition indicating whether to keep the released resource capacity reserved
Reserved If for possible later reuse by the same owner object. Other objects will be unable to
seize the reserved capacity unless the reservation is cancelled.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being released (e.g.,
Candidate.Object.Capacity).
Note that when an owner object is attempting to select a resource from a group of
candidates (e.g., from a list or from a population of some resource type), by default a
preference will be given to select a resource that has already been reserved by that
entity irrespective of the specified selection goal.
Leaving this property blank (no condition) is equivalent to entering False.
Releases.Reservation If the keep reserved condition is true, then an optional wait time before automatically
Timeout cancelling the reservation.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being released (e.g.,
Candidate.Object.Capacity).
Releases.On Released Optional process that is executed by a token associated with a released object after
Process the release occurs.
Owner Type The object that owns the seized resources to be released. May be specified as either
the object associated with the executing token, the parent object, or as a specific
object reference.
Owner Object The specific object that has seized the resource capacity units to be released.
Seized Resources Filter type applied to the owner object's list of currently seized resources before
Filter Type attempting the resource releases. If 'Token', filters to only include seized resource items
that are linked to a given token's execution.
Filter Token Reference Expression returning a reference to the process token to which the seized resource
items must be linked. If the expression returns 'Nothing' then no filtering occurs.
Use Strict List If a resource release requirement is 'FromList', indicates whether the release can
Referencing include only resources that have been seized from the same specified list. The default
setting is 'False' and if left unchanged then the list membership will be sufficient to
include a resource.
Immediately Try Indicates whether to immediately try allocating the released resource capacity to
Allocate waiting seize requests before the execution of any other simulation logic in the system.
Setting this property to False will skip immediate allocation. Instead, an evaluation of
the resource allocation queues will be scheduled on the simulation's current event
calendar as a late priority event.
540 / 1277
Simio Reference Guide
Remove
Remove
The Remove step may be used to remove an object from a specified queue. There are two exits from the Remove step,
including the Original and the Removed exits. A order in which the original token and the token for the removed object exit
the step is based on the Token Wait Option property value. By default, the value is 'NewTokenExitsFirst' and the token for
the removed entity will first exit from the 'Removed' exit and proceed until a delay type step occurs for the token or its
associated entity. Then the original token will exit the 'Original' exit.
The Interrupt Step is different, yet somewhat similar. It can be used to Interrupt a processing delay. So if you want to cancel
an entity's request for a Resource's capacity or a entity's Transfer request, use a Remove Step to remove an entity from a
queue. But if you want to cancel an entity that is currently within a process delay, use an Interrupt Step to cancel the delay.
Removing from a Storage Queue
The user can create their own queue within Simio and place entities in this queue ( Insert Step) and remove the entities from
the queue ( Remove Step). Refer to the Storage element to define a custom queue in the model.
Removing from a Resource Allocation Queue
Removing an item from a Resource's Allocation Queue is very powerful and allows for what is commonly referred to as
"Reneging". This cancels a Seize attempt. If an entity has already requested capacity of any resource type object and is
therefore waiting in the Resource's Allocation Queue (i.e. Server1.AllocationQueue), the entity can be removed from the
queue and therefore their request for that object's capacity is cancelled. An example of use for this feature might be when a
customer has waited too long in line and decides to leave the facility without being serviced. The customer had already
requested capacity of the "server" and was waiting in line for the server, but the Remove Step can cancel their request.
Removing from a Station's Entry Queue
Removing an item from a Station's EntryQueue or a Link object's EntryQueue, cancels the Transfer step transfer request. In
other words, the entity no longer waits to enter a station. The token executing the Transfer step ends its processing (i.e., is
destroyed) upon the canceling action.
Removing from a Link Object's Entry Queue
Removing an entity from a Link object's EntryQueue cancels the Transfer request for this entity to wait to enter the Link.
Removing from a Batch Queue
Removing an entity from a BatchLogic element's ParentQueue cancels a Batch Step activity where the entity is waiting to
collect a batch. Similarly, removing an entity from a BatchLogic element's MemberQueue cancels a Batch Step activity
involving a member waiting to be batched.
Removing from a RoutingGroup RouteRequest Queue
Removing an entity from a RoutingGroup element's RouteRequestQueue cancels a Route Step waiting to route this entity
to a set of Blocked node destinations.
Removing from a Network VisitRequest Queue
Removing an entity from a Network (such as Global) VisitRequestQueue cancels a waiting entity ride request that has not
yet been accepted by a transporter.
Removing from a Material Allocation Queue
Removing an entity from a Material AllocationQueue cancels the entity reqeust for consumption of that particular material.
Note
Simio does not support removing from the following types of queues: Node RidePickupQueue, Entity
VisitRequestQueue, Entity BatchMembers, Station Contents.
Object The object to be removed from the queue. May be specified as the object associated with the
Type executing token, the parent object, or as a specific object reference.
Object Visible if Object Type is 'SpecificObject'. The specific object to be removed from the queue.
Token The wait action to be taken by the token arriving to the Remove step.
Wait If the action is 'NoWait', then the execution of the new token associated with the removed object
Option will be scheduled on the simulation’s current event calendar as an early priority event. The original
token will then immediately exit the step.
If the action is 'NewTokenExitsFirst', then the new token associated with the removed object will exit
the step first before the original token exits.
If the action is 'WaitUntilNewTokenProcessingCompleted', then the original token will wait until the
processing of the new token associated with the removed object has been completed before exiting
the step.
542 / 1277
Simio Reference Guide
RemoveRows
RemoveRows
The RemoveRows step may be used to remove all existing rows or a single active row from an output table. Any table
references held by tokens or objects become invalid.
When using the RemoveRows step to remove a specific single row from a table, it is important that the active row for the
Object Type specified be set. This can be done by using the SetRow step followed by a RemoveRows step.
Listed below are the properties of RemoveRows:
Property Description
Table The name of the output table from which to remove all rows.
Name
Removal Indicates whether to remove all rows from the specified table or only a specific row.
Type
Object The object or element that has a reference to the table row to be removed. May be specified as
Type either the executing token, the object associated with the executing token, the parent object or as a
specific object or element reference.
543 / 1277
Simio Reference Guide
Repair
Repair
The Repair step ends a downtime of type Failure Name.
Listed below are the properties of Repair:
Property Description
Failure Name The type of failure to end.
544 / 1277
Simio Reference Guide
Reserve
The Reserve step may be used to reserve a resources or materials for possible later use by a specified owner. Other objects
will be unable to use a reserved item unless the reservation is cancelled. Use the UnReserve step to cancel a resource or
material reservation.
Resource is used to in this context to refer to Resources, Workers and Vehicles in the Standard Library. Reserved resource
capacity is capacity that, although unallocated, has been set aside for a specific future owner thus preventing its use by
anyone else without a reservation.
The Lot ID property may be specified as a string literal enclosed in double quotes (e.g., “Lot1”), the name of a string state
variable or string column in a table, or any other expression that returns a string value.
If Consumption Type for materials is a single 'Material' that is location-based inventory, then Simio will look up the
Inventory element holding the specified material at the specified inventory site. If Consumption Type is a 'Bill of Materials',
then Simio will look up the Inventory elements holding the component materials at the specified inventory site.
If the Inventory Site Type property value is ‘None’ but a site object reference is required because the material is location-
based inventory, or if an inventory reference for a material-site object pair cannot be found, then a runtime error will occur.
A Reservations (More) repeat group allows a user to define repeating reservations either through entry into the repeat
group or by using a data table mapped to that repeat group.
If the name of the resource to reserve is a member of a population (i.e., worker or vehicle), the Resource Name can be
specified as either the specific resource within the population, such as 'Truck[1]' or 'Truck[2]' or may alternatively be
specified by simply the resource name, such as 'Truck'. If the population of that resource is greater than 1, keep in mind that
reserving 'Truck' would always reserve the first member of the population, Truck[1] unless explicitly specified.
Many functions, such as Capacity.Reserved, Capacity.ReservedTo(owner) and ReservationOwners.* (see the Functions, States
and Events for All Intelligent Objects page) are updated when a resource is reserved or unreserved. The capacity reserved
of a given resource by various entities can be greater than the actual capacity of the resource. Allocating the resource to
the entity then decreases the Capacity.Reserved and Capacity.ReservedTo(owner) function values. Keep in mind that the
function ReservedTransporter for a given entity object is NOT related to the Reserve step. If the entity object currently has
made a reservation to ride on a transporter (i.e., by indicating Ride On Transporter 'True' in a TransferNode), then this
function returns a reference to that transporter once it is allocated. Otherwise, the Nothing keyword is returned. This value
is set to the reserved transporter until the entity is actually loaded and has moved into the transporter's RideStation.
See also the Reservations page for more details.
545 / 1277
Listed below are the properties of Reserve:
Property Description
Reservation Type Indicates whether to reserve a resource or material.
Number Capacity The number of capacity units to reserve (for Reservation Type 'Resource').
Units
Consumption Type Indicates whether the material to reserve is a single material or bill of materials.
Material Name The name of the material which is to be either specifically reserved or whose bill of
materials is to be reserved.
Inventory Site Type Indicates the fixed object that is the inventory location. Applies only to material
elements whose Location Based Inventory property is set to 'True'.
Site Object Name The name of the fixed object that is the inventory location.
Lot ID Optional string value indicating the lot identifier of the reserved material.
Reservation Timeout An optional wait time before automatically cancelling the reservation.
Reservations The name of the material which is to be either specifically reserved or whose bill of
( More).Material materials is to be reserved.
Name
Reservations The number of capacity units to reserve (for Reservation Type 'Resource').
( More).Number
Capacity Units
Reservations Optional string value indicating the lot identifier of the reserved material.
( More).Lot ID
Owner Type The object that will own the reservation. May be specified as either the object
associated with the executing token, the parent object, or as a specific object reference.
Owner Object The specific object that will own the reservation.
546 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
547 / 1277
Simio Reference Guide
RestartRun
The RestartRun step may be used to set the ending time of the simulation run to the current time. This will cause the run to
end once all simulation events scheduled for the current time have been processed. Interactive mode will require the next
run to be started manually, by selecting the Run button (without Reset). Otherwise, a new run will be automatically started,
treated as a restarted run for the same scenario replication instance if running in planning or experiment mode.
If in interactive mode, using the Reset button to re-initialize the model to its starting conditions will cancel a restart
command and set the run count ( Run.RunNumber) back to 1.
There are no properties of RestartRun.
See also the Keep Values On Run Restart property within State Columns in Data Tables, as well as Output Tables.
See the Single-Pass vs Multi-Pass Simulation Approach page for more discussion.
548 / 1277
Simio Reference Guide
Resume
Resume
The Resume step may be used to resume model behavior that has been suspended using the Suspend step. The Resume
step can resume a process, the movement of an object, a flow regulator's capability or the batching of a Batch Logic
element.
If the Resume Type is 'Process', the owner of the process can be the parent object or the associated object of the executing
token. If the Token Match Condition for a Resume step is specified, then only the tokens currently in process that satisfy the
condition will have their execution resumed. It is common to use 'Candidate.ModelEntity == Entity' and/or
'( Candidate.Token.AssociatedObject == Token.ContextObject)' as part of an expression in the Token Match Condition
property to be sure to correctly match a potential candidate to resume with the correct token/entity entering the step.
If the Resume Type is 'ObjectMovement', the movement of the parent or associated object or specific object is resumed.
The object must be either a link or an agent. If the Resume Type is 'RegulatorFlow', the name of the flow regulator to
resume flow capability is specified. If the Resume Type is 'BatchLogic', the name of the Batch Logic element is required.
A Resume Actions (More) repeat group allows a user to define multiple resumed actions either through entry into the
repeat group or by using a data table mapped to that repeat group.
For examples of using the Resume step, please refer to the SimBits EntityStopsOnLink,
VehicleFinishesAndParksWhenOffShift and VehicleStopsWhenServerOffShift.
Listed below are the properties of Resume:
Property Description
Resume Type The type of behavior or logic to resume. May be Process, ObjectMovement or
RegulatorFlow.
Token Match Optional match condition used to filter the tokens executing the process. Only tokens
Condition currently in process that satisfy this condition will be resumed.
In the expression, use the syntax Candidate.[ TokenClass].[ Attribute] or
Candidate.[ TokenAssociatedObjectClass].[ Attribute] to reference an attribute of either
the candidate process tokens themselves or the objects associated with those process
tokens (e.g., Candidate.Token.TimeInProcess or Candidate.Entity.TimeInSystem).
Object Type The object whose movement is to be resumed. May be specified as either the object
associated with the executing token, the parent object or as a specific object
reference.
Flow Regulator Name The name of the regulator whose flow capability is to be resumed.
Batch Logic Name The name of the Batch Logic element to resume.
Resume Optional match condition used to filter the tokens executing the process. Only tokens
Actions( More).Token currently in process that satisfy this condition will be resumed. 549 / 1277
Actions( More).Token currently in process that satisfy this condition will be resumed.
Match Condition In the expression, use the syntax Candidate.[ TokenClass].[ Attribute] or
Candidate.[ TokenAssociatedObjectClass].[ Attribute] to reference an attribute of either
the candidate process tokens themselves or the objects associated with those process
tokens (e.g., Candidate.Token.TimeInProcess or Candidate.Entity.TimeInSystem).
Resume The object whose movement is to be resumed. May be specified as either the object
Actions( More).Object associated with the executing token, the parent object or as a specific object
Type reference.
550 / 1277
Simio Reference Guide
Ride
Ride
The Ride step may be used to initiate a transporter ride request for an entity object at a node.
When executing a Ride step, if the rider entity attempts to select a transporter from a group of candidates (e.g., from a list
or from a population of some specific transporter type), the preference will be to select a transporter resource that the
entity has reserved. For example, if an entity is attempting to seize a transporter from a list that contains candidates
‘Worker1’, ‘Worker2’, and ‘Worker3’, and the entity has an active resource reservation for ‘Worker2’, then the entity will have
a preference to select ‘Worker2’ irrespective of the Ride step’s specified reservation method and selection goal.
Additionally, the Ride step provides a Token Wait Action property in its advanced options. This property controls whether
the token executing the Ride step immediately continues to the next process step, or whether the token waits until the rider
entity starts or has finished transferring onto a selected transporter.
Listed below are the properties of Ride:
Property Description
TransporterType The transporter type that may be selected to ride on.
Transporter The name of the specific transporter type that the entity may ride on.
Name
Transporter List The name of the list of transporter types that the entity may ride on.
Name
Reservation The method used to select and reserve a transporter object to ride on.
Method 'ReserveClosest' will find the transporter that is closest on a Network or physically closest (if
no network) to the TransferNode. If there are two that are of equal distance, the node's
Selection Goal property will be used to determine which transporter to select. 'ReserveBest'
simply looks to the Selection Goal and Selection Criteria properties and finds the Transporter
that best fits the goal, regardless of the vehicle's current location. The
'FirstAvailableAtLocation' will cause the entities to wait for a Transporter to arrive to the
node. This method should only be used when the vehicle has a Routing Type of 'Fixed Route'
or when the user specifically moves the vehicle to an entity location. Otherwise, this method
doesn't request the vehicle to move to the entity location.
Selection Goal The goal used to rank transporter preference when multiple candidates are available.
Selection The expression criteria, evaluated for each candidate transporter object, used with a Smallest
Expression Value or Largest Value selection goal. Use the keyword Candidate at the beginning of the
expression.
Selection An optional condition evaluated for each candidate transporter object that must be true for
Condition the transporter to be eligible to ride on. Use the keyword Candidate at the beginning of the
expression.
Token Wait The wait action to be taken by the token arriving to the Ride step.
Action
551 / 1277
Simio Reference Guide
Route
Route
The Route step may be used with a RoutingGroup element to route an entity object to a destination selected from a list of
candidate nodes.
It is also possible to reserve materials and resources for consumption at an upstream node prior to routing to the
destination node. This is done through the Route Constraint Logic repeat group and related Constraint Logic element.
The Required Materials repeat group on the Route step is now deprecated and no longer displayed in new models,
replaced by the new Route Constraint Logic repeat group. The Route Constraint Logic repeat group allows a user to easily
separate different constraint types into multiple Constraint Logic element references and thus tables (e.g., separate tables
defining the material and secondary resource availability requirements for a Route step).
Note that models built prior to Sprint 203 may contain the Required Materials repeating property editor and related
properties, which can be found within the Deprecated Properties area. To edit deprecated properties, go to File, Settings
and under GUI area, set the Display Deprecated Properties in the Properties Window to 'True'.
Listed below are the properties of Route:
Property Description
Routing Group The name of the routing group from which a destination node will be selected.
Name
Selection Goal The goal used to select a destination node from the routing group.
Source Node Optional node whose location will be used for the ‘distance to’ calculation instead of the
routing entity, used with SmallestDistance or LargestDistance selection goal.
Selection The expression criteria, evaluated for each candidate destination, used with a Smallest Value
Expression or Largest Value selection goal. Use the keyword Candidate at the beginning of the
expression.
Blocked The rule used to manage destination selection if there are destinations in the list of
Destination candidate nodes that are considered to be blocked. If the rule is 'Select Any', then whether or
Rule not destinations are considered blocked will be ignored. If the rule is 'Select Available Only',
then only a destination that is not currently blocked may be assigned, and if all destinations
are blocked, then the token will be held at the Route step until a destination becomes
available. If the rule is 'Prefer Available', then a destination that is not currently blocked will
be preferred, but if all destinations are blocked, then the best destination per the selection
goal will still be immediately assigned.
Entity Type The entity object to be routed. May be specified as either the object associated with the
executing token, the parent object, or as a specific object reference.
Selection An optional condition evaluated for each candidate destination that must be true for the
Condition destination node to be selected. Use the keyword Candidate at the beginning of the
expression.
Route Constraint logic used to enforce additional constraints on the entity's route request.
Constraint
Logic
Route The name of the Constraint Logic element used to enforce additional constraints on the
Constraint entity's route request.
552 / 1277
Constraint entity's route request.
Logic.Constraint
Logic Name
Random The random number stream to be used if the destination Selection Goal is 'Random'.
Number Stream
Required Additional material availability constraints enforced on the entity's route request.
Materials NOTE: This repeat group has been deprecated. Use the Route Constraint Logic property
instead. To edit the deprecated repeat group, go to File, Settings under the GUI area and set
the Display Deprecated Properties in the Properties Window value to 'True'.
553 / 1277
Simio Reference Guide
Scan
The Scan step may be used to hold a process token at the step until a specified condition is true. The logical condition may
be specified as any arbitrary expression.
1. When a token arrives at a Scan step, the scan condition is evaluated. If the condition is true, then the token is
permitted to exit the step without delay. Otherwise, the token is added to a global scan condition list and is held at
the Scan step until the condition is detected to be true.
2. If there are any tokens waiting on the global scan condition list, Simio will check that list as the last operation before
advancing the simulation clock to the time of the next event in the system. The scan condition list is always checked
in FIFO order.
3. The first token found in the scan condition list whose condition is true will be removed from the list and released
from the Scan step where it has been waiting. The token is then allowed to move through process logic until it is
either delayed or destroyed. Once all current events on the simulation’s event calendar have again been exhausted,
the scan condition list is rechecked. Note that this one-at-a-time release mechanism allows a released token to
potentially change state values that will prevent other tokens waiting at Scan steps from being released.
4. The one-at-a-time release of tokens from Scan steps continues until either the scan condition list is empty or all
conditions evaluate to false.
555 / 1277
Simio Reference Guide
556 / 1277
Simio Reference Guide
Search
Search
The Search step may be used to search a collection of objects or table rows. New tokens associated with any found items
will exit the 'Found' exit point of the step.
The Collection Type for searching may be an entity population, a queue state, rows within a table, lists of
objects/nodes/transporters, resources that have been seized, resource or reservation owners for a resource, network or
node links, or object instance.
Prior to Simio sprint 166, the 'Forward' and 'Backward' Search Type property values would implicitly sum the Search
Expression. Any Search steps added to a model prior to Sprint 166 convert the 'Forward' to 'ForwardSumExpression' and
'Backward' to 'BackwardSumExpression' automatically for compatibility in case the sum was used in the model.
The Match Condition property is commonly used to filter the searched items based on a particular condition. If searching
objects, as in a entity population or queue contents, the Candidate keyword should be used (e.g.,
Candidate.ModelEntity.Priority == 3).
A Search Expression may be specified that is evaluated in the context of each item found by the search. This expression
property is available when Search Type is 'MinimizeExpression', 'MaximizeExpression', 'ForwardSumExpression' or
'BackwardSumExpression'. The sum of the expression for the found items will be stored into the Save Search Expression
Sum property value, which defaults to the ReturnValue state of the original executing token. The 'Token.ReturnValue' or
state variable referenced in the Save Search Expression Sum property can then be referenced later on in the process.
The Search step may be used to create new tokens that are associated with, or point to, the items found by the search.
These tokens will exit the 'Found' exit point of the step. If the search is done on a Collection Type such as 'EntityPopulation',
'QueueState' or 'SeizedResources' where there is an associated object that can be found, the 'Found' token will be
associated with that found object (thus the associated object's states are accessible for reviewing, changing, etc.). However,
if the Collection Type of the Search step is 'TableRows' for example, then the 'Found' token has a pointer to the associated
row in the table (and not to any particular object). Note that if searching table rows, the table row references of the
original token are copied to any new tokens (starting in Search steps added in Sprint 166+).
There are two exits from the Search step labeled 'Original' and 'Found'. The Token Wait Action property determines the
order in which the tokens exit the Search step. By default ('NewTokensExitFirst'), the tokens for the found entity(s) will exit
the 'Found' exit and proceed until a delay type step occurs for the token or its associated entity. Then the original token will
exit from the 'Original' exit.
The original token always continues out of the Original segment, regardless of whether or not the Search step finds
anything. All steps that exist in the Original segment leaving the Search step will always be executed. A new token will only
be created in the Found segment if something is found in the Search step. So if something was found by the Search step,
all steps that exist in the Found segment will be executed. But, if nothing was found by the Search step, then none of the
steps that exist in that Found segment will be executed (because a token was never created for that segment).
Model trace provided for the Search step during the simulation run includes the number of items and exact items found by
the search. Additionally, if the Save Index Found and Save Number Found options are used, the trace includes the state
variable assignment information.
For examples of using the Search step, please refer to the SimBits CONWIP, SearchTables, RoutingWithoutPaths,
VehicleFinishesAndParksWhenOffShift, VehicleFleetManagement, and VehicleStopsWhenServerOffShift.
Additional information on the Search step can be found in the Search - Discussion and Examples page.
Listed below are the properties of Search:
Property Description
Collection The type of collection to be searched.
Type Note that a special collection type 'ObjectInstance' is available to search any individual object in
the system as a single item list. An object instance search is typically useful for creating a new
process token that is associated within an already known object.
Owner The object that owns the seized resources to be searched. May be specified as either the object
Type associated with the executing token, the parent object or as a specific object reference.
Owner The specific owner object whose list of seized resource objects is to be searched.
Object
Queue The name of the queue state to be searched. Examples of a public Queue State are:
State [email protected], Server1.Processing.Contents, Vehicle.VisitRequestQueue
Name
Search If the searched table has primary key/foreign key relationships, then this property indicates
Related whether or not to include only related rows in the search. If this property is set to False, then the
Rows Only search will include all rows in the table regardless of any table relationships.
Node The name of the node whose collection of drawn inbound and outbound links is to be searched.
Name
Network The name of the network whose collection of link members is to be searched.
Name
Resource The resource object whose list of current owners is to be searched. Specified as either the object
Type associated with the executing token, the parent object, or as a specific object reference.
Resource The specific resource object whose list of current owners is to be searched.
Object
Match Optional match condition used to filter the items searched. Only items that satisfy this condition
Condition will be selected.
If searching a collection of objects, then in the expression use the syntax
Candidate.[ ObjectClass].[ Attribute] to reference an attribute of the candidate objects (e.g.,
Candidate.Entity.Priority).
Search Expression to be evaluated for each item in the searched collection and summed. If searching a
Expression collection of objects, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an attribute
of the candidate objects (e.g., Candidate.Entity.Priority).
Save Optional discrete state variable to save the sum of the specified Search Expression for the item(s)
Search found by the search. 558 / 1277
Search found by the search.
Expression
Sum
Starting The one-based starting index of the search. If defaulted, then the starting index is the first item in
Index the collection if forward search or the last item in the collection if a backward search.
Ending The one-based ending index of the search. If defaulted, then the ending index is the last item in
Index the collection if a forward search or the first item in the collection if a backward search.
Save Index Optional discrete state variable to save the one-based index of the last item found in the
Found collection by the search.
Save Optional discrete state variable to save the total number of items in the collection found by the
Number search.
Found
Copy Over Indicates whether to copy table row references over from the original token executing the Search
Table Row step to new tokens associated with the found items.
References
Set Table The conflict resolution type when setting the table row reference for a new token associated with
Row a found row in the searched table. Applies only if the Copy Over Table Row References property is
Conflict set to True (due to potential for conflicts with the table row references copied over from the
Resolution original token executing the Search step).
Abort - The table row references copied over from the original token will be kept and no
reference set to the found row in the searched table.
Replace - The table row references copied over from the original token will be discarded,
replaced by a reference to the found row in the searched table.
Token Wait The wait action to be taken by the token arriving to the Search step.
Option If the action is 'NoWait', then the execution of all new tokens associated with found items will be
scheduled on the simulation's current event calendar as an early priority event. The original token
will then immediately exit the step.
If the action is 'NewTokensExitFirst', then all new tokens associated with found items will exit the
step first before the original token exits.
If the action is 'WaitUntilNewTokenProcessingCompleted', then the original token will wait until
the processing of all new tokens associated with found items has been completed before exiting
the step.
559 / 1277
Simio Reference Guide
This above example can be found in the SearchTables simbit. Additionally, the three scheduling type examples within the
Examples folder utilize the Search step for performing various tasks.
Example 2 - Using Search step to search a Queue for an entity with certain characteristics
In this example, we are searching for a particular entity within a queue state named 'WaitingArea.Queue'. The match
condition is specified as 'ModelEntity.TimeCreated == Candidate.Entity.TimeCreated'. The term ModelEntity.TimeCreated
refers to the entity's associated token that has entered the Search step. The term Candidate.Entity.TimeCreated refers to the
collection of entities that are located within the WatitingArea queue. Any time a collection of items are searched, the
keyword 'Candidate' should be used in the condition to explicitly reference a candidate entity within the collection.
The state variable WhichOne will store the index value into the queue of the entity (if any) that is found. This Search step
can be found within the UsingAStorageQueue simbit.
560 / 1277
Simio Reference Guide
Seize
Seize
The Seize step may be used to seize capacity of one or more objects on behalf of the parent object, the object associated
with the executing token or a specific object reference.
Every object represents a resource with a capacity. Object resources must be seized/released in whole units. The objects to
be seized can be from a specific object or selected from an object list. In the case of a specific object, it can be a static
object, such as a Standard Library 'Resource', or selected from a population of dynamic objects, such as a Standard Library
'Worker' or 'Vehicle'. When selecting from an object list or a population and the number of objects required is less than the
number available, the resource selection rule is used to select between the available objects. An object list may contain
both dynamic objects and static objects. In the case of populations all members within the population are eligible for
selection. Object capacity may be released later by either a specific name or by an object list name. In the case of a list
name, the objects that are owned from the specified list are eligible to be released. They are released based on order
which is specified as FirstSeized or LastSeized.
The resource may be allocated to either the parent object, associated object or specific object. If it is seized by the parent
object then it must be released by the parent object. If it is seized by the associated object or a specified object, then it
may be carried by the associated object or specified object across multiple objects.
A lists of objects for seizing may be specified by using the Definitions / Lists and referencing the 'ListName'. Alternatively,
a list of objects for seizing may be specified within a table column and referenced by the 'TableName.ColumnName' as the
Object List Name property.
The Seize step may be used in conjunction with the Release step.
When an entity first attempts to seize a resource, the following conditions must be true for the entity to be eligible to
complete the seize:
1. Sufficient capacity units are available. If capacity is reserved and there are not enough available unreserved units,
then a reservation will be required for the object attempting the seize.
2. The Selection Condition of the Seize step is satisfied if it is specified.
3. The resource’s OnEvaluatingSeizeRequest decision process returns True.
4. Any other scheduling constraints (such as those specified using a Stipulate step) are satisfied.
If the entity is not eligible for the seize(s), then it is placed in the AllocationQueue of the resource (assuming the entity was
unable to seize some other resource if seizing from a list).
When a resource’s capacity is freed or it’s available capacity is increased via a schedule, the resource’s allocation queue is
now searched using the exact same set of eligibility conditions that are described above for an initial seize attempt. The
first eligible seize request(s) found in the queue are allowed to seize the resource.
Whenever an event triggers the evaluation of a Seize request, if simultaneous seizing is required then all resource
requirements will first be checked to verify that enough resources are presently available to fully satisfy the request. If that
is the case, then all required resources will be seized. Otherwise, no seizes will occur.
Note that if the Must Simultaneously Seize requirement is violated while seizing resources due to one or more unexpected
changes in resource availability, resulting in only some of the required resources being seized, then the warning below will
be displayed to the user.
561 / 1277
When a seized resource object’s capacity has changed, the On Capacity Changed Process for each of the resource’s owners
(if any were specified at the Seize step(s)) will be first executed in seize order. Then last the resource object’s
OnCapacityChanged process will be executed.
When a new token is created to execute the On Capacity Changed Process that was specified at a Seize step:
The token’s associated object will be the resource.
The token’s context object will be the resource owner.
The token will have a reference to the same active Task (if applicable) as the token that executed the Seize step.
The token will have the same table references as the token that executed the Seize step.
If Object Type is ‘FromList’ and the Object List Name is specified as a table column, then the Resource Efficiency property
may be specified as another column in the same table, thereby specifying a different efficiency value for each candidate
resource. If the Resource Efficiency expression property returns a negative value, then a runtime error is thrown.
The Seize Constraint Logic repeat group allows a user to easily separate different constraint types into multiple Constraint
Logic element references and thus tables (e.g., separate tables defining the material and secondary resource availability
requirements for a seize step).
For examples of using the Seize step, please refer to the SimBits OverflowWIP, ResourcesWithWorkSchedules,
SeizingVehicle and SelectingResourceFromList.
Listed below are the properties of Seize:
Property Description
Resource Seizes The objects to be seized.
Resource The name of the object list from which one or more objects will be selected to be seized.
Seizes.Object List
Name
Resource Indicates whether a move to a specified location will be requested from the seized
Seizes.Request resource(s). The executing token will be held in the Seize step until the resources have
Move arrived to the location.
Resource The name of the specific node location that the seized resource(s) will be requested to
Seizes.Destination move to. If not specified, and the owner object performing the seize is an entity object at a
Node node, then this property defaults to that owner entity's current node.
Resource The priority of the move request if a PlanVisit step or SelectVisit step is used by the
Seizes.Move resource to choose a visit destination from multiple candidates. If not specified, and the
Priority owner object requesting the movement is an entity object, then this property defaults to
that entity's Priority state value.
Resource The number of capacity units to seize per object (as available per the object's capacity
Seizes.Units Per type).
Object
Resource An optional condition evaluated for each candidate object that must be true for the object
Seizes.Selection to be eligible for seizing. In the condition, use the keyword Candidate to reference an
Condition object in the collection of candidates (e.g., Candidate.Object.Capacity.Remaining)
Resource Optional value that can alter the rate at which work is performed using the seized
Seizes.Resource resource(s), expressed as a fraction. The actual work duration is the planned work duration
Efficiency divided by the efficiency. Hence, an efficiency value greater than 1 shortens the time and a
value less than 1 lengthens the time.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource objects (e.g., Candidate.Object.Capacity).
Note that the SeizedResources.AggregateEfficiency function of an object may be used to
calculate and return an aggregate efficiency value for the list of resources currently seized
by that object. For example, to alter a delay time accordingly in the model.
Resource Indicates whether the cost of the seized resource(s) will be recorded (charged) to the cost
Seizes.Record of the owner object.
Resource Cost
Resource This property indicates when the one-time 'cost per use' for a seized resource will be
Seizes.Per-Use charged, or accrued, to the cost of the owner object. Note that, if the owner is an entity
Cost Accrual object, then the 'AtNextStation' accrual method will charge the cost to the entity the next
time it enters a station location.
Resource The random number stream to be used if the resource selection goal is 'Random'.
Seizes.Random
Number Stream
563 / 1277
Resource Optional process that is executed by a token associated with a seized object after the seize
Seizes.On Seized occurs.
Process
Resource Optional process that is executed if the capacity of a seized resource has changed.
Seizes.On
Capacity Changed
Process
Must If multiple resources are required, indicates whether all must be available before any can
Simultaneously be seized.
Seize
Owner Type The object that will own the seized resources. May be specified as either the object
associated with the executing token, the parent object, or as a specific object reference.
Owner Object The specific object that will own the seized resource capacity units.
Seized Resources Filter type applied to the owner object's list of currently seized resources before
Filter Type attempting the new resource seizes. If 'Token', filters to only include seized resource items
that are linked to a given token's execution.
Filter Token Expression returning a reference to the process token to which the seized resource items
Reference must be linked. If the expression returns 'Nothing' then no filtering occurs.
Use Strict List If a resource seize requirement is 'FromList' and its quantity type 'Deficient', indicates
Referencing whether the deficient quantity calculation counts only already seized resources that have
been seized from the same specified list. The default setting is 'False' and if left unchanged
then the list membership will be sufficient to count an already seized resource.
Seize Constraint Constraint logic used to enforce additional constraints on the seize request.
Logic
Seize Constraint The name of the Constraint Logic element used to enforce additional constraints on the
Logic.Constraint seize request.
Logic Name
Immediately Try Indicates whether to immediately try seizing the resource requirements before the
Seize execution of any other simulation logic in the system and, if successful, skipping the
resource allocation queues.
Setting this property to False will just insert the seize request into the resource allocation
queues. An evaluation of those queues will then be scheduled on the simulation's current
event calendar as a late priority event.
564 / 1277
Simio Reference Guide
SelectDropoff
SelectDropoff
The SelectDropoff step may be used to set the destination node of a transporter object to the drop-off location of a riding
entity.
If a destination is selected the token exits the primary exit point, otherwise it exits the failed exit point.
Listed below are the properties of SelectDropoff:
Property Description
Selection The goal used to rank dropoff destination preference when selecting from multiple candidates.
Goal
Transporter The transporter object that is selecting a drop-off location. May be specified as either the object
Type associated with the executing token, the parent object, or as a specific object reference.
Transporter Visible if Transporter Type is 'SpecificObject'. The specific transporter object that is selecting a
Object drop-off location.
565 / 1277
Simio Reference Guide
SelectVisit
SelectVisit
The SelectVisit step may be used to set the destination node of an entity object to the location of an accepted visit request.
Possible visit requests may include pickup requests initiated at Ride steps (applicable to transporter entities) as well as
move requests initiated at Seize or Move steps (applicable to resource enabled entities). To have an entity first search for
and accept a not yet reserved visit request in the system, use the PlanVisit step.
If a destination is selected the token exits the primary exit point, otherwise it exits the failed exit point.
Listed below are the properties of SelectVisit:
Property Description
Selection The goal used to rank visit preference when selecting a visit from multiple candidates.
Goal
Entity The entity object that is searching the system for a visit request. May be specified as either the
Type object associated with the executing token, the parent object, or as a specific object reference.
Entity The specific entity object that is searching the system for a visit request.
Object
566 / 1277
Simio Reference Guide
SetNetwork
SetNetwork
The SetNetwork step may be used to set the network of links used by an entity to travel between node locations.
Listed below are the properties of SetNetwork:
Property Description
New The new network value to set. 'No Network ( Free Space)' is the default.
Network
Name
Entity The entity object whose network value is to be set. May be specified as the object associated with
Type the executing token, the parent object, or as a specific object reference.
567 / 1277
Simio Reference Guide
SetNode
SetNode
The SetNode step may be used to set the destination node of any entity object.
For an example of using the SetNode step, please refer to the SimBit SearchTables.
Listed below are the properties of SetNode:
Property Description
Destination The method used to assign the destination node. 'By Sequence' requires that the entity object
Type has been assigned a sequence table. The destination node value will be set to the next
destination in the sequence.
Node Name The name of the specific node object that is the destination.
Node ID The integer ID number of the node object that is the destination.
Number
Search The first node found in the system that satisfies this conditional expression will be assigned as
Expression the destination. The search for a node will start in the facility window where the entity is
currently located.
In the condition, use the keyword 'Candidate' to explicitly reference a candidate node in the
system that is being searched (e.g., Candidate.Node.RidePickupQueue.Contents > 0).
Entity Type The entity object whose destination node value is to be set. May be specified as either the
object associated with the executing token, the parent object, or as a specific object reference.
Entity Object The specific entity object whose destination node value is to be set.
Auto Clear If Indicates whether to automatically clear the assigned destination node if for any reason the
Visit Different entity visits a different node beforehand.
Node
568 / 1277
Simio Reference Guide
SetRow
SetRow
The SetRow step (formerly named SetTable) may be used to assign a data table or sequence table to a token or object, or
to set or reset the current associated row. The current row index into the table is specified by the RowIndex property. A
token or an object can be bound to more than one table at a time. To do this, simply use two SetRow steps to reference
each table of interest. The Set Row Condition may be specified to evaluate a conditional expression before setting a row. A
token or object can have all existing table references cleared before setting a new row in the table, if desired.
For more information, please refer to the SetRow - Discussion and Examples page.
For examples of using the SetRow step, please refer to the SimBits EntityFollowsSequenceWithTable,
EntityFollowsSequenceWithRelationalTables, LeveledArrivals, SelectEntityTypeFromTable and UsingRelationalTables.
Listed below are the properties of SetRow:
Property Description
Table Name The name of the sequence or data table.
Object Type Specifies whether the step is assigning a table reference to the parent object, to the
executing token, to the object associated with the executing token, or to a specific object
or element.
Object or Element The name of the object or element to be assigned the table reference.
Set Row Optional condition that, if specified, must evaluate to true to perform the set row action.
Condition
Clear All Previous If True, every table refernce of the specified object will be removed before setting the row
Table References for the specified table.
First
569 / 1277
Simio Reference Guide
570 / 1277
Simio Reference Guide
SetWorkSchedule
SetWorkSchedule
The SetWorkSchedule step may be used to assign a new work schedule to a resource object. The function
CurrentWorkSchedule.Name can be used with a resource object to determine the currently active work schedule.
Additionally, the work schedule functions shown at the bottom of the Work Schedules page can be used with the
CurrentWorkSchedule of a resource object (i.e., Worker1[1].CurrentWorkSchedule.Value( TimeNow)).
For more information about work schedules, please refer to the Schedules page.
Listed below are the properties of SetWorkSchedule:
Property Description
Resource The resource object to assign the new work schedule. May be specified as either the object
Type associated with the executing token, the parent object, or as a specified object reference.
571 / 1277
Simio Reference Guide
StartTasks
StartTasks
The StartTasks step is used to initiate a task sequence that is associated with an object in the model. Refer to the Task
Sequence element to define a task sequence.
Listed below are the properties of StartTasks:
Property Description
Task The name of the task sequence to start.
Sequence
Name
Object The object that the task sequence execution will be associated with. May be specified as either
Type the object associated with the executing token, the parent object or as a specific object reference.
Object The specific object that the task sequence execution will be associated with.
Random The random number stream to be used if there is probabilistic branching in the task sequence.
Number
Stream
Token Wait The wait action to be taken by the token arriving to the StartTasks step. If 'None', then the token
Action will immediately exit the step after starting the specified task sequence.
572 / 1277
Simio Reference Guide
Stipulate
Stipulate
The Stipulate step may be used to add dependencies and requirements that entities must satisfy before processing.
For examples of using the Stipulate step, please refer to the SimBits UsingTheStipulateStepForNodeLists and
UsingTheStipulateStepForResourceAllocation.
Listed below are the properties of Stipulate:
Property Description
Stipulation The kind of stipulation being applied to the Candidate Entity. 'NodeListRoutingDependency' will
Type prevent the entity from routing through a specific node list until the Entity to Follow has routed
through first. 'ResourceAllocationDependency' will prevent the entity from seizing a specific
resource (or seizing from a specific resource list) until the Entity to Follow has seized the resource
(or seized from the resource list) first. 'NodeListRequirement' will force the entity to select a
specific node from a Node List, overriding whatever node selection rule would normally be used.
'ResourceListRequirement' will force the entity to select a specific resource from a resource or list,
overriding whatever resource selection rule would normally be used.
Node List The name of the node list used by this dependency or requirement.
Required Identifies the specific node in the node list that the Candidate Entity must select.
Node
Resource The name of the resource or resource list for this resource allocation dependency. The Candidate
or List Entity will not proceed until the Entity to Follow has seized the specified resource, or seized from
the specified resource list, Prior Usage Count times.
Required Identifies the specific resource in the resource list that the Candidate Entity must seize.
Resource
Entity to The name of the entity that must proceed through the specified resource, resource list, or node list,
Follow before the candidate entity may proceed.
Prior Specifies the number of times the Entity to Follow must seize the resource, seize from the resource
Usage list, or be routed through the node list, before the Candidate Entity may proceed. The default value
Count is '1'.
Routing An optional reference to the routing group that must be used by the candidate entity for this node
Group stipulation to apply.
Seize An optional reference to an object the owner making the seize must be located at for this resource
Location stipulation to apply.
573 / 1277
Send comments on this topic to Support
574 / 1277
Simio Reference Guide
Subscribe
Subscribe
The Subscribe step may be used to add a new triggering event for a process, indicating that the process is to be executed if
the event occurs. Multiple events may be subscribed to within a single Subscribe step by using the Events ( More) repeating
group of properties.
The Event Condition property allows a condition to be evaluated when the event occurs. This condition must be evaluated
to True to trigger the process that is specified.
An example of its use would be in the scenario where a Server seizes a Resource before it starts processing and the
Resource goes on and off shift during the run. If you want the Server to stop processing when the Resource goes off shift,
the Subscribe step can be used to trigger a process that will suspend the Server when the event Resource.CapacityChanged
occurs and the new capacity is 0. In this example, the process that will suspend the Server would use a Suspend Step to
suspend the OnEnteredProcessing process of the Server. Since this process is not a public process in the Standard Library
Server object, the user would need to subclass a Server object, override the OnEnteredProcess process and change the
Public property to 'True'. After these changes, that process will be available in the Suspend Step.
Also, the Workstation ( Deprecated) object takes advantage of these steps to suspend or resume the processing of the
current job if any secondary resources go ‘off-shift’ or ‘on-shift’ respectively.
For examples of using the Subscribe step, please refer to the SimBits EntityStopsOnLink and VehicleFleetManagement.
Listed below are the properties of Subscribe:
Property Description
Event Name The name of the event to which to subscribe.
Process Name The name of the process that will be executed whenever the event occurs.
Event Condition Optional condition to be evaluated whenever the event occurs, and which must be also
true to trigger execution of the specified process.
Events The name of the process that will be executed whenever the event occurs.
( More).Process
Name
Events Optional condition to be evaluated whenever the event occurs, and which must be also
( More).Event true to trigger execution of the specified process.
Condition
575 / 1277
Simio Reference Guide
Suspend
Suspend
The Suspend step may be used to suspend various types of model behavior. The Resume step may then be later used to
remove the suspension. The Suspend step can suspend a process, the movement of an object, a flow regulator's flow
capability or the processing of a Batch Logic element batch.
If the Suspend Type is 'Process', the owner of the process can be the parent object or the associated object of the executing
token. The tokens in the process are all frozen in their current state. If a process is suspended that is not yet started, when it
is "started" it will be immediately suspended. If the Token Match Condition for a Suspend is specified, then only the tokens
currently in process that satisfy the condition will have their execution suspended. It is common to use
'Candidate.ModelEntity == Entity' and/or '( Candidate.Token.AssociatedObject == Token.ContextObject)' as part of an
expression in the Token Match Condition property to be sure to correctly match a potential candidate to suspend with the
correct token/entity entering the step.
If the Suspend Type is 'ObjectMovement', the movement of the parent or associated object or specific object is suspended.
The object must be either a link or an agent. If the Suspend Type is 'RegulatorFlow', the name of the flow regulator to
suspend is specified. If the Suspend Type is 'BatchLogic', the name of the Batch Logic element to suspend is required.
A Suspend Actions (More) repeat group allows a user to define multiple suspended actions either through entry into the
repeat group or by using a data table mapped to that repeat group.
For examples of using the Suspend step, please refer to the SimBits EntityStopsOnLink,
VehicleFinishesAndParksWhenOffShift and VehicleStopsWhenServerOffShift.
Listed below are the properties of Suspend:
Property Description
Suspend Type The type of behavior or logic to suspend. May be Process, ObjectMovement,
RegulatorFlow or BatchLogic.
Token Match Condition Optional match condition used to filter the tokens executing the process. Only tokens
currently in process that satisfy this condition will be suspended.
In the expression, use the syntax Candidate.[ TokenClass].[ Attribute] or
Candidate.[ TokenAssociatedObjectClass].[ Attribute] to reference an attribute of
either the candidate process tokens themselves or the objects associated with those
process tokens (e.g., Candidate.Token.TimeInProcess or
Candidate.Entity.TimeInSystem).
Object Type The object whose movement is to be suspended. May be specified as either the
object associated with the executing token, the parent object or as a specific object
reference.
Flow Regulator Name The name of the regulator whose flow capability is to be suspended.
Batch Logic Name The name of the Batch Logic element to suspend.
Suspend Optional match condition used to filter the tokens executing the process. Only tokens
Actions( More).Token currently in process that satisfy this condition will be suspended.
Match Condition In the expression, use the syntax Candidate.[ TokenClass].[ Attribute] or
Candidate.[ TokenAssociatedObjectClass].[ Attribute] to reference an attribute of
either the candidate process tokens themselves or the objects associated with those
process tokens (e.g., Candidate.Token.TimeInProcess or
Candidate.Entity.TimeInSystem).
Suspend The object whose movement is to be suspended. May be specified as either the
Actions( More).Object object associated with the executing token, the parent object or as a specific object
Type reference.
577 / 1277
Simio Reference Guide
Tally
Tally
The Tally step tallies an observation for each token arriving to this step.
The recorded value can be specified as an expression or can be the time between arrivals to the Tally step. The values are
recorded by a TallyStatistic element.
For examples of using the Tally step, please refer to the SimBits TallyStatisticsInTable, SourceServerSinkApproaches and
HourlyStatistic.
Listed below are the properties of Tally:
Property Description
TallyStatistic Name The TallyStatistic element in which the value is to be recorded.
Value Type The type of observation value to record. The value type 'Expression' records the value of
the specified expression. The value type 'TimeBetween' records the time between arrivals
to the Tally step.
Tallies ( More).Value The type of observation value to record. The value type 'Expression' records the value of
Type the specified expression. The value type 'TimeBetween' records the time between arrivals
to the Tally step.
578 / 1277
Simio Reference Guide
Transfer
Transfer
The Transfer step may be used to transfer an entity object between objects and between different types of locations, such
as free space and objects.
If transferring an entity to a node, the Transfer step automatically sets the entity's destination to that node if the entity does
not already have a destination set.
A user can use a Transfer step to transfer an object between object locations without the entity having to use the external
nodes to enter and exit objects. So, for example, you can immediately transfer an entity from inside object A to a node
outside object B using the Transfer step.
Whenever attempting a transfer from 'CurrentNode' to 'OutboundLink', if the entity's CurrentTravelMode state is 'Free
Space Only' or the entity has no network assigned then the transfer attempt will fail and the token exits the 'Failed' exit
point of the Transfer step. Whenever attempting a transfer from 'CurrentNode' to 'FreeSpace', if the entity has an assigned
network and its CurrentTravelMode is 'Network Only' then the transfer attempt will fail and the token exits the 'Failed' exit
point of the Transfer step. Whenever attempting a transfer from 'CurrentNode' to 'OutboundLink', if there is only 1 possible
outbound link from the node that is a member of the entity's currently assigned network, and the Outbound Link Rule is
'Shortest Path' but there is no followable network path to the entity's next destination, then:
If the entity's CurrentTravelMode state is 'Network Only', then the Transfer step will go ahead and still transfer the
entity onto the sole outbound link. This behaviour allows for the possibility that a followable network path emerges
after the entity moves through the next downstream object.
If the entity's CurrentTravelMode state is 'Network If Possible', then the transfer attempt will fail and the token exits
the 'Failed' exit point of the Transfer step. This behavior allows the entity to then do an immediate transfer from
'CurrentNode' to 'FreeSpace' in order to begin traveling to its next destination in free space.
Note
It is only safe at this point to Transfer an entity into or out of an object through the external nodes since most
objects make the assumption that an entity is going to enter or exit through nodes. For example, external logic
might immediately Transfer an entity out of a Server object and transfer it over to some other location outside the
logic. However, if that happens, the tokens running inside the Server will not realize that the entity was transferred
out and it will assume the entity is still inside the Server. It will continue trying to process the entity and an error
will occur.
For examples of using the Transfer step, please refer to the SimBits CONWIP, DynamicallyCreatingVehicles, and
FreeSpaceMovement.
Listed below are the properties of Transfer:
Property Description
From The location type that the entity object is to be transferred from. Options include FreeSpace,
CurrentStation, CurrentNode, EndOfLink and CurrentContainer.
To The location type that the entity object is to be transferred to. Options include FreeSpace, Station,
Node, ParentExternalNode, AssociatedObject, OutboundLink and Container.
Facility The object whose facility free space the entity is to be transferred into. If unspeciifed, then defaults
Name to the most immediate parent object of the Transfer step that supports a facility view. This
property is visible when To is 'FreeSpace'.
Station The name of the station into which the entity is to be transferred, available when To is 'Station'.
Name
Node The node from which the entity is to be transferred. This property is visible when To is 'Node'.
Name
579 / 1277
External The external node of the parent object from which the entity is to be transferred. This property is
Node visible when To is 'ParentExternalNode'.
Name
Outbound The preference used by the entity to select an outbound link from its current node to its next
Link destination.
Preference If the preference is 'Default', then the outbound link preference settings for the entity's current
node will be used.
If the preference is 'Any', then the specified Outbound Link Rule will be strictly adhered to and
blocked outbound links may cause the entity to wait.
If the preference is 'Available', then the specified Outbound Link Rule will be automatically
adjusted to minimize waiting time by first applying the rule only to outbound links that are
immediately available for entry. If no outbound links are immediately available, then the
preference will revert to 'Any' selection.
If the preference is 'Specific', then the entity will be transferred to the specified Outbound Link
Name.
Outbound The rule used by the entity to select an outbound link from its current node to its next destination.
Link Rule Note that if the rule is set to 'Shortest Path', and the entity does not have an assigned destination,
then the rule will revert to 'By Link Weight' selection.
Outbound The name of the specific outbound link that will be selected by the entity.
Link
Name
Container The name of the container into which the entity is to be transferred. This property is visible when
Name To is 'Container'.
Flow The regulator used if transferring the entity's mass and volume as a continuous flow into the new
Regulator location. This property is visible when To is 'AssociatedObject', 'OutboundLink' or 'Container'.
Name
Entity The entity object to be transferred. Specified as either the object associated with the executing
Type token, the parent object, or as a specific object reference.
Random The random number stream to be used if the entity is transferring from current node to outbound
Number link and is probabilistically selecting the outbound link using the node's 'By Link Weight' outbound
Stream link rule.
Fail If Indicates whether to cancel the transfer attempt if the location where the entity is to be physically
Blocked transferred into is considered blocked. If the transfer attempt is cancelled, then the arriving token
will immediately exit the 'Failed' exit point of the Transfer step.
Token The wait action to be taken by the token arriving to the Transfer step. Options include
Wait WaitUntilTransferred and WaitUntilTransferring.
Action
580 / 1277
Simio Reference Guide
581 / 1277
Simio Reference Guide
Travel
Travel
The Travel step may be used to do a direct (straight-line) movement of an entity in free space to a specified location. The
executing token may be held at the Travel step until the travel movement is completed ( Token Wait Option set to
'WaitUntilTravelCompleted') or it may continue through its steps ( Token Wait Option set to 'None ( Continue)') while the
travel occurs.
The default Steering Behavior is 'Direct to Destination' where the travel destination can be specified as a specific fixed
(non-moveable) object, as absolute coordinates, or as relative coordinates from the entity's current location. Additionally, a
desired maximum movement rate and ending movement rate for the travel may be specified.
A Steering Behavior of 'Follow Network Path' requires a starting and ending node. The entity will then follow the shortest
path between them in free space, attempting to stay within the boundries of the links, defined by each link's Width (or 1
meter if no Width is defined). The Path Width can also be varied so that the entity can directly specify a radius that will
override the link's width.
The free space travel movement will be automatically cancelled if another Travel step is executed, the entity is transferred
out of free space, or if any of the entity's movement parameters are changed by unrelated model logic (e.g., an Assign step
is used to deviate the entity's movement direction or rate from the active travel operation's assigned parameters).
The Suspend and Resume steps may be used to suspend and resume the free-space travel movement.
Entity objects (such as ModelEntity, Worker, and Vehicle) have an OnEnteredFreeSpace standard process that is executed if
the entity transfers from a non-free space location into free space.
For an example of using the Transfer step, please refer to the SimBit FreeSpaceMovement.
Listed below are the properties of Travel:
Property Description
Steering The behavior determining how the specified entities travel. Options include None, Direct to
Behavior Destination, and Follow Network Path.
Destination The method used to specify the destination that the entity is to travel to. The entity will do a
Type direct (straight-line) movement in free space to the specified location.
Destination The specified object to travel to (when the Destination Type is 'SpecificObject').
Object
X Location The x coordinate location to travel to (when the Destination Type is 'AbsoluteCoordinates').
Y Location The y coordinate location to travel to (when the Destination Type is 'AbsoluteCoordinates').
Z Location The z coordinate location to travel to (when the Destination Type is 'AbsoluteCoordinates').
X Offset The distance to travel in the x direction from the entity's current location (when the Destination
Type is 'RelativeCoordinates').
Y Offset The distance to travel in the y direction from the entity's current location (when the Destination
Type is 'RelativeCoordinates').
Z Offset The distance to travel in the z direction from the entity's current location (when the Destination
Type is 'RelativeCoordinates').
Maximum The desired maximum movement rate at which the entity is to travel.
Movement
Rate
582 / 1277
Ending The desired movement rate of the entity at the end of the travel.
Movement
Rate
Acceleration The rate at which the entity will gain speed going from a slower movement rate to a faster
movement rate.
Deceleration The rate at which the entity will lose speed going from a faster movement rate to a slower
movement rate.
Auto Orient Indicates whether to automatically orient the entity such that its front is facing the travel
Towards destination. If this property is specified as False, then the entity will stay in its current orientation
Destination when initializing the travel movement.
Starting The starting node of the path when using Follow Network Path type of Steering Behavior.
Node
Ending The ending node of the path when using Follow Network Path type of Steering Behavior.
Node
Path Width The value to use as the width of the path for Follow Network Path type of Steering Behavior.
Update The value that determines how often the entity will check if it is following the path and update
Time its direction to do so.
Interval
Entity Type The entity object that is to perform the travel operation. May be specified as either the object
associated with the executing token, the parent object, or as a specific object reference.
Entity The specific entity object that is to perform the travel operation.
Object
Token Wait The wait action to be taken by the token arriving at the Travel step. If 'None', then the token will
Option immediately exit the step after initiating the travel operation.
583 / 1277
Simio Reference Guide
UnBatch
UnBatch
The UnBatch step may be used to remove batch members from a parent entity object. A new token associated with an
unbatched member will exit the 'Member' exit point of the step. The Token Wait Action will determine the order in which
the tokens exit the Unbatch step. By default, the property value is 'NewTokensExitFirst' and a token for each member will
first exit from the 'Member' exit and proceed until a delay type step occurs for the token or its associated entity. Then the
original token will exit the 'Parent' exit.
The Match Condition property may be used to unbatch only certain entities from the batch based on a condition specified.
For example, a Match Condition may be specified as 'Candidate.ModelEntity.Is.RedPart' where RedPart is the name of the
entity. When unbatched from the parent, only those entities of type RedPart will be unbatched and any other members of
the batch ( BluePart, GreenPart, etc.) will remain with the batch. The Removal Order can be used to determine the order of
searching for the Desired Split Quantity number of members to unbatch.
When a member entity is unbatched from a parent entity, it is placed into free-space at the same XYZ location of the
parent entity. Currently, Simio only supports UnBatch into free space, not directly into a node. Free-space has no possible
content capacity constraints so the members are unbatched there. Then, a Transfer step should be used to transfer the
member entity into the station or node desired. If the Transfer step is not used, then by default, when an entity enters free
space, it simply starts traveling at its desired in whatever current direction it happens to be pointing in. However, the
ModelEntity’s OnEnteredFreeSpace logic assigns the movement rate of the entity to ‘0.0’ if the entity can’t determine a free
space travel movement to some particular node.
The UnBatch step is used internally within the Separate object in the Standard Library for unbatching. The member entity
token enters a Transfer step after the UnBatch step to move the entity into the member output buffer station.
For an example of the Unbatch step, see the CustomUnbatching or UsingAStorageQueue SimBit.
Listed below are the properties of UnBatch:
Property Description
Desired The desired number of batch members to remove (unbatch) from the parent entity.
Quantity
Removal The order in which to search for and remove batch members from the parent entity.
Order
Match Optional match condition used to filter the batch member entities. Only members that match the
Condition criteria given by the expression will be removed from the batch.
In the condition, use the keyword 'Candidate' to explicitly reference a candidate entity in the
batch members being searched (e.g., Candidate.Entity.Priority > 0).
Parent The parent entity object that is carrying the batch members. May be specified as either the object
Entity Type associated with the executing token, the parent object, or as a specific object reference.
Parent The specific parent entity object that is carrying the batch members.
Entity
Object
On Entered Indicates whether or not to execute the built-in OnEnteredFreeSpace process for each unbatched
Free Space member entity after it is removed from the parent entity's batch members queue.
Process
Token Wait The wait action to be taken by the token arriving to the UnBatch step.
Action If the action is 'NoWait', then the execution of all new tokens associated with unbatched members
will be scheduled on the simulation’s current event calendar as an early priority event. The original
token will then immediately exit the step.
If the action is 'NewTokensExitFirst', then all new tokens associated with unbatched members will
exit the step first before the original token exits.
584 / 1277
If the action is 'WaitUntilNewTokenProcessingCompleted', then the original token will wait until
the processing of all new tokens associated with unbatched members has been completed before
exiting the step.
585 / 1277
Simio Reference Guide
UnPark
UnPark
The UnPark step may be used to transfer an entity object out of a node's parking station and into the node.
The Token Wait Action property indicates whether the token is going to wait in the step until the transferring entity
‘Transferring’ or ‘Transferred’ event is fired.
Listed below are the properties of UnPark:
Property Description
Entity Type The entity object to be unparked. Specified as either the object associated with the executing
token, the parent object or as a specific object reference.
Entity Visible if Entity Type is 'Specific Object'. The specific entity object to be unparked.
Object
Token Wait The wait action to be taken by the token arriving to the UnPark step. Options include
Action WaitUntilTransferred and WaitUntilTransferring.
586 / 1277
Simio Reference Guide
UnReserve
The UnReserve step may be used to cancel any reservations for resources or materials made by a specified owner. Use the
Reserve step to create a new resource or material reservation.
The Lot ID property may be specified as a string literal enclosed in double quotes (e.g., “Lot1”), the name of a string state
variable or string column in a table, or any other expression that returns a string value.
If Consumption Type is unreserving a single 'Material' that is location-based inventory, then Simio will look up the Inventory
element holding the specified material at the specified inventory site. If Consumption Type is unreserving a 'Bill of
Materials', then Simio will look up the Inventory elements holding the component materials at the specified inventory site.
If the Inventory Site Type property value is ‘None’ but a site object reference is required because the material is location-
based inventory, or if an inventory reference for a material-site object pair cannot be found, then a runtime error will occur.
If the name of the resource to unreserve is a member of a population (i.e., worker or vehicle), the Resource Name can be
specified as either the specific resource within the population, such as 'Truck[1]' or 'Truck[2]' or may alternatively be
specified by simply the resource name, such as 'Truck'. If the population of that resource is greater than 1, keep in mind that
unreserving 'Truck' would always unreserve the first member of the population (numerically) that has been reserved. For
example, let's say an entity has reserved Truck[3] and Truck[1]. Then, if the entity tries to unreserve 'Truck', if Truck[1] still has
an outstanding reservation, it will first be unreserved, otherwise Truck[3] will be unreserved.
The functions Capacity.Reserved and Capacity.ReservedTo(owner) will be updated when a resource is reserved or unreserved.
The capacity reserved of a given resource by various entities can be greater than the actual capacity of the resource.
Allocating the resource to the entity then decreases the Capacity.Reserved and Capacity.ReservedTo(owner) function values.
Keep in mind that the function ReservedTransporter for a given entity object is NOT related to the Reserve step. If the entity
object currently has made a reservation to ride on a transporter (i.e., by indicating Ride On Transporter 'True' in a
TransferNode), then this function returns a reference to that transporter once it is allocated. Otherwise, the Nothing
keyword is returned. This function is set to the reserved transporter until the entity is actually loaded and has moved into
the transporter's RideStation.
See the Reservations page for more details.
Listed below are the properties of UnReserve:
Property Description
587 / 1277
Reservation Type Indicates whether to cancel the reservation(s) for a resource or material.
Resource Name The name of the resource object for which to cancel the reservation(s).
Number Capacity The desired number of capacity units of the resource for which to cancel the reservation(s).
Units Any existing reservations made by the owner object will be cancelled up to this maximum.
(for Reservation Type 'Resource').
Consumption Type Indicates whether the material to unreserve is a single material or bill of materials.
Material Name The material which is to be either specifically unreserved or whose bill of materials is to
be unreserved.
Inventory Site Indicates the fixed object that is the inventory location. Applies only to material elements
Type whose Location Based Inventory property is set to 'True'.
Site Object Name The name of the fixed object that is the inventory location.
Quantity The desired quantity of the material for which to cancel the reservation(s). Any existing
reservations made by the owner object will be cancelled up to this maximum.
Lot ID Optional string value indicating the lot identifier of the unreserved material.
Reservations Indicates whether to cancel the reservation(s) for a resource, a single material or a bill of
( More).Reservation materials.
Type
Reservations The name of the resource object for which to cancel the reservation(s).
( More).Resource
Name
vReservations The material which is to be either specifically unreserved or whose bill of materials is to
( More).Material be unreserved.
Name
Reservations The desired number of capacity units of the resource for which to cancel the reservation(s).
( More).Number Any existing reservations made by the owner object will be cancelled up to this maximum.
Capacity Units (for Reservation Type 'Resource').
Reservations The desired quantity of the material for which to cancel the reservation(s). Any existing
( More).Quantity reservations made by the owner object will be cancelled up to this maximum (for
Reservation Type 'Material' or 'BillOfMaterial').
Reservations Optional string value indicating the lot identifier of the unreserved material.
( More).Lot ID
Owner Type The object that owns the reservation(s) to be cancelled. May be specified as either the
object associated with the executing token, the parent object, or as a specific object
reference.
Owner Object The specific object that owns the reservation(s) to be cancelled.
Unsubscribe
Unsubscribe
The Unsubscribe step may be used to cancel a triggering event for a process. This is used in conjunction with the Subscribe
step. See the Subscribe step for an example of use. Multiple events and processes may be specified within a single
Unsubscribe step by using the Events ( More) repeating properties.
Listed below are the properties of Unsubscribe:
Property Description
Event Name The name of the event from which to unsubscribe.
Process Name The name of the process that will not longer be executed whenever the event
occurs.
Events ( More).Event Name The name of the event from which to unsubscribe.
Events ( More).Process The name of the process that will not longer be executed whenever the event
Name occurs.
589 / 1277
Simio Reference Guide
VisitNode
VisitNode
The VisitNode step may be used within a node object's logic to initiate the OnVisitingNode process of the entity
associated with the executing token. The token waits until the entity's OnVisitingNode process is completed before exiting
the step.
Note
This Step can only be used from within a Node object.
590 / 1277
Simio Reference Guide
Wait
Wait
The Wait step may be used to hold the arriving token in the step until one or more specified events occur.
The Token Wait Action determines whether the arriving token is waiting for all of the specified events to occur
('WaitUntilAllEvents') or just a single event to occur ('WaitUntilAnyEvent').
The tokens are released from the Wait step in order that they arrived to the step (that is, First In First Out). When multiple
tokens are waiting at the Wait step, all tokens are released when the specified event is fired.
The Wait step can be used in conjunction with the Fire step.
For examples of using the Wait step, please refer to the SimBits EntityStopsOnLink,
BatchingProcessUsingScanOrWaitStepToControlBatchSize, VehicleVisitsServiceCenter, and
VehicleFinishesAndParksWhenOffShift.
Listed below are the properties of Wait:
Property Description
Event Name The name of the event to wait for.
Event Condition Optional condition to be evaluated on an occurence of the event, and which must be
true in order for the wait for the event to be considered ended.
Assignments Optional condition to be evaluated on an occurence of the event, and which must be
( More).Event true in order for the wait for the event to be considered ended.
Condition
Token Wait Action The wait action to be taken by the token arriving to the Wait step.
591 / 1277
Simio Reference Guide
StartActivity - DEPRECATED
StartActivity - DEPRECATED
The StartActivity step starts the next activity in a reserved operation.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
StartOperation / StartActivity / EndActivity / EndOperation steps. To view these steps within the All Steps panel in the
Processes window, go to Application Settings and change the Display Deprecated Steps In Processes Window Panels
property to 'True'. This may also require closing and re-opening Simio if the Processes window had already been opened.
Listed below are the properties of StartActivity:
Property Description
Operation The name of the operation to reserve.
592 / 1277
Simio Reference Guide
EndActivity - DEPRECATED
EndActivity - DEPRECATED
The EndActivity step ends the current activity within an operation.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
StartOperation / StartActivity / EndActivity / EndOperation steps. To view these steps within the All Steps panel in the
Processes window, go to Application Settings and change the Display Deprecated Steps In Processes Window Panels
property to 'True'. This may also require closing and re-opening Simio if the Processes window had already been opened.
Listed below are the properties of EndActivity:
Property Description
Operation The name of the operation to reserve.
593 / 1277
Simio Reference Guide
StartOperation - DEPRECATED
StartOperation - DEPRECATED
The StartOperation step starts an operation.
An operation cannot start until capacity is available and a time slot is available. The required time slot is the best case time
based on the parent work schedule - this is extended by the buffer time to account for delays caused by secondary
resources, materials, travel, etc. If capacity is available and the best case time slot is available it seizes the parent resource
and starts the operation. If the actual operation time exceeds the available time slot the future operation is slipped to
accommodate this operation.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
StartOperation / StartActivity / EndActivity / EndOperation steps. To view these steps within the All Steps panel in the
Processes window, go to Application Settings and change the Display Deprecated Steps In Processes Window Panels
property to 'True'. This may also require closing and re-opening Simio if the Processes window had already been opened.
Listed below are the properties of StartOperation:
Property Description
Operation The name of the operation to start.
594 / 1277
Simio Reference Guide
EndOperation - DEPRECATED
EndOperation
The EndOperation step ends the operation.
This step releases the parent resource and shifts any conflicting operation spans into the future.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
StartOperation / StartActivity / EndActivity / EndOperation steps. To view these steps within the All Steps panel in the
Processes window, go to Application Settings and change the Display Deprecated Steps In Processes Window Panels
property to 'True'. This may also require closing and re-opening Simio if the Processes window had already been opened.
Listed below are the properties of EndOperation:
Property Description
Operation The name of the operation to reserve.
595 / 1277
Simio Reference Guide
Definitions Window
596 / 1277
Note
The collapsable feature of the inherited properties, states, and events is only available with the Microsoft Vista
O/S or higher. Earlier versions of the O/S will not see the inherited properties, states and events collapsed.
597 / 1277
Simio Reference Guide
Elements
Elements represent things in a process that change state over time. Elements are added to a list and then referenced by
one or more process steps in the Processes window. The elements within Simio include the following:
BatchLogic element may be used in conjunction with the Batch step to match multiple entities together, form those entities
into a batch, and then attach the batched members to a parent entity.
ChangeoverLogic element may be used in conjunction with the Changeover step to model sequence dependent setups at
one or more associated resources.
ConstraintLogic element may be used to enforce material availability, resource availability or other types of constraint
conditions on an applicable process step (e.g., a Seize or Route step).
Container element may be used to define a volume or weight capacity constrained location for holding entities
representing quantities of fluids or other mass. Use the Tranfer step to initiate tranfers of entities into or out of a container.
CostCenter element may be used to define an identifiable area of responsibility where costs are allocated or incurred. Cost
centers may be linked in a hierarchical structure for cost accounting and reporting purposes, whereby costs are
automatically rolled up through the cost center hierarchy.
Failure element may be used to define a failure mode. Failure downtime occurrences are started and ended using the Fail
and Repair steps.
Inventory element may be used to define a storage bucket for holding stock of a specific material. A Site Object Name
property is provided to designate a fixed object in the Facility window as the inventory's physical location.
Material can be consumed and produced by tokens.
Monitor element may be used to monitor a state variable and fire an event whenever there is a discrete change or
threshold crossing of the state value.
Network is a list of links to which an entity may be assigned to follow via the shortest path to its destination.
OutputStatistic element defines an expression that can be optionally recorded at the end of each replication of a
simulation.
Regulator element may be used to regulate flow rates into or out of a location. Use the Assign step to change regulator
maximum flow rates as well as perform more complex regulator flow actions involving wait conditions.
RoutingGroup element is used with a Route step to route an entity object to a destination selected from a list of candidate
nodes.
StateStatistic element may be used to record time-persistent statistics on a state variable.
Station element may be used to define a capacity constrained location within an object where one or more visiting entity
objects can reside. The Transfer step is used to transfer entities into and out of a station.
Storage element may be used to define a custom queue state for temporarily holding one or more objects. The Insert and
Remove steps are used to insert and remove objects from the storage element's queue.
TallyStatistic element tallies observational statistics that are recorded using the Tally step.
TaskSequence element may be used to more easilyl define and execute structured sequences of processing tasks. The
StartTasks step is used to start a task sequence that is associated with an object in the system.
Timer element fires a stream of events according to a specified IntervalType.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for all Elements. Please refer to the User Interface for
more details.
Please refer to the Table-Based Elements ( Auto-Create) page for more information about automatically creating elements
from a data table.
NOTE: There are two elements that were removed from the main Elements panel as of August 2016 ( Sprint 143), as noted
below. These elements can still be found by using the pressing the small arrow on the bottom right of the Workflow section
of the Elements ribbon.
598 / 1277
Operation is a sequence of activities that are performed by an object over time.
Activity is performed by an operation that is owned by an object.
599 / 1277
Simio Reference Guide
Elements Reference
This Elements Reference section has detailed information for all elements in Simio.
600 / 1277
Simio Reference Guide
BatchLogic
BatchLogic
The BatchLogic element may be used in conjunction with the Batch step to group multiple entities together, and then
attach the batched members to a parent entity.
There is a Must Simultaneously Batch Boolean property provided by the BatchLogic element to indicate whether the full
target number(s) of member entities must be available before any can be collected and attached to a parent entity. If this
property is 'False', then batch members will be collected from the BatchLogic’s MemberQueue as soon as they become
available. The parent entity eventually gets released once the target batch quantity or quantities are reached. If this
property is 'True', then no batch members can be collected by a parent entity until its full target batch quantity or quantities
are available. In that case, the collection of all batch members and release of the parent entity is always going to happen as
a single event (at a single point in time). Note that one possible result if forcing simultaneous batching is parent entities
may jump over other parent entities in the parent queue if requirements differ between parents.
The Batch Quantity and Matching Rule properties can be parent entity dependent (presumably coming from data table).
For example, there can be one parent entity that needs to collect '10' Batch Quantity using Matching Rule ‘Any Entity’, while
another parent entity at the same BatchLogic element needs to collect some batch quantities using Matching Rule ‘Match
Members And Parent’ and so forth. Note that the Must Simultaneously Batch option can also be parent-entity dependent
data.
The Release Batch Early Triggers defined for a parent entity can be either time based (trigger fires when specified wait
duration expires) or event based (trigger fires when a specified event occurs). By default, the release decision when a
trigger has fired is 'Always', but may alternatively be 'Conditional' or 'Probabilistic'. A parent entity that is being released
early attempts to collect as many batch members as possible up to its target batch quantity(ies) - possibly no batch
members are collected. The parent entity’s associated queue item is then removed from the BatchLogic element’s parent
queue and its associated process token exits the Batch step. * Note that the data for a BatchLogic element or Combiner’s
Release Batch Early Triggers repeat group may be defined in a data table, with the trigger definitions thus potentially
differing between parent entities.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For examples of using the BatchLogic element, please refer to the SimBits UsingAStorageQueue and CombinerNode or
any of the SimBits under the Combining and Separating topic, as many of those use the Combiner, which includes a
BatchLogic element.
Listed below are the properties of BatchLogic:
Property Description
Report Specifies if statistics are to be automatically reported for this element.
Statistics
Batch Quantity The target number of member entities to collect and attach to a parent entity. May be
specified as an expression truncated to an integer.
Matching Rule The matching rule used to group member and parent entities together. If the matching rule is
'AnyEntity', then any entity can be grouped with any other entity. If the matching rule is
'MatchMembers', then member entities must be grouped together using a specified match
expression. If the matching rule is 'MatchMembersAndParent', then the parent entity must also
match the member entities to attach a group to the parent.
Parent Match The expression whose value for a parent entity must be the same as the match expression for
Expression the member entities to attach those members to the parent.
Member The expression whose value must be the same between member entities to group then
Match together.
Expression
Batch Quantity The target number of member entities to collect and attach to a parent entity. May be
( Batch specified as an expression truncated to an integer.
Quantities)
Matching Rule The matching rule used to group member and parent entities together. If the matching rule is
( Batch 'AnyEntity', then any entity can be grouped with any other entity. If the matching rule is
Quantities) 'MatchMembers', then member entities must be grouped together using a specified match
expression. If the matching rule is 'MatchMembersAndParent', then the parent entity must also
match the member entities to attach a group to the parent.
Parent Match The expression whose value for a parent entity must be the same as the match expression for
Expression the member entities to attach those members to the parent.
( Batch
Quantities)
Member The expression whose value must be the same between member entities to group then
Match together.
Expression
( Batch
Quantities)
Parent Ranking The rule used to rank the queue of parent entities waiting to collect batch members.
Rule
Parent Ranking The expression used with a SmallestValueFirst or LargestValueFirst parent ranking rule.
Expression
Member The rule used to rank the queue of member entities waiting to be batched.
Ranking Rule
Member The expression used with a SmallestValueFirst or LargestValueFirst member ranking rule.
Ranking
Expression
Must Indicates whether the full target number(s) of member entities must be available before any
Simultaneously can be collected and attached to a parent entity. If this property is set to False, then batch
Batch members will be collected as soon as they arrive to the BatchLogic member's queue.
Release Batch Optional time or event-driven triggers that can cause a batch to be released early before
Early Triggers collecting the full target number(s) of member entities.
Trigger Type The type of trigger. A time based trigger can release a batch early once a wait duration
( Release Batch expires. An event based trigger can release a batch early whenever a specified event occurs.
Early Triggers)
Wait Duration The wait duration until deciding whether to release a batch early.
( Release Batch
Early Triggers)
Triggering The name of the event whose occurence will trigger a decision whether to release a batch
Event Name early.
( Release Batch
Early Triggers)
Release Optional time or event-driven triggers that can cause a batch to be released early before
Decision Type collecting the full target number(s) of member entities.
( Release Batch
Early Triggers) 602 / 1277
Early Triggers)
Release The release condition or probability specified as an expression. If a probability, then enter the
Condition or chance of releasing the batch early as a value between 0.0 (0%) and 1.0 (100%).
Probability
( Release Batch
Early Triggers)
603 / 1277
Simio Reference Guide
ChangeoverLogic
ChangeoverLogic
The ChangeoverLogic element may be used in conjunction with the Changeover step and Changeover matrices to model
sequence dependent setups for a single resource or group of resources.
Sequence dependent setup time data is defined in changeover matrices and/or data tables. That setup time data is then
referenced by a ChangeoverLogic element which is being used by either a single server or a group of servers. If there are
multiple servers using the same changeover logic, then those individual servers may have different setup efficiency
multipliers where each setup is possibly performed slower or faster at a particular server than the average time.
During the model run, entities representing jobs might be selected for processing at the servers using the ‘LeastSetupTime’
dispatching rule. The ChangeoverLogic element takes care of caching the attribute values of the previous operation at each
server in order to determine and return the next sequence dependent setup time.
The Operation Attribute may return a numeric, string, or element reference expression result. It is evaluated in the context of
the resource or operation entity. However:
If the From Value Type or To Value Type properties are specified as ‘Range’, then the Operation Attribute expression
must return a numeric value.
If a changeover matrix is being used, then the Operation Attribute expression must return a non-negative (zero-
based) integer index into the specified changeover matrix's enumerated list of possible from/to setup statuses.
The total number of changeovers and total changeover time incurred at resources due to using a particular
ChangeoverLogic element will be automatically included in the results.
Per the Overall Equipment Effectiveness ( OEE ) definition, the resource utilization calculation setting of the ‘Setup’ and
‘OffShiftSetup’ resource states are included in allocated capacity statistics but not considered in utilized capacity statistics.
If usage cost rates are specified for an object that incurs setup, the usage cost rates are not incurred during setup times.
604 / 1277
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For examples of using the ChangeoverLogic element, please refer to the SimBits
ServersUsingTaskSequenceWithSequenceDependentSetups and
ServersUsingTaskSequenceWithDataTables_SequenceDependentSetups.
Listed below are the properties of ChangeoverLogic:
Property Description
Setup Transitions Repeat group for the possible setup transitions at resources using the changeover
logic that will incur a setup time.
Setup The attribute that will be compared between the previous and next operation to
Transitions.Operation decide the setup time. Specified as an expression evaluated in the context of the
Attribute resource or operation entity.
Note: If using a changeover matrix to determine the setup timess, then the values
returned by this property must be integer indexes (zero-based) into the specified
changeover matrix's enumerated list of possible from/to setup statuses.
For example, if the attribute value was '2' for the previous entity and now is ‘4’ for the
next entity, then the setup time is the duration entered in the 3rd row, 5th column of
the specified changeover matrix.
Typically, when the changeover matrix is used, the operation attribute expression will
be the name of a list property that is defined either on the operation entity itself or in
table data referenced by the entity, and which is based on the same enumerated string
list that the changeover matrix is using. For further guidance, please refer to Simio's
examples or SimBits that demonstrate changeover matrix usage.
Setup Transitions.Use Indicates whether setup times based on changes in the operation attribute are defined
Changeover Matrix using a changeover matrix.
Setup The name of the changeover matrix that defines the sequence dependent setup times.
Transitions.Changeover
Matrix Name
Setup Transitions.From The method used to indicate the attribute value of the previous operation.
Value Type
Setup The start of the range containing the attribute value of the previous operation.
Transitions.Range Start
Setup The end of the range containing the attribute value of the previous operation.
Transitions.Range End
Setup Transitions.To The method used to indicate the attribute value of the next operation.
Value Type
Setup The start of the range containing the attribute value of the next operation.
Transitions.Range Start
Setup The end of the range containing the attribute value of the next operation.
Transitions.Range End
Setup Efficiency Increases or decreases the total time taken for a setup by some factor. May be
Multiplier specified as an expression evaluated in the context of the associated resource, useful if
605 / 1277
multiple resources are using the same changeover logic but have different efficiencies.
Assume Concurrent Optional condition that is evaluated at the beginning of each changeover. If the
Setups If condition is true, then the total time taken for an operation's setup will be the time of
the longest setup incurred by the specified setup transitions; otherwise, all of the
individual setup times will be added together. May be specified as an expression
evaluated in the context of the associated resource, useful if a resource can
conditionally perform multiple setups for the next operation concurrently.
TotalChangeoverTime Returns the total changeover time (in hours) incurred at resources due to using
the changeover logic.
TotalNumberChangeovers Returns the total number of changeovers that have occurred at resources due
to using the changeover logic.
NOTE: The ExpectedSetupTime function may be used in the Expected Setup Time Expression property of a Server,
Combiner, or Separator to support the use of the ‘LeastSetupTime’ standard dispatching rule ( Dynamic Selection Rule).
606 / 1277
Simio Reference Guide
Example 2
The changeover logic has a setup time based on changes in the Operation Attribute ‘ModelEntity.EntityType’. A setup time
of 12 minutes is incurred if the entity type of the previous operation was ‘Nail’ and the entity type of the next operation is
‘Bolt’.
Example 3
The changeover logic has a setup time based on changes in the Operation Attribute ‘ModelEntity.EntityType’. A setup time
of 10 minutes is incurred if the operation is the first operation at the resource (no previous operation value) and the entity
type is ‘Bolt’.
607 / 1277
Example 4
The changeover logic has a setup time based on changes in the Operation Attribute ‘ModelEntity.Color’. A setup time of 12
minutes is incurred if the color of the next operation is the same as the color of the previous operation.
Example 5
The changeover logic has a setup time based on changes in the Operation Attribute ‘ModelEntity.Color’. A setup time of 12
minutes is incurred if the color of the next operation is different than the color of the previous operation.
608 / 1277
Example 6
The changeover logic has a setup time based on changes in the Operation Attribute ‘ModelEntity.OpSetupCode’. A setup
time of 0.5 hours is always incurred if the setup code of the next operation is ‘1’, regardless of the setup code of the
previous operation.
Example 7
The changeover logic has a setup time based on changes in the Operation Attribute ‘RecipeData.MixingSpeed’. A setup
time of 8 minutes is incurred if the mixing speed of the previous operation was in the range 25 to 45 and the mixing speed
of the next operation is in the range 0 to 25.
609 / 1277
Example 8
The changeover logic has a setup time based on changes in the Operation Attribute ‘RecipeData.MixingSpeed’. A setup
time of 15 minutes is incurred if the mixing speed of the previous operation was in the range 0 to 100 and the mixing speed
of the next operation is not in that range.
Example 9
The setup transitions for the changeover logic are defined in a data table.
610 / 1277
611 / 1277
Simio Reference Guide
ConstraintLogic
ConstraintLogic
The Constraint Logic element may be used to enforce material availability, resource availability, or other types of constraint
conditions on an applicable process step (e.g., a Seize or Route step). Whereby for example, as shown in Figure 1, a
resource cannot be seized or a destination node assigned unless that requested item is available plus the additional
constraint logic satisfied. As of Sprint 203, the Constraint element is only available for Constraint Type of
'MaterialAvailability'.
If the Constraint Type is 'MaterialAvailability', then the quantity of the material that is required will be automatically
reserved when a resource is successfully seized ( Seize step) or when the entity is successfully assigned a destination node
( Route step). This is done to ensure that other seize or route requests waiting for the same material do not violate any
material availability constraints. See the Reserve and Unreserve steps for more information.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For examples of using the ConstraintLogic element, please refer to the all of the Scheduling related examples within our
Support ribbon.
Listed below are the properties of ConstraintLogic:
Property Description
Constraints Repeat group for the constraints enforced when referencing the Constraint Logic
element.
Constraints.Consumption Indicates whether the required material is a single material or a bill of materials.
Type
Constraints.Material The name of the material which is either specifically required or whose bill of
Name materials is required.
Constraints.Inventory Indicates the fixed object that is the inventory location. Applies only to material
Site Type elements whose Location Based Inventory property is set to 'True'.
612 / 1277
Constraints.Site Object The name of the fixed object that is the inventory location.
Name
Constraints.Lot ID Optional string value indicating the lot identifier of the required material.
Constraints.Requested Optional condition evaluated for a requested item that must be true for the
Item Condition constraint to be applicable.
If route constraint logic, then the requested item will be a destination node. In the
expression, use the syntax Candidate.[ NodeClass].[ Attribute] to reference an
attribute of the candidate destination.
If seize constraint logic, then the requested item will be a resource object. In the
expression, use the syntax Candidate.[ ResourceClass].[ Attribute] to reference an
attribute of the candidate resource.
Constraints.Skip Optional condition indicating whether to skip the constraint entirely regardless of
Constraint ( If) Condition the requested item.
613 / 1277
Simio Reference Guide
Container
Container
The Container element may be used to define a volume or weight capacity constrained location for holding entities
representing quantities of fluids or other mass. Use the Transfer step to initiate tranfers of entities into or out of a container.
The states listed below for the flow into and out of Containers are read-only. These may be monitored to detect when a
target volume or weight quantity has been transferred (e.g., new monitor threshold =
ContainerName.CurrentVolumeFlowIn + SomeVolumeQuantity). The rate values of the state variables might be monitored
to detect flow rate changes (e.g., you could monitor ContainerX.CurrentVolumeFlowIn.Rate for changes).
Statistics are generated automatically for the flow in and flow out of a container based on the flow states listed below.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For examples of using the Container element, please refer to the Flow Library objects including FlowSource, FlowSink, and
Tank.
Listed below are the properties of Container:
Property Description
Initial Volume The initial maximum contents volume for this container.
Capacity
Initial Weight The initial maximum contents weight for this container.
Capacity
Contents The static rule used to rank the entities representing quantities of fluids or other mass that are
Ranking Rule located in this container's 'Contents' queue.
On Full Process Optional process that is executed when the container has become full per its current
maximum volume or weight capacities.
On Empty Optional process that is executed when the container has become empty.
Process
CurrentWeightCapacity State to get or set the current weight capacity of this container.
CurrentVolumeFlowIn State to get the current total volume flowed into this container. The 'rate' from this
state is also available.
CurrentVolumeFlowOut State to get the current total volume flowed out of this container. The 'rate' from this
state is also available.
CurrentWeightFlowIn State to get the current total weight flowed into this container. The 'rate' from this
state is also available.
614 / 1277
CurrentWeightFlowOut State to get the current total weight flowed out of this container. The 'rate' from this
state is also available.
TimeUntilNextFullEvent If inflow is filling the container, returns the time duration remaining (in hours) until
the container will become full. If the container is not being filled then NaN is
returned.
615 / 1277
Simio Reference Guide
CostCenter
CostCenter
The CostCenter may be used to define an identifiable area of responsibility where costs are allocated or incurred. Cost
centers may be linked in a hierarchical structure for cost accounting and reporting purposes, whereby costs are
automatically rolled up through the cost center hierarchy.
Costs can be manually assigned to a Cost Center element by using an Assign Step. The Cost is updated by assigning a
value to CostCenter.Cost and the Rate is updated by assigning a value to CostCenter.Cost.Rate
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of CostCenter:
Property Description
Parent The name of a cost center to roll up this element's cost center into. If a Parent Cost Center is not
Cost explicitly specified, then costs will be automatically rolled up into the parent object containing this
Center cost center.
Initial The initial value of this element's Cost state, which stores the total cost that has been allocated to
Cost the cost center.
Initial The initial value of this element's Cost.Rate parameter, which indicates a cost per unit time that is to
Cost be accrued to the cost center.
Rate
616 / 1277
Simio Reference Guide
Failure
Failure
The Failure element may be used to define a failure mode. Failure downtime occurrences are started and ended using the
Fail and Repair steps.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the Properties of Failure:
Property Description
Report Statistics Specifies if statistics are to be automatically reported for this element.
On Failed Process Optional process that is executed when a failure downtime occurrence begins.
On Repaired Process Optional process that is executed when a failure downtime occurrence ends.
AverageDownTime Returns the average amount of time that this Failure was active (object in failed state)
MaximumDownTime Returns the maximum amount of time that this Failure was active (object in failed state)
MinimumDownTime Returns the minimum amount of time that this Failure was active (object in failed state)
NumberOccurences Returns the number of times that this Failure has become active (object in failed state)
617 / 1277
Simio Reference Guide
Inventory
Inventory
The Inventory element may be used to define a storage bucket for holding stock of a specified material A Site Object
Name property is provided to designate a fixed object in the Facility window as the inventory's physical location. This
element makes it easier for users to model material stock that is stored at multiple physical locations in the system, with
each inventory having its own stock level and allocation queue.
Inventory Overview
The specified Material Name must be a Material element whose Location Based Inventory property is set to 'True'.
Additionally, the Material Name - Site Object Name pair of each Inventory element must be unique. In both the prior cases,
an error will be displayed at run initialization.
New material consumption requests are always inserted into the inventory’s allocation queue and a late priority current
event then scheduled to try allocation.
If an inventory’s Review Period is specified as ‘Timer’, then the Review Timer Name will typically be a fixed-interval or
repeating schedule (arrival table) timer to trigger periodic inventory reviews.
When an inventory review is triggered, a late priority event will be scheduled on the simulation’s current events calendar to
check the inventory’s replenishment policy.
A Replenishment Policy property type specifies a reference to an inventory replenishment policy. Several replenishment
policy examples are installed with Simio: ‘Min/Max’ policy, ‘Reorder Point/Reorder Qty’ policy, ‘Order-Up-To’ policy, and a
‘Custom Reorder Condition’ policy. Refer to the Inventory Replenishment Policies installed with Simio for more information.
A process token created to execute an inventory’s On Replenishment Order Process will have the following characteristics:
Its associated object reference will be set to the inventory’s site object.
It will be initialized with the same table row references as the Inventory element.
Its material order detail reference will provide the detail of the replenishment request.
Whenever an inventory’s On Replenishment Order Process is initiated by Simio, the inventory’s quantity on order will be
automatically incremented by the calculated replenishment order size. If further adjustments are necessary, the inventory’s
QuantityOnOrder state variable may be assigned using an Assign step.
The Allow Partial Allocation If property may be specified as a conditional expression that is evaluated in the context of the
entity requesting the material. If the specified expression contains a data table reference, then that table value may be a
618 / 1277
entity requesting the material. If the specified expression contains a data table reference, then that table value may be a
row reference that has been set for either the Inventory element, the process token that is executing the Consume step, or
the entity (in that search priority order).
Refer to the Inventory and Material Backorders and Measuring Service Level sections in help for additional details.
See the InventoryAndMaterials SimBit and MultiEchelonSupplyChain example for examples of the Inventory and Material
elements.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of Inventory:
Property Description
Material The name of the material held in the inventory.
Name
Site Object The name of the fixed object that is the inventory's physical location.
Name
Initial The quantity of material present in the inventory at the beginning of the simulation run.
Quantity
Review Period The frequency of inventory review to determine whether a replenishment order is required.
If the review period is ‘Continuous’, then an inventory review is triggered once at the start of
the simulation and then whenever the inventory’s position decreases.
If the review period is ‘Timer’, then an inventory review is triggered whenever the specified
timer fires its event.
Review Timer The name of the timer used to trigger the inventory reviews.
Name
Replenishment The replenishment policy checked at the time of an inventory review to determine whether a
Policy replenishment order is required and, if so, the recommended order size.
Reorder The condition that, if true, signals the need to place a replenishment order.
Condition
Reorder Point The minimum threshold for the inventory position that signals the need to place a
replenishment order.
Order-Up-To- The target level to return the inventory position to if at or below the reorder point.
Level
On The name of the process that will be executed to handle an inventory replenishment order.
Replenishment Note that whenever this process is triggered by the replenishment policy, the inventory's
Order Process quantity on order will have been automatically increased by the recommended order size.
NOTE: The created token's material order detail reference will provide the detail of the
replenishment request. For example, the function Token.MaterialOrderDetail.Quantity may be
used to get the recommended order size.
Allocation The ranking rule used to allocate material from the inventory to competing material
Ranking Rule consumption requests.
Assume Optional condition that is evaluated whenever an entity is attempting to consume material
Infinite from the inventory. If the condition is true, then the entity will be allowed to immediately
Availability If consume its full required quantity of the material regardless of the actual quantity in stock. 619 / 1277
Availability If consume its full required quantity of the material regardless of the actual quantity in stock.
Note that this may result in negative inventory levels.
If specified, this condition overrides the Assume Infinite Availability Condition on the
associated Material element.
Allow Partial Optional condition that is evaluated whenever an entity is attempting to consume material
Allocation If from the inventory. If the condition is true, then the entity will be allowed to immediately
consume only a portion of its requested quantity if the full quantity is not available.
If specified, this condition overrides the Allow Partial Allocation If condition on the associated
Material element.
Allow Indicates whether an entity attempting to consume material from the inventory can be
Backorder backordered if its full requested quantity is not immediately satisfied from inventory on hand.
Policy If the backordering of an entity is rejected, then its outstanding requested quantity will be
automatically cancelled and the balked demand observation recorded in the statistics.
Balk The balk at backorder condition or probability specified as an expression. If a probability then
Condition or enter the chance of balking as a value between 0.0 (0%) and 1.0 (100%).
Probability
On Balked At The name of the process that will be executed to handle an entity that has balked at being
Backorder backordered.
Process NOTE: The created token’s material order detail reference will provide the detail of the balked
material consumption request. For example, the function Token.MaterialOrderDetail.Quantity
may be used to get the demand quantity cancelled due to the balked request.
Backorder An optional limit on the total time that a backordered entity will wait for its full requested
Max Wait quantity of material from the inventory.
Time If the max wait time for a backordered entity is reached, then its outstanding requested
quantity will be automatically cancelled and the reneged demand observation recorded in the
statistics.
On Reneged The name of the process that will be executed to handle an entity whose backorder has been
Backorder cancelled.
Process NOTE: The created token’s material order detail reference will provide the detail of the
reneged material consumption request. For example, the function
Token.MaterialOrderDetail.Quantity may be used to get the demand quantity cancelled due to
the reneged request.
QuantityOnOrder The current quantity of material that has been ordered to replenish the inventory but has
not yet been received. This state variable may be assigned using an Assign step.
AverageQuantityInStock Returns the average quantity of material present in the inventory during the
simulation run.
620 / 1277
MinimumQuantityInStock Returns the minimum quantity of material present in the inventory during the
simulation run.
MaximumQuantityInStock Returns the maximum quantity of material present in the inventory during the
simulation run.
QuantityConsumed Returns the total quantity of material removed from the inventory during the
simulation run.
QuantityProduced Returns the total quantity of material added to the inventory during the
simulation run.
QuantityReserved Returns the current quantity of material from the inventory that is reserved.
QuantityReservedTo (owner) Returns the current quantity of material from the inventory that is reserved for
use by a specified owner object.
QuantityBackordered Returns the current quantity of material required to satisfy all material
consumption requests waiting in the inventory's allocation queue.
AverageQuantityBackordered Returns the average quantity backordered during the simulation run.
MinimumQuantityBackordered Returns the minimum quantity backordered during the simulation run.
MaximumQuantityBackordered Returns the maximum quantity backordered during the simulation run.
Demand.NumberOrders Returns the total number of material consumption requests (i.e., orders)
received during the simulation run.
Demand.QuantityDemanded Returns the total quantity that was demanded to satisfy the material
consumption requests received during the simulation run.
Demand.NumberBalked Returns the total number of material consumption requests that balked at
being backordered in theh inventory's allocation queue.
Demand.QuantityBalked Returns the total demand quantity cancelled due to balked material
consumption requests.
Demand.NumberReneged Returns the total number of material consumption requests that abandoned
waiting as a backorder in the inventory's allocation queue.
Demand.QuantityReneged Returns the total demand quantity cancelled due to reneged material
consumption requests.
Demand.OrderFillRate Returns the percentage of material consumption requests (i.e., orders) whose
full quantity demanded was immediately satisfied from inventory on hand
(no balking or backordering).
Demand.QuantityFillRate Returns the percentage of the total quantity demanded that was immediately
satisfied from inventory on hand (no balking or backordering).
Stockout.TotalTime Returns the total time that no material was present in the inventory.
Stockout.PercentTime Returns the percent time that no material was present in the inventory.
621 / 1277
Stockout.NumberOccurrences Returns the number of occurrences where no material was present in the
inventory.
Stockout.AverageTime Returns the average time of the occurrences where no material was present in
the inventory.
UsageCostCharged Returns the total cost that has been charged to consumers of material from
that inventory.
622 / 1277
Simio Reference Guide
Inventory Replenishment
Inventory Replenishment Framework and Overview
The graphic below which illustrates the framework that is available in Simio to model inventory replenishment. See the
MultiEchelonSupplyChain example under Support ribbon / Examples as well.
Inventory is material stored, waiting for processing, or experiencing processing. In a typical supply-and-demand system,
customers (or demand transactions) request quantities of material. The material consumption requests are filled from
inventory on hand. If insufficient inventory is available, then unsatisfied requests are backordered. In some cases, a material
shortage may be only a small inconvenience, while for other cases it may cause a severe problem such as cancelled sales
orders or interruptions at a production line.
The primary function of inventory is to prevent or limit material shortages caused by uncertainties inherent in demand
and/or supply. In a perfect world, a company would always have infinite inventory on hand to reduce the risk of a shortage
to zero. However, the reality is excessive inventories can incur high storage costs, tie up significant business capital, and
may be subject to spoilage or obsolescence. Because of this, a major focus for many businesses is implementing inventory
replenishment methods that strike the right balance between meeting desired service levels and minimizing inventory-
related costs.
Simply defined, inventory replenishment is decision making that is focused on answering two fundamental questions:
When should orders be placed to replenish inventory?
How much should be ordered?
The remainder of this section introduces some key terms and common inventory replenishment policies.
Inventory Position
The inventory position is a key input typically used in inventory replenishment decision making. It is equal to inventory-on-
hand plus inventory-on-order minus backorders and any other commitments.
Continuous or Periodic Inventory Review
These terms refer to the frequency of inventory review to determine when orders must be placed for replenishment.
A continuous inventory review keeps a constant track of the inventory position; as soon as it falls below a pre-determined
level (the reorder point), a replenishment order is placed. Tracking inventory levels in real-time is typically more expensive to
administer but allows for a lower level of safety stock, as the only uncertainty is the magnitude of demand during the
delivery period.
Alternatively, a periodic inventory review evaluates the inventory position at discrete points in time to determine if a
replenishment order needs to be placed. Replenishment decisions can be made only at those points. The time between two
review points is called the review period. A periodic review system is cheaper to administer compared to continuous review
since inventory counts take place only at fixed times, but a higher level of safety stock is typically required to buffer against
623 / 1277
since inventory counts take place only at fixed times, but a higher level of safety stock is typically required to buffer against
a longer period of uncertainty in demand.
Replenishment Policies
At the time of an inventory review, a decision strategy often referred to as the replenishment policy is used to determine
whether replenishment is required and, if so, then by how much. Some commonly used replenishment policies included
within Simio:
Min/Max Replenishment Policy
This policy is sometimes referred to as the (s, S) policy where s is the reorder point, the ‘Min’, and S is the order-up-to level,
the ‘Max’. When the inventory position falls to or below the reorder point, s, then replenishment is required so as to bring
the inventory position to the order-up-to level, S. In other words, if the inventory position is y, and y ≤ s, then a
replenishment order of size S − y is required.
Figures 1 and 2 illustrate the Min/Max replenishment policy using either continuous or periodic inventory review.
624 / 1277
Reorder Point/Reorder Qty Replenishment Policy
This policy is sometimes referred to as the (s, nQ) policy where s is the reorder point and Q is a fixed reorder quantity (a
fixed lot size). When the inventory position falls to or below the reorder point, s, then replenishment is required so as to
bring the inventory position just above s. The size of the replenishment order is a multiple of the reorder quantity, Q. In
other words, if the inventory position is y, and y ≤ s, then a replenishment order of size nQ is required, where n is the
smallest integer such that y + nQ > s.
Figures 5 and 6 illustrate the Reorder Point/Reorder Qty replenishment policy using either continuous or periodic inventory
review.
625 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
626 / 1277
Simio Reference Guide
627 / 1277
Simio Reference Guide
628 / 1277
Simio Reference Guide
Material
Material
A Material element may be used to define a material that is consumed or produced in the system. For a material
representing an end product, the bill of material list may be entered that specifies the component materials required to
make one unit of the parent material.
Separate storage locations for holding stock of a specific material may be defined using Inventory elements. Refer to the
Consume and Produce steps to consume or produce material quantities.
Material may also be reserved and unreserved by using the Reserve and UnReserve steps.
Only the first waiting token may consume material. SmallestValueFirst and MaxValue rankings are based on the priority
specified on the Consume step. Material is hierarchical and may hold a bill of material that is required to produce the top
level material. Material may be consumed/produced at the top level, or the expanded bill of material. Materials may be
consumed or produced through the Workstation ( Deprecated) object within the Standard Library also, as well as through
the Task Sequences within Server, Combiner and Separator objects.
See the Inventory element description and Inventory Replenishment Policies page for more information regarding the
Review Period and Replenishment Policy properties.
The Material element’s Assume Infinite Availability If expression property will be evaluated in the context of the entity
attempting to consume the material.
The Allow Partial Allocation If property may be specified as a conditional expression that is evaluated in the context of the
entity requesting the material. If the specified expression contains a data table reference, then that table value may be a
row reference that has been set for either the Material element, the process token that is executing the Consume step, or
the entity (in that search priority order).
The Material functions, QuantityConsumed and QuantityProduced, are statistics functions that return the total material
quantity consumed or produced during the run. These values are cleared at the end of a warm-up period. If the Location
Based Inventory property of a Material element is set to 'True', then its QuantityInStock and QuantityOnOrder state values,
QuantityBackordered function value, etc. are the aggregate quantities across all inventory sites.
Material Pegging
Pegging links material demand to material supply. Simio will allow material quantities in stock to be assigned to lot
identifiers, with those lot identifiers then referenceable by material reservation and consumption requests (see below
figure).
Pegging relationships between material demand and material supply such as shown above can provide more detailed
logging of raw material usage as well as prevent material inventory from being allocated to unlinked demand.
As an example, suppose a specific production order requires 100 units of raw material A. That material quantity can be
linked (pegged) to the order using a unique lot number. Entities associated with other production orders will then be
unable to reserve or consume from that specific lot of material.
The Lot ID property may be specified as a string literal enclosed in double quotes (e.g., “Lot1”), the name of a string state
variable or string column in a table, or any other expression that returns a string value.
Refer to the Inventory Replenishment Policies, Inventory and Material Backorders and Measuring Service Level sections in
629 / 1277
Refer to the Inventory Replenishment Policies, Inventory and Material Backorders and Measuring Service Level sections in
help for additional details.
For examples of using the Material element, please refer to the SimBits ScheduledMaterialArrivals and
InventoryAndMaterials.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of Material:
Property Description
Location Based Indicates whether the material is stored at multiple physical locations in the system.
Inventory If this property is set to 'True', then Inventory elements must be added to the model to
define the separate inventory locations. Otherwise, if set to 'False', then the material is
treated as a single global inventory (no physical location).
Initial Quantity The quantity of the material present in the system at the beginning of the simulation
run.
Initial Quantities The initial quantity of the material present in the system.
( More).Initial
Quantity
Initial Quantities Optional string value indicating the lot identifier of the initial material.
( More).Lot ID
Review Period The frequency of inventory review to determine whether a replenishment order is
required.
If the review period is ‘Continuous’, then an inventory review is triggered once at the
start of the simulation and then whenever the inventory’s position decreases.
If the review period is ‘Timer’, then an inventory review is triggered whenever the
specified timer fires its event.
Review Timer Name The name of the timer used to trigger the inventory reviews.
Replenishment Policy The replenishment policy checked at the time of an inventory review to determine
whether a replenishment order is required and, if so, the recommended order size.
Reorder Condition The condition that, if true, signals the need to place a replenishment order.
Reorder Quantity The fixed reorder quantity when placing a replenishment order.
Reorder Point The minimum threshold for the inventory position that signals the need to place a
replenishment order.
Order-Up-To-Level The target level to return the inventory position to if at or below the reorder point.
On Replenishment The name of the process that will be executed to handle an inventory replenishment
Order Process order. Note that whenever this process is triggered by the replenishment policy, the
inventory's quantity on order will have been automatically increased by the
recommended order size.
NOTE: The created token's material order detail reference will provide the detail of the
replenishment request. For example, the function Token.MaterialOrderDetail.Quantity
may be used to get the recommended order size.
Cost Per Unit The cost per unit of material that is charged if a quantity of the material is consumed.
Allocation Ranking The ranking rule used to allocate the material to competing material consumption
Rule requests.
Allocation Ranking The expression used to rank the queue holding the member tokens waiting for material.
Expression
Assume Infinite Optional condition that is evaluated whenever an entity is attempting to consume the
Availability If material. If the condition is true, then the entity will be allowed to immediately
consume its full required quantity of the material regardless of the actual quantity in
stock. Note that this may result in negative inventory levels.
Allow Partial Optional condition that is evaluated whenever an entity is attempting to consume the
Allocation If material. If the condition is 'True', then the entity will be allowed to immediately
consume only a portion of its requested quantity if the full quantity is not available.
Leaving this property blank (no condition) is equivalent to entering 'False'.
Allow Backorder Indicates whether an entity attempting to consume the material can be backordered if
Policy its full requested quantity is not immediately satisfied from inventory on hand.
If the backordering of an entity is rejected, then its outstanding requested quantity will
be automatically cancelled and the balked demand observation recorded in the
statistics.
On Balked At The name of the process that will be executed to handle an entity that has balked at
Backorder Process being backordered. The created token’s material order detail reference will provide the
detail of the balked material consumption request.
Backorder Max Wait An optional limit on the total time that a backordered entity will wait for its full
Time requested quantity of the material.
If the max wait time for a backordered entity is reached, then its outstanding requested
quantity will be automatically cancelled and the reneged demand observation
recorded in the statistics.
On Reneged The name of the process that will be executed to handle an entity whose backorder has
Backorder Process been cancelled. The created token’s material order detail reference will provide the
detail of the reneged material consumption request.
Log Material Usage Indicates whether usage related events for this material are to be automatically logged.
Go to Results > Logs to view logged data.
Report Statistics Specifies if statistics are to be automatically reported for this element.
QuantityOnOrder The current quantity of the material that has been ordered to replenish inventory in the
system but has not yet been received. This state is not user-assignable and is used only for
location-based inventory material.
631 / 1277
AllocationQueue The queue of requests waiting to be allocated quantities of this material.
QuantityConsumed Returns the total quantity of the material consumed during the simulation
run.
QuantityProduced Returns the total quantity of the material produced during the simulation
run.
QuantityBackordered Returns the current quantity of material required to satisfy all material
consumption requests waiting in allocation queues.
QuantityReservedTo(owner) Returns the current quantity of the material that is reserved for use by a
specifed owner object.
AverageQuantityInStock Returns the average quantity of the material present in the system during
the run.
MinimumQuantityInStock Returns the minimum quantity of the material present in the system
during the run.
MaximumQuantityInStock Returns the maximum quantity of the material present in the system
during the run.
Pegged.QuantityInStock(lotID*) Returns the current quantity of the material of a specified lot identifier
that is present in the system.
Pegged.QuantityReserved(lotID*) Returns the current quantity of the material of a specified lot identifier
that is reserved.
Pegged.QuantityReservedTo(owner, Returns the current quantity of the material of the material of a specified
lotID*) lot identifier that is reserved for use by a specified owner object.
Demand.NumberOrders Returns the total number of material consumption requests (i.e., orders)
received during the simulation run.
Demand.QuantityDemanded Returns the total quantity that was demanded to satisfy the material
632 / 1277
consumption requests received during the simulation run.
Demand.NumberBalked Returns the total number of material consumption requests that balked at
being backordered in an allocation queue.
Demand.QuantityBalked Returns the total demand quantity cancelled due to balked material
consumption requests.
Demand.QuantityReneged Returns the total demand quantity cancelled due to reneged material
consumption requests.
Demand.QuantityFillRate Returns the percentage of the total quantity demanded that was
immediately satisfied from inventory on hand (no balking or
backordering).
Stockout.TotalTime Returns the total time that no material was present in the system.
Stockout.PercentTime Returns the percent time that no material was present in the system.
Stockout.NumberOccurrences Returns the number of occurrences where no material was present in the
system.
Stockout.AverageTime Returns the average time of the occurrences where no material was
present in the system.
UsageCostCharged Returns the total cost that has been charged to consumers of the material.
* Specifying the lotID argument as an empty string will return the current quantity of unassigned (not pegged) material
that is present in the system or is reserved.
633 / 1277
Simio Reference Guide
Monitor
Monitor
The Monitor element may be used to detect a discrete value change or threshold crossing of a specified state variable or
group of state variables. It is added to a model from the Elements panel found within the Definitions window.
The Monitor has an Enabled state that allows the Monitor to be enabled/disabled.
A single Monitor element can monitor more than one state variable. This enables users to model a single ‘Status Changed’
event that pertains to some logical grouping of state variables in the system, such as a set of variables that relate to the
status of an area, a processing location, etc. For example, suppose a single Monitor element named
PackingAreaStatusChanged is defined that is monitoring discrete changes in the state variables Packer1.AllocationQueue,
Packer1.ResourceState, Packer2.AllocationQueue, or Packer2.ResourceState. Somewhere in the modeled process logic,
perhaps a Wait step is then used to hold a process token until event name PackingAreaStatusChanged occurs and event
condition 'Packer1.ResourceState==0 && Packer2.ResourceState==0' is true.
When a Monitor event is fired, if there are any processes specified to be triggered by that event, then the created tokens
are associated with the object that owns the Monitor element. For additional information, visit the Monitor - Discussions
and Examples page.
The Monitor's Initial Threshold Value may be changed during the simulation run by assigning the
'MonitorName.CurrentThresholdValue' state to a new value.
For examples of using the Monitor element, please refer to the SimBits DynamicallyCreatingVehicles,
BatchingProcessUsingScanOrWaitStepToControlBatchSize, UsingaMonitor and WritingToAFile.
The State Variable Name (or multiple State Variable Names) to be monitored may be a member of an object or element
reference state variable (i.e., EntityReferenceState.StateName) which allows the state variable(s) monitored by an individual
Monitor element to dynamically change. The Monitor element will 're-wire' to the state variable to be monitored each time
the Monitor is enabled (i.e., its Enabled state changes from False to True).
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of Monitor:
Property Description
State Variable Name The state variable to be monitored.
Crossing Direction The direction that the monitored state value must approach the specified threshold
for a crossing state change to be detected.
Initial Threshold Value The initial threshold value whose crossing is to be detected. Note that the monitor's
'CurrentThresholdValue' state may be used to dynamically get or set the current
threshold value during a simulation run.
Monitored State Optional user-assignable state variable that will hold the threshold value during a
Variables simulation run.
( More).Threshold State NOTE: This state variable must be a real and of the same unit type as the
Variable Name monitored state variable.
Trigger Condition Optional condition that must be true when a discrete or threshold crossing state
change is detected, in order for the moitor to fire its event and trigger any process
logic.
Triggered Process Name The process to be immediately executed when a discrete or crossing state change
is detected, before the execution of any other simulation logic in the system.
Initially Enabled Specifies whether the monitor is enabled when the system is initialized.
Report Statistics Specifies if statistics are to be automatically reported for this element.
635 / 1277
Simio Reference Guide
Monitor Example 1
The following is an example of a Monitor that watches a predefined Simio queue state, called
Server1.InputBuffer.Contents, which holds the value for the number of entities currently waiting in the InputBuffer of the
object called Server1.
Since its MonitorType property is set to 'CrossingStateChange', this Monitor will fire an event when the value of
Server1.InputBuffer.Contents crosses over the specified Threshold Value, which is 3.
Because the CrossingDirection property is set to 'Positive', the Monitor will fire when the value crosses in the positive
direction from 3 to 4, not in the negative direction from 3 to 2.
The On Change Detected Process property is set to the process named 'Monitor1_OnChangeDetectedProcess' so as
soon as the Monitor's event is fired, it will execute 'Monitor1_OnChangeDetectedProcess' before any other logic is
executed.
636 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
637 / 1277
Simio Reference Guide
Network
Network
A Network is a list of links to which an entity may be assigned to follow via the shortest path to its destination.
A link may be in multiple networks. The Network keeps a master list of network nodes for each node that is connected in
the network. A node is considered connected if it has at least one incoming or outgoing link that is a member of the
network. Each interection has a list of network nodes - one for each network that the node is a member (by being the
starting or ending node of a member link). Hence each network node is both on the master list of network nodes owned by
the network, and the local list of network nodes owned by the node. Each network node keeps a list of outbound member
links, and a count of inbound member links. When both counts are zero, the node is removed from both the master list and
the node list. Each network node has a vector of shortest path links from this node to all nodes in the master network node
list. Each vector is indexed in the same order as the master network node list owned by the network. The shortest path link
is found by locating the network node for the destination transfer station in this master list, and then using the index of this
node to index into the shortest path vector. Hence the runtime computation is O(n), where n is the number of network
nodes. This can be improved by implementing a compare function to sort the list, and then using a binary search. The
shortest path vector is only computed for network nodes with 2 or more outbound links. The ComputeShortestNetwork
method is called to compute the shortest path vector for each of these nodes.
The NextLink and NextNode functions listed below will allow process logic to 'walk along' the shortest path from one
node to another node, link by link and/or node by node.
For more information regarding the Turnaround Method, see the Path - Discussion and Examples page.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the Properties of Network:
Property Description
Turnaround The method used by travelers on this network to turn around at nodes in order to move in the
Method opposite direction on bidirectional links. If the method is 'Default', then the Network Turnaround
Method specified for the entity type will be assumed.
Auto Indicates whether updates of the network's shortest path calculations will automatically occur
Update whenever the DesiredDirection state of a member link changes, with the calculations based on
Shortest the current DesiredDirection states of all link members.
Paths
Update An occurence of this event will update the network's shortest path calculations to be based on the
Shortest current DesiredDirection states of all member links.
Paths Event
NextNode(fromNode,toNode) Returns a reference to the next node on the shortest path between two nodes
using this network. If the destination node is returned, then the two nodes are
directly connected by a link. If the fromNode == toNode, the function returns
the node.
PathExists(fromNode,toNode) Returns 'True' if a followable travel path exists between two nodes using this
network. If the fromNode == toNode, the function returns 'True'.
Links.NumberItems Returns the number of links that are members of this network.
Links.FirstItem Returns a reference to the first link in the collection of links that are members
of this network.
Links.LastItem Returns a reference to the last link in the collection of links that are members
of this network.
Links.ItemAtIndex(index) Returns a reference to the link at a specified index position in the collection of
links that are members of this network.
Links.IndexOfItem(link) Returns the one-based index of a specified link in the collection of links that
are members of this network. If the link is not a member of this network then
the value 0 is returned.
Links.Contains(link) Returns True(1) if the network's collection of link members contains the
specified link. Otherwise the value False (0) is returned.
639 / 1277
Simio Reference Guide
OutputStatistic
OutputStatistic
The OutputStatistic element defines an expression that can be optionally recorded at the end of each replication of a
simulation.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of OutputStatistic:
Property Description
Report Specifies if statistics are to be automatically reported for this element.
Statistics
Data Optional string used as the Data Source field for classifying results reported by this statistic
Source element. If defaulted, then the element name is assumed.
Category Optional string used as the Category field for classifying results reported by this statistic element.
If defaulted, then the string 'UserSpecified' is assumed.
Data Item Optional string used as the Data Item field for classifying results reported by this statistic element.
If defaulted, then the string 'Output' is assumed.
640 / 1277
Simio Reference Guide
641 / 1277
Simio Reference Guide
Regulator
Regulator
The Regulator element may be used to regulate flow transfers of entities into or out of a location.
The Regulator is modeled after a "pump", where the CurrentMaximumFlowRate state is the throttle/speed setting, and the
Enabled state is the on/off switch.
If the Input Flow Control Mode of a Regulator is set to 'MergeFlow', entities with different Destination Nodes will not be
merged. Simio dynamically stops/starts merging if an entity waiting or in a merge at a regulator changes its Destination
Node.
Merge Allocation Rules when merging inflow include 'ProportionalBasedOnInflowRates', 'PreferredOrderByQueueRank'
and 'ProportionalBasedOnExpression'.
The states listed below for the flow out of Regulators are read-only. These may be monitored to detect when a target
volume or weight quantity has been transferred (e.g., new monitor threshold = RegulatorXYZ.CurrentVolumeFlowOut +
SomeVolumeQuantity). The rate values of the state variables might be monitored to detect flow rate changes (e.g., you
could monitor Regulator.CurrentVolumeFlowOut.Rate for changes).
The Initial Output Yield Factor property specifies the yield factor for the start of the simulation run. The
Regulator.CurrentOutputYieldFactor can be assigned to change the yield over the course of the simulation run.
When a regulator is disabled and then enabled again, the outbound link selections are reevaluated.
Statistics are generated automatically for the flow out of a regulator, based on the flow states listed below, if the value is
greater than 0. Statistics will also be reported on the flow in for the regulator, if the value is not equal to the flow out (that
is, if a yield factor is applied).
For examples of using the Regulator element, please refer to the Flow Example models on the Simio User Forum
(xFlowNode). The Regulator element is used inside the FlowNode object.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of Regulator:
Property Description
Flow Rate The unit type to be used for specifying the regulator's maximum flow rate.
Unit Type
Initial The initial output yield factor for the regulator. This factor is entered as a ratio of outflow to
Output inflow, and may be used to scale the flow into the regulator such that there is a physical loss or
Yield gain represented in the regulator's output flow.
Factor
Initial Optional property specifying the initial desired entity type of the outflow produced by the
Output regulator. If unspecified, then the outflow flow entity type will be determined by the inflow entity
Entity types.
Type
Flow The static rule used to rank competing flow requests using the regulator.
Request
Ranking
Rule
Flow The expression used with a Smallest Value First or Largest Value First ranking rule.
Request 642 / 1277
Request
Ranking
Expression
Input Flow The mode used by the regulator to control the flow requests in its flow request queue.
Control
Mode
Merge Specifies the match conditions reqeuired to merge flow requests in the regulator's flow request
Matching queue into a single output flow. Available when the Input Flow Control Mode is MergeFlow. If the
Rule matching rule is specified as 'AnyEntityType' ,then all inflows may be merged together regardless
of entity type. If the matching rule is specified as 'SameEntityType', then only inflows with the
same entity type may be merged.
Merge The allocation rule used to indicate how flow requests in the regulator's flow request queue are
Allocation merged into a single output flow. Available when the Input Flow Control Mode is 'MergeFlow'.
Rule
Merge The expression used to return the desired merge proportion for a flow request in the regulator's
Proportion flow request queue. Available when the Input Flow Control Mode is 'MergeFlow' and Merge
Expression Allocation Rule is 'ProportionalBasedOnExpression'.
Initially Specifies whether the regulator is enabled when the system is initialized.
Enabled
CurrentMaximumFlowRate State used to get or set the current maximum flow rate of this regulator.
CurrentOutputYieldFactor State used to get or set the current output yield factor of this regulator.
CurrentVolumeFlowIn State to get the current total volume flowed into this regulator. The 'rate'
from this state is also available.
CurrentWeightFlowIn State to get the current total weight flowed into this regulator. The 'rate'
from this state is also available.
CurrentVolumeFlowOut State to get the current total volume flowed out of this regulator. The 'rate'
from this state is also available.
CurrentWeightFlowOut State to get the current total weight flowed out of this regulator. The 'rate'
from this state is also available.
OutputFlowReceivers.FirstItem Returns a reference to the first entity in the list of entities currently
receiving outflow from the regulator.
OutputFlowReceivers.Contains(entity) Returns True (1) if the list of entities currently receiving outflow
from the regulator includes the specified entity. Otherwise, the
value False (0) is returned.
644 / 1277
Simio Reference Guide
RoutingGroup
RoutingGroup
The RoutingGroup element is used with a Route step to route an entity object to a destination selected from a list of
candidate nodes (a Node List). If using only a static Route Request Ranking Rule on a RoutingGroup, when the destination
in the RoutingGroup becomes available, the algorithm is to search through the RouteRequestQueue starting at Rank 1 and
find the first eligible entity that meets eligibility requirements.
The Standard Library TransferNode object uses a RoutingGroup element in its internal logic to determine where the entities
will travel when they leave the node. A user can create their own RoutingGroup element for use in a the TransferNode or a
custom object.
The TransferNode includes an option to 'Use Custom Routing Group' within the Entity Destination Type property. This
advanced option allows users to reference a custom RoutingGroup element directly within the TransferNode. There are
several use cases for using this feature which are noted within the TransferNode - Discussion and Examples page. One use
case is if multiple routing entities are blocked and waiting for an available destination (i.e., select the next entity to route
from multiple blocked waiting locations), the RoutingGroup element provides a Dynamic Selection rule to dynamically
select one of the waiting entities. This is a similar feature to a resource object being able to dynamically select an entity
waiting to seize.
By default, for each candidate destination node in a Routing Group element’s node list that is an ‘Input’ node into an
associated object station location, the Routing Group automatically listens for station state changes (such as entities
entering or exiting the station or the station’s capacity changing) and then does a selection search through its
RouteRequestQueue. The default Destination Blocked Condition that is specified for the RoutingGroup element includes a
default definition of blocked that is based on a candidate node being an ‘Input’ node with an associated station and it is
considered ‘blocked’ if the associated station does not have any remaining capacity. There may, however, be modeling
situations where just listening for station state changes at ‘Input’ nodes is not enough triggering events for the
RoutingGroup to cover all possible selection search scenarios. Sometimes, an additional selection search may need to a be
triggered based on a conditional upstream system event (i.e., the number of entities waiting on a path larger than 3). The
Select Route Requests Triggers repeat group of Triggering Events/Conditions allows users to define additional triggers that
will cause re-evaluation of the RoutingGroup logic.
There are four processes that may be executed from within this RoutingGroup element, one prior, one during and two after
the decision making process for the destination. These include On Starting Route Request Queue Search, On Evaluating
Route Request, On Confirming Destination Assignment and On Destination Assigned process properties. The logical flow
charts for how the RoutingGroup logic and add-on processes work can be found in RoutingGroup - Discussions and
Examples. When using a dynamic selection rule, the On Evaluating Route Request process is executed for every possible
entity and destination node combination, to filter the list of possible destination node assignments. The best destination
node assignment from the candidates that made it through the filtering is then selected per the specified rule. The On
Confirming Destination Assignment process on the other hand is only executed whenever a destination node assignment
has been selected, to confirm it. If this decision process returns False, then the routing group goes back to the drawing
board and using the dynamic selection rule again looking for the next best entity/node combination (which would then
have to be confirmed and so forth).
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of RoutingGroup:
Property Description
Destination Identifies the list of possible destination nodes in this
Node List routing group. This may be a node list or table
Name reference including node objects.
Dispatching See Dynamic Selection Rules The primary criteria used to select the
Rule next entity from the queue. Note that
using a particular dispatching rule may
require some specific model data
about the candidate entities, such as
due dates, job routings, expected setup
or operation times, etc.
Tie Breaker None, or one of several Dynamic Selection Rules The secondary criteria used to break
Rule ties.
Dispatching Repeat Group, Dispatching Rules The primary dispatching rule and any
Rules tie breaker rules, applied in the order
listed.
647 / 1277
Simio Reference Guide
648 / 1277
Example 1
In this example, we have a relatively simple case of 2 entities waiting in a RoutingGroup’s RouteRequestQueue and there
are two possible destinations in the RoutingGroup’s destination node list. And some triggering event (built-in or user-
defined on the RoutingGroup element) causes an evaluation of the RouteRequestQueue.
In the table below, there are four (4) possible destination node assignments from which the RoutingGroup can choose. The
RoutingGroup does a selection pass using the queue static ranking rule, dynamic selection rule (if specified), and Selection
Goal on the Route step to find the best choice of those 4 alternatives.
Note that as part of the selection pass, those 4 choices are going to be filtered based on whether a destination node is
considered blocked, the Selection Condition on the Route step is 'True', and whether the On Evaluating Route Request
649 / 1277
considered blocked, the Selection Condition on the Route step is 'True', and whether the On Evaluating Route Request
process on the RoutingGroup element returns 'True'. Let's say that after that selection pass, the RoutingGroup has picked
Entity2 to NodeA as the best choice. Now what happens is the On Confirming Destination Assignment process is executed
to give the modeler a chance to ‘confirm’ that destination assignment. That process must return 'True' for the assignment to
happen.
Let’s say in this example, the On Confirming Destination Assignment process returned 'False'.
The RoutingGroup temporarily excludes that particular Entity-Destination Node pair as a possible choice and goes back to
the queue to do an entirely new selection pass (with now just 3 possible choices instead of 4 to select from).
In the second selection pass, the RoutingGroup now selects Entity2 to NodeB as the best choice of those three remaining
650 / 1277
In the second selection pass, the RoutingGroup now selects Entity2 to NodeB as the best choice of those three remaining
alternatives and the On Confirming Destination Assignment process returns 'True'. Entity2 is removed from the
RouteRequestQueue, the destination node assignment is made, and the RoutingGroup’s On Destination Assigned process is
called.
The RoutingGroup keeps checking its RouteRequestQueue using the same selection behavior until it is unable to make any
destination node assignment. It then goes back to sleep until woken up again by another triggering event.
651 / 1277
Simio Reference Guide
StateStatistic
StateStatistic
The StateStatistic element may be used to record time-persistent statistics on a state variable. It is added to a model from
the Elements panel within the Definitions window.
If the state variable is a continuous-change variable, then a trapezoidal integration method is used to record the statistical
observations. Otherwise, for a discrete state variable, a rectangular integration method is used.
NOTE: Runtime confidence interval half-widths are never calculated when running an experiment scenario for multiple
replications or when running the model interactively. The Confidence Level property of a StateStatistic element thus only
applies if running an experiment scenario for a single replication. For more information, see the Batch Means section of
Experiments page.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For examples of a StateStatistic, see the StateStatistic - Discussion and Examples page.
Listed below are the properties of StateStatistic:
Property Description
State The state variable for which time-persistent statistics are to be recorded.
Variable
Name
Data Source Optional string used as the Data Source field for classifying results reported by this statistic
element. If defaulted, then the element name is assumed.
Category Optional string used as the Category field for classifying results reported by this statistic
element. If defaulted, then the string 'UserSpecified' is assumed.
Data Item Optional string used as the Data Item field for classifying results reported by this statistic
element. If defaulted, then the string 'Output' is assumed.
Confidence The confidence level used to calculate the confidence interval half-width statistic for the
Level average of the recorded state values. If specified as 'Default', then the confidence level used will
be either 'None' if running the model interactively, or will be the Experiment's specified
confidence level if running an experiment scenario for a single replication.
Stopping Logical expression that is evaluated each time a value is recorded for the state statistic. The
Condition simulation run is ended if the expression evaluates to 'True'.
Log Indicates whether the state change observations recorded by this state statistic are to be
Observations automatically logged. Go to Results -> Logs to view logged data.
652 / 1277
Simio Reference Guide
StateStatistic Example 2
The following is an example of a StateStatistic element that is also being used to stop the simulation run.
Since its State Variable Name property is set to 'NumberInSystem', it will collect statistics on the state variable called
NumberInSystem.
The Stopping Condition property is evaluated each time a value is recorded for the statistic NumberInSystem. When
it is evaluated, if the expression evaluates to 'True' then the simulation run is ended. In this case, the simulation run
ends whenever the NumberInSystem equals 0 and the simulation has run for at least 8 hours.
653 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
654 / 1277
Simio Reference Guide
Station
Station
The Station element may be used to define a capacity constrained location for holding entities representing discrete items.
The Transfer step is used to transfer entities into and out of a station. The EndTransfer step should be used to end the entity
transfer into a Station. A Station element is added to a model from the Elements panel within the Definitions window.
If the Balk Entering Decision Type is ‘Blocked’, then an entity’s transfer attempt into the station will be allowed to proceed
as normal. This includes being redirected to another station or to a parent external node if the station’s capacity is zero and
a redirect location has been specified. However, a late priority event will also be scheduled on the current events calendar
for the entity. When that event is processed, the following conditions for the entity will be checked:
a) Was the entity’s Transferring event fired?
b) Is there a queue item associated with the entity in a station’s entry queue, link’s entry queue, node’s entry queue, or
a routing group’s route request queue?
If the answer to both of the above questions is true, then the entity is determined to have immediately attempted a discrete
transfer that was blocked and it will balk. The queue item associated with the entity’s blocked transfer attempt will be
automatically cancelled (reneged) and the station’s On Balked Entering Process then executed.
Station elements are built into some of the Simio Standard Library objects. Some examples are: Server.InputBuffer,
Server.Processing, Server.OutputBuffer, Combiner.ParentInputBuffer, Separator.MemberOutputBuffer, Vehicle.RideStation,
etc.
The contents of a station queue can be accessed by utilizing the 'Contents' state of the station. For example,
'Server1.InputBuffer.Contents' displays the contents of the queue at the Server1 InputBuffer station. See the Functions in
Simio - Automatic page for various functions that can be accessed for queues.
The Station element's Contents queue also has several read-only parameters (not for all queues, only Station content
queues). This includes Volume, Volume.Rate, Weight and Weight.Rate. These parameters represent the cumulative Weight
and Volume of the contents of the queue. Since they are parameters, they can also be used in a Monitor, so you can see
when the volume of objects in a given station exceeds a specified value. As an example,
'Server1.OutputBuffer.Contents.Weight' would provide the cumulative weight of all the entities waiting in the output buffer
of Server1.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For additional information on reneging, see the Station - Discussions and Examples page.
Listed below are the Properties of Station:
Property Description
Initial Capacity The initial maximum number of entities that can
be simultaneously located in the station.
Entry Ranking Rule The static rule used to rank entry into this station
among competing entities.
Dispatching Rule See Dynamic Selection Rules The primary criteria used to select the
next entity from the queue. Note that
using a particular dispatching rule may
require some specific model data
about the candidate entities, such as
due dates, job routings, expected setup
or operation times, etc.
Tie Breaker Rule None, or one of several Dynamic Selection The secondary criteria used to break
Rules ties.
Dispatching Rules Repeat Group, Dispatching Rules The primary dispatching rule and any
tie breaker rules, applied in the order
listed.
Parent Cost Center The cost center that costs allocated to entities
located in this station are rolled up into. If a
parent cost center is not explicitly specified, then
costs will be automatically rolled up into the
parent object containing this station.
Cost Per Use The cost for an entity to occupy this station
location irrespective of the time spent in the
station.
Holding Cost Rate The cost per unit time to hold an entity in this
station location.
Contents Ranking The static ranking rule used to rank the station's
Rule 'Contents' queue of entity objects currently
located in the station. This Ranking Rule for the
InputBuffer station of the standard Server,
Combiner, Separator and Workstation
( Deprecated) match the resource allocation and
batching ranking rules (in the Combiner case)
that the user specifies in the properties of these
objects.
657 / 1277
On Reneged Optional process that is executed if an entity
Process.Renege reneges.
Triggers
EntryQueue The queue of entities waiting for capacity to enter the station.
Exited The Exited event provides notification that an entity has exited the station.
CapacityChanged The CapacityChanged event provides notification that the capacity of the station has
changed.
NumberDepartures Returns the number of entities that have departed from this station.
NumberTransferringOut Returns the current number of entities attempting to transfer out of the station.
NumberBalked Returns the total number of entities that balked at entering the station.
NumberReneged Returns the total number of entities that have abandoned waiting in the station.
Capacity.Maximum Returns the maximum capacity of this station during the run.
659 / 1277
Simio Reference Guide
Finally, the On Reneged Process (if specified) will be executed by a token that is associated with the reneged entity, to allow
user-defined process logic to complete its handling, such as destroying it or transferring it to another location.
Station Example 1
The following is an example of a Station element that uses a Dynamic Selection Rule to select which entity can enter in to
this Station next.
Since its Dynamic Selection Rule property is set to 'Largest Value First', if this Stations capacity becomes available
and there are entities in the Entry Queue, this Station will select entities from the Entry Queue based on the rule of
Largest Value First.
The Value Expression property is set to 'Candidate.Entity.Priority', so the Station will select the entity with the largest
value for the state ModelEntity.Priority.
The Filter Expression property is set to 'Candidate.ModelEntity.PartType == 2' so it will only look to select entities
that meet this criteria.
660 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
661 / 1277
Simio Reference Guide
Storage
Storage
The Storage element may be used to define a queue for temporarily holding one or more objects. A Storage element is
added to a model from the Elements panel in the Definitions window. The Insert and Remove steps are used to insert and
remove objects from the Storage element's queue. Entities in a storage are an image of the entity that is actually located
elsewhere in the model. There are functions that can be used to get information about a Queue State.
A queue can be animated from the Drawing Tab by selecting Detached Queue.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of Storage:
Property Description
Report Specifies if statistics are to be automatically reported for this element.
Statistics
Ranking The rule used to rank the queue holding the objects in the storage.
Rule
Ranking The expression used with a Ranking Rule of Smallest Value First or Largest Value First, to rank
Expression the queue holding the objects in the storage.
662 / 1277
Simio Reference Guide
663 / 1277
Simio Reference Guide
TallyStatistic
TallyStatistic
The TallyStatistic element tallies observational statistics that are recorded using the Tally step. It is added to a model from
the Elements panel within the Definitions window.
The TallyStatistic element is referenced by the Tally step which specifies a value to be tallied. A single TallyStatistic element
may be referenced by multiple Tally Steps.
NOTE: Runtime confidence interval half-widths are never calculated when running an experiment scenario for multiple
replications or when running the model interactively. The Confidence Level property of a TallyStatistic element thus only
applies if running an experiment scenario for a single replication. For more information, see the Batch Means section of
Experiments page.
For additional information, including functions for tally statistics, examples and logging observations, see the TallyStatistic
- Discussion and Examples page.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
Listed below are the properties of TallyStatistic:
Property Description
Unit Type Classifies the units of the values to be recorded for this tally statistic.
Data Source Optional string used as the Data Source field for classifying results reported by this statistic
element. If defaulted, then the element name is assumed.
Category Optional string used as the Category field for classifying results reported by this statistic
element. If defaulted, then the string 'UserSpecified' is assumed.
Data Item Optional string used as the Data Item field for classifying results reported by this statistic
element. If defaulted, then the string 'Output' is assumed.
Confidence The confidence level used to calculate a confidence interval half-width statistic of the recorded
Level observations. If specified as 'Default', then the confidence level used will be either 'None' if
running the model interactively, or will be the Experiment's specified confidence level if running
an experiment scenario for a single replication.
Stopping Logical expression that is evaluated each time a value is recorded for the tally statistic. The
Condition simulation run is ended if the expression evaluates to 'True'.
Log Indicates whether the value observations recorded by this tally statistic are to be automatically
Observations logged. Go to Results -> Logs to view logged data.
664 / 1277
Simio Reference Guide
TallyStatistic Example 1
The following is an example of a TallyStatistic element that tallies the time it takes for an entity to arrive at Server2.
The TallyStatistic is created in the Elements panel within the Definitions window. It is simply given a name, an
optional label, category and data item in its properties window. In this example, the Confidence Level property is set
to 90%, which will determine how the Half Width is calculated in the results.
In order to use a TallyStatistic, a Tally Step must be inserted into the logic of the model. In this example, the Tally
Step is added to a process that is triggered by the Entered Add-On process trigger of the Input Node of Server2.
The Value property is set to the expression 'Run.TimeNow - ModelEntity.TimeCreated'. Run.TimeNow is the current
simulation time and ModelEntity.TimeCreated is a Simio function that returns the simulation time when this entity
was first created. The result of this expression is recorded into the TallyStatistic each time this Tally Step is executed.
666 / 1277
Simio Reference Guide
TaskSequence
TaskSequence
A Task Sequence element is used to define and execute structured sequences of processing tasks. A StartTasks step
references a Task Sequence element and is used to start a task sequence that is associated with an object in the system.
The Task Sequence Number Scheme
The task sequence numbering scheme supported by the Task Sequence element has the following format:
XX.YY.YY.YY…
XX is an integer referred to as the root sequence number. This number is the primary key that determines the serial
precedence requirements of a task.
YY are optional integer suffixes separated by dots (periods) that can be appended to the root sequence number in order to
define parallel subsequences in the task workflow. As many suffixes as needed may be appended to a root number to
represent the desired task sequence structure accurately.
The precedence rules used to determine task order are as follows:
1. If the task sequence number consists of only a root number (only XX ), then all tasks with lower root numbers
(ignoring any suffixes) must precede that task. Note: It is possible to have one or more tasks with the same root
sequence number, with or without suffixes.
2. If the task sequence number consists of a root number and one or more suffixes, then all tasks with lower root
numbers must precede that task, as long as those tasks either have no suffixes or all shared suffixes match.
3. If the task sequence number consists of a root number and one or more suffixes, then all tasks whose sequence
number is the same root number without any suffixes must precede that task.
Tasks.Sequence Sequence Number used to define the task precedence constraints. To model a task
Number sequence that is simply a serially ordered set of tasks, define the tasks with increasing
sequence numbers (e.g., the first task is numbered '10', the second task is numbered '20',
and so forth). Shown if the Task Precedence Method is 'SequenceNumberMethod'.
668 / 1277
Tasks.ID Number Integer identifier number for the task. Shown if the Task Precedence Method is
'ImmediatePredecessorsMethod' or 'ImmediateSuccessorsMethod'.
Tasks.Branch Type Indicates whether the task is always performed, or whether it is instead treated as the first
task of a conditional or probabilistic branch in the process workflow.
Tasks.Condition or The branch condition or probability specified as an expression. If a condition, then enter
Probability the logic condition. If a probability, then enter the chance of selecting the task as a value
between 0.0 (0%) and 1.0 (100%).
Tasks.Process The name of the process that will be executed in order to perform the action(s) required
Name for the task. If this property is left blank, the task will be ignored and will not be executed.
Tasks.Immediate Lists the ID numbers of the tasks which must be finished or cancelled before this task can
Predecessors start. To specify more than one predecessor, enter multiple task ID numbers separated by
commas. Shown when the Task Precedence Method is 'ImmediatePredecessorsMethod'.
Tasks.Immediate Lists the ID numbers of the tasks which can't start until this task is finished or cancelled. To
Successors specify more than one successor, enter multiple task ID numbers separated by commas.
Shown when the Task Precedence Method is 'ImmediateSuccessorsMethod'.
Tasks.Auto Cancel Event type that will trigger an automatic cancellation of the task.
Trigger The default setting is ''AllImmediatePredecessorsCancelled'. If left unchanged, then the
task will be automatically cancelled if all its immediate predecessors in the task sequence
are cancelled. This default setting is recommended if you want conditional or
probabilistic branching to automatically cancel all tasks in unselected branches.
For a more in-depth discussion of this option including examples, please refer to the Task
Sequence element documentation.
Loopback The task sequence number that is the beginning of the loopback. Shown if the Task
Branches.From Precedence Method is 'SequenceNumberMethod'.
Task Sequence
Number
Loopback The task sequence number that is the end of the loopback. Shown if the Task Precedence
Branches.To Task Method is 'SequenceNumberMethod'.
Sequence Number
Loopback The task ID number that is the beginning of the loopback. Shown if the Task Precedence
Branches.From Method is 'ImmediatePredecessorsMethod' or 'ImmediateSuccessorsMethod'.
Task ID Number
Loopback The task ID number that is the end of the loopback. Shown if the Task Precedence
Branches.To Task Method is 'ImmediatePredecessorsMethod' or 'ImmediateSuccessorsMethod'.
ID Number
Loopback Indicates whether the loopback is a conditional or probabilistic branch on the task
Branches.Branch workflow.
Type If the Branch Type is 'conditional', then the loopback occurs if the specified logical
condition evaluates to True.
The 'Probabilistic' branch type may be used to identify the loopback as one of possibly
several mutually exclusive alternatives at a probabilistic decision point. The sum of the
branch probabilities at a probabilistic decision point cannot be greater than one.
Loopback The branch condition or probability specified as an expression. If a condition, then enter
Branches.Condition the logic condition. If a probability, then enter the chance of the loopback as a value
or Probability between 0.0 (0%) and 1.0 (100%). 669 / 1277
or Probability between 0.0 (0%) and 1.0 (100%).
Log Tasks Indicates whether executed tasks are to be automatically logged. Go to Results > Logs >
Task Log to view the logged data.
670 / 1277
Simio Reference Guide
Example Workflow #1
The following description and screen shot are only for the 'SequenceNumberMethod'.
There are three rows in the Tasks repeat group property; one row for each task in this workflow.
The Sequence Number property determines the order in which the tasks are performed and if any tasks should
proceed others. In this example, Task1 must be performed first, followed by Task2, then finishing with Task3.
The StartTasks step is used to start the tasks within a specified Task Sequence element.
Example Workflow #2
671 / 1277
The following description and screen shot are only for the 'SequenceNumberMethod'.
There are five rows in the Tasks repeat group property; one row for each task in this workflow.
The Sequence Number property determines the order in which the tasks are performed and if any tasks should
proceed others. In this example, Task1 and Task2 are performed in parallel and are started first. Once both of the
Sequence Number 10 tasks have been completed, then Task3 and Task4 can be started in parallel (both indicated as
Sequence 20's).Once the 20's have been completed, then Task5 may begin (Sequence Number 30).
Note that this example follows Rule #1 in the Task Sequence element, that is, if the task sequence number consists of
only a root number (only XX), then all tasks with lower root numbers (ignoring any suffixes) must precede that task.
Note that it is possible to have one or more tasks with the same root sequence number, with or without suffixes.
Task Sequence Example 3
The following is an example of a Task Sequence element which defines the following tasks, some of which are in series
(have precedence constraints) and others which can be done in parallel.
Example Workflow #3
The following description and screen shot are only for the 'SequenceNumberMethod'.
There are six rows in the Tasks repeat group property; one row for each task in this workflow.
The Sequence Number property determines the order in which the tasks are performed and if any tasks should
proceed others. In this example, Task1 must be performed first, followed by Task2 and Task4, since sequence number
20 is greater than 10, but less than 30. These two tasks can be performed in parallel, as determined by the number
after the 20. Task3 must not begin until Task2 is complete and Task5 must wait until Task4 is complete. Task6 can be
performed after both Task3 and Task5 are complete, since 40 is greater than 30.
672 / 1277
Task Sequence Example 4
The following is another example of a Task Sequence element which illustrates conditional branching.
Example Workflow #4
673 / 1277
There are six rows in the Tasks repeat group property; one row for each task in this workflow.
If the entity object associated with the active task sequence is a 'Red' entity, then the tasks performed (in sequential
order) will be Task1, Task2, Task3 and finally Task6. Otherwise, the tasks performed will be Task1, Task4, Task5 and
finally Task6.
674 / 1277
Simio Reference Guide
Timer
Timer
The Timer element fires a stream of events according to a specified Interval Type. It is added to a model from the Elements
Window from within the Definitions Tab.
If the Interval Type is 'Time' or 'TimeInState', then the first event occurs at Time Offset. If the Interval Type is 'RateTable',
'EventCount' or 'ArrivalTable', then the first event time is determined by the rate pattern, event count or the numeric table
property.
The maximum number of timer events is limited to Maximum Events. The Maximum Events expression will be re-evaluated
each time it is required to be looked at. The Reset Event Name event will reset the timer event count.
The Timer has an Enabled state that allows the Timer to be enabled/disabled. To disable a Timer, set its Enabled property
( Timer.Enabled) to 0. If the timer is disabled and it is an EventCount timer, then the triggering event fire notification is
stopped. If the timer is disabled and it is a Time, TimeInState, or RateTable timer, then the calendar event stream is
stopped.
For 'ArrivalTable' type Timer elements, if the Repeat Arrival Pattern property is 'True', the timer re-evaluates the Arrival
Events Per Time Slot property at each discrete time in the table on every recurrence. Thus, you can now reasonably specify a
random distribution for the number of arrival events per time slot. Previous to sprint 170, that property was evaluated once
at initialization, and the number of arrival events for the time slot was then fixed to that initial value on each recurrence. It
is important to note that the Arrival Events Per Time Slot expression is evaluated for all time slots of first cycle at run
initialization (time 0.0). Then, for each recurrence of the time slot if the pattern is repeated, the Arrival Events Per Time Slot
is evaluated one cycle in advance. So, if time slot is 8:00 am and the length of the pattern is 24 hours, then the number of
arrival events is evaluated and scheduled one day in advance. Because of this, users should only use a constant or a random
distribution for that expression.
When a Timer event is fired, it can be used as the triggering event that executes a Process. If there are any processes
specified to be triggered by that event, then the created tokens are associated with the object that owns the Timer element.
For additional information on using Timers, see the Timer - Discussions and Examples page.
The standard Source object uses a Timer element to generate arrivals. For examples of how it uses the timer, see the
Source - Discussion and Examples page.
See the Table-Based Elements ( AutoCreate) page for information on automatically creating elements from table data.
For an example of using the Timer element, please refer to the SimBit ScheduledMaterialArrivals.
Listed below are the properties of Timer:
Property Description
Interval The method used to determine the time interval between two successive timer events.
Type
State The name of the state variable that will determine which time periods are included in calculating
Variable the timer's elapsed time.
Name
State The state variable value that will determine which time periods are included in calculating the
Value timer's elapsed time. Only time periods that the state variable has this value will be included.
Rate Table The rate table that defines how the rate of timer events changes over time, the interarrival times
following a non-stationary poisson process.
675 / 1277
Rate Scale The factor used to scale the rate values specified in the rate table.
Factor
Triggering The name of the event which determines when the next timer event is fired.
Event
Name
Triggering The number of Triggering Event occurrences required to trigger the next timer event.
Event
Count
Arrival The name of the numeric table property (table column) that contains the discrete times when
Time timer events are expected to be fired.
Property The number of timer events to be fired at each scheduled time is determined by the Arrival Events
Per Time Slot property. When the timer's event is fired, a reference to the table row holding the
arrival time will be automatically assigned to any process tokens created by the event.
Arrival The number of arrival events expected to occur at each of the discrete times defined in the Arrival
Events Per Time property.
Time Slot To vary the number of arrival events for each time slot, add a numeric column that contains those
values to the referenced arrival table. Then specify the name of that table column here.
Repeat Indicates whether the arrival pattern in the table should be repeated when the end of the pattern
Arrival is reached.
Pattern
Maximum The maximum number of times after initialization or reset that the time can fire its event
Events
Maximum The maximum time allowed after initialization or reset that the timer can fire events.
Time
Arrival Expression used to model differences (typically random) between the scheduled times in the
Time arrival table and the actual times during the simulation run that the arrival events occurs.
Deviation The specified expression may return a negative or positive value. A negative value indicates that
the actual arrival time will occur earlier than the scheduled time by that duration. A positive value
indicates that the actual arrival time will occur later than the scheduled time by that duration.
To vary the arrival time deviation for each time slot, add an expression column that contains those
expressions to the referenced arrival table. Then specify the name of that table column here.
NOTE: This feature is automatically disabled if random sampling in the simulation run is disabled.
Arrival The probability that a scheduled arrival in the arrival pattern will be a no-show and thus the timer's
No-Show event not actually fired. Enter the chance of a no-show as a value bewteen 0.0 (0%) and 1.0
Probability (100%).
To vary the no-show probability for each time slot, add a numeric column that contains those
probabilities to the referenced arrival table. Then specify the name of that table column here.
NOTE: This feature is automatically disabled if random sampling in the simulation run is disabled.
Random The random number stream used to generate interarrival timese (if rate table) or make
Number probabilistic no-show decisions (if arrival table).
Stream
Reset The name of the event whose occurence will trigger a reset of the timer.
Event
Name
Initially Indicates whether the timer is enabled when the system is initialized.
Enabled NOTE: Refer to the user-assignable ‘Enabled’ state variable of a timer to dynamically enable or
disable it during a simulation run.
ElapsedTime The time (or time in state if applicable) that has elapsed since the last timer event or reset.
677 / 1277
Simio Reference Guide
If the Timer element's Interval Type is 'TimeInState', then State Value expression is re-evaluated on every state change. This
allows the user to model an expression whereby the timer's Time Offset and Interarrival Time values are based on multiple
possible state values instead of a single state value. For example, if Interval Type = 'TimeInState', State Variable Name =
'myState', State Value = 'Math.If((myState==3)||(myState==4),myState,Math.NaN)'. This would cause the TimeOffset and
Interarrival Time values of the timer to be based on the time that the state variable 'myState' had values of 3 or 4.
Timer Example 1
The following is an example of a Timer that fires 5 events, an hour apart, starting at 2 hours after the beginning of the run.
The Time Offset property is set to '2 hours' so this Timer does not fire it's first event until 2 hours into the simulation
run.
The Time Interval property is set to '1 hour' which indicates that the events are fired with one hour in between events.
The Maximum Events property tells the Timer to stop firing after 5 events have been fired.
678 / 1277
Timer Example 2
The following is an example of a Timer that fires an event every time 5 entities have entered the Input Node of Server1.
Therefore, the Timer fires an event after 5 entities have entered the input node, then again when 10 entities have entered,
again when 15 entities have entered, etc.
The Interval Type property is set to 'Event Count' so this Timer counts the number of specified events to determine
when to fire its own event next.
The Triggering Event property is set to '[email protected]' which determines that this is the event that is counted
by the Timer.
The Triggering Event Count property tells the Timer to fire its event after 5 occurences of [email protected].
Timer Example 3
The following is an example of a Timer that fires its event based on information in a Data Table. The Timer reads
information from a Date Time, an Integer or Real property in a Data Table to determine when to fire its next event. If a
Date Time property is used, the timing of the event will be calculated by the time span from the starting date of the
simulation to the value in the table. So if the starting date of the simulation was 1/1/2008 12:00:00 AM, and the Date Time
in the table was 1/1/2008 2:30:00AM, the event would be fired at time 2.5 hours. If a Real or Integer property is used, the
event will fire at the simulation start time plus the numeric value of the property.
The Interval Type property is set to 'Arrival Table' so this Timer looks to a property in a Data Table to determine
when to fire its next event.
The Arrival Time Property property is set to 'Table1.Notification' which tells this Timer to read the property called
Notification from the table called Table1, to determine when to fire its next event.
679 / 1277
Timer Example 4
The following is an example of a Timer that fires its event based on the amount of time spent in a state. In this example,
the timer will fire when the total time that Server1's ResourceState = 1 reaches 3 hours. In other words, when Server1 has
been busy for a total of 3 hours, the timer will fire.
The Interval Type property is set to 'TimeInState' so this Timer looks to the state variable Server1.Resource.TotalTime
to determine when to fire its next event.
680 / 1277
Simio Reference Guide
Activity - DEPRECATED
Activity - DEPRECATED
An activity is performed by an operation that is owned by an object.
An operation is a sequence of activities that are performed by an object over time. Time slots for operations/activities may
be reserved in the future. Activities may be started and ended. An activity time scales by a work schedule (if any). Activity
times can be specific, change dependent, or sequence dependent. Dependent times are based on an entity list value. This
list value (numeric) is typically provided by a list property (color, size, type, etc.) on the entity.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
Operation / Activity elements and associated steps.
Listed below are the properties of Activity:
Property Description
Duration The method used to determine how the time duration for this activity is specified.
Type
Comparison The expression evaluated for each entity that is used to determine the change-dependent or
Expression sequence-dependent activity time. Note that, for a sequence-dependent time, the comparison
expression is evaluated to a zero-based index into the changeover matrix string list for which
'from-to' pairs are defined. For example, the comparison expression value of '0' means the
entity's comparison value is the first value in the changeover matrix string list. Referencing a list
property on the processing entitty as the comparison expression is particularly useful for
modeling sequence-dependent activity times.
Duration If This activity's time duration if there has not been a change in the value of the Entity Property
Same from the previous entity to the current entity.
Duration If This activity's time duration if there has been a change in the value of the Entity Property from
Different the previous entity to the current entity.
Changeover The name of the changeover matrix that defines the activity times dependent on the value of
Matrix the Entity Property from the previous entity to the current entity.
Usage Cost The cost per capacity unit per unit time to use the operation's primary resource for the activity.
Rate This cost rate will only apply during activity time that the primary resource is in a utilized state,
and will be charged to the cost of the entity performing the activity.
Batch Size The batch size for this activity. If not specified, then defaults to the operation quantity.
Consumed The material which is to be either specifically consumed or whose bill of materials is to be
Material consumed by this activity.
Name
NumberBatchesRequiredFor(entity) Returns the total number of sequential batches required for the specified
entity to perform the activity.
CurrentBatchDurationFor(entity) Returns the time duration (in hours) to perform the activity for the
specified entity’s current batch. If the entity is not currently performing the
activity then NaN is returned.
682 / 1277
Simio Reference Guide
Operation - DEPRECATED
Operation - DEPRECATED
An operation is a sequence of activities that are performed by an object over time. An operation may have one or more
activities.
NOTE: It is recommended that the TaskSequence element and StartTasks step be used instead of the deprecated
Operation / Activity elements and associated steps.
Listed below are the properties of Operation:
Property Description
Quantity The item quantity assumed for each entity executing this operation.
Activities This operation's activities in the sequence that they must be performed.
Activity Resources This operation's activities in the sequence that they must be performed.
Activity The method for specifying the object(s) required as a secondary resource.
Resources.Object
Type
Activity The name of the object list from which to select objects.
Resources.Object List
Name
Activity The range of activities that the secondary resource is required for.
Resources.Activity
Range
Activity The specific activity specified as an index in the operation's activity list.
Resources.Activity
Index
Activity Indicates whether a move to a specified location will be requested from the seized
Resources.Request resource(s). The executing token will be held in the Seize step until the resources have
Move arrived to the requested location.
Activity The name of the specific node location that the seized resource(s) will be requested to
Resources.Destination move to. If not specified, and the owner object performing the seize is an entity object
Node at a node, then this property defaults to that owner entity's current node.
Activity The priority of the move request if a PlanVisit step or SelectVisit step is used by the
Resources.Move seized resource(s) to choose a visit destination from the multiple candidates. If not
Priority specified, and the owner object performing the seize is an entity object, then this
property defaults to that entity's Priority state value.
Activity The number of capacity units that are required per object.
Resources.Units Per
Object
Activity The goal used to rank object preference when multiple candidates are available.
Resources.Selection
Goal
Activity The expression criteria, evaluated for each candidate object, used with a SmallestValue
Resources.Selection or LargestValue selection goal. Use the keyword Candidate at the beginning of the
Expression expression.
Activity An optional condition evaluated for each candidate object that must be true for the
Resources.Selection object to be eligible for seizing. In the condition, use the keyword Candidate to
Condition reference an object in the collection of candidates (e.g.,
Candidate.Object.Capacity.Remaining).
Activity Resources.On Optional process that is executed by a token associated with a seized object after the
Seized Process seize occurs.
Activity Resources.On Optional process that is executed by a token associated with a released object after the
Released Process release occurs.
Activity Indicates whether costs for the use of the seized resource(s) will be charged, or
Resources.Accrue accrued, to the cost of the owner object.
Usage Costs
Activity This property indicates when the one-time 'cost per use' for a seized resource will be
Resources.Per-Use charged, or accrued, to the cost of the owner object. Note that, if the owner is an entity
Cost Accrual object, then the 'AtNextStation' accrual method will charge the cost to the entity the
next time it enters a station location.
Maximum Makespan Defines the maximum amount of time which this operation can be performed, from the
start of the first activity until the end of the last activity.
Report Statistics Specifies if statistics are to be automatically reported for this element.
*Note: The above function is currently used by the Workstation in its logic to not allow an entity to seize the Workstation
unless the following condition is true: ( Operation.EstimatedMakespanFor( Entity) = ( MaximumMakespan -
MakespanBufferTime)
685 / 1277
Simio Reference Guide
BinaryGate
BinaryGate
The BinaryGate user defined element defines the gate name and its characteristics. A BinaryGate is initially closed and
must be opened before any object can flow through it. The BinaryGate element is used in conjunction with the OpenGate,
CloseGate and PassThruGate user defined steps.
Listed below are the properties of BinaryGate:
Property Description
Public Specifies if this element is publicly accessible outside of its containing object.
Report Statistics Specifies if statistics are to be automatically reported for this element.
686 / 1277
Simio Reference Guide
DbConnect
DbConnect
The DbConnect user defined element defines the database provider and connection to the database. It is used in
conjunction with several of the user defined steps, including DbExecute, DbQuery, DbRead, and DbWrite.
Listed below are the properties of DbConnect:
Property Description
Connection Specifies the connection string used to establish the connection to the database. If you need
String assistance, use the database bind wizard in the Data tab, Tables panel. The connection string is
available if you select the 'Custom connection string' option in the Import Your Database dialog.
Provider Specifies the provider type to specify what database provider to use to connect to the database.
Name Typically MySQL data provider is not available unless the user installs the MySQL.net client
(mysql-connector-net-6.6.5.msi). Other providers come with the .NET framework. If you enter an
incorrect provider, when you run the model, the list of available providers is shown.
Report Specifies if statistics are to be automatically reported for this item.
Statistics
687 / 1277
Simio Reference Guide
ExcelConnect
ExcelConnect
The ExcelConnect user defined element may be used in conjuntion with the user defined ExcelRead and ExcelWrite steps
to read and write to an Excel spreadsheet.
Listed below are the properties of ExcelConnect:
Property Description
Excel Specifies the location of the spreadsheet.
Workbook The ExcelConnect handles the following (workbook in same Folder, workbook in relative folder
and workbook in absolute folder). ExcelReadWrite.xlsx, .\Test\ExcelReadWrite.xlsx, C:\temp\
ExcelReadWrite.xlsx
Report Specifies if statistics are to be automatically reported for this item.
Statistics
688 / 1277
Simio Reference Guide
File
File
The File user defined element defines the file name and its characteristics. The user should ensure that they have sufficient
privledges to write to the location that they specify for the file path.
The File element is used in conjunction with the Read and Write user defined steps. See the WritingToAFile SimBit for an
example on how to use the File Element.
Listed below are the properties of File:
Property Description
Public Specifies if this element is publicly accessible outside of its containing object.
Report Statistics Specifies if statistics are to be automatically reported for this element.
File Path The full path of the file to read from or write to.
689 / 1277
Simio Reference Guide
Properties
Properties
Properties of a model object are the input parameters associated with that object. They are added to a model from the
Properties panel of the Definitions window.
A Property holds a specific data type. It is a static input parameter (e.g. processing time, batch size) for the object and does
not change during the running of the simulation. There are four different types of Properties that can be added to the
model by selecting the appropriate icon in the ribbon menu; Standard Properties, Element Reference Properties, Object
Reference Properties and Repeat Group Properties. Learn more about the properties of the Simio standard objects by
viewing the details of each Standard Library Object.
Properties may also be put into repeating groups. An example of a repeating property is the Assignments(More) property
of the Assign step in the Processes window. These repeat group type properties allow the user to specify multiple, similar
properties within a different interface. See Repeat Groups for more information.
The main model properties may be referenced by properties of objects within your model – i.e. they get their values from
these properties. The easiest way to simultaneously add the main level properties and create the reference to it is to right-
click on a property of interest for an object within your model and select “Add Reference Property”. This adds a new
property to the parent model and sets the reference to this new property. You can see this new property by clicking on the
Definitions tab and selecting the Properties panel for your main model. Changing the default value of the property affects
the model if that property is referenced by objects in the model.
Different types of properties (as shown above, for example, Real, Integer, Expression, Entity Object Reference, etc.) may
have different properties that can be specified to determine their behavior. The properties for a Real type Property are
shown below and include Logic, Appearance and General Type properties.
Within the Logic portion of properties, the Default Value can be specified. This is the initial value that the property has and
can typically be changed. Each property also has three properties called Switch Property Name, Switch Condition and
Switch Value. These are used if this particular property is only used based on the value of another property. For example,
the property of a Fixed object type called InitialCapacity is only displayed if the property Capacity Type is equal to the
value 'Fixed'. It does not make sense to display Capacity if the Capacity Type is 'WorkSchedule'. Therefore, on the property
Capacity, the Switch Property Name is set to 'CapacityType', Switch Condition is set to 'Equal' and Switch Value is set to
'Fixed'. See the main Model's Definitions window, Properties panel and select the property InitialCapacity to see this
example. The Switch Value property can have multiple values associated with it. To specify multiple values within the Switch
Value field, enter the values, separated by commas. For example, if a property, Property2, is displayed only if another
property, Property1, has a value of either 1, 2 or 4, then the Switch Property Name for Property2 would be 'Property1', the
Switch Condition would be 'Equal'and the Switch Value would be '1, 2, 4'.
Within the Appearance category of information, the Display Name is used to show what is displayed to the user within the
object. A property may be categorized, such that it appears within a given section based on the Category Name of
properties for that model object. Properties will be shown in the model, as well as the experiment, based on their Category
Name. It may also have a Parent Property Name, such that it is listed 'underneath' another property and accessible with the
'+'.
Within the General section of properties for a Property are two other important pieces of information for the Property. The
Required Value determines whether the user must include a value for this property to run the simulation. The Visible
determines whether or not the user actually sees this value with the list of properties for the object. Prior to Simio sprint
169, there was also a Commonly Used Property field that determined whether the property would appear when the 'Show
Commonly Used Properties Only' checkbox. Simio no longer includes the 'Show Commonly Used Properties Only' for
objects, thus this property is no longer available. When an object is used in hierarchy, you will have inherited properties
from that object. For inherited properties, there is an Advanced Options property named Check Base for Advanced
Properties that determines if you want to use the same settings used in the parent object. If you subclass from the Standard
Library, this should already be enabled.
Listed below are the commonly used properties of Properties:
Property Description
Default The default value for the property.
Value
Switch The name of the enum property that is used as an on-off switch to make this property visible.
Property
Name
Switch The conditional operator used to compare Switch Property Name to Switch Value.
Condition
Switch The value of the Switch Property Name that is checked against the Switch Condition to indicate
Value whether this property is visible. To use multiple values of Switch Property Name in the comparison,
enter the values separated by commas.
690 / 1277
A Property can be used as an input parameter into an Experiment. Once a Referenced Property is added to a model, it then
appears in the table of the Experiment Design Window. The user can enter a value into the table for that Property and
might choose to run multiple scenarios, each with a different value entered for the Property(s).
HasValue function - For element and object type properties, this function would be referenced as
'ElementPropertyName.HasValue' or 'ObjectPropertyName.HasValue'. This function is useful for checking in model logic
whether an optional property has been specified a value or not. The function returns True (1) if a value has been specified
for the property, otherwise the value False (0) is returned. If the property is a repeat group, HasValue will return True(1) if
one or more entries have been entered into the repeat group, otherwise the value False (0) is returned.
NOTE: Ctrl-X (Cut), Ctrl-C (Copy), and Ctrl-V (Paste) is supported for Properties. Please refer to the User Interface for more
details.
Property Default Values and Macros
There are 'macros' that can be put in the default value of a property that will expand to the correct value when an object
with that property is instantiated. These macros include:
$(InstanceName)
$(DefinitionName)
$(AssociatedObjectInstanceName)
$(AssociatedObjectDefinitionName)
These macros make it easier to design a library object that can be reused without errors occuring.
Note
An Expression Property may contain random variables or state variables that return a different value each time.
Hence although the expression definition does not change during the run, the value of the expression does.
Both a State Property and an Expression Property have dual behavior because they are derived from a Numeric
Property. A State Property can be used to reference a state variable (e.g. statistics element) or it can be used to
return the value of the state variable. An Expression Property can be used to reference an expression or it can be
used to return the value of the expression.
The user has the ability to hide values for an Enum Property or to change the caption that is displayed in the
Enum property. This is done by expanding the Captions category in the Enum properties window and selecting or
unselecting values or changing the display name of the value.
In order to add rows to a Repeating Group Property, first add a Repeat Group property in the Properties
window. Then ensure that it is selected (highlighted) and add the properties that you wish to be part of the
repeating group. The sub-properties will appear in the Properties window under a category such as
RepeatingProperty1.Properties.
The DateTime is a Numeric Property that returns the time span from the starting date of the simulation to itself.
For example, if the starting date of the simulation was 1/1/2008 12:00:00 AM, and the DateTime is 1/1/2008
2:30:00AM, the value 2.5 is returned if DateTime is referenced in an expression or an Arrival Table.
691 / 1277
Simio Reference Guide
Repeat Groups
Repeat Group Properties
Properties may be put into repeating groups. Examples of a repeating property are the Assignments(More) property of the
Assign step, as well as the Seizes property of the Seize step, in the Processes window. These repeat group type properties
allow the user to specify multiple, similar properties within a different interface.
Repeat Groups are also used if a model uses a Data Table, but then is used as a submodel inside another model. Since
Data Tables should exist at the top level model and not the submodel, a Repeat Group is created on the submodel instead
of keeping the reference to the Data Table. To learn how to Convert a Table to a Repeat Group, see Using A Custom
Object in a Model page.
Within the Standard Library objects, many of the objects have repeating properties in the State Assignments section. For
example, within the Server, state assignments can be made On Entering or Before Exiting the Server. A repeating property
is shown in the user interface with a default value of '0 Rows' with a small button on the right side containing '...'. By
pressing the button, the repeating property dialog opens to allow any number of repeating property assignments.
692 / 1277
Referencing Tables within Repeating Properties
The procedure for referencing a table entry from within a repeating property depends upon how the table is referenced.
Typically, when referencing a table column, the entity previously was assigned a pointer to a specific row in the table. This
is done using the SetRow step in the Processes window or through the Table Row Referencing within the Source object.
Below are the steps for referencing a simple table and a relational table from within a repeating property.
For more information on referencing tables within repeating properties, please see the SimBits
TableReferenceInRepeatingProperty, RelationalTableInRepeatingProperty and SourceWithCustomEntityTypeProperty.
Simple Table References
Tables may be referenced within a repeating property and repeat group field. When referencing a table column within a
particular repeating property, you would specify MyTableName.MyPropertyName, where MyPropertyName is the name of
the property column within the table. This referencing assumes that the user has already put an explicit SetRow to this
same table earlier in the logic. In the below example, there are two entity types (PartA and PartB) which require a different
resource for processing at a Server (PartA requires Jane, PartB requires Joe). The information about the entity types and
associated resource needed is stored in a table, EntityNames. The processing entity, prior to referencing the table, used a
SetRow of EntityNames and the particular row number.
The Object Name references the table by using 'EntityNames.ResourceName'. Once the table is referenced within the
repeating property, '1 Row' will appear in the Processing Tasks (or similarly Secondary Resources areas) property of the
Server. When Simio encounters the table reference in the repeat group tuple, the resource can be determined because it
already has a row set for that table for the current entity.
In this case, because the entity has no known row within the Resources table, one additional step is needed. In addition to
referencing the table and property column within the actual repeating property, the table name must be referenced in the
main property. For example, as shown in the diagram below, the table, Resources, is referenced in the Secondary Resources
property. To reference a table within a property, right click on the property and select the Set Referenced Property and
select the table name to reference, as shown below. By doing this, the software will know that there are not a fixed number
of entries based on what has been entered into the repeat group, but it is based on what is shown in the table.
695 / 1277
Simio Reference Guide
States
States
Simio allows the user to add either a Discrete State or a Continuous State to the model. States are added to a model from
the States panel within the Definitions window. For additional information on how to assign a State to an object, see the
help topic Assigning States.
States are categorized as either Inherited or not. Inherited states automatically are generated with a given object. Other
states are added by the user. The user interface of the States window allows the user to sort and/or filter the columns
(Name, Object Type and Display Name). To the right of each column name is an arrow icon for sorting and a filter icon for
filtering. This allows users to more easily organize an object's states when there are many defined.
Discrete States
A Real state variable represents a real numeric value that may change by assignment logic at discrete times during a
model run.
An Integer state variable represents an integer numeric value that may change by assignment logic at discrete times
during a model run.
A Boolean state variable represents a boolean (true or false)value that may change by assignment logic at discrete
times during a model run.
A DateTime state variable represents a datetime value that may change by assignment logic at discrete times during
a model run.
A List state variable represents an integer variable with a discrete set of possible values from 0 to N. A zero-based
indexed string list is used to define the possible integer values for the state. A list state's value may be changed by
assignment logic at discrete times during a model run, and the state will automatically collect and report time-
persistent statistics for each of its state values. For more information, see List States.
A String state variable represents a string value that may change by assignment logic at discrete times during a
model run. For more information, see String States.
An Element Reference state variable defines an element reference variable that may be changed by assignment
logic at discrete times during a model run. You can assign a value to an element reference state using an Assign step
in a process. The expression used as the value for the assignment must return an element reference.
An Object Reference state variable defines an object reference variable that may be changed by assignment logic at
discrete times during a model run. You can assign a value to an object reference state using an Assign step in a
process. The expression used as the value for the assignment must return an object reference.
A List Reference state variable defines a list reference variable that may be changed by assignment logic at discrete
times during a model run. You can assign a value to a list reference state using an Assign step in a process. The
expression used as the value for the assignment must return a list reference, for example from an Object List Property
or another List Reference State.
Continuous States
A Level continuous-change state variable defines a numeric variable that may change continuously over time based
on the current value of its rate. An automatic rate variable, based on the LevelStateName.Rate can be used to modify
the rate of change throughout the simulation run. The state's rate parameter is a discrete-change value that may be
changed by assignment logic at discrete times during a model run.
A Level with Acceleration continuous-change state variable defines a numeric variable that may change
continuously over time based on the current value of its rate and acceleration. The state's rate, acceleration and
acceleration duration parameters are discrete-change values that may be changed by assignment logic at discrete
times during a model run.
696 / 1277
A State might represent a count of completed parts, the status of a machine selected from an enumeration state list, the
temperature of an ingot heating in a furnace, the level of oil in a ship being filled, or the accumulation level on a conveyor
belt.
A Real or Integer state has a property called Unit Type. This classifies the units of the values stored in this state variable.
The choices are Unspecified, Time, TravelRate, Length, Currency and CurrencyPerTimeUnit. Time units available in Simio
are Hours, Minutes, Seconds, Days and Weeks. Travel Rate units available in Simio are Meters Per Hour, Meters Per Minute,
Meters Per Second, Kilometers Per Hour, Feet Per Second, Feet Per Minute and Miles Per Hour. Length units available in
Simio are Meters, Kilometers, Centimeters, Inches, Feet, Yards and Miles. Currency units include over 100 world-wide
currency units.
A State variable is assigned a value using an Assign Step in a process. Statistics can be recorded on state variables by
creating a StateStatistic element in the Elements Window.
Every object in Simio has States that are inherited from its base class. To learn more about inherited States on each type of
object, see the following Functions, States and Events help pages for Entity object, Node objects, Link objects, Transporter
objects and Resource objects.
NOTE: Ctrl-X (Cut), Ctrl-C (Copy), and Ctrl-V (Paste) is supported for all States. Please refer to the User Interface for more
details.
State Arrays
All reference states, with the exception of a List state, can become arrays or a matrices by changing the the Dimension Type
property. If the Dimension Type property is set to 'Scalar', the State does not have a dimension and is therefore a scalar
Discrete State. If the Dimension Type property is set to 'Vector', the State is 1 dimensional and the Rows property will
determine the number of rows in the array. If the Dimension Type property is set to 'Matrix', the state is a 2-dimensional
matrix and the Rows and Columns properties will determine the number of rows and columns in the matrix. The Dimension
Type property may also be set to 'Matrix From Table or Repeat Group' meaning that there is an associated table or repeat
group from which the 2-dimensional array is sized and initialized. Finally, up to 10-dimensional arrays may be specified by
selecting the appropriate Dimension Type property, as shown below.
697 / 1277
In order to reference a State Array, use the syntax StateArray[2], where StateArray is the name of the State variable and 2 is
the value of the row that is referenced. A multi dimensional State Array can be referenced similarly, such as, StateArray[2,3]
where 2,3 is the index to the matrix in this 2 dimensional array. State Array indexing is 1 based.
In order to initialize a State Array, the user should bind the array to a Data Table or Repeat Group. When bound, the array
size will be initialized from the number of rows and numeric columns in the table or repeat group, and the array data will
be initialized from the data in the table or repeat group. To bind an array to a table or repeat group, set the Dimension
Type property of the state to 'Matrix From Table or Repeat Group' and select the appropriate table or repeat group from
the drop down of the Table or Repeat Group Name property.
Table or The table or repeat group from which the array is sized and initialized (used for 'Matrix from Table
Repeat or Repeat Group' Dimension Type). The array is given the same number of rows as the table and a
Group column for each numeric column (number, expression, state reference) in the table. Numeric values
Name are then copied from the table to the array. Expressions are evaluated to get their numeric value and
the state references get the value from the state.
Unit Type Classifies the units of the values stored in this state variable.
String List The name of the string list that defines the list state's discrete set of possible integer values and their
Name associated labels. Note that the integer equivalent of each value label in the string list will be the
zero-based index into the list.
Automatic Indicates whether automatic assignments to this list state will be performed by the simulation
Assignment engine, with each possible list state value being associated with an autostate.
Type
Resource Indicates the method used to calculate capacity utilization statistics for the resource object
Utilization containing this list state.
Calculation
Auto Reset Indicates whether or not this state variable will be automatically reset to its initial state value(S)
When whenever statistics for the state's parent object or element are cleared. This could be from warm-up
Statistics Period in an experiment or from using the ClearStatistics step.
Cleared
698 / 1277
Display The optional format specifier used when displaying this state's value. Specifiers includ N or F
Format followed by an optional number of decimal places. If left blank, the format will be N4 (Number, 4
digits after the decimal point).
Unit Type The name of the property whose value will be used to determine the units classification of this state.
Property
Queue States
A Queue State holds a list of objects or tokens. Queue states are used in such things as Station and Storage elements.
Queue states in Storage elements can be modified by using the Insert and Remove step to add and remove objects from
them. There are a number of functions that can be used with Queue States.
699 / 1277
Simio Reference Guide
List States
List States
There are two types of List States including Automatic List States and User Defined List States. There are also functions
available to use with List States.
Automatic List States for Standard Library - Server, Combiner, Separator, Resource, Vehicle, Worker and
Workstation (Deprecated)
With many of the Standard Library objects, there is an automatic List State that is updated during the simulation, namely
the 'ObjectName.ResourceState'. This list state references a string list named 'ResourceStateName' and the states are
automatically assigned as 'ResourceAutoStates'; therefore, no user assignments to the list state are required.
When using the 'ResourceAutoStates', the interface displays and allows the configuration of the autostates associated with
the possible list state values. Multiple list entries may be associated with a single autostate (i.e., in the Workstation list
shown below, Processing, Setup and Teardown are all AllocatedAutoStates). Additionally, you may use the Assign step to
assign a list state that is following autostates. The assignment is allowed as long as the state value being assigned is
associated with the current autostate condition. The simulation engine also will ‘save’ the last assignment as the state value
to be now used whenever it comes back to that particular autostate condition.
These automatic resource states have statistics calculated for the number of occurences and percentage of time spent in
each given state. The Status Pie may be used to graphically display the various states of an object. A Status Pie may be
added by highlighting the desired object, i.e., Server1, and clicking on the Status Pie on the Symbols tab. Specify the Data
Type property as 'ListState' and the List State property is 'ResourceState' as selected from the pulldown.
Below are the contents of the string list 'ResourceStateName' for the various objects and the object states that may be
assigned.
Server, Combiner and Separator
'ResourceStateName' string list for the Server, Combiner and Separator object 'ResourceState' list state and the numerical
equivalents include:
Starved (0)
Processing (1)
Blocked (2)
Failed (3)
Offshift (4)
FailedProcessing (5)
OffshiftProcessing (6)
Setup (7)
OffshiftSetup (8)
Resource
'ResourceStateName' string list for the Resource object 'ResourceState' list state and the numerical equivalents include:
Idle (0)
Busy (1)
Failed (3)
Offshift (4)
FailedBusy (5)
OffShiftBusy (6)
Vehicle
'ResourceStateName' string list for the Vehicle object 'ResourceState' list state and the numerical equivalents include:
Idle (0)
Busy (1)
Failed (3)
Offshift (4)
FailedBusy (5)
OffShiftBusy (6)
Transporting (7)
FailedTransporting (8)
OffShiftTransporting (9)
Worker
'ResourceStateName' string list for the Worker object 'ResourceState' list state and the numerical equivalents include:
Idle (0)
Busy (1)
700 / 1277
Offshift (4)
OffShiftBusy (6)
Transporting (7)
OffShiftTransporting (9)
Workstation (Deprecated)
'ResourceStateName' string list for the Workstation object 'ResourceState' list state and the numerical equivalents include:
Starved (0)
Processing (1)
Blocked (2)
Failed (3)
Offshift (4)
Setup (5)
Teardown (6)
Automatic List States for Flow Library - Tank, ItemToFlowConverter, FlowToItemConverter, ContainerEntity, Filler,
Emptier
As with the Standard Library objects, many of the Flow Library objects also include automatically updated states. For the
flow objects with a Container element, there is an automatic List State that is updated during the simulation, namely the
'ObjectName.FillStatus'. Each of these objects has an internal FlowContainer element and the states are automatically
assigned as 'ContainerAutoStates' associated with that FlowContainer element; therefore, no user assignments to the list
state are required. The Filler and Emptier objects have an automatic List State that is updated during the simulation,
namely the 'ObjectName.ResourceState'. This list state references a string list named 'ResourceStateName' and the states
are automatically assigned as 'ResourceAutoStates'; therefore, no user assignments to the list state are required.
These automatic container states have statistics calculated for the number of occurences and percentage of time spent in
each given state. The Status Pie may be used to graphically display the various states of an object. A Status Pie may be
added by highlighting the desired object, i.e., Tank1, and clicking on the Status Pie on the Symbols tab. Specify the Data
Type property as 'ListState' and the List State property is 'FillStatus' as selected from the pulldown.
Below are the ContainerAutoStates for the various objects and the object states that may be assigned.
Tank, ItemToFlowConverter, FlowToItemConverter, ContainerEntity
The 'FlowContainer' within each of the objects has the following list states and the numerical equivalents:
Empty (0)
PartiallyFull (1)
Full (2)
Below are the contents of the string list 'ResourceStateName' for the various objects and the object states that may be
assigned.
Filler, Emptier
'ResourceStateName' string list for the Filler and Emptier object 'ResourceState' list state and the numerical equivalents
include:
Starved (0)
Processing (1)
Blocked (2)
Failed (3)
Offshift (4)
FailedProcessing (5)
OffshiftProcessing (6)
User Defined List State using Lists, States and Assign step
701 / 1277
User defined List States will automatically generate statistics for the model (not specific object) on the number of
occurences and percentage of time the List State has a value for each of the given string values. The List State can also be
graphically displayed by using the Status Pie found on the Animation tab of the ribbon.
List States Functions
The following functions are available for List States:
AverageTime(stateValue)
NumberOccurances(stateValue)
PercentTime(stateValue)
TotalTime(stateValue)
Therefore, to reference the percentage of time that an object was in a certain state, use the syntax
[ObjectName].PercentTime(stateValue), where stateValue is the number referencing the state in the String List. The first
value in the String List is value 0.
Utilization Statistics
The ResourceState list states provide time-persistent statistics for many of the objects in the simulation system. In addition
to tracking these utilization statistics for the Results page, the ResourceStates can also be used during the simulation run.
Because Simio automatically tracks the list states for the various objects, the information is available to track resource
utilization statistics during a simulation run to be displayed with a status label. While a status pie graphic for an object's list
state can give you a pie chart of the various states that the object is in, using the object's list state in an expression can show
the percentage of time in each state.
For example, the expression 'Server1.ResourceState.PercentTime(1)' utilizes the resource state for Server1 to determine the
percentage of time that the server has the state value of 1 (which is Processing, as shown in the above section). Likewise,
'Vehicle1[1].ResourceState.PercentTime(0) would show the percentage of time that the first unit of Vehicle1 has the state
value of 0, which is Idle.
It may be desireable to determine the percentage of time in multiple states for an object. For example, if a worker is used
for transporting tasks as well as stationary tasks, use the expression 'Worker1[2].ResourceState.PercentTime(1)+
Worker1[2].ResourceState.PercentTime(7)' to display the percentage of time that the second unit of Worker1 is either busy
at a stationary task or busy transporting or moving between nodes.
Refer to the SimBits ExamplesOfFunctions_StaticObjects and ExamplesOfFunctions_DynamicObjects for examples of using
and displaying various functions with static objects(Source, Sink, Path, Server, and Resource) and dynamic objects (Entity,
Vehicle, Worker).
702 / 1277
Simio Reference Guide
String States
String Expression Functions Available
There are a number of functions that are available when utilizing strings in an expression.
Listed below are the String Expression Functions available:
Function Return Value
String.Length(string) returns the length of a string
String.Substring(string, startindex, returns a substring of string starting at startindex and of the specified length
length)
String.FromDateTime(value) returns a string representation of a datetime value based on the start date
and time of the simulation (String.FromDateTime(6) turns into “October 1,
2010 06:00:00” if the start date of the simulation is “October 1, 2010
00:00:00” )
String.Format(string, arg1, arg2, …) returns a new string formatted with the specified format string and
arguments. We follow the .NET string formatting syntax here:
String.Format(“Hello {0}, you are {1} years old”, “Friend”, 30) turns into “Hello
Friend, you are 30 years old”
String.Compare(string1, string2) returns 0 if the strings are equal, -1 if string1 < string2, 1 if string1 > string2
Simio supports '+' for strings, so “Hello” + “ World” turns into “Hello World”. Also supported are the logical comparison
operators such as ==,>, etc. For example, the expression 'MyStringstate==”Red"' and 'MyStringState > “A”' are valid for use
in a Decide step.
See the StringStates SimBit to see an example of using String States in Simio.
The following links have additional information on .NET standard and custom formatting of datetime and real values,
including .NET Standard Date and Time Format Strings, .NET Custom Date and Time Format Strings, .NET Standard
Numeric Format Strings, and .NET Custom Numeric Format Strings.
See also below examples of formatting within a Simio floor label.
703 / 1277
Simio Reference Guide
Reference States
Element Reference States
An Element Reference state variable defines an element reference variable that may be changed by assignment logic at
discrete times during a model run. You can assign a value to an element reference state using an Assign step in a process.
The expression used as the value for the assignment must return an element reference.
Element Reference states can be arrays. An element reference state that is defined as a scalar is referenced as
'ElementReferenceStateName'. An element reference state that is defined as a vector is referenced as
'ElementReferenceStateName[rowindex]'. An element reference state that is defined as a matrix is referenced as
'ElementReferenceStateName[rowindex, columnindex]'. Refer to the States page section on arrays for more information.
If an element reference state has no current value (null), it returns the keyword 'Nothing'. Users may wish to use this
keyword in a comparison statement to check whether an element reference exists (e.g., Model.ElementReferenceValue ==
Nothing).
704 / 1277
The types of element reference states and how they may be used are described below:
Element - This generic element reference can be used to refer to any of the below element types.
Activity - This refers to the name of an activity and may be used within the Operation element.
BatchLogic - This refers to the batchlogic element and may be used within the Changeover step's Changeover Logic
Name property. This may be useful when various entity types require different changeover logic information that is
then stored within the ChangeoverLogic element reference state.
ChangeoverLogic - This refers to the changeoverlogic element and may be used within the Batch step's BatchLogic
Name property. This may be useful when various entity types require different batching information that is then
stored within the BatchLogic element reference state.
Container - This element reference state is used to store a container name. Containers are utilized within the Flow
Library's Tank object.
705 / 1277
CostCenter - This element reference state is used to store the name of a Cost Center.
Failure - This element reference state is used to store failure names. An object may wish to utilize this state within the
Fail and/or Repair steps within the Processes window.
Material - This refers to a material element name. An entity may have a material element reference state that is used
within the Produce or Consume steps within the Processes window.
Monitor - This refers to the name of a monitor element. An entity may have a monitor element reference state that
tracks a particular state of the entity.
Network - This refers to a network name. Entities may utilize a network element reference state to store individual
network names that may later be used in a SetNetwork step in the Processes window.
Operation - This refers to an operation name and may be used within the StartOperation and EndOperation steps
within the Processes window.
OutputStatistic - This refers to an output statistic name and may be used within a table that store statistics on
various states.
Process - This refers to a process name within the Processes window. Entities may have a state variable that stores a
different process name for each entity type, where within a Server for processing, the element reference state is used
within an add-on process property to point to different processes to undergo.
Regulator - This refers to a regulator element name. Regulators are used within the Flow Library's FlowNode (and
therefore Tank, FlowSource and FlowSink).
Routing Group - This refers to a routing group name that may include various nodes in which the object will go
through. Routing groups refer to node lists. The routing group element reference would then be used within the
Route step as the Route Group Name property.
StateStatistic - This refers to the name of a state statistic element. One application of a state statistic element
reference would be within a table to store the various state statistics.
Station - This refers to the name of a station element. An entity may have a station element reference and utilize that
variable within the Transfer step in the Processes window to transfer to a given Station Name based on the element
reference state.
Storage - This refers to a storage element name and may be used within the Insert or Remove steps as the Queue
State Name property.
Task Sequence - This element reference state refers to a task sequence element. An entity may have a reference to
the task sequence element and utilize it within the StartTasks step as the Task Sequence Name property.
Tally Statistic - This element reference state refers to a tally statistic element. An entity may have a reference to the
tally statistic element and utilize it within the Tally step as the Tally Statistic Name property.
Timer - This refers to a timer element name. This type of reference may be useful within a table, for example.
With the above element reference states, the state can be referenced by simply using the object name and element
reference name. For example, if you have a tally statistic element reference state on ModelEntity, then it is referenced
'ModelEntity.TallyStatisticStateName' within the Tally step in the Processes window. Likewise, if you have a Process
reference state named 'P1' on an entity, it would be referred to as 'ModelEntity.P1' within a step or property requiring a
process name.
Object Reference States
An Object Reference state variable defines an object reference variable that may be changed by assignment logic at
discrete times during a model run. You can assign a value to an element reference state using an Assign step in a process.
The expression used as the value for the assignment must return an object reference.
Object Reference states can be also be arrays. An object reference state that is defined as a scalar is referenced by
'ObjectReferenceStateName'. An object reference state that is defined as a vector is referenced as
'ObjectReferenceStateName[rowindex]' .An object reference state that is defined as a matrix is referenced as
'ObjectReferenceStateName[rowindex, columnindex]'. Refer to the States page section on arrays for more information.
If an object reference state has no current value (null), it returns the keyword 'Nothing'. Users may wish to use this keyword
in a comparison statement to check whether an object reference exists (e.g., ModelEntity.ObjectReferenceValue ==
Nothing).
706 / 1277
Object reference states may also be used with functions for various objects. The types of object reference states and how
they may be used are described below:
Object - This general purpose object reference can be used for any of the below object reference states. An object
reference simply means that the state is some type of object.
Fixed - This general purpose object reference can be used for fixed type object reference states. Standard Library
objects such as Server, Combiner, and Separator are fixed type objects.
Link - This refers to an link reference and may be used to access information related to a particular link, such as a
conveyor or path.
Node - This object reference state is used to reference a node name. An entity may wish to reference a node within
the Transfer step or any object's property that requires a node name reference. The reference can also be used to get
function information on the node.
Entity - This refers to an entity reference and may be used to access function information related to entities.
Transporter - This refers to a transporter name. Entities may utilize a transporter reference state to store a worker or
vehicle name. This type reference may also be used with transporter type functions.
With the above object reference states, if the object is clearly known (i.e., entity, transporter), then the state can be
referenced by simply using the object name and object reference name. For example, if you have a transporter object
reference state on ModelEntity, then it is referenced 'ModelEntity.TransporterStateName' within a Transporter Name
property.
As with the element reference states, it is important to note that if you have an Object type reference state, which is more
'generic', you may need to explicitly cast it to a reference of some type. For example, if you have an Object reference state
called Object1, and you wish to utilize this state variable to store a Transporter object reference, you would reference
'ModelEntity.Object1.Transporter'. Whether or not you need to include the extra 'type' of reference depends upon the type
of property field where it is being utilized. If a property asks for Object Name, for example, then an object reference state
can be utilized without the extra 'type'. With object references, this 'typing' is required because an object is a more 'generic'
type of reference state and the various properties in which object reference states may be utilized may require the
reference to be of a specific type.
Please refer to the two SimBits on Object Referencing, ObjectReferenceOnEntity, and SeizingSameResourceFromList for
examples.
List Reference States
A List Reference state variable defines a list reference variable that may be changed by assignment logic at discrete times
during a model run. You can assign a value to a list reference state using an Assign step in a process. The expression used as
the value for the assignment must return a list reference, for example from an Object List property or another List
Reference State.
If a list reference state has no current value (null), it returns the keyword 'Nothing'. Users may wish to use this keyword in a
comparison statement to check whether a list reference exists (e.g., ModelEntity.MyWorkerList == Nothing).
707 / 1277
Simio Reference Guide
Events
Events
An Event is a notification that can be given by one object and responded to by several. An Event is added to a model from
the Events panel within the Definitions window. An Event is fired with a Fire step in a process. A Process waits for a fired
event by having its Triggering Event property set to the name of the event that it is waiting for. A Wait step can also be used
to wait for an event to be fired. The Subscribe step can be used to dynamically add a triggering Event to a process.
For an example of adding new Events, please refer to the SimBit UsingButtonsToAffectSystem.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for Events. Please refer to the User Interface for more
details.
There are a number of events that are automatically fired by Simio. The following events are summarized by object type,
where ObjectName is replaced by the name of the actual object:
Standard Server and Workstation ( Deprecated) Objects
ObjectName.CapacityChanged
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
ObjectName.Failed
ObjectName.Repaired
Note: Source and Sink objects are similiar except that Source does not have an Input Node and Sink does not have Output
Node. Combiner and Separator are also similar except that Combiner has both ParentInput and MemberInput and
Separator has both ParentOutput and ParentInput.
Standard Resource Object
ObjectName.CapacityChanged
ObjectName.Allocated
ObjectName.Released
ObjectName.Failed
ObjectName.Repaired
Standard Entity Objects
ObjectName.CapacityChanged
ObjectName.Destroyed
ObjectName.Engaged
ObjectName.Transferred
ObjectName.Transferring
Standard Vehicle and Worker Objects
ObjectName.CapacityChanged
ObjectName.Destroyed
ObjectName.Engaged
ObjectName.Transferred
ObjectName.Transferring
ObjectName.RiderLoaded
ObjectName.RiderUnloaded
ObjectName.Allocated
ObjectName.Released
ObjectName.RemainInPlaceEnded
708 / 1277
ObjectName.MinimumDwellTimeExpirationReset
ObjectName.Failed ** Vehicle only
ObjectName.Repaired ** Vehicle only
Standard Node Objects
ObjectName.Entered
ObjectName.Exited
ObjectName.RiderWaiting ** TransferNode only
Standard Link Objects
ObjectName.CapacityChanged
ObjectName.Failed ** Conveyor only
ObjectName.Repaired ** Conveyor only
709 / 1277
Simio Reference Guide
Functions
Functions
A function is a query of a calculated value that can be called by another object. To query for the value of a function, use it
in an expression.
Any functions defined within this window are then listed under the 'User Functions' section of the Watch window during a
simulation run.
Functions are most useful for sharing an expression across several objects. For example if you have a complex expression
for calculating a processing time, and you use that expression in several different places, you can instead make that
expression a function. This can make your model easier to maintain, since you can now update the expression in just one
place and the new value will be returned everywhere that uses the function.
You can also use functions simply to make your model easier to read. Rather than having the complex expression directly
referenced in your model, you can define the expression as a function, and give that function a meaningful name.
By combining the two above features, you can simplify routine use of your model. Say, for example, you had two different
common ways of calculating processing time. To avoid typing and retyping the appropriate expression each time you
change, you could define functions named “PTime_MethodA” and “PTime_MethodB” with the appropriate expressions and
just change between those names as desired.
Listed below are the properties of Functions:
Property Description
Expression The expression to evaluate for the value of this function.
Return The type of the result returned from the expression. Return Type can be Number, String,
Type ElementReference or Any.
Unit Type The type of units for the value of this function. Available for Number and Any.
710 / 1277
Simio Reference Guide
Lists
Lists
Lists are used to define a collection of strings, objects, nodes, or transporters. List are also used to define the possible
changeover states for a changeover matrix (e.g. color, size, etc.), or to provide a list from which a selection is to be made
(e.g. a resource to seize, transporter to select, etc.). A List is added to a model from the Lists panel within the Definitions
window. It can also be added by right-clicking on an object(s) within the Facility window, as described below.
The members of list have a numeric index value that begins with 0. A List value may be referenced in an expression using
the format List.ListName.Value. For example, if we have a list named Color with members Red, Green, Blue, Yellow, then
List.Color.Yellow returns a value of 3. If we have a ListProperty (i.e. a property whose possible values are list members)
named BikeColor we can test conditions like BikeColor == List.Color.Yellow.
One can also reference a List within another object. For example, if there is a list on a ModelEntity and you want to assign a
value from this List to a ListState within the Model, you can use the syntax ModelEntity.ListProperty1 ==
ModelEntity.List.MyStringList.Value1, where Value1 is a value from MyStringList.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for all Lists. Please refer to the User Interface for more
details.
String List
Defines a string list (e.g. Small, Medium, Large) that is used to define a list property that can have any value from the list,
or the possible from-to states in a changeover table. Examples of using string lists are the SimBits
SelectEntityColorFromStringList and WorkstationWithSequenceDependentSetup. String lists must be defined in
Definitions window for both the ModelEntity, as well as the Model.
Object List
Defines an object list (e.g. Fred, Sue, Tom) referenced by steps (e.g. Search step) and objects (e.g. Server object) that allow
for a selection of an object from a list of objects. Examples of using object lists include the SimBits
SelectingResouresAsAGroup and SelectingResourceFromList.
Transporter List
Defines a transporter list (e.g. Cart1, Cart2, Cart3) that is used by steps (e.g. Ride step) and objects (e.g. TransferNode) that
allow for the selection of a transporter from a list of transporters.
712 / 1277
Adding Objects to Lists from the Facility Window
In addition to adding members to a List from the Definitions window, Lists panel, user's also have the option to select a
single object or group select multiple objects (using Ctrl-click to select multiple objects or Ctrl-click and drag to select an
area). Once an object or group of objects is selected, the right-click menu includes an 'Add to List' option as shown below.
If only nodes are selected, the option to 'Add to Node List' will be shown. Likewise, if only transporters are selected, the
option to 'Add to Transporter List' will be shown. If multiple object types are selected, the more generic 'Add to Object
List' is displayed. Objects can be members of multiple lists. Once on a list, the right-click menu provides a 'Remove from
List' option as well. The right-click menu provides existing list names as well as a 'Create New List' option, where the user is
then prompted for a new list name.
713 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
714 / 1277
Simio Reference Guide
Tokens
Tokens
A Token executes the steps in a process flow. A Token may have one or more user defined states that carry information
from Step to Step. A Token may also reference an associated object such as an Entity that is visiting the parent object.
Simio provides you with a default token named Token that you can use for most of your processes. The function
ProcessName.TokensInProcess.NumberItems returns the number of tokens currently executing a given process.
Every token executing a process in Simio has an associated object and a contextual object ( ContextObject). For a token
that has been created by a Create or Search step for example, the token's associated object reference is the created entity
or found object, while it's contextobject reference is the object that was associated with the original token that executed
the Create or Search step.
If the token's process execution is part of a task sequence, the Task namespace will provide a set of functions (see table
below) for accessing information about the task assigned to the token.
You only need to add a Token through the Token panel of the Definitions tab if you require a Token with one or more
custom states or if you wish to use a Token as a counter in a process loop.
If you use a custom token with custom states, the states of the receiving token in the called process get set to match, much
like passing function arguments. If you set the ReturnValue of the token in the executed process, that value will be set
(returned) to the token that started the execute, much like a function return value. This allows the user to pass information
between the processes, much like you would with a function. The Execute step is used to move from one process to another.
An example of why a user might want to create a custom Token is if they are using a Create step, with the Create Type set
to 'NewObject', to create a new Entity and they would like the new entity to have one of the same States that the original
Entity has. Before the Create step, the Entity State can be saved into a custom Token State. And then from the Created
segment of the Create step, the Token State can be applied to a State on the new Entity.
If a token has been created to execute an On Replenishment Order Process specified for an Inventory element, then the
destination in its material order detail will be the inventory site requesting the replenishment. Since built-in features for
modelling sourcing policies will not yet be available, the source in the token's material order detail will always be set to
nothing.
If a token has been created to execute an On Consumed Process specified for an Consume step, then the source in its
material order detail will be the inventory site from which that the material was consumed. The destination in its material
order detail will be copied from the material order detail of the original token, if applicable.
Listed below are the States of Token:
State Description
ReturnValue A special-purpose, user-assignable numeric state value.
If the token is executing a decision process, then this state variable is used to return a 'True' or 'False'
value for the decision. It may also be used in the Search step to return the results of an expression
evaluated across the searched collection.
Additionally, if the token is waiting at an Execute step until a specified process is completed, then
this state variable may be used to pass back a 'return value' from the other token that executed the
separate process.
TimeInProcess Returns the time duration (in hours) that this token has been
in process.
MaterialOrderDetail.SourceSiteObject Reference to the inventory site object that is the source of the
material.
Task.IDNumber Returns the integer identifier number used to identify the task
in the Immediate Predecessors or Immediate Successors field
of another task.
Task.TimeStarted Returns the simulation time (in hours) that the task was
started.
Task.TimeInProcess Returns the elapsed time duration (in hours) since the task
was started.
716 / 1277
Task.SeizedResources.NumberItems Returns the number of resources currently seized by the task's
associated object, filtered to only include the resource seizes
that occurred specifically due to the task's execution.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for Tokens. Please refer to the User Interface for more
details.
717 / 1277
Simio Reference Guide
External
External Window
The External panel of the Definitions window consists of two window that allow the user to define the graphical
representation of a model that is instantiated as an object into another model. The External window is comprised of a 3D
drawing that depicts the object, along with external node symbols that define associated node objects that serve as entry
and exit points for the object. These associated node objects are automatically created whenever this object is instantiated
into a model. The External window may also contain animated queue states for the model. This window is available for
Fixed, Agent, Entity, and Transporter type models.
When creating the graphical representation for a model, first place a graphical symbol representing the model by using the
Place Symbol button or drawing features on the Drawing tab. Depending on the type of model you are building, you often
will also place one or more external node symbols. An external node defines an input and/or output point that may be
used to enter or exit the model.
When utilizing hierarchy in building a model (for example, building an object from two servers connected with a path),
objects that are placed within the model's Facility window are, by default, shown in the External window. Within the Facility
window, right-clicking on a particular object or group of objects allows the 'Externally Visible' option to be turned on and
off. Users may wish to selectively show some objects, and not others, from the Facility window into the External window.
Additionally, Simio provides menu features to easily auto-create external node symbols in an object's External window that
are bound to nodes placed in that object's Facility window. If you right-clickg on a node in the Facility window and select
the option 'Bind to External Input Node', then a new external node with Node Class Name of 'BasicNode' and Input
Location Type of 'Node' will be automatically created in the object's External Window. Similarly, by right-clicking on a node
in the Facility window and selecting the option 'Bind to External Output Node', a new external node with Node Class Name
of 'TransferNode' will be automatically created. Refer to the Creating New Objects page for more information on building
objects with hierarchy from the Facility window.
External Window
718 / 1277
All Objects - Properties
Within the External window of any object, select the empty space to view the Vertical Offset property that is the offset (in
meters) that the object should be instantiated above the floor. This may be useful if you are building a custom object, and
want that object to come in by default several meters above the floor. Under the Advanced Options, there is also a
property named Pad Generated Symbol Bounding Box that, if set to 'True' will add "padding" to the symbol generated from
the external view (and any objects from the Facility view set to view in external). This was implicitly 'True' in older versions
of Simio (prior to Sprint 164/165) and for new objects should be left as 'False'. This property was added mainly for
compatability reasons in Sprint 164/165.
Entity / Transporter Objects - Animation Defaults
Within the External window of an Entity or Transporter, select the empty space to view the animation property default
values for that object type. There is a Default Dynamic Label Text that provides a default value for the Dynamic Label Text
of instances of the object. These labels can be turned on/off for a simulation run by using the Dynamic Labels button within
the Visibility ribbon.
Additionally, the Default Link Segment Transition Type property provides the default value for the Link Segment Transition
Type for instances of this object.
NOTE: Multi-Select of objects, as well as Ctrl-X (Cut), Ctrl-C (Copy), and Ctrl-V (Paste), are supported for all objects in this
window. Please refer to the User Interface for more details.
719 / 1277
Simio Reference Guide
Console
The Console allows you to deifne run time status and control mechanisms for your model. It can be used to track the status
of your running model, as well as define a status display when your model is used inside another one.
Several of the objects within the Standard Library include a console. If an object is placed inside another object, such as a
model, the console can be opened by right-clicking on the object and selecting Open Console.
A convenient way to look at the Console window of a model during a run is to tile the windows. To do this, click on the
Definitions tab and move the window to the right side of the screen for docking and select the Console panel. Click on the
Facility tab on the left to activate the Facility window and Definitions window simulataneously, as shown below. The two
windows will now be displayed vertically next to each other. This will allow you to watch both views during the interactive
run. To return the windows to their original position, right click on the Definitions tab and select Move to Previous Tab
Group.
720 / 1277
Simio Reference Guide
721 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
722 / 1277
Simio Reference Guide
Tables
Tables
Within the Data tab, selecting the Table panel allows a user to add either a Data Table, Sequence Table or Output Table
(Professional/RPS Only) by clicking on the appropriate icon in the Add Table drop-down.
To reference a particular row in a table, the following syntax is used: DataTable[1].NumericProperty where the table
name is DataTable, the column (property) in the table is NumericProperty and the row number is 1. An expression that
returns an integer can be used in the brackets to specify a row. See Data Tables for more information about table functions
and table referencing.
Add Property Columns
The data columns within a data or sequence table are added by selecting a Property, Element Reference Property, Object
Reference Property or Foreign Key Property from the Columns area of the Schema ribbon.
The Property list includes data such as integers, reals, expressions, strings, model events and states, and references to other
data such as lists, rate tables and schedules. These properties are typically used to store process times, arrival times or
percentages for incoming part types, quantities, or other numeric data.
An Element Reference Property includes data such as stations, timers, material, failures and other elements that are
defined in the Elements panel of the Definitions window.
An Object Reference Property includes data such as Entity types, Objects such as Resource Names, Nodes and
Transporters, as well as references to Node and Transporter Lists. These properties are typically used to store entity types
for arriving entities, resources to use for processing, or vehicles to request for movement. See also the section within Data
Tables regarding using table columns for List contents. The object references can also auto-create objects into the Facility
window and may use the Object Type of object reference. See the below section on Auto-Creating objects, as well as the
Table-Based Objects page for more detailed information.
A Foreign Key Property reference is used to relate data from multiple data and/or sequence tables. When a foreign key
property is added, the Table Key property is used to make a row in this table link directly to another row in the table
specified by the Table Key. When the row in this table is referenced using a SetRow step in the Processes Window, the data
in the row and the row it points to (via the TableName.Column listed in the Table Key property) will be immediately
available. The TableName.Column that is referenced must be specified as 'Set Column As Key'. It is important to note that
the type of property this column becomes is based on the Table Key's TableName.Column property. Therefore, if you are
referencing an Entity object column, this column will also be Entity objects.
A table can be searched by using a Search Step to browse the table looking for certain criteria. Tables may also be used
with the Candidate keyword in an expression while evaluating a condition. For example, it may be used when selecting a
Worker to seize from a list of workers, where each worker is bound to a particular table row, the Selection Expression may
read "Candidate.TableName.ColumnName > 100". Here you need the candidate keyword to tell Simio you want to know
about the row each candidate worker is bound to, NOT whatever row the executing entity is bound to.
Add State Columns
Within the Simio Professional and RPS (Enterprise) Editions, users can also add State type columns to data tables. See the
State Columns page for more information.
Editing Columns
Under the Edit section of information on the Schema ribbon are multiple options for editing column information. The Set
Column As Key button allows the user to indicate that the highlighted column may be referenced by another data and/or
sequence table. This button makes the current column a Key for this table (you may have multiple columns that are Key in a
single table). This column's data can then be referenced by Foreign Key properties in other tables, which will link the rows in
those tables to a row in this table. The Set Column as Key and Foreign Key are used together for relational type data
tables. See Relational Tables, as well as the UsingRelationalTables SimBit and the
EntityFollowsSequenceWithRelationalTables SimBit for examples on using the relational table functionality.
Once a column has been added to the table, it may be moved to the left or to the right to reorganize the table. This can be
done by selecting the table column you wish to move by highlighting the column header. The Move Left and Move Right
buttons on the Schema ribbon can be used to move the column within the table.
The Change Type drop down button on the ribbon is available when a column is selected. It allows the user to change an
existing column to a new type (real -> expression, string -> real, etc…). When converting, it attempts to keep all values in
the rows of that column; however, the user may have to edit the values based on the column type that is being used.
Any column may be deleted by simply highlighting the column header and pressing the Remove Column button.
Editing Row Data
Highlighting one or more rows in a table will select that row data into the property grid to allow editing of one or more
columns. If a single row is selected, the data value within each column will be displayed. If multiple rows are selected (by
using Shift-click or Ctrl-click), any common data from within each column will be displayed.
723 / 1277
When editing multiple row data, any value changes will affect all selected rows. In the above diagram, for example,
changing the SetupTime from '3' to '6' will change it for all selected rows (1, 6, 10). Note that in the above example, the
ProcessTime value is not shown in the property grid, as it is different for each selected row (row 1 - 0.4, row 6 - 0.35, row 10
- 0.56). Using the property grid to change this ProcessTime will change the value for all selected rows. This is similar
functionality to the property grid with multiple selected objects within the Facility window.
Content Ribbon - Importing, Exporting and Binding To Tables
Within the Content ribbon, the user can import, export and bind to data tables to utilize data external to Simio. See the
Data Connectors page for more information.
Auto-Creating Elements
The Element reference columns within either a Data Table or Sequence Table can be used to automatically create new
Elements (within the Definitions window / Elements panel), as well as their associated properties. See the Table-Based
Elements section for more detailed information.
Auto-Creating Objects
The Object reference columns within a Data Table can be used to automatically create new objects within the Facility
window, as well as their associated location. See the Table-Based Objects page for more detailed information.
General Table Right-Click Features
The below sections on Filtering, Exporting and Splitting can be done with table type formats including Data Tables, Output
Tables, Sequence Tables, as well as the Experiment Design tables (see Experiments).
Table Filtering
The columns within the tables include a small filter icon that can be used to filter the data within the particular column.
Click the filter glyph in a column header and select an option from it. You may filter based on a particular entry in the
column, or specify a custom filter. There is a bar at the bottom to turn the filter on/off, see your most recent filters, and edit
the filter. Additionally, right-clicking on any column will allow users to select the auto filter row to allow custom filtering by
typing, as shown below.
724 / 1277
Table Exporting
The table contents may be exported to several different applications, including Excel, CSV, PDF, Html or Word. This can be
done by right-clicking within a the table and selecting the Export View To to open the options.
Table Splitting
The table may be split so that the user may easily view multiple portions of a large table while editing. This can be done by
right-clicking within the table and selecting the Split option. The table will be split into two 'views' of the same data with
unique scroll bars at the bottom of each view, as shown below. The sections of the table can also be resized by moving the
splitter bar in the center.
Splitting a Table
725 / 1277
Simio Reference Guide
Data Tables
Data Tables
Tables are used to hold model data that may be referenced by individual entities and/or tokens. The data columns in the
table can be any of the property types provided by Simio including expressions, object references, class types, etc. Each
entity/token in the model can then reference a specific row of data in the table.
Each entity/token can set an active row of the table using the SetRow step in the Processes Window. The following
functions can be used with data tables:
TableName.PropertyName: references a property value in the active row.
TableName[RowNumber].PropertyName: references a property value in any row.
TableName[RowNumber, ColumnNumber]: references a property value in any row and column.
TableName.PropertyName.RandomRow: returns a random row index using the values in the property as weights (e.g.
product mix). This function can be used with property and state table columns.
TableName.PropertyName.RandomValue: returns the value of the property for a randomly selected row in the table,
where each row has an equal probability of being selected. This function can be used with property and state table
columns. See below section on this help page titled Selecting Random Values from a Table for more information.
TableName.KeyColumnName.RowForKey(keyValue): returns the row index of the row for which the specified
KeyColumnName has the specified keyValue (or zero if no row is found). The keyValue may be an expression.
TableName.AvailableRowCount: returns the number of rows in the given table.
*IMPORTANT NOTE: The above functions can be used with standard or relational tables. With relational tables, the
RowNumber referenced above will reference the relational (not absolute) row in the table for that entity/token.
NOTE: A standard Data Table can be changed into a Sequence Table by adding or changing an existing column to a
'Sequence Destination' type of property.
Data import and export can be used for both Data Tables and Sequence Tables. Data Table import/export supports all
field types as strings. All errors are noted after the import is complete. You may wish to start with designing your table and
using the Export button to get the proper format. You can then import any data into your table. If the data table already
has some data within it, an import will simply add file contents at the bottom of the table.
Using a Table Column as a List
Prior to Simio sprint 156, lists of objects, such as Transporter or Object Lists, could only be specified within the Definitions /
Lists area by defining a List of those objects. Starting in Simio sprint 156, the Seize, Move, Route and Release steps (not all
steps) allow for specifying the list members within a table and referencing the TableName.ColumnName within the Object
List Name or Node List Name properties. Note that the user has to manually add 'Table.ObjectColumn' to the List Name
property because it does not appear in the dropdown or right click table reference. Once specified, this then allows table
referencing of list members to be done within the Secondary Resources section of many objects, as well as the Resource
Requirements section of task sequence type processing. Routing Logic within object TransferNodes may also include the
table type lists. Please note that this also includes the use of table state columns (Professional and RPS (Enterprise)
editions) for the list which, combined with the Output Tables and the RemoveRows step, allows for dynamic runtime
building of lists. See the SimBits UsingRelationalTablesToDefineNodeLists and
UsingRelationalTablesToDefineTaskResourceLists for more examples.
Starting The starting date time used to anchor the time intervals spanned by the rows in the table to the
Time simulation calendar.
On Specifies a process that will run at the start of each time interval.
Interval
Process
Within a time-indexed table, you can then have a column(s) of values within the table and retrieve a single value from the
column, not by direct indexing, but indirectly, based on the current simulation time. The values within the table can be
accessed using a function for time-indexed tables:
TableName.PropertyName.TimeIndexedValue: returns the value of the property in the row that corresponds to the
726 / 1277
TableName.PropertyName.TimeIndexedValue: returns the value of the property in the row that corresponds to the
current simulation time. If the current time is out of range of the table's rows, then this will return either the first row's or last
row's value for the requested property.
You may also get access to the row number, based on the current simulation time, to be used with a standard table function,
such as TableName[RowNumber].PropertyName. This row number can be accessed using the function:
TableName.TimeIndexedRow: returns the row index that corresponds to the current simulation time. Note that if the
current simulation time is before or after the time ranges mapped to the table rows, this should return 1 (the index of the
first row, if current time is too early), or N (the index of the last row, if the current simulation time is too late).
The On Interval Process is an optional process that can be specified that will run at the start of each time interval. Note that
this process runs "early". That is, it is scheduled on the event calendar at a slightly higher priority than most other things, so
you use it to set things up for the next time interval, supposedly before anything else occurs that would be affected.
In the picture above, the value of Table1.ProcessingTime.TimeIndexedValue will be 10 for the first hour. At the start of the
first hour, the On Interval Process named 'Process1' will be run. From then on, every 1 hour, the time indexed value within the
table that is referenced will be updated to the next row and 'Process1' will be run.
Table Property Referencing
A Table property is defined within the Definitions window, Properties panel of an object. This table property can be used
within the Processes window steps, such as SetRow, AddRow and Search.
Functions similar to those listed above can be used with a table property, however the row and column specified must
resolve to numeric values. That is, the column name cannot be used within the table property reference, only the relative
column number.
TableProperty[RowNumber, ColumnNumber]: returns a value from a row, column location of a table pointed to by a
table property.
TableProperty.AvailableRowCount: returns the number of rows for a table pointed to by a table property.
TableProperty.TimeIndexedRow - returns the time indexed row of a table pointed to by a table property.
Some examples of using these table properties include the following:
TableProperty1[3, 4] returns the value at row 3, column 4 within the table referenced in TableProperty1.
MyFixed1.MyTableProp[3, 4] returns the value of row 3, column 4 within the table referenced in MyTableProp within some
instance of an object named MyFixed1.
NOTE: Reals and Expressions -- Unit Types
When using a Standard Property of type Real or Expression, the Unit Type may be specified as a Time unit. When the time
unit is specified within the table, that time unit is used for any calculations using the table column. For example, if Table1
has a real property ProcessTimes that is specified as 'minutes' in the Unit Type property, and the table is referenced
'Table1.ProcessTimes' within a delay, then the time Units specific to the delay property are not shown and the time units of
the table column (minutes) are used. Likewise, the same table entry may be referenced within an expression in a time delay,
such as 'Table1.ProcessTimes * 0.5'. In that case, the Units property for the expression is displayed (and can be changed),
but will NOT be used, as the table reference includes the units (minutes in this case) to be utilized. Within the model,
multiple table entries may be used in an expression with varying time units and Simio converts them to the correct base
time unit.
727 / 1277
Simio Reference Guide
Relational Tables
Relational Tables
As mentioned in the Tables page, a foreign key may be used to create a table relation. This approach allows exploition of
relational data design to simplify Simio tables.
A Foreign Key reference is used to relate data from multiple data and/or sequence tables. When a Foreign Key Property is
added, the Table Key property for that column is used to make a row in this table link directly to another row in the table
specified by the Table Key (using the Table.ColumnName reference). The Set Column As Key button allows the user to
indicate that the highlighted column may be referenced by another data and/or sequence table. This button makes the
current column a Key for this table (you may have multiple columns that are Key in a single table). This column's data can
then be referenced by Foreign Key properties in other tables, which will link the rows in those tables to a row in this table.
The Set Column as Key and Foreign Key Property are used together for relational type data tables.
Relational tables include Master-Detail, which allows the relationships between various tables to be visually seen. For those
tables that have a column that is designated as ‘Set Column As Key’, users can see a “detail” view, which is a collection of
rows pointing to a specific keyed row in a table. The small ‘+’ sign in front of the row indicates that the detail view is
available. When the ‘+’ is pressed, portions of the related table, those specific to the entry that was expanded, will be
shown.
For example, in the screen shot shown above, the Type of Service is defined as a Key Column. Therefore, this column can be
used within another table as a reference (i.e., within the Arrivals table, Type of Service column is set as a Foreign Key type
of property and thus references the Type of Service column within the Service Times table). Note that the name of a
Foreign Key column does not have to be the same as the Key Column name.
Table based lists can also be defined using relational tables. Examples can be found in the SimBits
UsingRelationalTablesToDefineNodeLists and UsingRelationalTablesToDefineTaskResourceLists. For other SimBits that use
relational tables, see UsingRelationalTables, ServersUsingTaskSequenceWithDataTablesJobShop, and others (use the
728 / 1277
relational tables, see UsingRelationalTables, ServersUsingTaskSequenceWithDataTablesJobShop, and others (use the
Sample SimBits Solutions to search 'relational').
*IMPORTANT NOTE: The functions listed on the Data Table page can be used with standard or relational tables. With
relational tables, the RowNumber referenced will reference the relational (not absolute) row in the table for that
entity/token.
The detail view can be edited just like the main view (insert / remove rows, edit rows, copy/paste, etc.). Additionally, a
keyboard shortcut ( Ctrl+Shift+’+’) can be used to insert rows into any data grid, such as tables or lists.
729 / 1277
Simio Reference Guide
Sequence Tables
Sequence Tables
A Sequence Table is a data table that has a destination column that is used to specify a sequence of destinations for an
entity (e.g. the job routing sequence in a job shop). You can also add additional data columns to the sequence table and
reference these values like any other table (e.g. TableName.PropertyName).
A standard Data Table can be changed into a Sequence Table by either adding a 'Sequence Destination' type of standard
property, or using the Change Type option to change an existing column to 'Sequence Destination', as shown below.
The sequence table that an entity follows can be initially set as the Initial Sequence property of the entity instance. The
routing logic for an entity can specify that the entity destination is to be set “By Sequence”. This may be specified in the
Entity Destination Type for the TransferNode or Destination Type of the SetNode step.
730 / 1277
When setting the next destination “By Sequence”, the next table row in the entities’ sequence table is made active and the
entities’ destination is set to the destination specified in that row. The active row in the sequence table is automatically
incremented each time the destination is set “By Sequence”.
A destination can be any node in your model. If an object (e.g. a Server) has a single associated input node then the
destination can be specified in shortened form as Server (instead of Input@Server). This is convenient for routing between
the objects in your model. However, if the object has multiple input names (e.g. Combiner), then the input nodes must be
fully qualified as NodeName@ObjectName (e.g. ParentInput@Combiner and MemberInput@Combiner). By default only
the input nodes for objects are in the list of destinations. If you want to set a destination to another node in the model, click
on the Destination column header and change the Accepts Any Node property to "True".
Data import and export can be used for both Data Tables and Sequence Tables. Sequence Table import/export supports
all field types as strings. All errors are noted after the import is complete. You may wish to start with designing your table
and using the Export button to get the proper format. You can then import any data into your table. If the data table
already has some data within it, an import will simply add file contents at the bottom of the table.
Changing an Entity Sequence or Active Row
The entity has an initial sequence that is assigned with the Intial Sequence property within the ModelEntity. The sequence
table associated with an entity can be changed by using the SetRow step. For example, if you have two sequence tables
and the entity's original table is Table1, you can change it during the model logic to Table2. Keep in mind that each routing
'By Sequence' will update the row in the table by one. Therefore, if you assign a new table association after processing at a
Server, for example, you may need to initially set the row to '0' such that when the entity leaves the Server 'By Sequence' it
updates the table association to row 1 and sends the entity to the first location in the sequence table.
The SetRow step can also be used to change the entity's active row within a sequence table. Changing the active row may
be useful for rework, for example, to route an entity back through a given set of steps.
Sequence Functions
There are a number of entity sequence related functions that can be used during the simulation run. These functions can be
found on the Functions, States and Events for Entity Objects page.
Both BasicNode and TransferNode objects have a Sequence Expected Operation Time property. This property is used to
estimate an expected operation time if the node is in the destination sequence of an entity's assigned sequence table.
For Server and Separator objects, the Sequence Expected Operation Time for the 'Input' node is the Processing Time. For the
Combiner object, the Sequence Expected Operation Time for the 'ParentInput' node is the Processing Time. The Sequence
Expected Operation Time property value for the 'Input' node of the Workstation (Deprecated) is the Setup Time (if specific
and thus sequence independent) + Processing Time + Teardown Time. Any sequence dependent setup time estimates are
not included by default in the expected operation time at a workstation.
Note that when estimating the expected operation time for a sequence jobstep, the expression evaluation is always
deterministic. Thus, if a random distribution is specified, then the expected value for that random distribution will be
assumed. The expected operation times for the job steps in an entity's sequence will be evaluated once on the first function
call that requires the information. For performance efficiency reasons, those estimates will then be stored and simply
reused on any subsequent function calls requiring the information.
Examples
For examples of using sequences, please refer to the SimBits EntityFollowsSequence, EntityFollowsSequenceMultiple,
EntityFollowsSequenceWithTable, and SortingConveyorSystem.
731 / 1277
Simio Reference Guide
Output Tables
Output Tables
Output tables are available to users with Simio Professional or RPS (Enterprise) Edition.
Output tables are similar to Data tables in that they define a collection of rows. Within an Output table, however, the
columns are all specified as State type columns - that is, the values within the table will be written to the table during or
after the simulation run. A token or entity may set an active table row using the SetRow step. Once an active row has been
set, the states in the table can be assigned values using TableName.StateColumnName. Rows are added to the table at run-
time using the AddRow step. The RemoveRows step may be used to remove a single row or all rows from the output table.
More information on adding states can be found on the State Columns page.
An Output table may have a state column that is a designated as key column, by selecting the Set Column As Key for a
particular column. The AddRow step has a Key Column Value property that should be set to a unique key value for the row.
This particular feature is for RPS licensing only.
Output Tables
Starting Time The starting date time used to anchor the time intervals spanned by the rows in the table to the
simulation calendar.
Interval Size The interval of time spanned by each row in the table.
On Interval Specifies a process that will run at the start of each time interval.
Process
Keep Values on Indicates whether to keep the output table's state values from the previous run if a new run is
Run Restart started using the RestartRun step.
(RPS Only)
For more information on Time-Indexed tables, see the Table Properties section within the Data Table page.
Individual State Columnswithin a Data Table also include the Keep Values on Run Restart property on the state column.
Note that state columns within Output Tables DO NOT have the option individually, this property refers to the entire table.
Output Tables either keep the entire table or don’t. This options only is available for RPS licenses and works across
interactive, plan, and experiment runs. See the Single-Pass vs Multi-Pass Simulation Approach page for more details.
732 / 1277
Simio Reference Guide
State Columns
States within Schema Ribbon
States Columns
In addition to property type columns from the Schema ribbon, the user may also define a column as a table state. Table
states are added by utilizing the states section the Schema ribbon and may be discrete or continuous. The Move Left and
Move Right buttons allow users to move a particular column for organizational purposes. As with other table columns,
there are various types, including:
Real - The state representing a real numeric value that may change by assignment logic at discrete times during a
model run.
Integer - The state variable representing an integer numeric value that may change by assignment logic at discrete
times during a model run.
Boolean - The state variable representing a logical or Boolean (true or false) value that may change by assignment
logic at discrete times during a model run.
DateTime - The state variable representing a datetime value that may change by assignment logic at discrete times
during a model run.
String - The state variable representing a string value that may change by assignment logic at discrete times during a
model run. For more information, see String States in the Simio on-line help.
List - The state variable representing an integer variable with a discrete set of possible values from 0 to N. A zero-
based indexed string list is used to define the possible integer values for the state. A list state's value may be changed
by assignment logic at discrete times during a model run, and the state will automatically collect and report time-
persistent statistics for each of its state values. For more information, see List States in the Simio on-line help.
List Reference – The state variable defining a list reference variable that may be changed by assignment logic at
discrete times during a model run. You can assign a value to a list reference state using an Assign step in a process.
The expression used as the value for the assignment must return a list reference, for example from an Object List
Property or another List State Reference.
Level - The continuous-change state variable defining a numeric variable that may change continuously over time
based on the current value of its rate. An automatic rate variable, based on the LevelStateName.Rate can be used to
modify the rate of change throughout the simulation run. The state's rate parameter is a discrete-change value that
may be changed by assignment logic at discrete times during a model run.
Level with Acceleration - The continuous-change state variable defining a numeric variable that may change
continuously over time based on the current value of its rate and acceleration. The state's rate, acceleration and
acceleration duration parameters are discrete-change values that may be changed by assignment logic at discrete
times during a model run.
Element Reference - The state variable defining an element reference variable that may be changed by assignment
logic at discrete times during a model run. You can assign a value to an element reference state using an Assign step
in a process. The expression used as the value for that assignment must return an element reference. Element
references include Element, Batch Logic, Changeover Logic, Container, Cost Center, Failure, Inventory, Material,
Monitor, Network, Output Statistic, Process, Regulator, Routing Group, State Statistic, Station, Storage, Tally Statistic,
Task Sequence and Timer.
Object Reference – The state variable defining an object reference variable that may be changed by assignment
logic at discrete times during a model run. You can assign a value to an object reference state using an Assign step in
a process. The expression used as the value for the assignment must return an object reference. Object references
include Object, Fixed, Link, Node, Entity and Transporter.
Unlike other column types, however, the table state column values are not input by the user at the start of the simulation
run. These values are assigned during the simulation run by an Assign step, based on the current row of the associated
object. The table name and column name are used in the assignment, similar to referencing other table columns. For
example, if the table name is ManufacturingOrders and the table state name is ShipDate, the assignment would be made
to the State Variable Name 'ManufacturingOrders.ShipDate' as shown below. The actual row that the New Value of
'Run.TimeNow' is entered into is based on the row that is associated with the entity.
Table states may also be utilized in an expression in the same way. For example, you may wish to continually add to a table
state, in which case, the assignment may be State Variable Name of ‘ManufacturingOrders.NumberOfDefects’ and the New
Value is ‘ManufacturingOrders.NumberofDefects + 1’.
When you add a table state to the table, the entire column will be gray in color, as seen below. This signifies that it is a
table state column and not a regular column that requires entries. With all of the table state types, there are various
properties, such as initial state value, unit type (some) and dimension (for some).
Once the simulation model is running, values will be calculated for the table states and shown in the appropriate columns.
733 / 1277
Similar to standard type table columns, the state type columns have a Visible property to determine whether the state
column is visible or not visible to a Scheduler type user in Operational Planning mode. This includes visibility in both the
Tables and Gantt properties shown on the right when a Gantt chart item is selected.
734 / 1277
Simio Reference Guide
By default, any Element Object columns will have a Reference Type (Advanced Options)of 'Reference' to simply reference a
previously defined element. However, if the Reference Type is changed to 'Create', then any entries into that column will
automatically create a new element of the specified type (in the example above and below, a Material element is used as
an example).
When an Element is automatically created, you will see it located within the Definitions window, Elements panel. It will be
clearly marked as auto-created and it cannot be deleted. Any edits to the element Name within either the data table or the
element panel window will be reflected in each other.
In addition to the element itself being created, any properties of that element may also then be referenced and created by
a column within the table. This is done with the Initial Property Values repeatable property within the Element Reference
property window, as shown below. For each given Element type, a different set of Property Name properties are available
from the list. In this example, the 'InitialQuantity' of a material is input. Within the Value property, an expression can be
entered which will be fed into the property information within the Element itself. In this example, a table reference is used,
'Table1.InitialQuantity'.
The value of the property specified in the Value field will then get fed into the appropriate property within the Element
itself, as shown below. Likewise, the Value reference (above) can also be a simple integer value, such as '3' that will similarly
735 / 1277
itself, as shown below. Likewise, the Value reference (above) can also be a simple integer value, such as '3' that will similarly
be fed into the correct property value within the Element itself.
Finally, it is important to note that if an auto-created Element's property value is linked to a table (as it is in the example
above, using 'Table1.InitialQuantity'), the Auto-set Table Row Reference property for the Element in the table must be set to
'True'. This is shown in the below diagram.
The Auto-set Table Row Reference property, if true, then at run initialization, the Element pointed to by each row in the table
will have a table reference set to that row. This will allow an entry in an Element column to 'correpond' to the same row
entry in another column, which is essential for defining Element properties.
Some of the commonly auto-created elements include TallyStatistic, Material, RoutingGroup and Monitor.
736 / 1277
Simio Reference Guide
By default, any Object Reference columns will have a Object Type of ' ' (blank) meaning any object of that given type, as
well as a Default Value Instantiation value of 'None'. However, if the Object Type is specified as a particular object, and the
Default Value Instantiation is 'AutoCreateInstance', then any entries into that column will automatically create a new object
of that Object Type within the Facility window.
737 / 1277
indicate the specific location. If you simply have a single row and auto-create one object, then using static numeric values
for X, Y, and Z will place the object in the specific location. Note that the X, Y, and Z properties can also reference the
name of a different numeric (Real or Integer) column in the same table. If the data is a column reference, changes in the
data in the table will update the object's location in the Facility window, and an object's location change in the Facility
window will update the data in the table. See the below TransferNode location values are based on the NodeX, NodeY
and NodeZ column values.
The resulting Facility window objects that are created from the Table1 discussed above can be seen below. Note that
changing the object type ('WhatKind' column), object reference ('ObjectName' column) or location (X, Y, Z columns) within
the table will change the type, name or location in the Facility and vice versa. Any changes in the Facility window of objects
that were auto-created will change the corresponding table column values.
738 / 1277
Auto-Created Link Objects
Similar to auto-creating fixed, node or transporter type objects, table data can be used to auto-create links between nodes
in the Facility window. This is typically done within a separate table from the other fixed object creation, as the data
required is different.
When an object's Default Value Instantiation is 'AutoCreateInstance' and the Object Type is a link type object, the Link
Starting Node and Link Ending Node properties should reference the associated Node property column. In the example
below, two connectors are automatically created using the 'Node1' and 'Node2' node property columns, which are
referenced in the Object property column (ConnectorName).
The above shows a simple link between two nodes with no vertices within the link itself. Relational tables can be used to
generate vertices within the auto-created links. Note that the Link Vertices are referenced within the object column's
properties (either Cartesian - Vertices X, Vertices Y and Vertices Z or Geographical - Vertices Latitude, Vertices Longitude and
Vertices Elevation).
First, the object property within the Links table (ConnectorName in this example) should be specified as a key column by
using the Set Column As Key button. An additional table should be added (named Vertices in the example below) that can
reference the link object name key column using a Foreign Key Reference property within the table. Real type properties
can be used within this relational table to reference the one or more vertices locations.
739 / 1277
Simio Reference Guide
DataConnectors
The Data Connectors view within the Data ribbon displays two types of table bindings for importing data. Prior to Simio
Sprint 202, all data binding was done through the use of what we now call 'Classic' bindings. That is, using the Create
Binding option on the Content ribbon to bind to a Database, CSV file, Excel, Wonderware MES or XML Tranformation. For
models built prior to Simio Sprint 202 that include bound tables, these classic bindings will be seen in the Data Connectors
area. From Simio Sprint 202 on, the Data Connectors view allows users to Create Importers which can then be used to bind
multiple tables using a similar data import structure. This type of data importing is described within this help section.
Creating Data Importers through the Data Connectors view is available with all Simio licenses. Later in this section, the
Create Exporters functionality, which is available for RPS licenses only, is discussed.
Data Importers
Creating and Defining a Data Importer
To define a data connector, first click on the Data Connectors button within the Data view. Data tables do not have to exist
first before data importers can be defined.
Once in the Data Connectors view, the Create Importer drop-down allows for several different types of importers, such as
AVEVA MES Data Importer, CSV Data Importer, Database Data Importer, and Excel Data Importer as shown below.
Once a data importer is created, the configuration characteristics for the importer can be defined. The configuration will
include a configuration name (initially [Default]), as well as characteristics based on the data importer type. For example,
for a CSV Data Importer, the Use Headers boolean, Separator, Import Culture and Import Folder may be specified. The Table
Name properties in the TableConfigs tab will ONLY appear once a data table has applied the data importer - this is done
through the Create Binding option on the Content ribbon in the Data view.
When one or more data importers have been defined, the importer will be displayed within the Data tables Create Binding
list under the Apply Existing Data Import Binding section. By applying an existing import binding (in this example, CSV
Data Importer1), the data table name will then automatically appear within the contents of the configuration for that data
importer under the TableConfigs tab. In the example below, the Resources data table has the CSV Data Importer1 applied
and thus, 'Resources' appears as the Table Name under the [Default] configuration (using the + to expand). The associated
File Name property can then be specified with the table, in this case 'Resources.csv' will be used for the Resources table.
The Import Folder property will indicate the location for all tables within this configuration.
Note that if no Import Folder property is specified, the folder and file name may be defined within the File Name property
for the given data table.
740 / 1277
Example - SchedulingDiscretePartsProduction
As shown below, multiple tables can have the same data importer applied. Within the Data tab view of each table, the
Active Binding displays the data importer (red) and the import folder and file name are displayed with the table (green).
741 / 1277
Experimentation and Data Connectors
Each data connector can have multiple configurations, as discussed above. For each table that has a data connector import
binding with 2 or more configurations, there is a column within the Experiment Design view of an experiment. The header
of a column is the Data Importer name and the cell values are a drop down of the configurations for that data importer.
The default value of the cell for a new scenario will be the currently active databinding for that data importer. When using
the OptQuest add-in, Simio also uses the default active binding for each table.
Once in the Data Connectors view, the Create Exporter drop-down allows for several different types of exporters, such as
AVEVA MES Data Exporter, CSV Data Exporter and Database Data Exporter, as shown below.
Once a data exporter is created, the configuration characteristics for the exporter can be defined. The configuration will
include a configuration name (initially [Default]), as well as characteristics based on the data exporter type. For example,
for a CSV Data Exporter, the Write Headers boolean, Separator, Export Culture and Export Folder may be specified. The
Table Name properties in the TableConfigs tab will ONLY appear once a data table has applied the data exporter - this is
done through the Create Export Binding option on the Content ribbon in the Data view.
When one or more data exporters have been defined, the exporter will be displayed within the Data tables Create Export
Binding list. By applying an existing export binding (in this example, CSV Data Exporter1), the data table name will then
automatically appear within the contents of the configuration for that data exporter under the TableConfigs tab. In the
example below, the ManufacturingOrdersOutput data table has the CSV Data Exporter1 applied and thus,
'ManufacturingOrdersOutput' appears as the Table Name under the [Default] configuration (using the + to expand). The
associated File Name property can then be specified with the table, in this case 'ManufacturingOrdersOutput.csv' will be
used for the ManufacturingOrdersOutput table. The Export Folder property will indicate the location for all tables within
this configuration. Expanding the data table name (ManufacturingOrdersOutput) displays the various columns within the
table. An Enable Export boolean may be used to specify whether a column should be exported.
742 / 1277
Note that if no Export Folder property is specified, the folder and file name may be defined within the File Name property
for the given data table. See the above data importer example, which shows this case with data importers.
Targets within data tables will also be exported with data tables. When a model is run in interactive mode, the Value and
Status of a Target will be exported. When running in planning mode, the export will include options for Value, Status,
Expected and Within Bounds Probability. For each target, the Enable Export button boolean can be toggled within the
Data Connector view, as seen above, or within the Target properties of the data table.
Export Options
When using the Data Exporters, the user has several options for exporting, shown below, which are available through the
Export Options on the Content ribbon in Data view.
Export At End Of Plan Run - Export the data at the end of a plan run.
Export At End of Risk Analysis Run - Export the data at the end of a risk analysis run.
Export At Project Save - Export the data at project save.
Export Plan At Project Save - Export the plan data at project save.
Export At Plan Publish - Export the data immediately before a plan is published.
*NOTE* - If user has both 'Export at End of Plan Run' and 'Export at End of Risk Analysis Run' turned on, and then selects
the Analyze Risk button via the Operational Planning ribbon, the user will get two (2) exports, since via the ribbon
command, we run the plan first and then run risk analysis.
As shown above, the Export button also allows the user to simply export the current table or all bound tables.
Import / Export by Data Connector
In the Data Connectors view, users can select a Data Connector and run and import/export for every table/log that has that
particular Data Connector set as the Active Binding.
743 / 1277
Simio Reference Guide
If there are existing data bindings, the user will be prompted to either select an existing import binding or create a new
import binding.
744 / 1277
Change All Bindings
Many times it may be useful to use the same import binding across multiple tables, where the file names are specified
within the TableConfigs section of the data importer. For example, perhaps there is an initial set of data that the model
uses, as noted under the TableConfigs area of 'CSV Data Importer1', as shown below. Although all of the associated tables
may have the same data importer(s), they may not all be the active binding for each table. IMPORTANT NOTE: When
switching between active bindings for a particular table, the data will NOT automatically update within the table view. The
Import button should be used to import the data if the Binding Option is 'Manual'. If the Binding Option is set to
'Automatic', then once the model begins running, the table will data will be updated.
When more than one data table has the same import binding specified, the Change All Bindings option becomes visible.
Simio notes within each of those similar named bindings which tables contain the particular name, as shown below. The
Change All Binding option then makes it easy for users to switch all active data table bindings simulataneously to a
particular named set.
Binding Options
If a table has an associated data connector, the information within the Binding Options list is made available. Automatic
will import the table data at the start of each simulation run, while Manual will allow for importing the table data manually.
The Automatic option has the benefit of allowing the user to change the contents of the table without having to do an
import each time the data has been changed.
Within the Binding Options pull down, users may chose to append to binded table data. The Enable Append and Update
Import Type option, if enabled, will append imported data to the existing data table. If a record already exists then it will
be updated. This updating is based on the primary key column (if any) in the table. If this feature is disabled (which is the
default setting), the data in the data table will be replaced by the imported data.
745 / 1277
Append and Update Import Data
Also within the Binding Options, there is an option to enable table importing when the simulation model is loaded. This is
available in Simio RPS.
Finally, there is an option to enable or disable automatic bound table importing at the start of a simulation run.
Temporarily disabling the bound table importing may be useful during model development and testing if the user wishes
to prevent input data from changing or if the data sources are not currently accessible. NOTE: This red message will appear
only when the Automatic binding option is active.
746 / 1277
See the functions that can be used with Tables.
NOTE: Ctrl-X (Cut), Ctrl-C (Copy), and Ctrl-V (Paste) is supported for Data and Sequence Tables. Please refer to the User
Interface for more details.
Behavior of a Bound Table in a Child Model
If a model that contains a table that is bound to an external source and that model becomes a child model (i.e. it is used as
an object inside another model), then the behavior of binding works different depending on whether or not that child
model is set as a Runnable model. A model is a runnable model if it's Runnable property is set to 'True'. This property can
be found, along with other model properties, by right clicking on the name of the model in the Navigation window and
selecting Properties.
If the Runnable property is set to 'False' then if this model is placed inside another model, the top level model will
automatically recognize changes made in the source file (.csv, excel, etc) if the binding option is set to Automatic.
If the Runnable property is set to 'True' then if this model is placed inside another model, the top level model will not
recognize changes made in the source file. The user must open the child model and either run the model to trigger an
automatic import or perform a manual import so that the new data from the source file is now loaded into the data tables.
Note: The above statements apply to the scenario where the child model definition is in the same project as the parent
model. If the child model definition is located in a separate project, the top level model will never automatically recognize
changes in a data source that is bound to a child model. The user must open the child model, re-import the data and save
the child model. When the parent model is then opened, it should prompt the user that changes have been made to the
child definition and the user has the option to accept these changes.
747 / 1277
Simio Reference Guide
Lookup Tables
Lookup Tables
By clicking on the Data tab and selecting the Lookup Tables panel, users may add a table to model situations where a
value (e.g. processing time) is dependent on some other value (e.g. number of completed cycles). Lookup tables return a
function value based on a lookup value.
The value of a lookup can be specified in an expression using the format Name[ X_Expression], where Name is the name
of the lookup table, and X_Expression (specified as any valid expression) is the independent index value into the lookup.
For example CycleTime( NumberBusy) returns the value from the lookup table named CycleTime based on the current
value of the NumberBusy state. The lookup value is computed using linear interpolation between the defined values. If the
index is out of the defined range then the closest endpoint (first/last) point in the range is returned.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for Lookup Tables. Please refer to the User Interface for
more details.
748 / 1277
Simio Reference Guide
Rate Tables
Rate Tables
The Rate Tables panel in the Data window allows the user to model situations where an arrival/event rate varies discretely
over time. The number of fixed rate periods ( Number of Intervals property) and the length of each rate period ( Interval Size
property) are specified in the Rate table. The rate pattern automatically repeats during the running of the simulation.
Please note that the Starting Offset is the offset from when the model starts or table repeats. It is not the time of day.
A Rate table is used by the Source object / Timer element to generate entities / events with a time-varying rate. Internally,
a non-stationary Exponential distribution is used to calculate the rates. The rate units for the Poisson arrival process is
Arrivals per Hour, regardless of the time units specified for the intervals of the rate table.
In order to use a Rate Table with the standard Source object, set the Arrival Mode property in the Source to 'Time Varying
Arrival Rate' and then select the appropriate Rate Table for the Rate Table property. The Source also includes a Rate Scale
Factor property that can be used to easily modify the values within the table by a given factor instead of changing the
values separately. For example, to increase the Rate Table values by 50%, simply specify the Rate Scale Factor within the
Source to '1.5'.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for Rate Tables. Please refer to the User Interface for
more details.
749 / 1277
Simio Reference Guide
Work Schedules
Work Schedules
Schedules are used to model situations where the capacity of an object varies over time. An object (e.g., Server or Worker)
can have an associated schedule that automatically changes its capacity over time. Schedules can be defined as either
Pattern Based or Table Based Work Schedules. Table Based Work Schedules can be used for easily reading in schedule
data from an external data file.
The work schedule assigned to a particular resource can be changed during the simulation run using the SetWorkSchedule
step. The function CurrentWorkSchedule.Name can be used with a resource to return the currently assigned work schedule.
Pattern Based Work Schedules
A Pattern Based Work Schedule is comprised of a repeating base pattern called a Work Schedule with superimposed
exceptions (e.g. holidays or planned maintenance). Pattern Based Work Schedules are defined within the Data tab,
Schedules panel of a model by selecting the Pattern Based tab. Selecting either the Pattern Based Work Schedule or Day
Pattern button on the Schedule ribbon will open the Pattern Based tab.
A Pattern Based Work Schedule is defined by specifying the number of repeating days within the schedule and the
associated Day Pattern for each day. Multiple work schedules can be defined within the Work Schedules section.
A Day Pattern consists of a single or multiple Work Periods that define on shift and off shift periods with a starting time,
duration and ending time. Any periods that are not defined are considered to be off shift, or have a capacity Value of '0'. A
cost multiplier may be defined for the given work period as well. An on shift Work Period entry has a value that defines the
capacity of the object that is following this schedule. Multiple Day Patterns can be defined within the Day Patterns tab.
750 / 1277
Exceptions override the repeating work schedule for the duration of the exception. Exceptions can be defined within the
Work Day Exceptions tab and within the Work Period Exceptions tab, both from the Work Schedule tab. A Work Day
exception may be used for holidays or single days and is defined by a single calendar day and an alternative Day Pattern
for that calendar day. A Work Period exception may be used for overtime, planned maintenance, vacation periods, etc., and
is defined by starting day/time and ending day/time. Within the Work Period exceptions, the capacity Value can be
specified.
752 / 1277
IMPORTANT NOTE: Any expressions specified in the Value or Cost Multiplier properties for Table Based Work Schedules
are evaluated at the start of the simulation run only and are NOT dynamically evaluated as the simulation progresses. This
also means that the functions listed above for the Pattern Based Work Schedules cannot be used for Table Based Work
Schedules.
Listed below are the Properties of Table Based Work Schedules:
Property Description
Name The name of the work schedule.
Table The name of the table used for this work schedule.
Name
Start Date An expression that resolves to the start of a work period for a particular row in the referenced table.
Time
End Date An expression that resolves to the end of a work period for a particular row in the referenced table.
Time
Value An expression that resolves to the value of a work period for a particular row in the referenced table.
Cost An expression that resolves to the cost multiplier of a work period for a particular row in the
Multiplier referenced table.
Repeating If true, the schedule repeats given the specified interval, using the Start Date Time and End Date
Time as offsets relative tosimulation start time into each interval, rather than absolute date times.
Interval Integer value that specifies how long each repeated iteration of the schedule should last.
Start Type Indicates where the repeating schedule will start from (or be "anchored" to). By default, the schedule
will start from the simulation start date. It can, however, instead be started from some offset from
midnight on the Sunday before the start of the simulation or started from a specific date and time.
Start The offset (in hours) from midnight on the first Sunday before the start of the simulation to start the
Offset repeating schedule.
Hours
Schedule The exact date and time from which to start the repeating schedule.
Start Date
Time
Offset Determines how Start Date Time and End Date Time are interpreted with relation to the Schedule
Calculation Start Date Time.
Type Relative interprets the table values mapped to the Start Date Time and End Date Time expressions
as relative time offsets from the Schedule Start Date Time.
Absolute interprets the table values mapped to the Start Date Time and End Date Time expressions
as absolute date times, which are then used to determine the actual offsets from the Schedule Start
Date Time.
Default uses the Absolute offset calculation type if the Start Date Time and End Date Time
expressions are DateTime table column references. Otherwise, it uses the Relative offset calculation
type.
753 / 1277
Exception The name of the table used for exceptions to this work schedule.
Table
Name
Exception An expression that resolves to the start of an exception period for a particular row in the referenced
Start Date table.
Time
Exception An expression that resolves to the end of an exception period for a particular row in the referenced
End Date table.
Time
Exception An expression that resolves to the value of an exception period for a particular row in the referenced
Value table.
Exception An expression that resolves to the cost multiplier of an exception period for a particular row in the
Cost referenced table.
Multiplier
TimeOfNextValue(dateTime) Returns the simulation time (in hours) of the schedule's next value
change if at the specified numeric datetime (simulation time).
TimeUntilNextValue(dateTime) Returns the time duration remaining (in hours) until the schedule's
next value change if at the specified numeric datetime (simulation
time).
These are available from any schedule reference, including ScheduleName.*, SchedulePropertyName.Schedule.* (e.g.,
ResourceObjectName.WorkSchedule.Schedule.* if the resource is following a work schedule), or
TableName.SchedulePropertyName.Schedule.*. If the work schedule for a resource is changed during the simulation run
using the SetWorkSchedule step, the CurrentWorkSchedule.* can also be used with the above functions.
754 / 1277
Simio Reference Guide
Changeover Matrices
Changeovers
Changeover matrices are used to model situations where a setup time is sequence dependent. The setup time is the matrix
value indexed in row/column by a list value such as color, size, part family, etc. The row is selected based on this value for
the previous entity, and the column is selected based on this value for the current entity. The ChangeoverLogic element is
used in conjunction with this matrix.
When using Changeovers, a string list must be defined within both the model, as well as the model entity. Lists are
specified within the Definitions tab, Lists panel. See the help section on Lists for more information on String lists.
Examples of using a changeover matrix are found in the SimBits
ServersUsingTaskSequenceWithSequenceDependentSetups and
ServersUsingTaskSequenceWithDataTables_SequenceDependentSetups.
The changeover matrix data is also accessible in an expression. A changeover matrix value may now be referenced in any
expression using the syntax MatrixName[row,column], where the row and column subscripts are numeric constants or
expressions that return zero-based row and column indexes into the matrix. When a changeover matrix has been added to
a model, the available changeover matrix syntax can be viewed within the expression builder.
The name of a changeover matrix can also be accessed within an object property (repeating or non-repeating). The
object’s process logic is then able to get to the matrix data through the property reference. This is done by adding a
Changeover Matrix type property to the model by going to Definitions / Properties / Standard Property and adding a
property. Then, in the process logic of the object that has the property, the syntax for
ChangeOverMatrixPropertyName.Matrix[row,column] or
RepeatGroupPropertyName.ChangeOverMatrixPropertyName.Matrix[row,column] may be used to access a value at
a specified row and column index location in the changeover matrix that is being referenced.
ChangeoverMatrixPropertyName.Matrix.Name can be used to get the string name of the changeover matrix that has
been specified using the property.
NOTE: Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste) is supported for Changeovers. Please refer to the User Interface for
more details.
755 / 1277
Simio Reference Guide
Input Parameters
Input Parameters
Input Parameters are generally used to define named parameters which can then be referenced anywhere within a model.
For example, the user might define Input Parameters named InterarrivalTime and ProcessingTime, and then reference these
names on the Source and Server objects in the model. There are several advantages in using Input Parameters in place of
directly entering these expressions in the model.
Input Parameters can be shared across multiple objects; e.g. if five servers all share the same Process Time, they can
all reference the same Input Parameter.
It is more convenient to enter distributions using Input Parameters since the distribution parameters are individually
defined as properties of the Input Parameter and a histogram is based on 10,000 samples is provided to show the
shape of the distribution for the parameters.
Input Parameters enable both Response Sensitivity and Sample Size Error analysis.
Input Parameters are defined by selecting the Data window tab, and then selecting Input Parameters on the left panel.
There are three different types of Input Parameters – Distributions, Table Values, and Expressions.
A Distribution is used to specify a random distribution. The parameters for the distribution are specified in the property
grid, and the histogram based on 10,000 samples of that distribution is displayed in the bottom panel of the window. In
addition to the distribution parameters, the user may specify if this Input Parameter is to be active in the Response
Sensitivity analysis or included in the Sample Size Error analysis. If it is included in the Sample Size Error analysis, the
number of real-world observations that were used in fitting this distribution are specified.
The second type of Input Parameter is a Table Value and is used whenever the actual observational data is randomly
sampled in place of fitting the data to a distribution and then sampling from that distribution. This is typically the preferred
approach when actual data is available, given there is confidence that the data is a representative sample and/or no
additional information about the process is available. In this case the table column name that holds the real-world
observations is specified. Additionally, there is an option to Ignore Zero Values within the data table. If this value is 'True'
and a '0' is sampled from the data table, a new data value from the table will be selected. Starting Index and Ending Index
may also used to indicate a starting row and/or ending row to use when taking the sample. If not specified, these default to
the starting and ending rows in the table.
756 / 1277
The third type of Input Parameter is an Expression. In this case, any mathematical expression, including random
distributions and model properties can be specified. Although this is the most general form of the Input Parameter, one
limitation is that it cannot be used in the Sample Size Error analysis.
The input parameter name is then referenced within an object's property field in a model, similar to the way that states and
property values are used. Right-clicking on a object's property value in the Facility window also allows the user to create a
new input parameter or select from the already existing input parameters. Alternatively, the input parameter name can be
used by itself or within an expression in any object's property field that accepts an expression.
The input parameters are unique, in that they are also used within the Experiments defined for a model. The Input Analysis
tab within an Experiment will display all input parameters and associated scenario results. See the Response Sensitivity and
Sample Size Error Analysis topic for additional information.
757 / 1277
Simio Reference Guide
758 / 1277
Simio Reference Guide
Pivot Grid
Pivot Grid
The Pivot Grid displays result data from a simulation run(s). It lets the user interactively analyze the results in the form of a
dynamic rotatable table. You can drag and drop columns in the table to rotate or “pivot” the data. You can also filter and
sort the information that is shown. This is similar to features found in the pivot table provided by Microsoft Excel.
The Results window displays the Pivot Grid panel by default. So when you first click the Results tab, you are viewing the
Pivot Grid.
The section of the Pivot Grid ribbon labeled Unit Settings allows the user to specify the units to be displayed in the reports,
pivot grid, watch window, status bar, and trace window.
The following categories help to organize the result data:
Content – category used for statistics on the number of things inside or on something, such as NumberInSystem or
NumberOnLink.
Throughput – category used for totals on items entered/created or items exited/destroyed.
Capacity – category used for statistics related to capacity, including number of units allocated over time, units
scheduled and utilization of the object. Scheduled utilization is calculated based on the units utilized divided by the
units scheduled.
FlowTime – category used for entity time in system (population or by Sink) or entity time on link.
HoldingTime – category used for entity time held in a station location or held in a batch.
ResourceState - category used to show occurances, percent and average times in each of the resource states in which
an object may be.
Costs - category used to show final values of cost for each object or cost center, in addition to Population.Cost
statistics for Entity and Transporter type objects.
A Pivot Grid
759 / 1277
This Pivot Grid provides a very easy way to manipulate, summarize, and display data and provides a powerful mechanism
for exploring your data (data mining).
The red circle above identifies the columns and their symbols. Columns may be moved around within the pivot grid. The
up/down arrow may be used to sort the rows within a column into alphabetical order. Moving the mouse over a given
column will display the filter button (described below). Data items may be moved to reconfigure the table.
Grouping: For example, left click and drag the leftmost column named Object Type to the top row (next to Data Source
Type). You will see that the data is no longer grouped by Object Type, but rather only by Object Name. You may also drag
the columns to different positions to cause the data to be grouped differently. For example, if you wanted all of your data
items displayed together (e.g. all the Arrivals statistics together) you could drag the Data Item column to the far left, in
front of Object Name.
Sorting: You will see a small triangle in every column heading – this determines the sorting order for that column. If you
click on that triangle (or in fact almost anywhere in the heading box), it will toggle the column sort order between
ascending and descending.
Filtering: You may have noticed that the Statistic heading in the Pivot table above has an extra symbol in the upper right
corner – a funnel. This indicates that it is filtering the data. If you click on the funnel you will see a menu indicating all
possible values in that column and you will see that Minimum has been unchecked. This means that any items labeled with
Minimum have been suppressed (our default setting). If you check the Minimum or the (Show All), you will see all the
minimum values will now be added to your report.
Filtering
All column headings and items in the filter area have this filtering capability. For example, if you hover the mouse over the
upper right corner of the Object Type box (the one you just moved to the filter area), you will see that funnel appear.
Clicking on that funnel shows all object types found in the report. If you have no interest in seeing statistics on your paths
for example, simply uncheck the Paths item and all of the statistics associated with paths will be suppressed.
Named Views
The Change View, Add View and Manage Views button allow you to record column ordering, column width, sort and filter
settings and save them to a particular 'view' for later reference. Within the Change View button is also the option to reset
the pivot grid to the original default view. When a named view is open, you will see Showing Named View: "ViewName" at
the top of the grid.
Named views in our various pivot grids are “Public” by default, allowing them to be used by any other pivot grid in the
model or any of its experiments:
When using named views in a pivot grid, the public ones from the other pivot grids associated with the same model are
760 / 1277
When using named views in a pivot grid, the public ones from the other pivot grids associated with the same model are
visible. For example, when viewing the Results pivot grid for a model, note its own named views, followed by public named
views from other pivot grids (including those defined by the model’s Experiments, as well as Planning results in Simio RPS
(Enterprise) edition).
When applying a named view to a pivot grid, Simio will automatically hide or show certain columns as appropriate to the
pivot grid. Specifically, the Minimum, Maximum, Half Width, and Std. Dev. columns will be hidden when applying an
experiment’s named pivot view to a model’s pivot grid, while the Minimum, Maximum, and Half Width columns will
automatically be shown when applying a named pivot view from a model’s pivot grid to an experiment’s pivot grid.
761 / 1277
Simio Reference Guide
Reports
Reports
The Reports panel of the Results tab displays a traditionally formatted report that provides flexible visual formatting for
inclusion in printed documents and is useful in presenting results to others. Reports are provided for both a single scenario
and for comparing two scenarios. After clicking on the Results tab and Reports panel button to view the reports, select the
appropriate report from the Current Report dropdown in the ribbon menu.
The Report Designer allows you to create a custom Report based on generated model data. Reports can be made using
data from the Interactive Model Results (i.e. the data displayed in the Pivot Grid), the Resource Usage Log, the Resource
State Log and the Constraint Log.
762 / 1277
Simio Reference Guide
The Report Designer interface will appear in the new window. Depending on what data source you selected from the
Report Designer drop down in the ribbon, the Field List will be populated with the appropriate tables and fields that are
available from this data source. This is the data that can be used to create your custom report.
763 / 1277
These are the tools that are used to design the layout of the report. They are placed into the appropriate band within the
main grid area.
You can customize the layout of the report by right clicking in the main grid area and selecting Insert Band and then
selecting Report Header, PageHeader, GroupHeader, GroupFooter, ReportFooter or PageFooter. Each type of band has its
own use, such as the Report Header, that whatever is placed in this band is common among all pages of the report. For
example, you might put a report title here by placing a Label from the Toolbox. Or the Page Footer can be used to display
page related information that is common on all pages, such as a page number.
Simio has three reports that are found on the Reports page of the Results tab. These are the Interactive Detail report, the
Scenario Comparison report and the Scenario Detail report. If you are using the RPS (Enterprise) version, there are more
764 / 1277
Scenario Comparison report and the Scenario Detail report. If you are using the RPS (Enterprise) version, there are more
reports on the Reports tab of the Results page. These reports are the Resource Dispatch List, the Workflow Constraints
Analysis and the Resource Utilization Summary. All six of these reports can be found in the Simio reports folder
(\\Public\Public Documents\Simio\Reports). You can open these reports in the Report Designer to see how they were
created and to use these as a starting point for creating your own custom report.
765 / 1277
Simio Reference Guide
Dashboard Reports
What are Dashboard Reports
Dashboard reports allow you to display a dashboard based report of generated model data.
A dashboard allows you to organize and present model information that is customizable and easy to read. Model data can
be displayed in many graphical forms such as grids, charts and gauges. It also allows you to customize your dashboard by
adding images, text boxes and filter ranges.
The major components of the Dashboard Report tool include creating a dashboard report and selecting a dashboard
report to view, edit, rename or remove. A dashboard report may also be exported or imported. The file format is XML.
There is also the option to set display settings such as time, length and distance, volume and mass and weight.
Selecting Create Dashboard Report will prompt you to enter a dashboard name. Once a name is entered, the
DashboardDesignerForm window will appear.
From here, you have the option to insert various dashboard items such as a pivot grid, grid, chart, pie chart, gauge, card
image, text box or range filter.
Pivot – A pivot grid displays a cross tabular report. It can be used to present multi-dimensional data in an easy to read
format.
Grid – A grid shows data in a tabular form while allowing you to summarize against specific measures or calculate
differences between them.
Chart – A chart visualizes data in an XY diagram, allowing you to render a wide range if diagram types such as a bar, point,
area, range, bubble or financial chart.
Pies – A pie chart displays a series of pies that represent the contribution of each value to the total.
Gauges – A gauge chart is another method for displaying a series of model data. It displays two values – one with a
needle and one with a marker on the scale.
Cards – Cards display the differences between two values, which can be expressed as an absolute for percent.
Choropleth Map – This item allows you to place an choropleth map dashboard item onto your dashboard.
Geo Point Map – This allows you to place a geo point map dashboard item onto your dashboard.
Range Filter – A Range Filter item allows you to apply filtering to other dashboard items. It displays a chart with selection
thumbs over it that allow you to filter out values displayed along the argument axis.
Image – An Image item allows you to insert an image into the dashboard. Right clicking in the Image item will allow you
to load or import in image.
Text Box – A Text Box item allows you to enter text onto your dashboard. Right clicking within the Text Box item allows
you to enter text.
Once a dashboard item has been inserted, you have the ability to duplicate or delete an item. There is also the ability to
add a dashboard title and to identify currency units to be displayed.
In addition, right clicking into a dashboard item will give you the option to show an item caption, duplicate or delete the
item, edit the dashboard item name, edit an item filter, print preview the item or export to a PDF or image (.PNG) file.
Once a dashboard item is inserted into the window, other ribbons or tools are available which are specific to the item
inserted. These are briefly discussed below. By hovering over each tool within the ribbon, you will get more information on
what each tool accomplishes.
Pivot Data Tools include Edit Filter, Clear, Ignore Master Filters and Initial State Layout while Pivot Design Tools include
Show Caption and Edit Names options.
Grid Tools include Data Tools and Design Tools. Data Tools include Edit Filter, Clear, Single Master Filter, Multiple Master
Filter, Drill Down, Cross-Data-Source Filtering and Ignore Master Filters. Grid Design Tools include Show Caption, Edit
766 / 1277
Filter, Drill Down, Cross-Data-Source Filtering and Ignore Master Filters. Grid Design Tools include Show Caption, Edit
Names, Horizontal Lines, Vertical Lines, Merge Cells, Banded Rows and Column Headers.
Chart tools consist of Data Tools and Design Tools. Chart Data Tools include Edit Filter, Clear, Single Master Filter,
Multiple Master Filter, Drill Down, Cross-Data-Source Filtering, Ignore Master Filters, Arguments and Series.
Chart Design Tools include Show Caption, Edit Names, Rotate, X-Axis Settings, Y-Axis Settings, Show Legend and Series
Type.
Pie Tools include Data Tools and Design Tools. Pie Data Tools include Edit Filter, Clear, Single Master Filter, Multiple
Master Filter, Drill Down, Cross-Data-Source Filtering, Ignore Master Filters, Arguments and Series.
Pie Design Tools include Show Caption, Edit Names, Auto Arrange, Arrange in Columns, Arrange in Rows, Data Labels,
Tooltips, Show Pie Captions and Pie or Donut style.
Gauges Tools include Data Tools and Design Tools. Gauges Data Tools include Edit Filter, Clear, Master Filter, Single
Master Filter, Multiple Master Filter, Drill Down, Cross-Data-Source Filtering and Ignore Master Filters.
Gauges Design Tools include Show Caption, Edit Names, Auto Arrange, Arrange in Columns, Arrange in Rows, and styles
such as Full Circular, Half-Circular, Left-Quarter Circular, Right-Quarter Circular, Three-Fourth Circular, Linear Horizontal,
Linear Vertical and Show Gauge Captions.
Cards Tools include Data Tools and Design Tools. Cards Data Tools include Edit Filter, Clear, Single Master Filter, Multiple
Master Filter, Drill Down, Cross-Data-Source Filtering and Ignore Master Filters.
767 / 1277
Cards Design Tools include Show Caption, Edit Names, Auto Arrange, Arrange in Columns or Arrange in Rows.
Map Tools include Data Tools and Design Tools. Map Data Tools include Edit Filter, Clear, Single Master Filter, Multiple
Master Filter, Cross-Data-Source Filtering and Ignore Master Filters.
Map Design Tools include Show Caption, Edit Names, Show Legend (choropleth maps only), Load Mao, Import Map and
Default Map options.
Range Filter Tools include Data Tools and Design Tools. Data Tools include Edit Filter, Clear and Cross-Data-Source
Filtering.
Range Filter Design Tools include Show Caption, Edit Names and allow you to change the series type to a Line, Stacked
Line, Full Stacked Line, Area, Stacked Area or Full-Stacked Area.
Image Design Tools include Show Caption, Edit Names and include options such as Load Image, Import Image, Clip,
Stretch, Squeeze, Zoom and Alignment.
Text Box Design Tools allow you Show Caption, Edit Names as well as allowing you edit various text settings.
There is also a Data Source ribbon tab in the dashboard reports designer, so that a data source, such as a database, may be
connected to retreive additional external data for a dashboard. The New Data Source button on the Data Source ribbon
will open the following dialog.
768 / 1277
Next, the data connection parameters, such as Provider, Server name, Database and other pertinent information, are
specified.
The object to include in your data source is then selected and can later be seen in the list of data logs and reports to utilize
when building the dashboard report.
In earlier versions of Simio, there was the concept of a dashboard where plots, pie charts, gauges, etc. could be added to a
model. This functionality is still available however it has been renamed to Console and is now available under the
Definitions tab. While the items in the Console view are animated as the model runs, the new Dashboard Reports display
post run data.
Dashboard Report Edition Specific Functionality
769 / 1277
Dashboard Report functionality varies based on your license type. Below is a chart that describes the differences:
Edition/License Functionality
Type
Personal Edition Access to the Dashboard Reports Window and ability to view dashboards that contain state
and tally observations in addition to user created tables. No editing is permitted.
Design Edition Access to the Dashboard Reports Window and ability to view dashboards that contain state
and tally observations in addition to user created tables. No editing is permitted.
Professional Access to the Dashboard Reports Window and ability to view dashboards. Creation and editing
Edition of dashboards are limited to state and tally observations in addition to user created tables.
RPS Edition Access to the Dashboard Reports Window and ability to view dashboards. Creation and editing
of dashboards are not limited.
Example 1 – How to create a dashboard report with a model that contains tallies
Problem – In the HospitalEmergencyDepartment example, I want to be able to graphically display the differences
between the times patients wait for rooms, times patients wait for beds and patients length of stay, both as an average as
well as each data point over time.
This example will illustrate how to create a simple dashboard that will display tally statistics.
Load the HospitalEmergencyDepartment SIMIO Project File located in your Examples folder.
Open the Definitions window and for each TallyStatistic, under Advanced Options, set the Log Observations value to ‘True’
for TallyStatistic TimeWaitiedForBeds, TimeWaitedForRoom and LengthOfStayStatistic. This will create a log of the tally
observation data that will be used to populate the dashboard items.
Fast forward the model to completion. Once the model run has ended, open the Results window and then select the
Dashboard Reports view.
Click Dashboard Report Create in the upper left corner of the window and select a dashboard name (ex: Tallies).
770 / 1277
This will bring up the DashboardDesignerForm window.
From the dropdown list in the upper left corner, select Tally Observation Log. That is the log file we will use to populate the
dashboard.
From the Dashboard ribbon click on Cards. Cards are used to display the differences between values. A Card window and
corresponding data items will appear.
On the left side of the window, under Tally Observation Log, select the Value item and drag it onto the Actual data item
box. This is the value that will be displayed on each card. Now change the modifier from Sum to Average by clicking on the
arrow to the right of the data item box. This will cause the average of all Values in the log for each data source item to be
displayed on each card.
Now drag the DataSource item onto the Series data item box. This will create a card for each DataSource item in the Tally
Observation Log and label each card with the name of the DataSource item. Each Card will display the average of all
Values for that Tally.
771 / 1277
Right click in the Card box and select Edit Names. Change the name from Chart 1 to Tallies. You should see something that
looks like this.
On the Dashboard ribbon and select Chart. Drag Value item onto the Value data item box (keeping the modifier as Sum).
This will display the sum of the Value for each Tally item. To the left of the Value(Sum) data item box, click on the icon and
change the Series type to Point.
Drag the Time item to the Argument data item box and change the modifier to be Date-Hour-Minute. This will define the
X-axis as a time line. Make sure the arrow next to the Time data item is pointing up so that the chart will show the correct
order of the time line.
Drag the DataSource item to Series data item box. This identifies the Tallies that are to be charted. Right click in the Chart
box and select Edit Names to change the name from Chart 1 to Values Over Time.
772 / 1277
You should have something that looks like this.
Now click on Range Filter in the Dashboard ribbon. This will allow you to apply filtering to the to the dashboard items.
Drag the Value item over the Value data item box, keeping the Sum modifier. Drag the Time item over the Argument data
item box, changing the modifier to Date-Hour-Minute. By identifying the Argument as Time, you will be able to filter the
other items with the dashboard bases on the time range. Drag the DataSource item to the Series data item box.
Each window within the DashboardDesignerForm window can be resized and moved. Below is an example of what can be
shown.
773 / 1277
Select Save from the dashboard ribbon and close the DashboardDesignerForm window. To view a specific dashboard
report, select it from the Select pull down list.
You may also want to try to use the selection thumbs on the range filter to see how the dashboard changes. Also, try using
the grid item instead of the cards to display the same results in grid fashion.
Example 2 – How to create a dashboard report with a tables
Problem – In the SchedulingDiscretePartProduction model, I want to be able to graphically display material usage over
time as well as the resource states of the operator, forklift and workcenter areas as a percentage of model duration.
Load the SchedulingDiscretePartProduction SIMIO Project File located in your Examples folder. In the Facility window,
under the Run Ribbon, under Advanced Options, make sure Enable Interactive Logging is turned on. This will ensure that
log file data will be captured.
Fast forward the model to completion. Once the model run has ended, open the Results window and then select the
Dashboard Reports view.
Click Dashboard Report Create in the upper left corner of the window and select a dashboard name (ex: Materials). This
will bring up the DashboardDesignerForm window.
774 / 1277
From the dropdown list in the upper left corner, select Material Usage Log. That is the log file we will use to populate the
dashboard.
From the Dashboard ribbon click on Cards. Cards are used to display the differences between values.
On the left side of the window, under Material Usage Log, select the Quantity item and drag it onto the Actual data item
box. This is the value that will be displayed on each card. This will cause the sum of all Material Quantities in the log for
each data source item to be displayed on each card.
Now drag the Material item onto the Series data item box. This will create a card for each Material item in the Material
Usage Log and label each card with the name of the Material item. Each Card will display the Sum of all Material
Quantities.
* Note: You may 'hide' the large number shown on the Cards (in this case, Quantity(Sum))by toggling the Hide Card
Numbers option under the Edit menu for the report.
Right click in the Card box and select Edit Names. Change the name from Chart 1 to Materials. You should see something
that looks like this.
On the Dashboard ribbon and select Chart. Drag the StockLevel item onto the Value data item box (keeping the modifier
as Sum). This defines the data item, in this case StockLevel, to chart. To the left of the StockLevel(Sum) data item box,
change the Series type to Step Line.
775 / 1277
Drag the Time item to the Argument data item box and change the modifier to be Date-Hour-Minute. This will define the
X-axis as a time line. Make sure the arrow next to the Time data item is pointing up so that the chart will show the correct
order of the time line
Drag the Material item to Series data item box. This defines the Materials types that will be charted. Right click in the
Chart box and select Edit Names to change the name from Chart 1 to Stock Level.
Click the title bar of the Stock Level chart and move it below the Material cards. Save the dashboard. You should see
something that looks like this.
You may also want to try adding a Range Filter to the dashboard to allow you to display the data in a shorter time span.
Let’s create another dashboard. Name this one Pick Ups. Make sure Transporter Usage Log appears from the pull down list
on the left side of the window.
On the Dashboard ribbon click on Grid. Drag the Resource item onto the first Column data item box, followed by Start
Time (Date-Hour-Minute), From Node, End Time(Date-Hour-Minute), To Node and Entity. This identifies the columns that
will be displayed on the grid and their corresponding values.
Change the grid name to Pick Ups. You should have something that looks like this.
776 / 1277
Change the log file on the left side to me Resource State Log. From the Dashboard ribbon click on Pies.
On the left side of the window, under Resource State Log, select the Duration item and drag it onto the Actual data item
box. This is the value that will be displayed within each pie.
Drag the State item onto the Argument data item box. This identifies for each State, the Duration in that State will be
displayed.
Drag the Resource item onto the Series data item. This will create a pie in the dashboard for each Resource item.
Right click in the Pie window and select Edit Names. Change the name from Pie 1 to Resource States. You should see
something that looks like this.
You may also want to try using the Resource State Log and create a pivot grade to display the actual values of the states
and not just a percentage of the whole.
Experiment Dashboard Reports
See the Experiments page, Experiment Dashboard Reports section, for more information on building a Dashboard Report
within the Project Experiment.
777 / 1277
Simio Reference Guide
Table Reports
The Table Reports window provides access to the Report Designer for creating reports using the data within the various
Data Tables in Simio. All user licensing allows for access to previously developed table reports ( Select pull-down list),
however, the Create Table Report button, as displayed below, is only available to RPS ( Enterprise) users.
778 / 1277
Simio Reference Guide
Logs
Logs
The Logs window includes detailed logs for the interactive run displayed in multiple tabbed windows.
For all Simio license types, this includes the State Observation Log and Tally Observation Log.
For Simio RPS ( Enterprise) Edition customers, this also includes the Resource Usage Log, Resource State Log, Resource
Capacity Log, Constraint Log, Transporter Usage Log, Material Usage Log, Task Log and Task State Log.
779 / 1277
Simio Reference Guide
Time - The simulation date and time that the state change occurred.
Object Type - The type of object that includes the state statistic, which may be Model or another object.
Object Name - The name of the object within the model that includes the state statistic.
Data Source - The name of the state statistic being tracked or optional data source string as specified within state
statistic element.
Category - The category string value as specified in the state statistic element, which is UserSpecified by default.
Data Item - The data item string value as specified in the state statistic element, which is StateValue by default.
Value - The value of the state variable at the time specified.
Units - The time units for the Value indicated.
Rate - The rate for the level continuous-change state variable.
Units - The time units for the Rate indicated.
Acceleration - The acceleration for the level with acceleration continuous-change state variable.
Units - The time units for the Acceleration indicated.
780 / 1277
Simio Reference Guide
Time - The simulation date and time that a tally statistic observation was added.
Object Type - The type of object that includes the tally statistic, which may be Model or another object.
Object Name - The name of the object within the model that includes the tally statistic.
Data Source - The name of the tally statistic being tracked or optional data source string as specified within tally
statistic element.
Category - The category string value as specified in the tally statistic element, which is UserSpecified by default.
Data Item - The data item string value as specified in the tally statistic element, which is TallyValue by default.
Value - The value of the tally statistic observation at the time specified.
Units - The time units for the Value indicated.
781 / 1277
Simio Reference Guide
782 / 1277
Simio Reference Guide
Exporting
Exporting
Results data can be exported to a .csv file by clicking the Export Results icon in the ribbon menu when viewing the Pivot
Grid. If an experiment was run with more than one replication, the user has a choice of exporting the details or the
summary. The detailed export will include data from all the replications. The summary export will only include the
summary across all the replications.
783 / 1277
Simio Reference Guide
Worker Transporter Carries entities between Fixed objects and processes entities at a fixed
location.
Transfer Node Node An intersection where entities set destination and wait on Transporters.
Path Link A pathway between two Nodes where entities travel based on speed.
Workstation Fixed Models a 3-phase workstation with setup, processing, and teardown.
( Deprecated)
Most library objects such as Entities, Sources, Sinks, and Servers have a Size property. This provides the relationship
between animated size and the physical size in the model (when needed). Nodes are an exception and do not have any
physical space in the model. There is no travel time required to pass through a node (although time could be required to
execute any logic specified in a node).
In the Standard Library, the processing time delays for the Server, Combiner, and Separator objects are now marked as
interruptible. The process in these objects performing the processing delay activity is named 'OnEnteredProcessing'. Thus,
to interrupt processing activity at a Server, Combiner, or Separator, you may now use the Interrupt step to interrupt the
'OnEnteredProcessing' process of the target object.
Right clicking on an object in the Standard Library allows the user to subclass it into their own Project Library. Right
clicking on an existing object within the Facility window also provides an option to 'Create Object From This' which will
subclass the object and include default data. See the Creating New Objects page for more information.
To view all the Functions available for these Intelligent Objects, see the Functions help page.
784 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
785 / 1277
Simio Reference Guide
BasicNode
A Basic node is a simple node to support connection between links. Most objects that support incoming connections have
an associated (embedded) basic node. Many times, Basic nodes are used as starting and/or ending points of links. They
may also used as intersection points for vehicle networks.
Because transporters commonly travel through nodes, the state assignments functionality provided by the BasicNode and
TransferNode objects make it easy for a user to distinguish between entity or transporter state assignments by providing an
Assign If condition option. Note that these available assign condition type choices ( Custom Condition, Entity Entering, No
Condition, Transporter Entering) are also available within the tally condition choices if defining a tally statistic using the
node’s Tally Statistics -> On Entering repeat group.
The Add-On Process Triggers allow additional logic to be specified when using the Basic Node.
Listed below are the properties of the Basic Node:
Property Valid Entry Description
Initial Expression The initial maximum number of travelers that may simultaneously occupy
Traveler this node.
Capacity
Entry First In First Out, The rule used to rank entry into this node among competing travelers.
Ranking Rule Last In First Out,
Smallest Value
First, Largest
Value First
Entry Expression The expression used with a 'Smallest Value First' or 'Largest Value First' entry
Ranking ranking rule.
Expression
Outbound Continue, Free Indicates whether to assign a new travel mode to entities attempting to
Travel Mode Space Only, transfer from this node to either free space or an outbound link. If the value
Network is 'Free Space Only', then the Outbound Link Preference and Outbound Link
Only,Network If Rule properties of the node will not be displayed.
Possible
Outbound Any, Available, The preference used by a traveler to select an outbound link from this node
Link Specific to its next destination.
Preference
Outbound Shortest Path, By The rule used by an entity to select the outbound link from this node to its
Link Rule Link Weight destination node (if a destination node has been set).
Outbound Link Name The name of the specific outbound link that will be selected by the traveler.
Link Name
On Entering Repeat Group, Optional state assignments when an entity is entering the BasicNode object.
( State Assignments
Assignments)
Condition Expression Condition required to perform the assignment when Assign If is 'Custom
( State Condition'.
Assignments)
State State Name The name of the state that will be assigned a new value.
Variable
Name ( State
Assignments)
On Entering Repeat Group, Optional tally statistics to be calculated when an entity enters the node
( Tally Tally Statistics object.
Statistics)
On Exited Repeat Group, Optional tally statistics to be calculated when an entity has exited the node
( Tally Tally Statistics object.
Statistics)
Tally If ( Tally Custom The condition required to record the tally statistic.
Statistics) Condition, Entity
Entering, No
Condition,
Transporter
Entering
Tally Statistic TallyStatistic The tally statistic for which the value is to be recorded.
Name ( Tally Element Name
Statistics)
Value Type Expression, The type of value to record. The value type 'Expression' records the value of
( Tally TimeBetween the specified expression. The value type 'TimeBetween' records the time
Statistics) between arrivals to Tally steps referencing the tally statistic.
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Entered Process Instance Occurs when a traveling entity's leading edge has entered this node's
Add-On Name crossing point.
Process
Exited Add- Process Instance Occurs when a traveling entity has departed this node's crossing point.
On Process Name
Sequence Expression The expression used to get a deterministic estimation of the operation time
Expected if this node is in the destination sequence of an entity's assigned sequence
Operation table.
Time 787 / 1277
Time
Branching Expression The random number stream to be used if the entity is transferring from the
Random node to an outbound link and is probabilistically selecting the outbound link
Number using the node's 'By Link Weight' outbound link rule.
Stream
Bound Node Instance The name of an external output node that this node has been bound to in
External Name order to transfer entities out of the parent object. The transfer attempt will
Output Node be performed by an entity immediately upon entering the node and, if
successful, all other entry, crossing and routing logic for the node will be
ignored.
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
788 / 1277
Simio Reference Guide
Entity Destination
Automatic destination is to continue
From the basic node, the entity will simply continue down the appropriate path leaving this node, as determined by
the rules mentioned above. If a SetNode step was used in the Processes window, this entity is instead going to a
specific node.
** If the entity's destination is not reacheable
If the entity's destination is not reachable because there is no physical link between the basic node and the
destination node, the entity will automatically destroyed. For example, if there are no paths from the node leading
out or no path to the specific destination specified ( SetNode), the entity will be automatically destroyed. If the
Warning Level is set to either Alert User or Write to Trace Only, then the user will recieve a warning that this has
occurred. In some cases, users may intend for this to occur, in which case, they may disable the warnings.
TransferNode
A Transfer Node is a more comprehensive node that supports connection to paths as well as the ability to select
destination, path, and transfer device. Most objects that support outgoing connections have an associated (embedded)
transfer node.
Because transporters commonly travel through nodes, the state assignments functionality provided by the BasicNode and
TransferNode objects make it easy for a user to distinguish between entity or transporter state assignments by providing an
Assign If condition option. Note that these available assign condition type choices ( Custom Condition, Entity Entering, No
Condition, Transporter Entering) are also available within the tally condition choices if defining a tally statistic using the
node’s Tally Statistics -> On Entering repeat group.
When Entity Destination Type is 'Select From List' or 'Custom Routing Group', the Route Constraint Logic repeat group is
provided to support imposing additional constraints on an entity’s route request by referencing Constraint Logic elements.
This replaces the Required Materials repeat group which is deprecated as of Sprint 203. Existing models can access the
Required Materials properties by using File, Settings and under the GUI area, setting the Display Deprecated Properties In
Properties Window to 'True'.
The Add-On Process Triggers allow additional logic to be specified when using the Transfer Node.
For more information, see Transfer Node - Discussion and Examples.
Listed below are the properties of the Transfer Node:
Property Valid Entry Description
Initial Traveler Expression The initial maximum number of travelers that may simultaneously occupy
Capacity this node.
Entry Ranking First In First The rule used to rank entry into this node among competing travelers.
Rule Out, Last In
First Out,
Smallest
Value First,
Largest Value
First
Entry Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value First' entry
Expression ranking rule.
Outbound Continue, Indicates whether to assign a new travel mode to entities attempting to
Travel Mode Free Space transfer from this node to either free space or an outbound link. If the value
Only, is 'Free Space Only', then the Outbound Link Preference and Outbound Link
Network Rule properties of the node will not be displayed.
Only,Network
If Possible
Outbound Link Any, The preference used by a traveler to select an outbound link from this node
Preference Available, to its next destination.
Specific
Outbound Link Shortest Path, The rule used by a traveler to select an outbound link from this node to its
Rule By Link next destination. Note that if this rule is set to 'Shortest Path', and the
Weight traveler does not have an assigned destination, then the 'By Link Weight' rule
is assumed.
Outbound Link Link Name The name of the specific outbound link that will be selected by the traveler.
Name
791 / 1277
Entity Continue, The method used to set a destination node for entities departing this node.
Destination Specific, By 'By Sequence' requires that the entity object has been assigned a sequence
Type Sequence, table. The destination node value will be set to the next destination in the
Select From sequence.
List, Use
Custom
Routing
Group, None
( Destroy
Entity)
Node Name Node The name of the specific node object to set the destination value to.
Instance
name
Node List Node List The name of the list of node objects from which a destination will be
Name Name or selected. This may be a list name or table reference.
Table Name
Routing Group Routing The name of the Routing Group element that will be used to route to a
Name Group Name destination selected from a list of candidate nodes. Go to Definitions >
Elements to add a new Routing Group to the model.
Selection Goal Smallest The goal used to select a destination node from the list of candidates.
Distance,
Largest
Distance,
Preferred
Order, Cyclic,
Random,
Smallest
Value, Largest
Value
Selection Expression The expression criteria, evaluated for each candidate destination, used with
Expression a Smallest Value or Largest Value selection goal. Use the keyword Candidate
at the beginning of the expression.
Selection Expression An optional condition evaluated for each candidate destination that must be
Condition true for the destination node to be selected. In the condition, use the
keyword 'Candidate' to reference a node object in the collection of
candidates (e.g. Candidate.Node.AssociatedStationOverload)
Blocked Select Any, The rule used to manage destination selection if there are destinations in the
Destination Select list of candidate nodes that are considered to be blocked. If the rule is
Rule Available 'Select Any', then whether or not destinations are considered blocked will be
Only, Prefer ignored. If the rule is 'Select Available Only', then only a destination that is
Available not currently blocked may be assigned, and if all destinations are blocked,
then the token will be held at the Route step until a destination becomes
available. If the rule is 'Prefer Available', then a destination that is not
currently blocked will be preferred, but if all destinations are blocked, then
the best destination per the selection goal will still be immediately assigned.
Route Repeat Constraint logic used to enforce additional constraints on an entity's route
Constraint Group, request.
Logic Constraint
Logic
elements
Route Constraint The name of the Constraint Logic element used to enforce additional
Constraint Logic constraints on an entity's route request. 792 / 1277
Constraint Logic constraints on an entity's route request.
Logic.Constraint elements
Logic Name
Route Request First In First The static rule used to rank competing entities waiting to be assigned an
Ranking Rule Out, Last In available destination. Available when Entity Destination Type is 'Select From
First Out, List' only.
Smallest
Value First,
Largest Value
First
Route Request Expression The expression used with a 'Smallest Value First' or 'Largest Value First'
Ranking ranking rule.
Expression
Route Request None, or one The rule used to dynamically select from competing requests waiting to be
Dynamic of several assigned an available destination.
Selection Rule Dynamic
Selection
Rules
Ride On True or False Indicates whether entities departing this node object will select and ride on
Transporter a transporter object for travel.
Transporter Specific, The transporters that may be selected to ride on. 'On Same Network'
Type From List, indicates all transporters that are currently on the same network as the entity.
Any
Transporter Transporter The name of the specific transporter type that the entity may ride on.
Name Instance
Name
Transporter List Transporter The name of the list of transporter types that the entity may ride on.
Name List Name
Reservation Reserve The method used to select and reserve a transporter object to ride on.
Method Closest, 'ReserveClosest' will find the transporter that is closest on a Network or
Reserve Best, physically closest (if no network) to the TransferNode. If there are two that
First are of equal distance, the node's Selection Goal property will be used to
determine which transporter to select. 'ReserveBest' simply looks to the
Available At Selection Goal and Selection Criteria properties and finds the Transporter
Location that best fits the goal, regardless of the vehicle's current location. The
'FirstAvailableAtLocation' will cause the entities to wait for a Transporter to
arrive to the node. This method should only be used when the vehicle has a
Routing Type of 'Fixed Route' or when the user specifically moves the vehicle
to an entity location. Otherwise, this method doesn't request the vehicle to
move to the entity location.
Selection Goal Preferred The goal used to rank transporter preference when multiple candidates are
Order, available to ride on.
Smallest
Value, Largest
Value
Selection Expression The expression criteria, evaluated for each candidate transporter object,
Expression used with a Smallest Value or Largest alue selection goal.
Selection Expression An optional condition evaluated for each candidate transporter object, and
Condition which must be true for the transporter to be eligible to ride on.
793 / 1277
Selection Expression An optional condition evaluated for each candidate transporter object, and
Condition which must be true for the transporter to be eligible to ride on.
Keep Reserved Expression Optional condition indicating whether, on drop-off, to keep the transporter
If resource reserved for possible later reuse by the same entity. Other entities
will be unable to use the transporter for processing tasks or new ride pickup
requests unless the reservation is cancelled.
This condition is evaluated when the entity is picked up at the TransferNode.
In the expression, use the syntax Entity.CurrentTransporter.[ Attribute] to
reference an attribute of the selected transporter (e.g.,
Entity.CurrentTransporter.Is.Vehicle1).
Note that when an entity is attempting to select a resource from a group of
candidates (e.g., from a list or from a population of some resource type), by
default a preference will be given to select a resource that has already been
reserved by that entity irrespective of the specified selection goal.
On Entering Repeat Optional state assignments when an entity is entering the TransferNode
( State Group, object.
Assignments) Assignments
Condition Expression Condition required to perform the assignment when Assign If is 'Custom
( State Condition'.
Assignments)
State Variable State Name The name of the state that will be assigned a new value.
Name ( State
Assignments)
On Entering Repeat Optional tally statistics to be calculated when an entity enters the node
( Tally Statistics) Group, Tally object.
Statistics
On Exited ( Tally Repeat Optional tally statistics to be calculated when an entity has exited the node
Statistics) Group, Tally object.
Statistics
Tally If ( Tally Custom The condition required to record the tally statistic.
Statistics) Condition,
Entity
Entering, No
Condition,
Transporter
Entering
Tally Statistic TallyStatistic The tally statistic for which the value is to be recorded.
Name ( Tally Element
Statistics) Name
Value Type Expression, The type of value to record. The value type 'Expression' records the value of
( Tally Statistics) TimeBetween the specified expression. The value type 'TimeBetween' records the time 794 / 1277
( Tally Statistics) TimeBetween the specified expression. The value type 'TimeBetween' records the time
between arrivals to Tally steps referencing the tally statistic.
Entered Add- Process Occurs when a travelling Entity or Transporter's leading edge has entered
On Process Instance this node's crossing point.
Name
Exited Add-On Process Occurs when a travelling Entity or Transporter has exited this node's crossing
Process Instance point.
Name
Sequence Expression The expression used to get a deterministic estimation of the operation time
Expected if this node is in the destination sequence of an entity's assigned sequence
Operation Time table.
Branching Expression The random number stream to be used if the entity is transferring from the
Random node to an outbound link and is probabilistically selecting the outbound link
Number Stream using the node's 'By Link Weight' outbound link rule.
Bound External Node The name of an external output node that this node has been bound to in
Output Node Instance order to transfer entities out of the parent object. The transfer attempt will
Name be performed by an entity immediately upon entering the node and, if
successful, all other entry, crossing and routing logic for the node will be
ignored.
Report Statistics True or False A Boolean property may be True or False and used in expressions as a
numeric 1.0 ( True) or 0.0 ( False) value.
795 / 1277
Simio Reference Guide
When the Entity Destination Type is 'Select From List', this section of properties also includes static and dynamic
routing options. This includes the Route Request Ranking Rule which is the static rule used to rank competing entities
waiting to be assigned an available destination, as well as the Route Request Dynamic Selection Rule which is the rule
used to dynamically select from competing requests waiting to be assigned an available destination. See the
Dynamic Selection Rules for more information.
Transfer Node - 'Keep Reserved If' True with Ride Capacity Greater than 1
799 / 1277
Simio Reference Guide
Source
A Source is an object that allows the creation of entities at a specified rate, by a specified arrival pattern, on the firing of
an event. The Source has an Output Buffer where entities can wait before leaving the Source via a Node. From the output
node the entities leave on the outgoing link(s) to wherever the designed logic is going to send them. The Balking and
Reneging Options page provides additional information and examples on capacities, balking and reneging for the output
buffer.
State assignments can be made before exiting, on balking or on reneging the Source. The Add-On Process Triggers allow
additional logic to be specified when using the Source.
For more information, see Source - Discussion and Examples.
Listed below are the properties of the Source:
Property Valid Entry Description
Entity Type Entity Instance The type of entities created by this Source object.
Name
Arrival Mode Interarrival Time, The mode used by this Source object to automatically generate a
Time Varying Arrival stream of entity arrivals.
Rate, On Event,
Arrival Table
Time Offset Expression The time offset until the first arrival.
Interarrival Time Expression The time interval between two successive arrivals. This property
may be specified using a random sample from a distribution
(typically the exponential distribution).
Rate Table Rate Table Instance The rate table that defines how the arrival rate changes over time
(arrival process is a non-stationary poisson).
Rate Scale Factor Expression The factor used to scale the arrival rate values specified in the rate
table.
Initial Number Expression An initial number of entities to be created by this Source object at
Entities the beginning of the simulation run, in addition to entities created
by the 'On Event' arrival mode. Note that this initial entity creation
is not included in (counted against) the arrival mode's Maximum
Arrivals.
Event Name Event Instance Name The name of the event which causes entity arrivals at this Source
object.
Event Count Expression truncated The number of occurrences of Event Name required to trigger the
to integer next entity arrival at this Source object.
Arrival Time Numeric Table The name of the numeric table property (i.e., table column) that
Property Property (column) defines the list of scheduled times when arrival events are
expected to occur. The number of arrival event occurences at each
scheduled time is determined by the Arrival Events Per Time Slot
property. The number of entities created by each arrival event (i.e.,
the arrival 'batch size') is then determined by the Entities Per
Arrival property. When an arrival event occurs, a reference to the
table row holding the arrival time will be automatically assigned
to any individual entities created by the event.
800 / 1277
to any individual entities created by the event.
Arrival Events Per Expression The number of arrival events expected to occur at each arrival
Time Slot time specified in the Arrival Time property. Upon each arrival
event occurence, the number of entities created (i.e., the arrival
'batch size') will be determined by the Entities Per Arrival property.
Note that the actual timing of an arrival event may deviate from
the expected schedule if the Arrival Time Deviation and Arrival
No-Show Probability options are used.
Arrival Time Expression Expression used to model differences (typically random) between
Deviation the scheduled times in the arrival table and the times during the
simulation run that the arrivals actually occur. This expression may
return a negative or positive value. If a negative deviation is
returned, then the actual arrival time will occur earlier than the
scheduled time by that duration. If a positive deviation value is
returned, then the actual arrival time will occur later than the
scheduled tim by that duration. Note that this feature is
automatically disabled if random sampling in the simulation is
disabled.
No-Show Expression The probability that a scheduled arrival in the arrival table will be
Probability a 'no-show' and thus not actually occur. Enter the chance of a no-
show as a value between 0 and 1 (including values of 0 or 1). Note
that this feature is automatically disabled if random sampling in
the simulation is disabled.
Entities Per Arrival Expression Truncated The number of entities that will be created by this Source object
to Integer for each arrival event.
Repeat Arrival True or False Indicates if the pattern of arrival times specified in the Arrival
Pattern Time property should be repeated when the end of the pattern is
reached.
Maximum Arrivals Expression truncated The maximum number of arrivals to be automatically generated
to integer by this Source object.
Maximum Time Expression The time duration from the beginning of the simulation run after
which this Source object will stop generating arrivals.
Stop Event Name Event The name of an event which will cause this Source object to stop
generating arrivals.
Output Buffer Integer >= 0 The number of discrete entities that can be held in this Source
Capacity object's output buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at
Type ( Output Conditional, entering the buffer.
Buffer) Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if
a zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause entities to
abandon waiting in the buffer.
801 / 1277
Trigger Time Based, Event The type of trigger.
Type.Renege Based A time based trigger can cause an entity waiting in the buffer to
Triggers renege after a tolerable wait duration expires. An event based
trigger can cause an entity waiting in the buffer to renege if a
specific event occurs.
Wait Expression,vspecified The tolerable wait duration until a renege decision by an entity
Duration.Renege if the Trigger Type is waiting in the buffer.
Triggers 'Time Based'.
Triggering Event Event Reference, The name of the event whose occurrence will trigger a renege
Name.Renege specified if the decision by an entity waiting in the buffer.
Triggers Trigger Type is 'Event
Based'.
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to decide
Type .Renege Probabilistic whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified The renege condition or probability specified as an expression. If
Or if the Renege a probability then enter the chance of reneging as a value
Probability.Renege Decision Type is between 0.0 (0%) and 1.0 (100%).
Triggers 'Conditional' or NOTE: If it is necessary to check in a conditional expression
'Probabilistic'. whether an entity is currently waiting for a specific type of
constraint, the entity 'Queuing' namespace provides several
functions for that purpose (e.g.,
Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object Facility node location to send a reneging entity.
Name.Renege reference
Triggers
Trigger Start Entered, Ended Indicates when the trigger becomes active for an entity occupying
Boundary.Renege Transfer In the buffer. Can be either immediately when the entity has entered
Triggers the buffer or, alternatively, not until its transfer into the buffer has
been ended (e.g., after a transfer-in time or any other entry related
logic).
Before Exiting Repeat Group, Optional state assignments when an entity is ready to exit the
( State Assignments object.
Assignments)
On Balking ( State Repeat Group, Optional state assignments when an entity is balking at entering
Assignments) Assignments an input or output buffer of the object.
On Reneging Repeat Group, Optional state assignments when an entity is reneging from an
( State Assignments input or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only with On
Assignments Balking and On Reneging assignments.
Condition.State Expression Custom condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name Name of the state variable that will be assigned a new value.
Name.State or Reference
Assignments
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Creating
Entities)
Action Type ( Table Reference Existing The type of table row reference action to perform.
Row Referencing - Row, Add New Row The 'Reference Existing Row' action type may be used to set a
On Created Entity) reference to an existing table row in a data table or sequence
table. The row index into the table is specified by the Row Number
property.
The 'Add New Row' action type may be used to add a new row to
an output table. A reference will be automatically set to the newly
added row.
Row Number Expression The one-based row index into the table.
( Table Row
Referencing - On
Created Entity)
Parent Cost Center Cost Center Name The cost center that costs allocated to this object are rolled up
into. If a parent cost center is not explicitly specified, then costs
will be automatically rolled up into the parent object containing
this object.
Capital Cost Expression The initial one-time setup cost to add this object to the system.
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the waiting
( Output Buffer time.
Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Output Buffer
Costs)
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Process Name
Run Ending Add- Process Instance Occurs when the simulation run is ending.
On Process Name
Creating Entity Process Instance Occurs when this Source object is about to create an arrival of one
Add-On Process Name or more entities.
803 / 1277
Created Entities Process Instance Occurs when an entity has been created by this Source object.
Add-On Process Name
Exited Add-On Process Instance Occurs when an entity has exited this Source object.
Process Name
Transfer-Out Disable, Default, Indicates the type of constraints used to determine whether
Constraints Custom Condition entities can transfer out of this fixed object via external output
nodes. If specified as 'Default', then the Can Transfer In & Out of
Objects property setting for the entity type will determine whether
an entity can perform a transfer out of the object.
Transfer-Out Expression The condition required to allow an entity to transfer out of this
Condition fixed object via an external output node.
Report Statistics True or False A Boolean property may be True or False and used in expressions
as a numeric 1.0 ( True) or 0.0 ( False) value.
Report Gantt True or False A Boolean property may be True or False and used in expressions
as a numeric 1.0 ( True) or 0.0 ( False) value.
804 / 1277
Simio Reference Guide
806 / 1277
Send comments on this topic to Support
807 / 1277
Simio Reference Guide
Sink
The Sink destroys entities. It also has the capability to collect automatic statistics.
The ‘TimeInSystem’ TallyStatistic generated by this object has its Confidence Level property specified as ‘Default’. The user
may change the Confidence Level used by the Sink's tally by simply changing the Confidence Level in the Experiment.
State assignments can be made upon entering the Sink. The Add-On Process Triggers allow additional logic to be
specified when using the Sink.
On Entering Repeat Optional state assignments when an entity is entering the Sink object.
(state Group,
assignment) Assignments
Parent Cost Cost Center The cost center that costs allocated to this object are rolled up into. If a parent
Center Name cost center is not explicitly specified, then costs will be automatically rolled up
into the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the system.
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the waiting time.
( Input Buffer
Costs)
Holding Expression The cost per unit time to hold an entity in this buffer.
Cost Rate
( Input Buffer
Costs)
Entered Process Occurs when an entity has entered this Sink object.
Add-On Instance
Process Name
Destroying Process Occurs when an entity is about to be destroyed by this Sink object.
Entity Add- Instance
On Process Name
Transfer-In Disable, Indicates the type of constraints used to determine whether entities can transfer
Constraints Default, into this fixed object via external input nodes. If specified as 'Default', then the
808 / 1277
Constraints Default, into this fixed object via external input nodes. If specified as 'Default', then the
Custom Can Transfer In & Out of Objects property setting for the entity type will
Condition determine whether an entity can perform a transfer into the object.
Transfer-In Expression The condition required to allow an entity to transfer into this fixed object via an
Condition external input node.
Report True or False A Boolean property may be True or False and used in expressions as a numeric
Statistics 1.0 ( True) or 0.0 ( False) value.
Report Gantt True or False A Boolean property may be True or False and used in expressions as a numeric
1.0 ( True) or 0.0 ( False) value.
809 / 1277
Simio Reference Guide
Server
In Simio, a Server represents a capacitated resource with optional constrained input and output buffers.
A Server is an object that contains three capacitated stations with associated queues. The three stations that make up a
standard Server are the InputBuffer, Processing and OutputBuffer stations. When a Server is used in a model,it appears as
though an entity enters the Server, is processed and then leaves the Server. A more detailed explanation of what happens
to the entity is that when it first enters the Server, it enters the InputBuffer station, if the InputBuffer property is greater than
0. It waits here until there is available capacity in the Processing station. The capacity of this station is controlled by the
Initial Capacity property of the Server. Once it has been processed, it moves into the OutputBuffer station, if the
OutputBuffer is set greater than 0 and it waits until it can leave the Server. The three green queue lines that are placed in
the Facility window with the Server, animate the entity while it is in each of these three stations. The three station approach
allows for the capability to have both infinite and finite capacity queues. The Balking and Reneging Options page provides
additional information and examples on buffer capacities, balking and reneging.
The logic that is being performed once the entity enters the Server object spawns what is called a Token. A Token is a
completely different object than an entity. It is used to trigger logical events in the Processes Window of the model.
Within the Processing station of the Server, the Process Type may be a 'Specific Time' or based on a 'Task Sequence'. The
default 'Specific Time' will delay the entity at the processing station of the Server for the simple Processing Time specified.
The 'Task Sequence' option will require a number of Processing Tasks and associated information to be specified. This is
explained in greater detail within the Task Sequence - Processing Tasks section.
A Server may have failures, which are specified within the Reliability section of the Properties window. State assignments
can be made on entering, before processing, after processing, before exiting, on balking and on reneging the Server.
Secondary Resources may be seized and/or released by the entity for processing or upon entering the Server, and before
and after processing occurs. The Add-On Process Triggers allow additional logic to be specified when using the Server.
An entity processing at a Server may be interrupted with the Interrupt step. The Processing Time delay is the only
interruptible delay within the Server.
The Seize Constraint Logic repeat group supports imposing additional constraints on an entity's request to seize the object
by referencing Constraint Logic elements.
The Immediately Try Seize and Immediately Try Allocate When Released options within the Other Processing Options (and
Secondary Resources area) section of properties are typically advanced users. They deal with processing events on the
Simio event calendar that occur at the same time, including arrival of multiple entities to an object, or release of multiple
objects at a time for re-allocation. It's important to note that these properties do not affect processing for entities that
arrive on path with Allow Passing set to 'False', entities arriving via Conveyor, or any other construct that causes entities to
arrive one at a time at different simulation times. This feature will not provide any benefit because the second (or
following) entity will not arrive before the late event happens at the first entity's simulation time.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Server.
For more information, see Server - Discussion and Examples.
Listed below are the properties of the Server:
810 / 1277
Property Valid Entry Description
Capacity Type Fixed, Work Schedule The method used to specify the capacity of this Server
object.
Initial Capacity Expression The initial fixed capacity of this Server object.
Work Schedule Work Schedule Name The capacity work schedule that this Server object follows.
Work Day Repeat Group, Work Day Work Day schedule exceptions specific to this resource.
Exceptions Exceptions
Work Period Repeat Group, Work Period Work Period schedule exceptions specific to this resource.
Exceptions Exceptions
Ranking Rule First In First Out, Last In First The static ranking rule used to order entities waiting to be
Out, Smallest Value First, allocated capacity of this Server object.
Largest Value First
Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Dynamic Selection None, or one of several Indicates whether this object, when its capacity becomes
Rule Dynamic Selection Rules available, dynamically selects the next allocation request
from its statically ranked allocation queue using a
dynamic selection rule.
Repeat Group True, False Indicates whether a repeat group data structure is used to
define the primary dispatching rule and any tie breaker
rules.
Dispatching Rule See Dynamic Selection Rules The primary criteria used to select the next entity from the
queue. Note that using a particular dispatching rule may
require some specific model data about the candidate
entities, such as due dates, job routings, expected setup or
operation times, etc.
Tie Breaker Rule None, or one of several The secondary criteria used to break ties.
Dynamic Selection Rules
Dispatching Rules Repeat Group, Dispatching The primary dispatching rule and any tie breaker rules,
Rules applied in the order listed.
Filter Expression Expression Optional condition evaluated for each candidate entity
that must be true for the entity to be selected. In the
expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an
attribute of the candidate entities (e.g.,
Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this
Window ( Days) specified time window will be considered for selection.
Note that if there are no candidates whose due dates fall
within the look ahead window, then the window will be
automatically extended to include the candidate(s) with
the earliest due date.
TransferIn Time Expression The time required to transfer an entity into this Server
object. This property may be specified using a random
sample from a distribution.
811 / 1277
Process Type Speific Time, Task Sequence The method used to model the processing of an entity at
this Server object.
Processing Time Expression The time required for this Server object to process each
entity. This property may be specified using a random
sample from a distribution.
Processing Tasks Repeat Group, Tasks The set of tasks required for this Server object to process
an entity.
Loopback Repeat Group, Processing Tasks Conditional or probabilistic loopback branches in the task
Branches workflow.
Task Precedence SequenceNumberMethod, The method used to define the task precedence
Method ImmediatePredecessorsMethod, dependencies. Can be either by specifying task sequence
ImmediateSuccessorsMethod numbers, specifying the immediate predecessors for each
task, or specifying the immediate successors for each task.
Task Resource Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task resource requirements.
Name
Task Materials Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task material requirements.
Name
Task State Table Name Optional name of data table to be used as the referenced
Assignments data source for getting state assignments.
Referenced Table
Name
Off Shift Rule Suspend Processing, Finish The processing rule used at the Server at the end of a
Work Already Started shift.
If the rule is 'Suspend Processing', then the Server will
immediately suspend all processing and set its resource
state to 'OffShift'. Processing will resume at the start of
the next shift.
If the rule is 'Finish Work Already Started', then the Server
will not accept any new entities but will continue
processing if necessary to finish work already started. The
Server's resource state will be set to 'OffShiftProcessing' if
processing entities during an off-shift period.
Resource None, Average, Count, If the rule is 'None', then seized resource efficiency is the
Efficiency Rule Maximum, Minimum, Sum processing rule used to alter the rate at which work is
performed if there are seized resources with defined
efficiency values. The actual work duration is the planned
work duration divided by the efficiency.
If the rule is 'Average', then the average seized resource
efficiency value is used.
If the rule is 'Count', then the number of seized resources
with a defined efficiency value is used.
If the rule is 'Maximum', then the largest efficiency value is
used.
If the rule is 'Minimum', then the smallest efficiency value
is used.
If the rule is 'Sum', then the sum of the seized resource
efficiency values is used.
Seize Constraint Repeat Group, Constraint Logic Constraint logic used to enforce additional constraints on
Logic elements an entity's request to seize the Server.
812 / 1277
NOTE: This repeat group applies only if the Server has an
input buffer. Otherwise, if no input buffer, then this
constraint logic will be ignored.
Seize Constraint Constraint Logic elements The name of the Constraint Logic element used to
Logic.Constraint enforce additional constraints on an entity's request to
Logic Name seize the Server.
Immediately Try True, False For an arriving entity, indicates whether to immediately try
Seize seizing the Server before the execution of any other
simulation logic in the system and, if successful, skipping
the Server's allocation queue.
Setting this property to False will just insert the seize
request into the Server's allocation queue. An evaluation
of that queue will then be scheduled on the simulation's
current event calendar as a late priority event.
NOTE: This property setting applies only if the Server has
an input buffer. Otherwise, if no input buffer, then an
arriving entity will always immediately try to enter the
Server's processing station and seize it.
Immediately Try True, False Once an entity has exited processing and released the
Allocate When Server, indicates whether to immediately try allocating
Released the released Server capacity to waiting seize requests
before the execution of an other simulation logic in the
system.
Setting this property to False will skip immediate
allocation. Instead, an evaluation of the Server's allocation
queue will be scheduled on the simulation's current event
calendar as a late priority event.
Input Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity Server object's input buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Input Buffer) Probabilistic at entering the buffer.
If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Input Buffer) entering the buffer.
Output Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity Server object's output buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Output Probabilistic at entering the buffer.
Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause
entities to abandon waiting in the buffer.
Wait Expression,vspecified if the The tolerable wait duration until a renege decision by an
Duration.Renege Trigger Type is 'Time Based'. entity waiting in the buffer.
Triggers
Triggering Event Event Reference, specified if the The name of the event whose occurrence will trigger a
Name.Renege Trigger Type is 'Event Based'. renege decision by an entity waiting in the buffer.
Triggers
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to
Type .Renege Probabilistic decide whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified if the The renege condition or probability specified as an
Or Renege Decision Type is expression. If a probability then enter the chance of
Probability.Renege 'Conditional' or 'Probabilistic'. reneging as a value between 0.0 (0%) and 1.0 (100%).
Triggers NOTE: If it is necessary to check in a conditional
expression whether an entity is currently waiting for a
specific type of constraint, the entity 'Queuing' namespace
provides several functions for that purpose (e.g.,
Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object reference Facility node location to send a reneging entity.
Name.Renege
Triggers
Trigger Start Entered, Ended Transfer In Indicates when the trigger becomes active for an entity
Boundary.Renege occupying the buffer. Can be either immediately when the
Triggers entity has entered the buffer or, alternatively, not until its
transfer into the buffer has been ended (e.g., after a
transfer-in time or any other entry related logic).
Failure Type No Failures, Calendar Time Specifies whether this Server object has failures that affect
Based, Processing Count Based, the object's availability, and the method used to trigger
Event Count Based, Processing the failure occurrences. See the Reliability page for
Time Based additional information on Failures.
Event Name Event Instance Name The name of the event which determines when the next
failure occurs.
Uptime Between Expression The uptime between failure occurrences. This property
Failures may be specified using a random sample form a
distribution.
Count Between Expression The count between failure occurrences. This property may
Failures be specified using a random sample from a distribution.
Time To Repair Expression The time required to repair a failure when one occurs. This
property may be specified using a random sample from a
distribution.
814 / 1277
Action Type ( Table Reference Existing Row, Add The type of table row reference action to perform.
Row Referencing - New Row The 'Reference Existing Row' action type may be used to
Before Processing) set a reference to an existing table row in a data table or
sequence table. The row index into the table is specified
by the Row Number property.
The 'Add New Row' action type may be used to add a
new row to an output table. A reference will be
automatically set to the newly added row.
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Processing)
On Entering ( State Repeat Group, Assignments Optional state assignments when an entity is entering the
Assignments) Server object.
Before Processing Repeat Group, Assignments Optional state assignments when an entity has been
( State allocated capacity to be processed at the object, but
Assignments) before entering (or ending transfer into) the object's
processing station.
After Processing Repeat Group, Assignments Optional state assignments when an entity has completed
( State its processing and is about to attempt its exit from the
Assignments) object's processing station.
Before Exiting Repeat Group, Assignments Optional state assignments when an entity is ready to exit
( State the Server object.
Assignments)
On Balking ( State Repeat Group, Assignments Optional state assignments when an entity is balking at
Assignments) entering an input or output buffer of the object.
On Reneging Repeat Group, Assignments Optional state assignments when an entity is reneging
( State from an input or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name or Name of the state variable that will be assigned a new
Name.State Reference value.
Assignments
Repeat Group True, False Indicates whether a repeat group data structure is used to
( Secondary define the secondary resources for processing. If a repeat
Resource for group structure is used, many of the below properties are
Processing) specified within the repeat group. OffShift Rule, Must
Simultaneously Seize, Immediately Try Seize and
Immediately Try Allocate When Released are not within the
815 / 1277
repeat group, thus not resource specific.
Object Type Specific, From List, The method for specifying the object to be seized and
( Secondary ParentObject held for the Server's processing time.
Resource for
Processing)
Object Name Object Instance Name The name of the object to be seized.
( Secondary
Resource for
Processing)
Object List Name Object List Instance Name The name of the object list from which an object will be
( Secondary selected to be seized.
Resource for
Processing)
Selection Goal Smallest Distance, Largest The goal for selecting objects to seize.
( Secondary Distance, Preferred Order,
Resource for Smallest Value, Largest Value,
Processing) Random
Value Expression Expression The expression evaluated for each object that is a
( Secondary candidate to seize. In the expression, use the keyword
Resource for Candidate to reference an object in the collection of
Processing) candidates to be seized (e.g.,
Candidate.Object.Capacity.Remaining).
Request Move None, To Node Indicates whether a move to a specified location will be
( Secondary requested from the seized resource. Processing will not be
Resource for able to start until the resource has arrived to the
Processing) requested location.
Destination Node Node Instance Name The name of the specific node location that the seized
( Secondary resource will be requested to move to.
Resource for
Processing)
Off Shift Rule Finish Work Already Started, The processing rule used if the secondary resource is at
( Secondary Suspend Processing, Switch the end of a shift because of a specified work schedule.
Resource for Resources If Possible If the rule is 'Finish Work Already Started', then the
Processing) processing of the entity that is using the secondary
resource will be allowed to continue processing until
finished. The secondary resource will not be allowed to
accept any new work.
If the rule is 'Suspend Processing', then the processing of
the entity that is using the secondary resource will be
immediately suspended. Processing will resume at the
start of the secondary resource's next shift.
If the rule is 'Switch Resources If Possible', then the
processing of the entity that is using the secondary
resource will be immediately suspended. The entity will
then try to resume processing as soon as possible by
releasing the resource and seizing another available one
that satisfies the same resource requirements.
Number of Expression The number of individual resource objects to seize
Objects capacity units of.
( Secondary
Resource for
Processing)
816 / 1277
Units Per Object Expression The number of capacity units to seize per resource object.
( Secondary
Resource for
Processing)
Must True, False If multiple resources are required, indicates whether all of
Simultaneously the resources must be available before any can be seized.
Seize ( Secondary
Resource for
Processing)
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Secondary before the execution of any other simulation logic in the
Resource for system and, if successful, skipping the resource allocation
Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Keep Reserved If Expression On processing completion, an optional condition
( Secondary indicating whether to keep the released resource capacity
Resource for reserved for possible later reuse by the same owner
Processing) object. Other objects without a reservation will be unable
to seize the reserved capacity unless the reservation is
cancelled.
In the expression, use the syntax
Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being
released (e.g., Candidate.Object.Capacity).
Note that when an owner object is attempting to select a
resource from a group of candidates (e.g., from a list or
from a population of some resource type), by default a
preference will be given to select a resource that has
already been reserved by that entity irrespective of the
specified selection goal.
Leaving this property blank (no condition) is equivalent to
entering False.
Reservation Expression If the keep reserved condition is true, then an optional
Timeout wait time before automatically cancelling the reservation.
( Secondary In the expression, use the syntax
Resource for Candidate.[ ObjectClass].[ Attribute] to reference an
817 / 1277
Resource for Candidate.[ ObjectClass].[ Attribute] to reference an
Processing) attribute of the candidate resource object(s) being
released (e.g., Candidate.Object.Capacity).
Immediately Try True, False Once an entity has finished processing and released the
Allocate When resource, indicates whether to immediately try allocating
Released the released resource capacity to waiting seize requests
( Secondary before the execution of any other simulation logic in the
Resource for system.
Processing) Setting this property to False will skip immediate
allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Skip Requirement Expression Optional condition indicating whether to skip the resource
If ( Secondary requirement.
Resource for
Processing)
On Entering Repeat Group, Resource Seizes Optional secondary resource seizes when an entity is
( Other Resource entering the Server object.
Seizes)
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
On Entering) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Seizes Optional secondary resource seizes once an entity has
( Other Resource been allocated Server capacity, to be completed before
Seizes) starting the processing time.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
Before Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Seizes Optional secondary resource seizes after an entity has
( Other Resource finished processing, to be completed before releasing the
Seizes) Server capacity.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
818 / 1277
Resource Seizes -- system and, if successful, skipping the resource allocation
After Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- On Entering) Setting this property to False will skip immediate
allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Optional secondary resource releases once an entity has
( Other Resource Releases been allocated Server capacity, before starting the
Releases) processing time.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- Before Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Optional secondary resource releases after an entity has
( Other Resource Releases finished processing, before releasing the Server capacity.
Releases)
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- After Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Parent Cost Center Cost Center Name The cost center that costs allocated to this object are
rolled up into. If a parent cost center is not explicitly
specified, then costs will be automatically rolled up into
the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the
system.
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Input Buffer waiting time.
Costs)
819 / 1277
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Input Buffer
Costs)
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Output Buffer waiting time.
Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Output Buffer
Costs)
Idle Cost Rate Expression The cost per unit time charged, or accrued, to the cost of
( Resource Costs) the server for each unutilized scheduled capacity unit.
Cost Per Use Expression The one-time cost that is accrued each time the server is
( Resource Costs) used, regardless of the usage duration. This cost will be
charged to the cost of the entity using the server.
Usage Cost Rate Expression The cost per unit time to use the server if in a utilized
( Resource Costs) state. This cost will be charged to the cost of the entity
using the server.
Run Initialized Process Instance Name Occurs when the simulation run is initialized.
Add-On Process
Run Ending Add- Process Instance Name Occurs when the simulation run is ending.
On Process
Entered Add-On Process Instance Name Occurs when an entity has entered this server object.
Process
Before Processing Process Instance Name Occurs when an entity has been allocated server capacity,
Add-On Process but before entering (or ending transfer into) the object's
processing station.
Processing Add- Process Instance Name Occurs when an entity has been allocated server capacity
On Process and is about to start processing.
After Processing Process Instance Name Occurs when an entity has completed the processing time
Add-On Process and is about to attempt its exit from the server's
processing station in order to release the server capacity.
Exited Add-On Process Instance Name Occurs when an entity has exited this server object.
Process
Failed Add-On Process Instance Name Occurs when this object has failed.
Process
Repaired Add-On Process Instance Name Occurs when a failure is repaired at this object.
Process
Evaluating Seize Process Instance Name Occurs when this Server object is evaluating whether to
Request Add-On accept or reject a request to seize capacity of the server.
Process Triggers In the executed decision process, assigning a value of less
than or equal to '0' to the executing token's ReturnValue
state ( Token.ReturnValue) indicates that the seize request
is rejected.
820 / 1277
On Shift Add-On Process Instance Name Occurs when the object goes 'on shift' because of its
Process specified work schedule.
Off Shift Add-On Process Instance Name Occurs when the object goes 'off shift' because of its
Process specified work schedule.
Transfer-In Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer into this fixed object via
external input nodes. If specified as 'Default', then the Can
Transfer In & Out of Objects property setting for the entity
type will determine whether an entity can perform a
transfer into the object.
Transfer-Out Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer out of this fixed object via
external output nodes. If specified as 'Default', then the
Can Transfer In & Out of Objects property setting for the
entity type will determine whether an entity can perform a
transfer out of the object.
Log Resource True or False Indicates whether usage related events for this resource
Usage are to be automatically logged. Go to Results -> Logs to
view logged data.
Display Category String Optional text used for hierarchically arranging resources
in the Resource Plan window. Use backslashes for multiple
levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various
windows (currently only Gantt windows in Simio RPS
( Enterprise) Edition). If not specified, then this property
defaults to a color derived from the object's unique name.
Report Statistics True or False Specifies if statitsics are to be automatically reported for
this object.
821 / 1277
Simio Reference Guide
Server that has no Buffers (i.e. InputBuffer and OutputBuffer properites set to 0)
When a user sets the InputBuffer property to 0, it sets this Server object to have no space for buffering inside the
object. In other words, if an entity arrives to the Srever and there is no available capacity of the main Processing
station, the entity must wait outside of the Server until the capacity of the Server becomes available. If the entity is
entering the Server via an incoming link, the entity will wait on the link.
Similarly, if the OutputBuffer property is set to 0, the entity must have an available physical location to move into
before it can leave the Server. For example, if the entity must ride on a Transporter after it leaves the Server and the
Transporter is not available at the time, the entity will wait in the Processing station of the Server until the Transporter
arrives at the output node to pick up the entity.
823 / 1277
Simio Reference Guide
Resource
A Resource is a static capacitated Fixed Object that can be seized. It does not move within the Facility window. If you
would like a moveable Resource, consider seizing capacity of a Vehicle or Worker object.
A resource's capacity can be fixed or controlled by a work schedule. A resource object may have a capacity of 0 to N and is
considered 'OffShift' if capacity = 0 or 'OnShift' if capacity > 0.
Resources can be grouped together in an object list so they can be seized as a group or selected from a list of possible
resources based on a selection criteria. A seize operation requires a negotiation between the objects involved. An object
could refuse the seize request because he/she has other activities to perform. Hence in Simio, objects allow or disallow
themselves to be seized and released by other objects.
A Resource may have failures, which are specified within the Reliability section of the Properties window. The Add-On
Process Triggers allow additional logic to be specified when using the Resource.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Resource.
For more information, see Resources - Discussion and Examples.
Listed below are the properties of the Resource:
Property Valid Entry Description
Capacity Type Fixed, The method used to specify the capacity of this Resource object.
WorkSchedule
Work WorkSchedule The capacity work schedule that this Resource object follows.
Schedule Name
Work Day Repeat Group, Work Day schedule exceptions specific to this resource.
Exceptions Work Day
Exceptions
Work Period Repeat Group, Work Period schedule exceptions specific to this resource.
Exceptions Work Period
Exceptions
Ranking Rule First In First Out, The static ranking rule used to order entities waiting to be allocated capacity
Last In First Out, of this Resource object.
Smallest Value
First, Largest
Value First
Ranking Expression The expression used with a Smallest Value First or Largest Value First ranking
Expression rule.
Dynamic None, or one of Indicates whether this Resource object, when allocation of its capacity is
Selection Rule several Dynamic performed, dynamically selects the next allocation request using an
Selection Rules expression-based rule.
Failure Type No Failures, Specifies whether this Resource object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Usage
Count Based,
Event Count 824 / 1277
Event Count
Based, Usage
Time Based
Event Name Event Instance The name of the event which determines when the next failure occurs.
Name
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample form a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Parent Cost Cost Center Name The cost center that costs allocated to this object are rolled up into. If a
Center parent cost center is not explicitly specified, then costs will be automatically
rolled up into the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the system.
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of the resource for
Rate( Resource each unutilized scheduled capacity unit.
Costs)
Cost Per Expression The one-time cost that is accrued each time the resource is used, regardless
Use( Resource of the usage duration. This cost will be charged to the cost of the owner
Costs) object using the resource.
Usage Cost Expression The cost per capacity unit time to use the resource if in a utilized state. This
Rate( Resource cost will be charged to the cost of the owner object using the resource.
Costs)
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Name
Process
Triggers
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Allocated Process Instance Occurs when this Resource object has had capacity allocated to another
Add-On Name object.
Process
Triggers
Released Process Instance Occurs when this Resource object has had capacity released by another
Add-On Name object.
Process
Triggers
Failed Add- Process Instance Occurs when this object has failed.
On Process Name
Triggers
Evaluating Process Instance Occurs when this Resource is evaluating whether to accept or reject a
Seize Request Name capacity allocation attempt. In the executed decision process, assigning a
Add-On value of less than or equal to '0' to the executing token's ReturnValue state
Process ( Token.ReturnValue) indicates that the allocation attempt is rejected. The
Triggers Token that executes this process is associated with the Candidate object.
On Shift Add- Process Instance Occurs when the object goes 'on shift' because of its specified work
On Process Name schedule.
Triggers
Off Shift Add- Process Instance Occurs when the object goes 'off shift' because of its specified work
On Process Name schedule.
Triggers
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
Display String Optional text used for hierarchically arranging resources in the Resource
Category Plan window. Use backslashes for multiple levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various windows (currently
only Gantt windows in Simio RPS ( Enterprise) Edition). If not specified, then
this property defaults to a color derived from the object's unique name.
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
For additional information on Resources, see the help topic Resources - Discussion and Examples.
826 / 1277
Simio Reference Guide
Examples
Example 1
Resource Object_Example 1
This Resource Object from the standard object library will have a changing capacity that is based on a work schedule
named Schedule1. The details of this work schedule could be found in the Schedules Panel within the Data Window of this
model. This Resource Object will also dynamically select from its internal resource allocation queue using the expression
ModelEntity.Priority. It will select the entity with the smallest value for ModelEntity.Priority to be allocated capacity next.
828 / 1277
Simio Reference Guide
Combiner
A Combiner object may be used to model a process that groups multiple entities together and then attaches the batch
members to a parent entity.
The Combiner object contains four capacitated stations with associated queues; one station for the parent input buffer, one
for the member input buffer, the processing station and the output buffer station. The four station approach allows for the
capability to have both infinite and finite capacity queues. The Balking and Reneging Options page provides additional
information and examples on buffer capacities, balking and reneging.
Batching Details
An entity arrives at the parent input node of the Combiner. This station has a queue and a capacity. Entities also arrive to
the member input node which has its own queue and capacity. The entities wait in these queues until they batch together
according to the logic specified in the properties of the Combiner. The Batch Quantity properties can be specified by an
expression (i.e. a variable or a random distribution) as well as a string value. The Matching Rule properties specifies if the
entities should meet a certain criteria before they can be batched together. If there is a criteria, the Member Match
Expression and the Parent Match Expression is where the criteria is specified. For the Matching Rule of 'Match Members' and
'Match Members and Parent', the match will occur on the first match encountered by any waiting entities, not just when the
first waiting entity has a match. Therefore, entities are not necessarily matched based on their order of arrival. Refer to the
BatchLogic element for additional details on batching specifics.
Releasing Batch Early Triggers
The Release Batch Early Triggers defined for a parent entity can be either time based (trigger fires when specified wait
duration expires) or event based (trigger fires when a specified event occurs). By default, the release decision when a
trigger has fired is 'Always', but may alternatively be 'Conditional' or 'Probabilistic'. A parent entity that is being released
early attempts to collect as many batch members as possible up to its target batch quantity(ies) - possibly no batch
members are collected. The parent entity's associated queue item is then removed from the BatchLogic element's parent
queue and its associated process token exits the Batch step. * Note that the data for a BatchLogic element or Combiner's
Release Batch Early Triggers repeat group may be defined in a data table, with the trigger definitions thus potentially
differing between parent entities.
Reneging a Parent Entity From Parent Input Buffer vs. Using a Releasing Batch Early Trigger
If a renege trigger is used to renege a parent entity from a combiner's parent input buffer, then the parent entity
immediately cancels its outstanding batch request. There is no attempt to collect any further batch members. The parent
entity is then physically removed from the buffer and either destroyed or sent to some specified node in the model.
A release batch early trigger, on the other hand, causes the parent entity to attempt to collect as many batch members as it
can up to its target batch quantity(ies). The parent entity then continues normal processing at the combiner (i.e., exiting the
parent input buffer and entering the combiner's processing station).
Transferring In and Processing at the Combiner
The transfer-in times for the parent and member entities run concurrently. For example, if a Parent Transfer-In Time is '1'
minute and a Member Transfer-In Time is '2' minutes, they will be ready to match (given matching requirements) after 2
minutes if they arrive at the Combiner at the same time.
The Combiner does not only batch entities together, it also has process logic and capacity logic similar to a Server Object.
If the entity is be processed by the Combiner, it then appears at the process station's queue. After the logic of the process
has completed, if there is space the entity will be moved to the output member queue.
Within the Processing station of the Combiner, the Process Type may be a 'Specific Time' or based on a 'Task Sequence'.
The default 'Specific Time' will delay the entity at the processing station of the Combiner for the simple Processing Time
specified. The 'Task Sequence' option will require a number of Processing Tasks and associated information to be specified.
This is explained in greater detail within the Task Sequence - Processing Tasks section.
Additional Information
A Combiner may have failures, which are specified within the Reliability section of the Properties window. State
assignments can be made upon either parent or member entering, before processing, after processing, before exiting, on
balking and on reneging the Combiner. Secondary Resources may be seized and/or released upon the parent entity
entering the Combiner, and before and after processing occurs. The Add-On Process Triggers allow additional logic to be
specified when using the Combiner.
829 / 1277
An entity processing at a Combiner may be interrupted with the Interrupt step. The Processing Time delay is the only
interruptible delay within the Combiner.
The Seize Constraint Logic repeat group supports imposing additional constraints on an entity's request to seize the object
by referencing Constraint Logic elements.
The Immediately Try Seize and Immediately Try Allocate When Released options within the Other Processing Options (and
Secondary Resources area) section of properties are typically advanced users. They deal with processing events on the
Simio event calendar that occur at the same time, including arrival of multiple entities to an object, or release of multiple
objects at a time for re-allocation. It's important to note that these properties do not affect processing for entities that
arrive on path with Allow Passing set to 'False', entities arriving via Conveyor, or any other construct that causes entities to
arrive one at a time at different simulation times. This feature will not provide any benefit because the second (or
following) entity will not arrive before the late event happens at the first entity's simulation time.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Combiner.
For additional information, see the Batch step and BatchLogic element, which are included within the Combiner object
logic.
For SimBits using the Combiner object, please review CombineThenSeparate, CustomUnbatching,
CombineMatchingMembers, CombinerReleasingBatchEarly, and CombineMultipleEntityTypesOntoPallets.
Listed below are the properties of the Combiner:
Property Valid Entry Description
Batch Quantity Expression truncated to an The target number of member entities to collect and
integer attach to a parent entity.
Matching Rule AnyEntity, MatchMembers, The matching rule used to group member and parent
MatchMembersAndParent entities together. If the matching rule is 'AnyEntity', then
any entity can be grouped with any other entity. If the
matching rule is 'MatchMembers', then member entities
must be grouped together using a specified match
expression. If the matching rule is
'MatchMembersAndParent', then the parent entity must
also match the member entities to attach a group to the
parent.
Member Match Expression The expression whose value must be the same between
Expression member entities to group them together.
Parent Match Expression The expression whose value for a parent entity must be
Expression the same as the match expression for the member entities
to attach those members to the parent.
Batch Quantities Repeat Group, Batch Quantities Additional member entities to collect and attach to a
( More) parent entity.
Batch Quantity Expression truncated to an The target number of member entities to collect and
( Batch Quantities) integer attach to a parent entity.
Matching Rule AnyEntity, MatchMembers, The matching rule used to group member and parent
( Batch Quantities) MatchMembersAndParent entities together. If the matching rule is 'AnyEntity', then
any entity can be grouped with any other entity. If the
matching rule is 'MatchMembers', then member entities
must be grouped together using a specified match
expression. If the matching rule is
'MatchMembersAndParent', then the parent entity must
also match the member entities to attach a group to the
parent.
Member Match Expression The expression whose value must be the same between
Expression ( Batch member entities to group them together.
830 / 1277
Expression ( Batch member entities to group them together.
Quantities)
Parent Match Expression The expression whose value for a parent entity must be
Expression ( Batch the same as the match expression for the member entities
Quantities) to attach those members to the parent.
Parent Ranking First In First Out, Last In First The rule used to rank the order of entities in the parent
Rule Out, Smallest Value First, input buffer of the Combiner.
Largest Value First
Parent Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Member Ranking First In First Out, Last In First The rule used to rank the order of entities in the memberr
Rule Out, Smallest Value First, input buffer of the Combiner.
Largest Value First
Member Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Must True, False Indicates whether the full target number(s) of member of
Simultaneously entities must be available before any can be collected and
Batch attached to a parent entity.
Suspend Batching True, False Indicates whether to suspend collecting batches if teh
When Down Combiner has failed or is at the end of a shift because of
its specified work schedule.
Capacity Type Fixed, Work Schedule The method used to specify the number of batching
operations that this Combiner object can simultaneously
process.
Work Schedule WorkSchedule name The capacity work schedule that this Combiner object
follows.
Work Day Repeat Group, Work Day Work Day schedule exceptions specific to this resource.
Exceptions Exceptions
Work Period Repeat Group, Work Period Work Period schedule exceptions specific to this resource.
Exceptions Exceptions
Parent TransferIn Expression The time required to transfer a parent entity into this
Time Combiner object. This property may be specified using a
random sample from a distribution.
Member TransferIn Expression The time required to transfer a member entity into this
Time Combiner object. This property may be specified using a
random sample from a distribution.
Process Type Speific Time, Task Sequence The method used to model the processing of an entity at
this Combiner object.
Processing Time Expression The time required for this Combiner object to process
each entity. This property may be specified using a
random sample from a distribution.
Processing Tasks Repeat Group, Tasks The set of tasks required for this Combiner object to
process an entity.
Loopback Repeat Group, Processing Tasks Conditional or probabilistic loopback branches in the task
Branches workflow.
Task Precedence SequenceNumberMethod, The method used to define the task precedence
Method ImmediatePredecessorsMethod, dependencies. Can be either by specifying task sequence
ImmediateSuccessorsMethod numbers, specifying the immediate predecessors for each
task, or specifying the immediate successors for each task.
Task Resource Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task resource requirements.
Name
Task Materials Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task material requirements.
Name
Task State Table Name Optional name of data table to be used as the referenced
Assignments data source for getting state assignments.
Referenced Table
Name
832 / 1277
Off Shift Rule Suspend Processing, Finish The processing rule used at the Combiner at the end of a
Work Already Started shift.
If the rule is 'Suspend Processing', then the Combiner will
immediately suspend all processing and set its resource
state to 'OffShift'. Processing will resume at the start of
the next shift.
If the rule is 'Finish Work Already Started', then the
Combiner will not accept any new entities but will
continue processing if necessary to finish work already
started. The Combiner's resource state will be set to
'OffShiftProcessing' if processing entities during an off-
shift period.
Resource None, Average, Count, If the rule is 'None', then seized resource efficiency is the
Efficiency Rule Maximum, Minimum, Sum processing rule used to alter the rate at which work is
performed if there are seized resources with defined
efficiency values. The actual work duration is the planned
work duration divided by the efficiency.
If the rule is 'Average', then the average seized resource
efficiency value is used.
If the rule is 'Count', then the number of seized resources
with a defined efficiency value is used.
If the rule is 'Maximum', then the largest efficiency value is
used.
If the rule is 'Minimum', then the smallest efficiency value
is used.
If the rule is 'Sum', then the sum of the seized resource
efficiency values is used.
Seize Constraint Repeat Group, Constraint Logic Constraint logic used to enforce additional constraints on
Logic elements an entity's request to seize the Combiner.
NOTE: This repeat group applies only if the Combiner has
an input buffer. Otherwise, if no input buffer, then this
constraint logic will be ignored.
Seize Constraint Constraint Logic elements The name of the Constraint Logic element used to
Logic.Constraint enforce additional constraints on an entity's request to
Logic Name seize the Combiner.
Immediately Try True, False For a parent entity that has collected its batch, indicates
Seize whether to immediately try seizing the Combiner before
the execution of any other simulation logic in the system
and, if successful, skipping the Combiner's allocation
queue.
Setting this property to False will just insert the seize
request into the Combiner's allocation queue. An
evaluation of that queue will then be scheduled on the
simulation's current event calendar as a late priority event.
Immediately Try True, False Once a parent entity has exited processing and released
Allocate When the Combiner, indicates whether to immediately try
Released allocating the released Combiner capacity to waiting
seize requests before the execution of an other simulation
logic in the system.
Setting this property to False will skip immediate
allocation. Instead, an evaluation of the Combiner's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Parent Input Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity Combiner object's parent input buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Parent Input Probabilistic at entering the buffer.
833 / 1277
Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Parent Input entering the buffer.
Buffer)
Member Input Integer >= 0 The number of discrete entities that can be held in this
Buffer Capacity Combiner object's member input buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Member Probabilistic at entering the buffer.
Input Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Condition Or Expression The balk condition or probability specified as an
Probability expression. If a probability then enter the chance of
( Member Input balking as a value between 0.0 (0%) and 1.0 (100%).
Buffer)
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Member Input entering the buffer.
Buffer)
Output Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity Combiner object's output buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Output Probabilistic at entering the buffer.
Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Output Buffer) entering the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause
entities to abandon waiting in the buffer.
Triggering Event Event Reference, specified if the The name of the event whose occurrence will trigger a
Name.Renege Trigger Type is 'Event Based'. renege decision by an entity waiting in the buffer.
Triggers
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to
Type .Renege Probabilistic decide whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified if the The renege condition or probability specified as an
Or Renege Decision Type is expression. If a probability then enter the chance of
Probability.Renege 'Conditional' or 'Probabilistic'. reneging as a value between 0.0 (0%) and 1.0 (100%).
Triggers NOTE: If it is necessary to check in a conditional
expression whether an entity is currently waiting for a
specific type of constraint, the entity 'Queuing' namespace
provides several functions for that purpose (e.g.,
Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object reference Facility node location to send a reneging entity.
Name.Renege
Triggers
Trigger Start Entered, Ended Transfer In Indicates when the trigger becomes active for an entity
Boundary.Renege occupying the buffer. Can be either immediately when the
Triggers entity has entered the buffer or, alternatively, not until its
transfer into the buffer has been ended (e.g., after a
transfer-in time or any other entry related logic).
Action Type ( Table Reference Existing Row, Add The type of table row reference action to perform.
Row Referencing - New Row The 'Reference Existing Row' action type may be used to
Before Processing) set a reference to an existing table row in a data table or
sequence table. The row index into the table is specified
by the Row Number property.
The 'Add New Row' action type may be used to add a
new row to an output table. A reference will be
automatically set to the newly added row.
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Processing)
Failure Type No Failures, Calendar Time Specifies whether this Combiner object has failures that
Based, Processing Count Based, affect the object's availability, and the method used to
Event Count Based, Processing trigger the failure occurrences.
Time Based
Event Name Event Instance Name The name of the event which determines when the next
failure occurs.
Uptime Between Expression The uptime between failure occurrences. This property
Failures may be specified using a random sample form a
distribution.
Count Between Expression The count between failure occurrences. This property may
Failures be specified using a random sample from a distribution.
835 / 1277
Time To Repair Expression The time required to repair a failure when one occurs. This
property may be specified using a random sample from a
distribution.
On Parent Entering Repeat Group, Assignments Optional state assignments when a parent entity is
( State entering the Combiner object.
Assignments)
On Member Repeat Group, Assignments Optional state assignments when a member entity is
Entering ( State entering the Combiner object.
Assignments)
Before Processing Repeat Group, Assignments Optional state assignments when a batch has been
( State formed and the parent entity has been allocated capacity
Assignments) to be processed at the object, but before entering (or
ending transfer into) the object's processing station.
After Processing Repeat Group, Assignments Optional state assignments when an entity has completed
( State its processing and is about to attempt its exit from the
Assignments) object's processing station.
Before Exiting Repeat Group, Assignments Optional state assignments when an entity is ready to exit
( State the Combiner object.
Assignments)
On Balking ( State Repeat Group, Assignments Optional state assignments when an entity is balking at
Assignments) entering an input or output buffer of the object.
On Reneging Repeat Group, Assignments Optional state assignments when an entity is reneging
( State from an input or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name or Name of the state variable that will be assigned a new
Name.State Reference value.
Assignments
Repeat Group True, False Indicates whether a repeat group data structure is used to
( Secondary define the secondary resources for processing. If a repeat
Resource for group structure is used, many of the below properties are
Processing) specified within the repeat group. OffShift Rule, Must
Simultaneously Seize, Immediately Try Seize and
Immediately Try Allocate When Released are not within the
repeat group, thus not resource specific.
Object Type Specific, From List, The method for specifying the object to be seized and
( Secondary ParentObject held for the Combiner's processing time.
Resource for
Processing)
Object Name Object Instance Name The name of the object to be seized.
( Secondary
Resource for 836 / 1277
Resource for
Processing)
Object List Name Object List Instance Name The name of the object list from which an object will be
( Secondary selected to be seized.
Resource for
Processing)
Selection Goal Smallest Distance, Largest The goal for selecting objects to seize.
( Secondary Distance, Preferred Order,
Resource for Smallest Value, Largest Value,
Processing) Random
Value Expression Expression The expression evaluated for each object that is a
( Secondary candidate to seize. In the expression, use the keyword
Resource for Candidate to reference an object in the collection of
Processing) candidates to be seized (e.g.,
Candidate.Object.Capacity.Remaining).
Request Move None, To Node Indicates whether a move to a specified location will be
( Secondary requested from the seized resource. Processing will not be
Resource for able to start until the resource has arrived to the
Processing) requested location.
Destination Node Node Instance Name The name of the specific node location that the seized
( Secondary resource will be requested to move to.
Resource for
Processing)
Off Shift Rule Finish Work Already Started, The processing rule used if the secondary resource is at
( Secondary Suspend Processing, Switch the end of a shift because of a specified work schedule.
Resource for Resources If Possible If the rule is 'Finish Work Already Started', then the
Processing) processing of the entity that is using the secondary
resource will be allowed to continue processing until
finished. The secondary resource will not be allowed to
accept any new work.
If the rule is 'Suspend Processing', then the processing of
the entity that is using the secondary resource will be
immediately suspended. Processing will resume at the
start of the secondary resource's next shift.
If the rule is 'Switch Resources If Possible', then the
processing of the entity that is using the secondary
resource will be immediately suspended. The entity will
then try to resume processing as soon as possible by
releasing the resource and seizing another available one
that satisfies the same resource requirements.
Number of Expression The number of individual resource objects to seize
Objects capacity units of.
( Secondary
Resource for
Processing)
Units Per Object Expression The number of capacity units to seize per resource object.
( Secondary
Resource for
Processing)
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Secondary before the execution of any other simulation logic in the
Resource for system and, if successful, skipping the resource allocation
Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Keep Reserved If Expression On processing completion, an optional condition
( Secondary indicating whether to keep the released resource capacity
Resource for reserved for possible later reuse by the same owner
Processing) object. Other objects without a reservation will be unable
to seize the reserved capacity unless the reservation is
cancelled.
In the expression, use the syntax
Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being
released (e.g., Candidate.Object.Capacity).
Note that when an owner object is attempting to select a
resource from a group of candidates (e.g., from a list or
from a population of some resource type), by default a
preference will be given to select a resource that has
already been reserved by that entity irrespective of the
specified selection goal.
Leaving this property blank (no condition) is equivalent to
entering False.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
On Parent queues.
Entering) Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Seizes Optional secondary resource seizes once a batch's parent
( Other Resource entity has collected its batch members and been allocated
Seizes) Combiner capacity, to be completed before starting the
processing time.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
Before Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Seizes Optional secondary resource seizes after a batch's parent
( Other Resource entity has finished processing, to be completed before
Seizes) releasing the Combiner capacity.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
After Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
839 / 1277
On Parent Entering Repeat Group, Resource Optional secondary resource releases to be performed
( Other Resource Releases when an entity is entering the parent input buffer of the
Releases) Combiner object.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- On Parent Setting this property to False will skip immediate
Entering) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Optional secondary resource releases once a batch's
( Other Resource Releases parent entity has collected its batch members and been
Releases) allocated Combiner capacity, before starting the
processing time.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- Before Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Optional secondary resource releases after a batch's
( Other Resource Releases parent entity has finished processing, before releasing the
Releases) Combiner capacity.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- After Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Parent Cost Center Cost Center Name The cost center that costs allocated to this object are
rolled up into. If a parent cost center is not explicitly
specified, then costs will be automatically rolled up into
the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the
system.
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Parent Input waiting time.
Buffer Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Parent Input
Buffer Costs)
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Member Input waiting time.
Buffer Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Member Input
Buffer Costs) 840 / 1277
Buffer Costs)
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Output Buffer waiting time.
Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Output Buffer
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of
Rate( Resource the combiner for each unutilized scheduled capacity unit.
Costs)
Cost Per Expression The one-time cost that is accrued each time the combiner
Use( Resource is used, regardless of the usage duration. This cost will be
Costs) charged to the cost of the entity using the combiner.
Usage Cost Expression The cost per unit time to use the combiner if in a utilized
Rate( Resource state. This cost will be charged to the cost of the entity
Costs) using the combiner.
Run Initialized Process Instance Name Occurs when the simulation run is initialized.
Add-On Process
Run Ending Add- Process Instance Name Occurs when the simulation run is ending.
On Process
ParentEntered Process Instance Name Occurs when an entity has entered the parent input buffer
Add-On Process of this combiner object.
Member Entered Process Instance Name Occurs when an entity has entered the member input
Add-On Process buffer of this combiner object.
Before Processing Process Instance Name Occurs when batch's parent entity has been allocated
Add-On Process combiner capacity, but before entering (or ending transfer
into) the object's processing station.
Processing Add- Process Instance Name Occurs when a batch's parent entity has been allocated
On Process combiner capacity and is about to be removed from the
parent input buffer and start processing.
After Processing Process Instance Name Occurs when a batch's parent entity has completed the
Add-On Process processing time and is about to attempt its exit from the
combiner's processing station in order to release the
combiner capacity.
Exited Add-On Process Instance Name Occurs when a batch's parent entity has exited this
Process combiner object.
Failed Add-On Process Instance Name Occurs when this object has failed.
Process
Repaired Add-On Process Instance Name Occurs when a failure is repaired at this object.
Process
Evaluating Seize Process Instance Name Occurs when this Combiner object is evaluating whether
Request Add-On to accept or reject a request to seize capacity of the
Process Triggers combiner. In the executed decision process, assigning a
value of less than or equal to '0' to the executing token's
841 / 1277
ReturnValue state ( Token.ReturnValue) indicates that the
seize request is rejected.
On Shift Add-On Process Instance Name Occurs when the object goes 'on shift' because of its
Process specified work schedule.
Off Shift Add-On Process Instance Name Occurs when the object goes 'off shift' because of its
Process specified work schedule.
Transfer-In Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer into this fixed object via
external input nodes. If specified as 'Default', then the Can
Transfer In & Out of Objects property setting for the entity
type will determine whether an entity can perform a
transfer into the object.
Transfer-Out Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer out of this fixed object via
external output nodes. If specified as 'Default', then the
Can Transfer In & Out of Objects property setting for the
entity type will determine whether an entity can perform a
transfer out of the object.
Log Resource True or False Indicates whether usage related events for this resource
Usage are to be automatically logged. Go to Results -> Logs to
view logged data.
Display Category String Optional text used for hierarchically arranging resources
in the Resource Plan window. Use backslashes for multiple
levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various
windows (currently only Gantt windows in Simio RPS
( Enterprise) Edition). If not specified, then this property
defaults to a color derived from the object's unique name.
Report Statistics True or False Specifies if statistics are to be automatically reported for
this object.
842 / 1277
Send comments on this topic to Support
843 / 1277
Simio Reference Guide
Batch Quantity
If the Batch Quantity is set to an integer value X, the Combiner will wait until X members arrive to the member entry
node before the batch is processed. This Batch Quantity does not include the parent entity arriving to the parent
entry node.
If the Batch Quantity is set to an expression based on the entity, for example 'ModelEntity.BatchSize', the parent
entity's value for 'ModelEntity.BatchSize' is evaluated and not the member entity values. By using an entity property
or state, the batch size that will be used is based on the entity, and therefore can vary.
Matching Rule
If the Matching Rule is set to 'Any Entity', the Combiner will use the Batch Quantity property to determine how many
entities to batch together and it will batch the first X entities that arrive to the Combiner, where X is the number
specified in Batch Quantity.
If the Matching Rule is set to 'Match Members', the Combiner will only batch member entities together if the value of
the Member Match Expression is the same amongst all the member entities. If the Member Match Expression of an
entity arriving to the member input buffer does not match the other Member Match Expressions of the other entities
watching to be batched, the entity will wait until enough other entities arrive that provide a match for this value and
the total number of matching entities equal the Batch Quantity.
If the Matching Rule is set to 'Match Members and Parent', the Combiner will only batch member entities together if
the value of the Member Match Expression is the same amongst all the member entities and the parent entity. If the
Member Match Expression of an entity arriving to the member input buffer does not match the other Member Match
Expressions of the other entities watching to be batched and the parent entity waiting to be batched, the entity will
wait until enough other entities arrive that provide a match for this value and the total number of matching entities
equal the Batch Quantity.
Hierarchical Batching
Since a parent represents the container that holds batch members, if a parent arrives with an existing batch (e.g. the
container is partly full) then the new batch will be added to the existing batch and the outgoing batch size of the
parent will be the sum of the incoming batch size plus the additional members added. If you desire to build
hierarchical batches (e.g., items batch into boxes, then boxes batch into pallets) it is important to remember that the
batch items (boxes, in the example) must go into a combiner as members, with the container (a pallet in the
example) as the new parent.
Fixed Capacity or Capacity Varying by Work Schedule
Fixed
If the Capacity Type property is set to 'Fixed', the value of the initial capacity will be used to determine the capacity
for the Combiner at the start of the simulation run. The capacity can be specified with an expression. If a random
distribution is specified in the capacity expression, it will only be evaluated once at the beginning of the run and the
capacity will remain unchanged. The Assign step can be used to change the Combiner's capacity during the
simulation run by using the Combiner state, CombinerName.CurrentCapacity. This will change the value of the
capacity function, CombinerName.Capacity.
WorkSchedule
If the Capacity Type property is set to 'Work Schedule', a work schedule must be specified in the Work Schedule
property. A work schedule is defined from the Schedules panel, which is found by clicking on the Data tab.
Examples
Example 1
Combiner Object_Example 1
This Combiner Object from the standard object library will have a changing capacity that is based on a work schedule
named TwentyMinBreak. This Combiner Object will batch entities that arrive to both its parent input node and member
input node together, only if they have a matching value for the state called ModelEntity.PartType. The Combiner will batch
3 member entities together. It also has the Processing Time property set to 5 minutes so after the entities are batched
together, they will be delayed within this Combiner object for 5 minutes before exiting through the output node.
845 / 1277
Simio Reference Guide
Separator
A Separator represents a capacitated resource with one input buffers and two output buffers.
The Separator object contains four capacitated stations with associated queues; one station for the input buffer, one for the
processing station, one for the parent output buffer and another station for the member output buffer. The four station
approach allows for the capability to have both infinite and finite capacity queues.The Balking and Reneging Options page
provides additional information and examples on buffer capacities, balking and reneging.
An entity arrives at the input node of the Separator. This station has a queue and a capacity. If the Separation Mode is set to
'Make Copies', the Separator will create the number of entities that is specified in Copy Quantity. The copies may be
specified as a different entity type by using the Copy Entity Type property. The original entity will depart the Separator
from the parent output node and the copies will depart from the member output node. Similarly, if the Separation Mode is
set to 'Create New ( No Copying)', the Separator will create a number of new entities that are specified in New Entity
Quantity. The new entities may be specified as a different entity type by using the New Entity Type property. The original
entity will depart the Separator from the parent output node and the newly created entities will depart from the member
output node. If the Separation Mode is set to 'Split Batch', the Separator will unbatch the specified number of entities from
the parent entity. The number is specified in Desired Split Quantity. The original entity, which is the parent entity, will depart
from the parent node and the member entities depart from the member output node. The Match Condition property may
be used to unbatch only certain entities from the batch based on a condition specified. For example, a Match Condition
may be specified as 'Candidate.ModelEntity.Is.RedPart' where RedPart is the name of the entity. When unbatched from the
parent, only those entities of type RedPart will be unbatched and any other members of the batch ( BluePart, GreenPart,
etc.) will remain with the batch. The Removal Order can be used to determine the order of searching for the Desired Split
Quantity number of members to unbatch.
The Separator does not only unbatch entities, make copies of entities or make new entities, it also has process logic and
capacity logic similar to a Server Object. If the entity is be processed by the Separator, it appears at the process station's
queue while its being processed and then performs the logic of separating, copying or making new entities. After the logic
of the process has completed, if there is space the entity will be moved to the output member queue.
Within the Processing station of the Separator, the Process Type may be a 'Specific Time' or based on a 'Task Sequence'.
The default 'Specific Time' will delay the entity at the processing station of the Separator for the simple Processing Time
specified. The 'Task Sequence' option will require a number of Processing Tasks and associated information to be specified.
This is explained in greater detail within the Task Sequence - Processing Tasks section.
A Separator may have failures, which are specified within the Reliability section of the Properties window. State
assignments can be made upon entering, before processing, after processing, before either parent or member exiting, on
balking and on reneging the Separator. Secondary Resources may be seized and/or released by the entity upon entering
the Separator, and before and after processing occurs. The Add-On Process Triggers allow additional logic to be specified
when using the Separator.
An entity processing at a Separator may be interrupted with the Interrupt step. The Processing Time delay is the only
interruptible delay within the Separator.
The Seize Constraint Logic repeat group supports imposing additional constraints on an entity's request to seize the object
by referencing Constraint Logic elements.
The Immediately Try Seize and Immediately Try Allocate When Released options within the Other Processing Options (and
Secondary Resources area) section of properties are typically advanced users. They deal with processing events on the
Simio event calendar that occur at the same time, including arrival of multiple entities to an object, or release of multiple
objects at a time for re-allocation. It's important to note that these properties do not affect processing for entities that
arrive on path with Allow Passing set to 'False', entities arriving via Conveyor, or any other construct that causes entities to
arrive one at a time at different simulation times. This feature will not provide any benefit because the second (or
following) entity will not arrive before the late event happens at the first entity's simulation time.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Separator.
For more information, see Separator - Discussion and Examples.
Listed below are the properties of the Separator:
Property Valid Entry Description
Separation Mode Create New ( No Copying), Split The method for separating the incoming entity. If 'Split
Batch, Make Copies Batch' , then the Separator object will attempt to split off
846 / 1277
Batch, Make Copies Batch' , then the Separator object will attempt to split off
(unbatch) the desired number of batch members from the
parent entity. If 'Make Copies', then the Separator object
will make the specified number of copies of the original
incoming entity. If 'Create New ( No Copying), then the
Separator object will create the specified number of new
entities without copying over any attributes of the original
incoming entity
Desired Split Expression The desired number of batch members to split off
Quantity (unbatch) from the parent entity.
Removal Order LastBatchedFirst, The order in which to search for and split off batch
FirstBatchedFirst members from the parent entity.
Match Condition Expression Optional match condition used to filter the batch member
entities. Only members that match the criteria given by
the expression will be split off from the batch.
In the condition, use the keyword 'Candidate' to explicitly
reference a candidate entity in the batch members being
searched (e.g., Candidate.Entity.Priority > 0).
Copy Quantity Expression The number of copies to make of the original incoming
entity.
Copy Entity Type Entity Name The entity type of the created copies. If this property is
not specified, then the same type as the original incoming
entity will be assumed.
New Entity Type Entity Name The entity type of the new entities to create.
Capacity Type Fixed, Work Schedule The method used to specify the number of batching
operations that this Separator object can simultaneously
process.
Work Schedule WorkSchedule name The capacity work schedule that this Separator object
follows.
Work Day Repeat Group, Work Day Work Day schedule exceptions specific to this resource.
Exceptions Exceptions
Work Period Repeat Group, Work Period Work Period schedule exceptions specific to this resource.
Exceptions Exceptions
Ranking Rule First In First Out, Last In First The static ranking rule used to order entities waiting to be
Out, Smallest Value First, allocated capacity of this Separator object.
Largest Value First
Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Dynamic Selection None, or one of several Indicates whether this object, when its capacity becomes
Rule Dynamic Selection Rules available, dynamically selects the next allocation request
from its statically ranked allocation queue using a
dynamic selection rule.
847 / 1277
Repeat Group True, False Indicates whether a repeat group data structure is used to
define the primary dispatching rule and any tie breaker
rules.
Dispatching Rule See Dynamic Selection Rules The primary criteria used to select the next entity from the
queue. Note that using a particular dispatching rule may
require some specific model data about the candidate
entities, such as due dates, job routings, expected setup or
operation times, etc.
Tie Breaker Rule None, or one of several The secondary criteria used to break ties.
Dynamic Selection Rules
Dispatching Rules Repeat Group, Dispatching The primary dispatching rule and any tie breaker rules,
Rules applied in the order listed.
Filter Expression Expression Optional condition evaluated for each candidate entity
that must be true for the entity to be selected. In the
expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an
attribute of the candidate entities (e.g.,
Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this
Window ( Days) specified time window will be considered for selection.
Note that if there are no candidates whose due dates fall
within the look ahead window, then the window will be
automatically extended to include the candidate(s) with
the earliest due date.
TransferIn Time Expression The time required to transfer an entity into this Separator
object. This property may be specified using a random
sample from a distribution.
Process Type Speific Time, Task Sequence The method used to model the processing of an entity at
this Separator object.
Processing Time Expression The time required for this Separator object to process
each entity. This property may be specified using a
random sample from a distribution.
Processing Tasks Repeat Group, Tasks The set of tasks required for this Separator object to
process an entity.
Loopback Repeat Group, Processing Tasks Conditional or probabilistic loopback branches in the task
Branches workflow.
Task Precedence SequenceNumberMethod, The method used to define the task precedence
Method ImmediatePredecessorsMethod, dependencies. Can be either by specifying task sequence
ImmediateSuccessorsMethod numbers, specifying the immediate predecessors for each
task, or specifying the immediate successors for each task.
Task Resource Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task resource requirements.
Name
Task Materials Table Name Optional name of data table to be used as the referenced
Referenced Table data source for getting task material requirements.
Name
848 / 1277
Task State Table Name Optional name of data table to be used as the referenced
Assignments data source for getting state assignments.
Referenced Table
Name
Off Shift Rule Suspend Processing, Finish The processing rule used at the Separator at the end of a
Work Already Started shift.
If the rule is 'Suspend Processing', then the Separator will
immediately suspend all processing and set its resource
state to 'OffShift'. Processing will resume at the start of
the next shift.
If the rule is 'Finish Work Already Started', then the
Separator will not accept any new entities but will
continue processing if necessary to finish work already
started. The Separator's resource state will be set to
'OffShiftProcessing' if processing entities during an off-
shift period.
Resource None, Average, Count, If the rule is 'None', then seized resource efficiency is the
Efficiency Rule Maximum, Minimum, Sum processing rule used to alter the rate at which work is
performed if there are seized resources with defined
efficiency values. The actual work duration is the planned
work duration divided by the efficiency.
If the rule is 'Average', then the average seized resource
efficiency value is used.
If the rule is 'Count', then the number of seized resources
with a defined efficiency value is used.
If the rule is 'Maximum', then the largest efficiency value is
used.
If the rule is 'Minimum', then the smallest efficiency value
is used.
If the rule is 'Sum', then the sum of the seized resource
efficiency values is used.
Seize Constraint Repeat Group, Constraint Logic Constraint logic used to enforce additional constraints on
Logic elements an entity's request to seize the Separator.
NOTE: This repeat group applies only if the Separator has
an input buffer. Otherwise, if no input buffer, then this
constraint logic will be ignored.
Seize Constraint Constraint Logic elements The name of the Constraint Logic element used to
Logic.Constraint enforce additional constraints on an entity's request to
Logic Name seize the Separator.
Immediately Try True, False For an arriving entity, indicates whether to immediately try
Seize seizing the Separator before the execution of any other
simulation logic in the system and, if successful, skipping
the Separator's allocation queue.
Setting this property to False will just insert the seize
request into the Separator's allocation queue. An
evaluation of that queue will then be scheduled on the
simulation's current event calendar as a late priority event.
NOTE: This property setting applies only if the Separator
has an input buffer. Otherwise, if no input buffer, then an
arriving entity will always immediately try to enter the
Separator's processing station and seize it.
Immediately Try True, False Once an entity has exited processing and released the
Allocate When Separator, indicates whether to immediately try allocating
Released the released Separator capacity to waiting seize requests
before the execution of an other simulation logic in the
system.
Setting this property to False will skip immediate
allocation. Instead, an evaluation of the Separator's
849 / 1277
allocation. Instead, an evaluation of the Separator's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Input Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity Separator object's input buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Input Buffer) Probabilistic at entering the buffer.
If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Condition Or Expression The balk condition or probability specified as an
Probability ( Input expression. If a probability then enter the chance of
Buffer) balking as a value between 0.0 (0%) and 1.0 (100%).
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Input Buffer) entering the buffer.
Parent Output Integer >= 0 The number of discrete entities that can be held in this
Buffer Capacity Separator object's parent output buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Parent Probabilistic at entering the buffer.
Output Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Parent Output entering the buffer.
Buffer)
Member Output Integer >= 0 The number of discrete entities that can be held in this
Buffer Capacity Separator object's member output buffer.
Balk Decision None, Blocked, Conditional, The method used by an entity to decide whether to balk
Type ( Member Probabilistic at entering the buffer.
Output Buffer) If the decision type is 'Blocked', then an entity attempting
to enter the buffer will balk if the buffer is full rather than
be blocked. Or, if a zero capacity buffer, the entity will
balk if its attempt to transfer directly into or out of the
object is blocked.
Balk Node Name Node object reference Facility node location to send an entity that has balked at
( Member Output entering the buffer.
Buffer)
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause
entities to abandon waiting in the buffer.
850 / 1277
Trigger Time Based, Event Based The type of trigger.
Type.Renege A time based trigger can cause an entity waiting in the
Triggers buffer to renege after a tolerable wait duration expires.
An event based trigger can cause an entity waiting in the
buffer to renege if a specific event occurs.
Wait Expression,vspecified if the The tolerable wait duration until a renege decision by an
Duration.Renege Trigger Type is 'Time Based'. entity waiting in the buffer.
Triggers
Triggering Event Event Reference, specified if the The name of the event whose occurrence will trigger a
Name.Renege Trigger Type is 'Event Based'. renege decision by an entity waiting in the buffer.
Triggers
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to
Type .Renege Probabilistic decide whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified if the The renege condition or probability specified as an
Or Renege Decision Type is expression. If a probability then enter the chance of
Probability.Renege 'Conditional' or 'Probabilistic'. reneging as a value between 0.0 (0%) and 1.0 (100%).
Triggers NOTE: If it is necessary to check in a conditional
expression whether an entity is currently waiting for a
specific type of constraint, the entity 'Queuing' namespace
provides several functions for that purpose (e.g.,
Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object reference Facility node location to send a reneging entity.
Name.Renege
Triggers
Trigger Start Entered, Ended Transfer In Indicates when the trigger becomes active for an entity
Boundary.Renege occupying the buffer. Can be either immediately when the
Triggers entity has entered the buffer or, alternatively, not until its
transfer into the buffer has been ended (e.g., after a
transfer-in time or any other entry related logic).
Failure Type No Failures, Calendar Time Specifies whether this Separator object has failures that
Based, Event Count Based, affect the object's availability, and the method used to
Event Count Based, Processing trigger the failure occurrences.
Time Based
Event Name Event Instance Name The name of the event which determines when the next
failure occurs.
Uptime Between Expression The uptime between failure occurrences. This property
Failures may be specified using a random sample form a
distribution.
Count Between Expression The count between failure occurrences. This property may
Failures be specified using a random sample from a distribution.
Time To Repair Expression The time required to repair a failure when one occurs. This
property may be specified using a random sample from a
distribution.
Action Type ( Table Reference Existing Row, Add The type of table row reference action to perform.
Row Referencing - New Row The 'Reference Existing Row' action type may be used to
Before Processing) set a reference to an existing table row in a data table or
sequence table. The row index into the table is specified
by the Row Number property.
851 / 1277
The 'Add New Row' action type may be used to add a
new row to an output table. A reference will be
automatically set to the newly added row.
Table Name ( Table Table Name The name of the table.
Row Referencing -
Before Processing)
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Processing)
On Entering ( State Repeat Group, Assignments Optional state assignments when an entity is entering the
Assignments) Separator object.
Before Processing Repeat Group, Assignments Optional state assignments when an entity has been
( State allocated capacity to be processed at the object, but
Assignments) before entering (or ending transfer into) the object's
processing station.
After Processing Repeat Group, Assignments Optional state assignments when an entity has completed
( State its processing and is about to do the separation logic, but
Assignments) before attempt its exit from the object's processing
station.
Before Parent Repeat Group, Assignments Optional state assignments when a parent entity is ready
Exiting ( State to exit the Separator object.
Assignments)
Before Member Repeat Group, Assignments Optional state assignments when a separated member
Exiting ( State entity is ready to exit the Separator object.
Assignments)
On Balking ( State Repeat Group, Assignments Optional state assignments when an entity is balking at
Assignments) entering an input or output buffer of the object.
On Reneging Repeat Group, Assignments Optional state assignments when an entity is reneging
( State from an input or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name or Name of the state variable that will be assigned a new
Name.State Reference value.
Assignments
Repeat Group True, False Indicates whether a repeat group data structure is used to
( Secondary define the secondary resources for processing. If a repeat
Resource for group structure is used, many of the below properties are
Processing) specified within the repeat group. OffShift Rule, Must
Simultaneously Seize, Immediately Try Seize and
Immediately Try Allocate When Released are not within the
repeat group, thus not resource specific.
852 / 1277
repeat group, thus not resource specific.
Object Type Specific, From List, The method for specifying the object to be seized and
( Secondary ParentObject held for the Separator's processing time.
Resource for
Processing)
Object Name Object Instance Name The name of the object to be seized.
( Secondary
Resource for
Processing)
Object List Name Object List Instance Name The name of the object list from which an object will be
( Secondary selected to be seized.
Resource for
Processing)
Selection Goal Smallest Distance, Largest The goal for selecting objects to seize.
( Secondary Distance, Preferred Order,
Resource for Smallest Value, Largest Value,
Processing) Random
Value Expression Expression The expression evaluated for each object that is a
( Secondary candidate to seize. In the expression, use the keyword
Resource for Candidate to reference an object in the collection of
Processing) candidates to be seized (e.g.,
Candidate.Object.Capacity.Remaining).
Request Move None, To Node Indicates whether a move to a specified location will be
( Secondary requested from the seized resource. Processing will not be
Resource for able to start until the resource has arrived to the
Processing) requested location.
Destination Node Node Instance Name The name of the specific node location that the seized
( Secondary resource will be requested to move to.
Resource for
Processing)
Off Shift Rule Finish Work Already Started, The processing rule used if the secondary resource is at
( Secondary Suspend Processing, Switch the end of a shift because of a specified work schedule.
Resource for Resources If Possible If the rule is 'Finish Work Already Started', then the
Processing) processing of the entity that is using the secondary
resource will be allowed to continue processing until
finished. The secondary resource will not be allowed to
accept any new work.
If the rule is 'Suspend Processing', then the processing of
the entity that is using the secondary resource will be
immediately suspended. Processing will resume at the
start of the secondary resource's next shift.
If the rule is 'Switch Resources If Possible', then the
processing of the entity that is using the secondary
resource will be immediately suspended. The entity will
then try to resume processing as soon as possible by
releasing the resource and seizing another available one
that satisfies the same resource requirements.
Number of Expression The number of individual resource objects to seize
Objects capacity units of.
( Secondary
Resource for
Processing)
853 / 1277
Units Per Object Expression The number of capacity units to seize per resource object.
( Secondary
Resource for
Processing)
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Secondary before the execution of any other simulation logic in the
Resource for system and, if successful, skipping the resource allocation
Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
On Entering) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Seizes Optional secondary resource seizes once an entity has
( Other Resource been allocated Separator capacity, to be completed
Seizes) before starting the processing time.
Immediately Try True, False Indicates whether to immediately try seizing the resource
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
Before Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Seizes Optional secondary resource seizes after an entity has
( Other Resource finished processing, to be completed before releasing the
Seizes) Separator capacity and then executing the separation
logic.
Immediately Try True, False Indicates whether to immediately try seizing the resource
before the execution of any other simulation logic in the855 / 1277
Seize ( Other before the execution of any other simulation logic in the
Resource Seizes -- system and, if successful, skipping the resource allocation
After Processing) queues.
Setting this property to False will just insert the seize
request into the resource allocation queues. An evaluation
of the queues will then be scheduled on the simulation's
current event calendar as a late priority event.
On Parent Entering Repeat Group, Resource Optional secondary resource releases to be performed
( Other Resource Releases when an entity is entering the Separator object.
Releases)
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- On Entering) Setting this property to False will skip immediate
allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Before Processing Repeat Group, Resource Optional secondary resource releases once an entity has
( Other Resource Releases been allocated Separator capacity, before starting the
Releases) processing time.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- Before Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
After Processing Repeat Group, Resource Optional secondary resource releases after an entity has
( Other Resource Releases finished processing, before releasing the Separator
Releases) capacity and then executing the separation logic.
Immediately Try True, False Indicates whether to immediately try allocating the
Allocate When released resource capacity to waiting seize requests
Released ( Other before the execution of any other simulation logic in the
Resource Releases system.
-- After Setting this property to False will skip immediate
Processing) allocation. Instead, an evaluation of the resource's
allocation queue will be scheduled on the simulation's
current event calendar as a late priority event.
Parent Cost Center Cost Center Name The cost center that costs allocated to this object are
rolled up into. If a parent cost center is not explicitly
specified, then costs will be automatically rolled up into
the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the
system.
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Parent Output waiting time.
Buffer Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Parent Output
Buffer Costs)
856 / 1277
Cost Per Use Expression The cost to hold an entity in this buffer irrespective of the
( Member Output waiting time.
Buffer Costs)
Holding Cost Rate Expression The cost per unit time to hold an entity in this buffer.
( Member Output
Buffer Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of
Rate( Resource the separator for each unutilized scheduled capacity unit.
Costs)
Cost Per Expression The one-time cost that is accrued each time the separator
Use( Resource is used, regardless of the usage duration. This cost will be
Costs) charged to the cost of the entity using the separator.
Usage Cost Expression The cost per unit time to use the separator if in a utilized
Rate( Resource state. This cost will be charged to the cost of the entity
Costs) using the separator.
Run Initialized Process Instance Name Occurs when the simulation run is initialized.
Add-On Process
Run Ending Add- Process Instance Name Occurs when the simulation run is ending.
On Process
Entered Add-On Process Instance Name Occurs when an entity has entered the input buffer of this
Process separator object.
Before Processing Process Instance Name Occurs when an entity has been allocated separator
Add-On Process capacity, but before entering (or ending transfer into) the
object's processing station.
Processing Add- Process Instance Name Occurs when an entity has been allocated separator
On Process capacity and is about to start processing.
After Processing Process Instance Name Occurs when an entity has completed the processing time
Add-On Process and is about to do the separation logic, before
attempting its exit from the separator's processing station
in order to release the separator capacity.
Parent Exited Process Instance Name Occurs when a parent entity has exited this separator
Add-On Process object.
Member Exited Process Instance Name Occurs when a separated member entity has exited this
Add-On Process separator object.
Failed Add-On Process Instance Name Occurs when this object has failed.
Process
Repaired Add-On Process Instance Name Occurs when a failure is repaired at this object.
Process
Evaluating Seize Process Instance Name Occurs when this Separator object is evaluating whether
Request Add-On to accept or reject a request to seize capacity of the
Process Triggers separator. In the executed decision process, assigning a
value of less than or equal to '0' to the executing token's
ReturnValue state ( Token.ReturnValue) indicates that the
seize request is rejected.
857 / 1277
OnShift Add-On Process Instance Name Occurs when the object goes 'on shift' because of its
Process specified work schedule.
OffShift Add-On Process Instance Name Occurs when the object goes 'off shift' because of its
Process specified work schedule.
Transfer-In Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer into this fixed object via
external input nodes. If specified as 'Default', then the Can
Transfer In & Out of Objects property setting for the entity
type will determine whether an entity can perform a
transfer into the object.
Transfer-Out Disable, Default, Custom Indicates the type of constraints used to determine
Constraints Condition whether entities can transfer out of this fixed object via
external output nodes. If specified as 'Default', then the
Can Transfer In & Out of Objects property setting for the
entity type will determine whether an entity can perform a
transfer out of the object.
Log Resource True or False Indicates whether usage related events for this resource
Usage are to be automatically logged. Go to Results -> Logs to
view logged data.
Display Category String Optional text used for hierarchically arranging resources
in the Resource Plan window. Use backslashes for multiple
levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various
windows (currently only Gantt windows in Simio RPS
( Enterprise) Edition). If not specified, then this property
defaults to a color derived from the object's unique name.
Report Statistics True or False A Boolean property may be True or False and used in
expressions as a numeric 1.0 ( True) or 0.0 ( False) value.
858 / 1277
Simio Reference Guide
Separation Mode
If the Separation Mode is set to 'Split Batch', the Separator will use the Split Quantity property to determine how
many entities to separate. By default, Entity.BatchMembers is specified in the Split Quantity property because this
holds the number of member entities in the batch if the entity is a parent entity. However, any value can be specified
in the Split Quantity property.
If the Separation Mode is set to 'Make Copies', the Separator will make X number of copies of the parent entity, where
X is the quantity specified in Copy Quantity. The original entity will depart through the parent output node and the
new copies will depart through the member output node. The copies may be specified as a different entity type than
the original, by specifying a Copy Entity Type property. If the entities are of a different type, the much information
from the original entity is copied to the newly created entities. This includes all table references assigned to the
original, all the original object’s state values, and the original’s assigned network and destination. If the original is
following a sequence table, the current sequence table index is copied as well. Note that if the entity type of the copy
is different than the original’s type, then only the state values of common inherited object states can be copied. Also,
the size state values will not be copied and thus a copy of a different type will be sized according to the default size
for that different type.
Fixed Capacity or Capacity Varying by Work Schedule
Fixed
If the Capacity Type property is set to 'Fixed', the value of the initial capacity will be used to determine the capacity
for the Separator at the start of the simulation run. The capacity can be specified with an expression. If a random
distribution is specified in the capacity expression, it will only be evaluated once at the beginning of the run and the
capacity will remain unchanged. The Assign step can be used to change the Separator's capacity during the
simulation run by using the Separator state, SeparatorName.CurrentCapacity. This will change the value of the
capacity function, SeparatorName.Capacity.
WorkSchedule
If the Capacity Type property is set to 'Work Schedule', a work schedule must be specified in the Work Schedule
property. A work schedule is defined from the Schedules panel, which is found by clicking on the Data tab.
860 / 1277
Simio Reference Guide
Vehicle
Vehicles
A Vehicle object may be used to define a dynamic population of moveable unit resources in the modeled system. Each
individual vehicle member in the population is tracked separately, in terms of both animation and statistics.
Vehicles are modeling objects that can pickup entity objects at a location, carry those objects through a network of links or
free space, then drop the entities off at a destination location. This object also has the ability to move off of a network
while maintaining association with a node on the network (i.e., park at a node in a network).You can create other
transporter models that behave differently than the standard Vehicle model; e.g. you could create an object definition for a
subway car, AGV, or bus.
An ‘On Demand’ Vehicle object may be used as a moveable resource that is seized and released by model logic for non-
transport tasks. A ‘Fixed Route’ vehicle will never be available to be seized, as the behavior of that type of vehicle is
designed to maintain its specified fixed routing sequence and only do pickups and drop-offs at the locations specified
along the route. If an ‘On Demand’ Vehicle object is being used for both transport and non-transport tasks, then by default,
the non-transport tasks will always be prioritized before transport tasks.
If a Vehicle's CurrentTravelMode is 'Network If Possible', then the vehicle will accept any node in the same Facility view as a
valid destination for pickups, drop-offs, processing tasks, etc. (because the Vehicle's travel movements will be able to be
performed using either its currently assigned network or in free space).
You can define the Initial Number In System for the Vehicle population. You may also use the Create step or Source object
to dynamically create and add new members to the population during the run. However, note that you cannot dynamically
Destroy a Vehicle because resource objects in Simio are not destroyable.
A Vehicle may have failures, which are specified within the Reliability section of the Properties window. The Add-On
Process Triggers allow additional logic to be specified when using the Vehicle.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Vehicle.
For more information, see Vehicle - Discussion and Examples.
Listed below are the properties of the Vehicle:
Property Valid Entry Description
Initial Ride Integer The initial carrying capacity of this Vehicle object.
Capacity
Task Selection Smallest The strategy used by the Vehicle object to select its next transport pickup or
Strategy Distance, Largest dropoff task.
Distance,Smallest
Priority, Largest
Priority, First In
Queue
Load Time Expression The time required for this Vehicle object to load an entity (i.e., the load time
per entity).
Unload Time Expression The time required for this Vehicle object to unload an entity (i.e., the unload
time per entity).
Park To True or False Indicates whether this Vehicle object should park to load and unload entities
Load/Unload at a node. Parking a vehicle can be useful to avoid blocking other travelers on
the network.
Minimum Dwell Until Specifies the minimum dwell time requirement for this Vehicle object when
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a
Type Until Full, No minimum amount of time the vehicle is required to wait, or 'dwell', at a node
861 / 1277
Type Until Full, No minimum amount of time the vehicle is required to wait, or 'dwell', at a node
Requirement, to load and unload entities.
Specific Time
Event Name Event Name The name of the event that will indicate the expiration of the minimum wait
time requirement for this Vehicle object when loading and unloading entities
at a node.
Minimum Expression The specific minimum amount of time that this Vehicle object is required to
Dwell Time wait, or 'dwell', at a node to load and unload entities.
Dwell Only If Expression If specified, this condition will be used to indicate whether the vehicle must
respect the minimum dwell time at a node if that requirement has not yet
expired, thereby forcing the vehicle to wait, or 'dwell', at the node for
possible additional loads. Example uses of this property might include
allowing the vehicle to exit a node before the minimum dwell time has
expired if the vehicle has reached full ride capacity, or if there is little to no
chance of additional loads. Another example condition might be to only
respect the minimum dwell time requirement if the vehicle is at a node
meeting some specific criteria.
Initial Desired Expression The initial desired speed value for this Vehicle object when traveling between
Speed locations.
Initial Travel Free Space Only, The initial travel mode for entities of this type.
Mode Network Only, 'Free Space Only' indicates that the entities are required to perform travel
Network If movements in free space.
Possible 'Network Only' indicates that the entities are required to perform travel
movements using the currently assigned network.
'Network If Possible' indicates a preference for the entities to perform travel
movement using the currently assigned network, but if no followable network
path exists to the next destination then travel in free space is allowed.
NOTE: Refer to the user-assignable 'CurrentTravelMode' state variable of an
entity to dynamically change its travel mode during a simulation run. An
entity's travel mode may also be changed using the 'Outbound Travel Mode'
property provided by a node.
Initial Network Instance The initial network of links used by this Vehicle object to travel between node
Network Name locations.
Network Exit & Re-enter, When traveling on a network, the default method used by objects of this type
Turnaround Rotate in Place, to turn around at a node in order to move in the opposite direction on a
Method Reverse bidirectional link. The 'Turnaround Method' property of a Network element
may also be used to override this default on a network-by-network basis.
Free Space Direct To The behavior used to steer an entity of this type when traveling in free space
Steering Destination, to a destination.
Behavior Follow Network 'Direct To Destination' will steer an entity in a straight line to its destination.
Path If Possible 'Follow Network Path If Possible' will prefer to steer an entity along a path
following its currently assigned network, staying within the boundries of the
drawn path width. However, if no followable network path exists to the
entity's destination then the entity will be steered in a straight line. Note: In
order to use this steering behavior, make sure the entity's travel mode is set to
'Free Space Only'.
Update Expression The time interval between updates checking an entity's adherence to the
Interval network path.
Avoid True or False Indicates whether the steering behavior will attempt to avoid collisions with
Collisions other entities that are following the same network path.
Initial Priority Expression The initial priority value of this Vehicle object at the beginning of the
862 / 1277
Initial Priority Expression The initial priority value of this Vehicle object at the beginning of the
simulation run.
Initial Node Node Instance The initial node location of this Vehicle object at the beginning of the
( Home) Name simulation run. Also indicates the vehicle's 'Home' location if the object's 'Idle
Action' is specified as 'Park At Home' or 'Go To Home'.
Routing Type On Demand, Specifies the routing behavior of this Vehicle. If 'On Demand',then the vehicle
Fixed Route will route to locations on the network according to visit requests. An 'On
Demand' vehicle may also be used as a moveable resource that is seized and
released for non-transport related tasks by model process logic. If 'Fixed
Route', then the vehicle will follow a fixed route sequence to transport riders
and will only load and unload entities at locations on the specified route.
Route Sequence The sequence table that defines the route sequence that this vehicle will loop.
Sequence Instance Name
Idle Action Park At Node, Go The action of this Vehicle object when it does not have any transportation
to Home, Remain tasks to perform.
In Place, Park At
Home, Roam
Off Shift Park At Node, Go The action of this Vehicle object when it goes 'off shift'. Note that, if the
Action to Home, Remain vehicle is busy or transporting when an off shift period begins, then this
In Place, Park At action will be taken when the vehicle is released from (i.e., finishes) the
Home remaining tasks.
Capacity Type Fixed, Work The availability of this vehicle type to perform tasks. 'Fixed' indicates that this
Schedule type of vehicle is always available. 'WorkSchedule' indicates that each vehicle
of this type follows a work schedule defining its 'On-shift', 'Off-shift'
availability over time.
Work Schedule The name of the schedule that defines the 'On-shift', 'Off-shift' availability of
Schedule Property this type of vehicle over time.
Work Day Repeat Group, Work Day schedule exceptions specific to this resource.
Exceptions Work Day
Exceptions
Work Period Repeat Group, Work Period schedule exceptions specific to this resource.
Exceptions Work Period
Exceptions
Ranking Rule First In First Out, The static ranking rule used to order requests waiting to seize this Vehicle
Last In First Out, object for a process task. Note: This feature only applies to an 'On Demand'
Smallest Value routing type vehicle.
First, Largest
Value First
Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value First' static
Expression ranking rule for ordering requests waiting to be allocated capacity of this
object.
Dynamic None, or one of Indicates whether this vehicle, when it becomes available, dynamically selects
Selection Rule several Dynamic the next seize request from its statically ranked allocation queue using a
Selection Rules dynamic selection rule. Note: This feature only applies to an 'On Demand'
routing type vehicle.
Repeat Group True, False Indicates whether a repeat group data structure is used to define the primary
dispatching rule and any tie breaker rules.
863 / 1277
Dispatching See Dynamic The primary criteria used to select the next entity from the queue. Note that
Rule Selection Rules using a particular dispatching rule may require some specific model data
about the candidate entities, such as due dates, job routings, expected setup
or operation times, etc.
Tie Breaker None, or one of The secondary criteria used to break ties.
Rule several Dynamic
Selection Rules
Dispatching Repeat Group, The primary dispatching rule and any tie breaker rules, applied in the order
Rules Dispatching listed.
Rules
Filter Expression Optional condition evaluated for each candidate entity that must be true for
Expression the entity to be selected. In the expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an attribute of the candidate
entities (e.g., Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this specified time
Window window will be considered for selection. Note that if there are no candidates
( Days) whose due dates fall within the look ahead window, then the window will be
automatically extended to include the candidate(s) with the earliest due date.
Park While True or False Indicates whether this Vehicle object should park while busy at a node due to
Busy a seize request. Parking a vehicle can be useful to avoid blocking other
travelers on the network.
Failure Type No Failures, Specifies whether this Vehicle object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Event
Count Based
Event Name Event Instance The name of the event which determines when the next failure occurs.
Name
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
864 / 1277
Time To Expression The time required to repair a failure when one occurs.
Repair
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Parent Cost Cost Center The cost center that costs allocated to vehicles of this type are rolled up into.
Center Name If a parent cost center is not explicitly specified, then costs allocated to a
vehicle will be automatically rolled up into the parent object that contains
the vehicle's current location.
Capital Cost Expression The initial one-time setup cost to add a vehicle of this type to the system.
Per Vehicle
Cost Per Rider Expression The cost to load and transport an entity using a transporter of this type,
( Transport irrespective of the transportation time. This cost is allocated to an entity
Costs) when it is loaded onto the transporter.
Transport Cost Expression The cost per unit time to transport an entity using a transporter of this type.
Rate
( Transport
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of a vehicle of this
Rate( Resource type when it is idle.
Costs)
Cost Per Expression The one-time cost that is accrued each time a vehicle of this type is used for
Use( Resource a non-transport task, regardless of the usage duration. This cost will be
Costs) charged to the cost of the owner object(i.e., task) using the vehicle.
Usage Cost Expression The cost per unit time to use a vehicle of this type for a non-transport task.
Rate( Resource This cost will be charged to the cost of the owner object (i.e., task) using the
Costs) vehicle.
Run Initialized Process Instance Occurs when the simulation run is initialized. Note: This trigger will only occur
Add-On Name for Vehicle objects created by the Intiial Number in System setting.
Process
Triggers
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Triggers
Allocated Process Instance Occurs when this Vehicle resource has been allocated to perform some
Add-On Name transport tasks, or when another object has seized this Vehicle resource for
Process some non-transport related task.
Triggers
Released Process Instance Occurs when this Vehicle resource has been released after completing a set
865 / 1277
Add-On Name of tranport tasks, or when another object has released this Vehicle resource
Process from some non-transport related task.
Triggers
Failed Add- Process Instance Occurs when the vehicle has failed.
On Process Name
Triggers
Entered Node Process Instance Occurs when this vehicle has entered a node.
Add-On Name
Process
Triggers
Unloaded Process Instance Occurs after an entity is unloaded from this vehicle.
Add-On Name
Process
Triggers
Loaded Add- Process Instance Occurs after an entity is loaded onto the vehicle.
On Process Name
Triggers
Exiting Node Process Instance Occurs when this vehicle object is about to begin exiting a node.
Add-On Name
Process
Triggers
Evaluating Process Instance Occurs when this vehicle is evaluating whether or not to accept the pickup of
Transport Name a rider. In the executed decision process, assigning the value less than or
Request Add- equal to 0.0 to the executing token's ReturnValue state ( Token.ReturnValue)
On Process indicates that the potential rider is rejected.
Triggers
Evaluating Process Instance Occurs when an 'On Demand' routing type Vehicle is evaluating whether to
Seize Request Name accept or reject a seize allocation attempt by some process in the system. In
Add-On the executed decision process, assigning a value less than or equal to 0.0 to
Process the executing token's ReturnValue state ( Token.ReturnValue) indicates that the
Triggers allocation attempt is rejected.
On Shift Add- Process Instance Occurs when the object goes 'on shift' because of its specified work schedule.
On Process Name
Triggers
Off Shift Add- Process Instance Occurs when the object goes 'off shift' because of a specified work schedule.
On Process Name
Triggers
Initial Integer The initial number of Vehicle objects of this type in the system. Vehicles are
Number in initially located in free-space at the object instance location.
System
Maximum Integer The maximum number of objects of this instance that can be simultaneously
Number in in the system. If this limit is exceeded then a runtime error is generated.
System
866 / 1277
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
Display String Optional text used for hierarchically arranging resources in the Resource Plan
Category window. Use backslashes for multiple levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various windows (currently
only Gantt windows in Simio RPS ( Enterprise) Edition). If not specified, then
this property defaults to a color derived from the object's unique name.
Can Transfer True or False Indicates whether objects of this type are by default allowed to transfer into
In & Out of and out of fixed objects via those object's external input / output nodes.
Objects
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
867 / 1277
Simio Reference Guide
868 / 1277
Vehicle has ResourceState State Variable that Tracks Its States
The ResourceState state variable is a List State automatically tracked for the Vehicle, identical to the ResourceState
state provided by all of the processor objects in the standard library ( Server, Resource, Combiner, etc.). The numeric
values for the state are Idle=0, Busy=1, Failed=3, FailedBusy=5, Transporting=7. A Vehicle is considered busy when it
is Seized by a token using a Seize step. The vehicle is considered transporting when it is utilized for a movement type
task (either moving to the entity for transport or moving with the entity to its destination location).
You can use the ResourceState in process logic to check whether a vehicle is ‘Busy’ or ‘Idle’. This would be done by
utilizing the function Vehicle.ResourceState in the logic, given that the token referencing this function is associated
with the vehicle. You might also easily change the symbol animation on the vehicle to reflect its current state (e.g.,
show ‘Busy’ versus ‘Idle’ symbols) by using the Vehicle.ResourceState function in the Current Symbol Index property of
the vehicle. You will see Resource State results for the vehicle objects in the Results window.
To animate the vehicle ResourceState, you must explicitly reference the index of the vehicle within the dynamic
population. For example, if you have a vehicle with the Name 'Vehicle1' and the Initial Number In System property for
the vehicle set to '2', two Status Pies may be placed and the List States can be referenced as
Vehicle1[1].ResourceState and Vehicle1[2].ResourceState.
The ResourceState variable is used to display utilization statistics for the Vehicle in the Results window. Additionally,
this list state can be used to display utilization statistics during the simulation run. For example, you may wish to show
the percentage of time that a vehicle is doing transport type tasks during the simulation run. This would be done by
placing a status label with the expression VehicleName[unit#].ResourceState.PercentTime(7). For more information
on list state values and utilization statistics, see List State page.
Examples
Example 1
870 / 1277
Vehicle_Example 1
This shows the Transfer Node properties window for the Output Node of a Server and the Vehicle properties window
for Vehicle1. The entities that enter this node will wait to be picked up by the Transporter named Vehicle1. If there
are more than one type of Vehicle1 objects in the model at the time, the Closet will be reserved. The Vehicle1 object
will take the entities from the Output Node of the Server to the Input Node of Sink1, as specified in the Node Name
property of the Node. The Initial Ride Capacity property is set to 'Infinity' so the Transporter will pick up all the
entities that are waiting in the [email protected] at the time it arrives at the Output node.
871 / 1277
Simio Reference Guide
Worker
A Worker object may be used to define a dynamic population of moveable unit resources in the modeled system. Each
individual worker member in the population is tracked separately, in terms of both animation and statistics. Each individual
worker member in the population may have a resource capacity of 0 ( OffShift) or 1 ( OnShift). A Worker can follow an
OnShift/OffShift work schedule or have a fixed capacity.
In Simio, a Worker may be used as a moveable resource that is seized and released to process tasks by model process
logic. Additionally, a worker may be used to transport entity objects between node locations. By default, new seize
requests are always prioritized over new transport requests.
Workers have characteristics of both the Standard Library objects of Vehicles and Resources. Workers may have a fixed
capacity or may utilize a defined work schedule, similar to a resource. Workers also physically move between objects and
can carry one or more entities from one location to another, similar to vehicles. Workers have a physical location in the
Facility window, defined by the Intial Node (Home), Idle Action and Off Shift Action properties specified with the Worker.
The worker may have a home location to which it moves when idle / off-shift, may remain at its last utilized location or
may roam the network of paths.
When a Worker object is scheduled to go 'Off-Shift', if the worker is still in the process of performing a task then it will first
complete any remaining work before going into the 'OffShift' resource state. No new seize or transport requests will be
accepted during the off-shift period. While finishing those tasks, the worker object will be in either the 'OffShiftBusy' state
or 'OffShiftTransporting' state. If in the 'OffShiftTransporting' state, the Worker will complete any pickups at a reserved
node location (if it has already accepted a pickup transport request). The Worker will also finish any remaining rider drop-
offs. Once all remaining drop-offs are completed and the Worker object's RideStation queue is empty, it will go into the
'OffShift' state and perform the Off Shift Action ( Park at Node, etc.). If in the 'OffShiftBusy' state, the Worker will complete
any traveling to the requested task destination. It will then remain at that location until released. Once released, it will go
into the 'OffShift' state and perform the Off Shift Action specified. Note: If the user would like to interrupt a process task
delay when a Worker goes off-shift (to immediately preempt usage of and release the worker), there is the option of using
the Interrupt step to do so.
If a Worker's CurrentTravelMode is 'Network If Possible', then the worker will accept any node in the same Facility view as a
valid destination for pickups, drop-offs, processing tasks, etc. (because the Worker's travel movements will be able to be
performed using either its currently assigned network or in free space).
The Initial Number In System may be defined for the Worker population. Additionally, the Create step or Source object
may be used to dynamically create and add new members to the population during the run. However, note that Worker
objects cannot be dynamically destroyed ( Destroy step) because resource objects in Simio are not destroyable.
The Add-On Process Triggers allow additional logic to be specified when using the Worker.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Worker.
For more information, see Worker - Discussion and Examples.
Listed below are the properties of the Worker:
Property Valid Entry Description
Capacity Type Fixed, Work The availability of this worker type to perform tasks. 'Fixed' indicates that this
Schedule type of worker is always available. 'WorkSchedule' indicates that each worker
of this type follows a work schedule defining its 'On-shift', 'Off-shift'
availability over time.
Work Schedule The name of the schedule that defines the 'On-shift', 'Off-shift' availability of
Schedule Property this type of worker over time.
Work Day Repeat Group, Work Day schedule exceptions specific to this resource.
Exceptions Work Day
Exceptions
Work Period Repeat Group, Work Period schedule exceptions specific to this resource.
Exceptions Work Period
Exceptions 872 / 1277
Exceptions
Ranking Rule First In First Out, The static ranking rule used to order requests waiting to seize this Worker
Last In First Out, object for a process task.
Smallest Value
First, Largest
Value First
Ranking Expression The expression used with a Smallest Value First or Largest Value First ranking
Expression rule.
Dynamic None, or one of Indicates whether this Worker object, when it becomes available, dynamically
Selection Rule several Dynamic selectes the next seize reqeuest from its statically ranked allocation queue
Selection Rules using a dynamic selection rule.
Repeat Group True, False Indicates whether a repeat group data structure is used to define the primary
dispatching rule and any tie breaker rules.
Dispatching See Dynamic The primary criteria used to select the next entity from the queue. Note that
Rule Selection Rules using a particular dispatching rule may require some specific model data
about the candidate entities, such as due dates, job routings, expected setup
or operation times, etc.
Tie Breaker None, or one of The secondary criteria used to break ties.
Rule several Dynamic
Selection Rules
Dispatching Repeat Group, The primary dispatching rule and any tie breaker rules, applied in the order
Rules Dispatching listed.
Rules
Filter Expression Optional condition evaluated for each candidate entity that must be true for
Expression the entity to be selected. In the expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an attribute of the candidate
entities (e.g., Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this specified time
Window window will be considered for selection. Note that if there are no candidates
( Days) whose due dates fall within the look ahead window, then the window will be
automatically extended to include the candidate(s) with the earliest due date.
Park While True or False Indicates whether this Worker object should park while busy at a node due to
Busy a seize request. Parking a worker can be useful to avoid blocking other
travelers on the network.
Intial Desired Expression The initial value for the desired travel speed of this Worker object when
Speed traveling between locations.
Initial Travel Free Space Only, The initial travel mode for entities of this type.
Mode Network Only, 'Free Space Only' indicates that the entities are required to perform travel
Network If movements in free space.
Possible 'Network Only' indicates that the entities are required to perform travel
movements using the currently assigned network.
'Network If Possible' indicates a preference for the entities to perform travel
movement using the currently assigned network, but if no followable network
path exists to the next destination then travel in free space is allowed.
NOTE: Refer to the user-assignable 'CurrentTravelMode' state variable of an
entity to dynamically change its travel mode during a simulation run. An
entity's travel mode may also be changed using the 'Outbound Travel Mode'
property provided by a node.
873 / 1277
Initial Network Instance The initial network of paths used by this Worker object to travel between
Network Name locations.
Network Exit & Re-enter, When traveling on a network, the default method used by objects of this type
Turnaround Rotate in Place, to turn around at a node in order to move in the opposite direction on a
Method Reverse bidirectional link. The 'Turnaround Method' property of a Network element
may also be used to override this default on a network-by-network basis.
Free Space Direct To The behavior used to steer an entity of this type when traveling in free space
Steering Destination, to a destination.
Behavior Follow Network 'Direct To Destination' will steer an entity in a straight line to its destination.
Path If Possible 'Follow Network Path If Possible' will prefer to steer an entity along a path
following its currently assigned network, staying within the boundries of the
drawn path width. However, if no followable network path exists to the
entity's destination then the entity will be steered in a straight line. Note: In
order to use this steering behavior, make sure the entity's travel mode is set to
'Free Space Only'.
Update Expression The time interval between updates checking an entity's adherence to the
Interval network path.
Avoid True or False Indicates whether the steering behavior will attempt to avoid collisions with
Collisions other entities that are following the same network path.
Initial Priority Real The initial priority value of this Worker object.
Initial Node Node Instance The initial node location of this Worker object at the beginning of the
( Home) Name simulation run. Also indicates the worker's 'Home' location if the object is
specified to 'Park At Home' or 'Go To Home' when idle or off shift.
Idle Action Park At Node, Go The action of this Worker object when it does not have any tasks to perform.
to Home, Remain
In Place, Park At
Home, Roam
Off Shift Park At Node, Go The action of this Worker object when it goes 'off shift'. Note that, if the
Action to Home, Remain worker is busy when an off shift period begins, then this action is not taken
In Place, Park At until the worker is released from its last task.
Home
Initial Ride Integer The initial carrying capacity of this Worker object.
Capacity
Task Selection Smallest The strategy used by the Worker object to select its next transport task.
Strategy Distance, Largest
Distance,Smallest
Priority, Largest
Priority, First In
Queue
Load Time Expression The time required for this Worker object to load an entity (i.e., load time per
entity).
Unload Time Expression The time required for this Worker object to unload an entity (i.e., unload time
per entity).
Park To True or False Indicates whether this Worker object should park to load and unload entities
Load/Unload at a node. Parking a worker can be useful to avoid blocking other travelers on
the network.
Minimum Dwell Until Specifies the minimum dwell time requirement for this Worker object when
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a 874 / 1277
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a
Type Until Full, No minimum amount of time the worker is required to wait, or 'dwell', at a node
Requirement, to load and unload entities.
Specific Time
Event Name Event Name The name of the event that will indicate the expiration of the minimum wait
time requirement for this Worker object when loading and unloading entities
at a node.
Minimum Expression The specific minimum amount of time that this Worker object is required to
Dwell Time wait, or 'dwell', at a node to load and unload entities.
Dwell Only If Expression If specified, this condition will be used to indicate whether the worker must
respect the minimum dwell time at a node if that requirement has not yet
expired, thereby forcing the worker to wait, or 'dwell', at the node for
possible additional loads. Example uses of this property might include
allowing the worker to exit a node before the minimum dwell time has
expired if the worker has reached full ride capacity, or if there is little to no
chance of additional loads. Another example condition might be to only
respect the minimum dwell time requirement if the worker is at a node
meeting some specific criteria.
Parent Cost Cost Center The cost center that costs allocated to workers of this type are rolled up into.
Center Name If a parent cost center is not explicitly specified, then costs allocated to a
worker will be automatically rolled up into the parent object that contains the
worker's current location.
Capital Cost Expression The initial one-time setup cost to add a worker of this type to the system.
Per Worker
Cost Per Rider Expression The cost to load and transport an entity using a transporter of this type,
( Transport irrespective of the transportation time. This cost is allocated to an entity
Costs) when it is loaded onto the transporter.
Transport Cost Expression The cost per unit time to transport an entity using a transporter of this type.
Rate
( Transport
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of a worker of this
Rate( Resource type when it is idle.
Costs)
Cost Per Expression The one-time cost that is accrued each time a worker of this type is used for a
Use( Resource non-transport task, regardless of the usage duration. This cost will be
Costs) charged to the cost of the owner object(i.e., task) using the worker.
Usage Cost Expression The cost per unit time to use a worker of this type for a non-transport task.
Rate( Resource This cost will be charged to the cost of the owner object (i.e., task) using the
Costs) worker.
Run Initialized Process Instance Occurs when the simulation run is initialized. Note: This trigger will only occur
Add-On Name for Worker objects created by the Intiial Number in System setting.
Process
Triggers
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Triggers
875 / 1277
Allocated Process Instance Occurs when this Worker resource has been allocated to perform some
Add-On Name transport tasks, or when another object has seized this Worker resource for
Process some non-transport related task.
Triggers
Released Process Instance Occurs when this Worker resource has been released (freed) after completing
Add-On Name a set of tranport tasks, or when another object has released this Worker
Process resource from some non-transport related task.
Triggers
Entered Node Process Instance Occurs when this Worker object has entered a node.
Add-On Name
Process
Triggers
Unloaded Process Instance Occurs after an entity is unloaded from this Worker.
Add-On Name
Process
Triggers
Loaded Add- Process Instance Occurs after an entity is loaded onto the Worker.
On Process Name
Triggers
Exiting Node Process Instance Occurs when this Worker object is about to begin exiting a node.
Add-On Name
Process
Triggers
Evaluating Process Instance Occurs when this Worker object is evaluating whether or not to accept or
Transport Name reject a transport request from a potential rider. In the executed decision
Request Add- process, assigning the value less than or equal to 0.0 to the executing token's
On Process ReturnValue state ( Token.ReturnValue) indicates that the transport request is
Triggers rejected.
Evaluating Process Instance Occurs when this Worker object is evaluating whether to accept or reject a
Seize Request Name seize allocation attempt by some process in the system. In the executed
Add-On decision process, assigning a value less than or equal to 0.0 to the executing
Process token's ReturnValue state ( Token.ReturnValue) indicates that the seize request
Triggers is rejected.
On Shift Add- Process Instance Occurs when the object goes 'on shift' because of its specified work schedule.
On Process Name
Triggers
Off Shift Add- Process Instance Occurs when the object goes 'off shift' because of its specified work schedule.
On Process Name
Triggers
Initial Integer The initial number of Worker objects of this type in the system.
Number in
System
Maximum Integer The maximum number of objects of this type that can be simultaneously in
Number in the system. If this limit is exceeded then a runtime error is generated.
System
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
876 / 1277
Display String Optional text used for hierarchically arranging resources in the Resource Plan
Category window. Use backslashes for multiple levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various windows (currently
only Gantt windows in Simio RPS ( Enterprise) Edition). If not specified, then
this property defaults to a color derived from the object's unique name.
Can Transfer True or False Indicates whether objects of this type are by default allowed to transfer into
In & Out of and out of fixed objects via those object's external input / output nodes.
Objects
Report True or False Specifies if statistics are to be automatically reported for this object.
Statistics
877 / 1277
Simio Reference Guide
The ResourceState variable is used to display utilization statistics for the Worker in the Results window. Additionally,
this list state can be used to display utilization statistics during the simulation run. For example, you may wish to show
the percentage of time that a worker is doing transport type tasks during the simulation run. This would be done by
placing a status label with the expression WorkerName[unit#].ResourceState.PercentTime(7). For more information
on list state values and utilization statistics, see List State page.
Connector
A Connector object is a link that may be used to define a non passing pathway between two node locations where the
travel time is instantaneous. It is a Link object that is hard-coded with its DrawnToScale property set to ‘False’ and its
LogicalLength property set to ‘0.0’. Entities will never actually enter, move across or exit a Connector, but will always instead
immediately do a node-to-node direct transfer across the link. Note that entities travel across a Connector one at a time,
which is different behavior than the standard Path link type. Entities waiting to enter a Connector are inserted into the
Connector's EntryQueue.
Connectors can be animated with Path Decorators, see the Animating Links page for more details.
882 / 1277
Simio Reference Guide
Path
A Path object is a link that may be used to define a pathway between two node locations where the travel time is
determined by the path length and a traveler's speed. Passing may or may not be allowed. Paths can be animated with Path
Decorators, see the Animating Links page for more details.
The Add-On Process Triggers allow additional logic to be specified when using the Path.
There are two categories of statistics that are generated for paths, including traveler statistics and flow statistics. The Data
Source 'Travelers' provides information related to the througput, flowtime and content on a particular path. The Data
Source section 'Flow' provides throughout information on the flow in and out of a particular path. Flow values are reported
only if at least one of them is greater than 0.
For more information, see Path - Discussion and Examples.
Listed below are the properties of the Path:
Property Valid Entry Description
Type Unidirectional, The type of traffic movement through this path.
Bidirectional
Traffic Direction First In Entry Queue, The rule used to direct traffic entry onto this bidirectional path.
Rule Match Desired Direction,
Prefer Desired Direction
Initial Desired None, Either, Forward, The initial desired direction of traffic on this bidirectional path.
Direction Reverse
Initial Traveler Expression The initial maximum number of travelers that may
Capacity simultaneously occupy this link.
Entry Ranking First In First Out, Last In The rule used to rank entry onto this path among competing
Rule First Out, Smallest Value entry requests.
First, Largest Value First
Entry Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Drawn To Scale True or False Specifies whether the path's drawn length in the Facility View is
the length to be used for the simulation logic.
Logical Length Double The path length to be used for the simulation logic.
Allow Passing True or False Indicates whether passing is allowed on this path. Passing
means that entities will not be blocked along the path, but
instead will pass each other if speeds vary.
Speed Limit Double The maximum speed at which an entity can travel along this
path.
Selection Expression The weight expression for this link when using the 'By Link
Weight Weight' rule to select an outbound link from a node. The
outbound link with the highest weight is selected.
On Entering Repeat Group, Optional state assignments when an entity is entering the Path
( State Assignments object.
Assignment)
883 / 1277
Before Exiting Repeat Group, Optional state assignments when an entity is ready to exit the
( State Assignments Path object.
Assignment)
Run Initialized Process Instance Name Occurs when the simulation model is initialized.
Add-On Process
Triggers
Run Ending Process Instance Name Occurs when the simulation run is ending.
Add-On Process
Entered Add-On Process Instance Name Occurs when a traveler's leading edge has entered this path.
Process Triggers
Trailing Edge Process Instance Name Occurs when a traveler's trailing edge has entered this path.
Entered Add-On
Process Triggers
Reached End Process Instance Name Occurs when a traveler's leading edge has reached the end of
Add-On Process this path.
Triggers
Exited Add-On Process Instance Name Occurs when a traveler has exited this path.
Process Triggers
Report Statistics True or False A Boolean property may be True or False and used in
expressions as a numeric 1.0 ( True) or 0.0 ( False) value.
884 / 1277
Simio Reference Guide
886 / 1277
Simio Reference Guide
TimePath
A TimePath object is a link that may be used to define a pathway between two node locations where the travel time is
user specified. TimePaths can be animated with Path Decorators, see the Animating Links page for more details.
The Add-On Process Triggers allow additional logic to be specified when using the TimePath.
There are two categories of statistics that are generated for time paths, including traveler statistics and flow statistics. The
Data Source 'Travelers' provides information related to the througput, flowtime and content on a particular time path. The
Data Source section 'Flow' provides throughout information on the flow in and out of a particular time path. Flow values
are reported only if at least one of them is greater than 0.
Listed below are the properties of the TimePath:
Property Valid Entry Description
Type Unidirectional, The type of traffic movement through this path.
Bidirectional
Traffic Direction First In Entry Queue, The rule used to direct traffic entry onto this bidirectional path.
Rule Match Desired Direction,
Prefer Desired Direction
Initial Desired None, Either, Forward, The initial desired direction of traffic on this bidirectional path.
Direction Reverse
Initial Traveler Expression The initial maximum number of travelers that may
Capacity simultaneously occupy this link.
Entry Ranking First In First Out, Last In The rule used to rank entry onto this path among competing
Rule First Out, Smallest Value entry requests.
First, Largest Value First
Entry Ranking Expression The expression used with a Smallest Value First or Largest
Expression Value First ranking rule.
Travel Time Expression The time required to travel the length of this path.
Selection Expression The weight expression for this link when using the 'By Link
Weight Weight' rule to select an outbound link from a node. The
outbound link with the highest weight is selected.
On Entering Repeat Group, Optional state assignments when an entity is entering the
( State Assignments TimePath object.
Assignment)
Before Exiting Repeat Group, Optional state assignments when an entity is ready to exit the
( State Assignments TimePath object.
Assignment)
Run Initialized Process Instance Name Occurs when the simulation run is initialized.
Add-On Process
Triggers
Run Ending Process Instance Name Occurs when the simulation run is ending.
Add-On Process
887 / 1277
Entered Add-On Process Instance Name Occurs when a traveler's leading edge has entered this path.
Process Triggers
Trailing Edge Process Instance Name Occurs when a traveler's trailing edge has entered this path.
Entered Add-On
Process Triggers
Reached End Process Instance Name Occurs when a traveler's leading edge has reached the end of
Add-On Process this path.
Triggers
Exited Add-On Process Instance Name Occurs when a traveler has exited this path.
Process Triggers
Report Statistics True or False A Boolean property may be True or False and used in
expressions as a numeric 1.0 ( True) or 0.0 ( False) value.
888 / 1277
Simio Reference Guide
Conveyor
Conveyor
A Conveyor is a link that can represent both accumulating and non-accumulating devices. The specific conveyor defined in
the Standard Object Library supports both fixed and variable spacing and accurately models the merging of entities of
various sizes on the conveyor. Conveyors can be animated with Path Decorators, see the Animating Links page for more
details.
A Conveyor may have failures, which are specified within the Reliability section of the Properties window. The Add-On
Process Triggers allow additional logic to be specified when using the Conveyor.
There are two categories of statistics that are generated for conveyors, including traveler statistics and flow statistics. The
Data Source 'Travelers' provides information related to the througput, flowtime and content on a particular conveyor. The
Data Source section 'Flow' provides throughout information on the flow in and out of a particular conveyor. Flow values are
reported only if at least one of them is greater than 0.
For more information, see Conveyor - Discussion and Examples.
Listed below are the properties of the Conveyor:
Property Valid Entry Description
Initial Expression The initial maximum number of travelers that may simultaneously occupy
Traveler this link.
Capacity
Entry Ranking First In First Out, The rule used to rank entry onto this conveyor among competing entry
Rule Last In First Out, requests.
Smallest Value
First, Largest
Value First
Entry Ranking Expression The expression used with a Smallest Value First or Largest Value First
Expression ranking rule.
Entity Any Location, The method for aligning engaged entities on this Conveyor object. If 'Any
Alignment Cell Location Location', then an entity can engage at any location on the conveyor. If 'Cell
Location', then the conveyor length has a discrete number of cell locations,
and the leading edge of an engaged entity must align with a cell boundry.
Cell Spacing Fixed Cell Size, The method used to specify the fixed interval spacing of cells on the link. If
Type Fixed Number 'Fixed Cell Size', then the cell size can be specified. If 'Fixed Number Cells',
Cells the number of cells is specified.
Cell Size Real The distance between cell boundries on the link.
Auto Align With First Entity, Indicates whether the position of the cell boundries on the link will be
Cells No automatically adjusted to align with the first entity that engages the link.
Using this option allows the cell boundries of each link on which an entity
travels to become synchronized with the first entity that passes through that
link.
Number Of Integer The number of discrete cell locations on this Conveyor object.
Cells
889 / 1277
Cells
Drawn To True or False Specifies whether the conveyor's drawn length in the Facility View is the
Scale length to be used for the simulation logic.
Logical Double The conveyor length to be used for the simulation logic.
Length
Accumulating True or False Specifies whether this Conveyor object is accumulating or non-
accumulating. If non-accumulating, then the entire conveyor stops if an
entity reaches the end and cannot exit. If accumulating, then entities are
allowed to continue moving and accumulate if progress is blocked.
Selection Expression The weight expression for this link when using the 'By Link Weight' rule to
Weight select an outbound link from a node. The outbound link with the highest
weight is selected.
Failure Type No Failures, Specifies whether this conveyor object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Event
Count Based
Event Name Event Instance The name of the event which determines when the next failure occurs.
Name
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample form a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
On Entering Repeat Group, Optional state assignments when an entity is entering the Conveyor object.
( State Assignments
Assignment)
Before Repeat Group, Optional state assignments when an entity is ready to exit the Conveyor
Exiting ( State Assignments object.
Assignment)
Parent Cost Cost Center The cost center that costs allocated to this object are rolled up into. If a
Center Name parent cost center is not explicitly specified, then costs will be automatically
rolled up into the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the system.
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
890 / 1277
Entered Add- Process Instance Occurs when a traveler's leading edge has entered this conveyor.
On Process Name
Triggers
Trailing Edge Process Instance Occurs when a traveler's trailing edge has entered this conveyor.
Entered Add- Name
On Process
Triggers
Reached End Process Instance Occurs when a traveler's leading edge has reached the end of this conveyor.
Add-On Name
Process
Triggers
Exited Add- Process Instance Occurs when a traveler has exited this conveyor.
On Process Name
Triggers
Failed Add- Process Instance Occurs when this object has failed.
On Process Name
Triggers
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
891 / 1277
Simio Reference Guide
NumberTravelers.Accumulated
NumberTravelers.Accumulated.Minimum
NumberTravelers.Accumulated.Maximum
NumberTravelers.Accumulated.Average
The Conveyor's Accumulating property indicates that if the entity at the end of the conveyor is stopped, then the conveyor
itself (i.e., everybody else) should stop. If the Accumulating property of the standard library Conveyor object is set to ‘False’,
the NumberTravelers.Accumulated function may still be positive. For instance, if an entity is stopped at the end of the
conveyor, it will be considered Accumulated. See the definition of Accumulation in the Link section of the Object Types
page.
Examples
Example 1
Conveyor object with Accumulating property set to True and then False. When Server1 is processing an entity, all entities on
the conveyor will continue moving to the server with an accumulating conveyor. If the conveyor is non-accumulating, the
conveyor stops and all entities keep their spacing when the server is busy. Both scenarios assume "0" input buffer capacity
for Server1.
Example 2
Conveyor object with Entity Alignment property set to 'Cell Location'. The example below shows one conveyor with
Number of Cells set to '2' and the other with Number of Cells set to '3'.
892 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
893 / 1277
Simio Reference Guide
WorkStation - DEPRECATED
In Simio, a Workstation represents a capacitated resource with optional constrained input and output buffers.
A Workstation is modeled as a sequence of three Activities: Setup, Processing, and Teardown. The sequence of Activities is
referred to as an Operation. The Setup Time can be Specific, Change-Dependent, or Sequence-Dependent. A Specific
time can be a constant or be product/order dependent by referencing a table. Change/Sequence dependent times can be
based on any characteristic of the product (e.g. size or color). The entity that is processed through the workstation
represents a production lot. The data for a production lot is typically held in data tables, and then referenced by the entity.
The next production lot to be processed can be selected based on both a static ranking and a dynamic selection process.
The workstation may have a fixed capacity, or follow a capacity schedule. However, take note that the standard
Workstation object only processes one job at a time. In other words, it has a fixed capacity of 1.
The Operation Quantity specifies the number of “items” in the production lot that is represented by each arriving entity. This
value can be a constant or be product/order dependent by referencing a table. The lot can be processed as a single
production unit, or the lot can be broken into a sequence of batches that are processed one at a time until the entire lot has
been produced. For example a lot of 1000 units may be processed in batches of 100 at a time. Note that a single setup and
teardown activity is performed, but 10 separate batches of 100 are sequentially processed through the processing activity.
Multiple materials or a bill of material may be required to start the processing of each batch. Additionally, multiple
materials or a bill of material may be produced at the end of each batch processing. A batch of produced material may
also have a transfer time before it becomes available by other workstations. These materials can be specified through the
Materials repeating property editor. This makes it easy to model situations involving intermediate transfer batching.
Typically, a bill of materials is used for consumption and a material is produced, however Simio also allows for a bill of
materials to be produced, to model cases such as disassembly.
The Workstation object is considered to be a primary resource that is required during the entire operation: i.e. setup, the
processing of all batches, and teardown. In addition, any number of secondary resources may be required and held by each
batch across one or more of the three activities. Secondary resources can be specific resources or selected based on rules
from a list of resources.
A production lot may have a maximum make span that limits when it can be started based on the availability of the
primary resource. The maximum make span may be a constant or order/product dependent by referencing a table. The
make span check verifies that that the primary resource is available to complete the operation within the maximum make
span. For example a lot that has a maximum make span of 3 hours will not start 2 hours before an off-shift period of 8
hours begins, because it’s make span would exceed its maximum value. However, the make span check does not guarantee
that material and/or secondary resources will be available at the needed times. Hence a production lot that passes the
make span check may still exceed it’s make span if delays in material/secondary resources occur.
The Balking and Reneging Options page provides additional information and examples on buffer capacities, balking and
reneging.
A Workstation may have failures, which are specified within the Reliability section of the Properties window. State
assignments can be made on entering, before exiting, on balking and on reneging the Workstation. The Add-On Process
Triggers allow additional logic to be specified when using the Workstation.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
WorkStation.
For more information, see Workstation - Discussion and Examples.
Listed below are the properties of the Workstation:
Property Valid Entry Description
Capacity Type Fixed, Work The method used to specify the capacity of this
Schedule Workstation object. The capacity is fixed at 1 and
cannot be changed.
Work Schedule Work Schedule The capacity work schedule that this Workstation object
Name follows. *Note* Currently the GUI allows a user to add a
Work Schedule with capacity greater than 1 to a
Workstation, however because the standard
Workstation object can only process one job at a time,
if the schedule has a capacity greater than 1, it is simply
894 / 1277
if the schedule has a capacity greater than 1, it is simply
interpreted as 1 by the Workstation.
Work Day Exceptions Repeat Group, Work Work Day schedule exceptions specific to this resource.
Day Exceptions
Work Period Exceptions Repeat Group, Work Work Period schedule exceptions specific to this
Period Exceptions resource.
Ranking Rule First In First Out, Last The static ranking rule used to order entities waiting to
In First Out, Smallest be allocated capacity of this Workstation object.
Value First, Largest
Value First
Ranking Expression Expression The expression used with a Smallest Value First or
Largest Value First ranking rule.
Dynamic Selection Rule None, or one of Indicates whether this Workstation object dynamically
several Dynamic selects the next entity to work on when the workstation
Selection Rules is ready to process another job, instead of only using
the ranking rule to determine processing order.
TransferIn Time Expression The time required to transfer an entity into this
Workstation object. This property may be specified
using a random sample from a distribution.
Operation Quantity Expression The item quantity assumed for each operation
performed at this Workstation. This property may be
used with Processing Batch Size property to perform an
operation's processing activity in a single batch or a set
of sequential batches.
Setup Time Type Specific, Change The method used for specifying the setup time of an
Dependent, operation.
Sequence
Dependent
Setup Time Expression The setup time required at this Workstation object
before processing an entity. This property may be
specified using a random sample from a distribution.
Operation Attribute Expression The expression evaluated for each operation that is
used to determine the change-dependent or sequence
dependent setup time. Note that, for a sequence
dependent time, the operation attribute expression is
evaluated as a zero-based index into the Changeover
Matrix string list for which 'from-to' pairs are defined.
For example, an operation attribute of '0' means that
the entity's comparison value is the first value in the
changeover matrix string list. Referencing a list property
on the processing entity as the operation attribute is
particularly useful for modeling sequence-dependent
setup times.
Setup Time If Same Expression The setup time if there has not been a change in the
Operation Attribute from the previous operation to the
current opeartion. This property may be specified using
a random sample from a distribution.
Setup Time If Different Expression The setup time if there has been a change in the
Operation Attribute from the previous operation to the
895 / 1277
Operation Attribute from the previous operation to the
current opeartion. This property may be specified using
a random sample from a distribution.
ChangeOver Matrix Changeover Matrix The changeover matrix that defines the operation's
Instance setup time dependent on the attribute change from the
previous operation to the current operation.
Processing Batch Size Expression Optional batch size used instead of the Operation
Quantity to perform the processing activity as a set of
sequential batches. Must be less than or equal to the
operation quantity. If not specified, then the batch size
is assumed to be the operation quantity and the
processing activity is performed in a single batch.
Processing Time Expression The time required to process an individual batch. This
property may be specified using a random sample from
a distribution.
Teardown Time Expression The teardown time required for an operation after
completing the processing of all batches. This property
may be specified using a random sample from a
distribution.
Input Buffer Capacity Integer >= 0 The number of discrete entities that can be held in this
Workstation object's input buffer.
Balk Decision Type ( Input None, Blocked, The method used by an entity to decide whether to
Buffer) Conditional, balk at entering the buffer.
Probabilistic If the decision type is 'Blocked', then an entity
attempting to enter the buffer will balk if the buffer is
full rather than be blocked. Or, if a zero capacity buffer,
the entity will balk if its attempt to transfer directly into
or out of the object is blocked.
Balk Node Name ( Input Buffer) Node object Facility node location to send an entity that has balked
reference at entering the buffer.
Output Buffer Capacity Integer >= 0 The number of discrete entities that can be held in this
Workstation object's output buffer.
Balk Decision Type ( Output None, Blocked, The method used by an entity to decide whether to
Buffer) Conditional, balk at entering the buffer.
Probabilistic If the decision type is 'Blocked', then an entity
attempting to enter the buffer will balk if the buffer is
full rather than be blocked. Or, if a zero capacity buffer,
the entity will balk if its attempt to transfer directly into
or out of the object is blocked.
Balk Node Name ( Output Node object Facility node location to send an entity that has balked
Buffer) reference at entering the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause
entities to abandon waiting in the buffer.
896 / 1277
entities to abandon waiting in the buffer.
Wait Duration.Renege Triggers Expression,vspecified The tolerable wait duration until a renege decision by
if the Trigger Type is an entity waiting in the buffer.
'Time Based'.
Triggering Event Name.Renege Event Reference, The name of the event whose occurrence will trigger a
Triggers specified if the renege decision by an entity waiting in the buffer.
Trigger Type is 'Event
Based'.
Renege Decision Type .Renege Always, Conditional, The method used by an entity when the trigger occurs
Triggers Probabilistic to decide whether to abandon waiting in the buffer.
Renege Node Name.Renege Node object Facility node location to send a reneging entity.
Triggers reference
Trigger Start Boundary.Renege Entered, Ended Indicates when the trigger becomes active for an entity
Triggers Transfer In occupying the buffer. Can be either immediately when
the entity has entered the buffer or, alternatively, not
until its transfer into the buffer has been ended (e.g.,
after a transfer-in time or any other entry related logic).
Failure Type No Failures, Specifies whether this Workstation object has failures
Calendar Time that affect the object's availability, and the method used
Based, Processing to trigger the failure occurrences.
Count Based, Event
Count Based,
Processing Time
Based
Event Name Event Instance Name The name of the event which determines when the next
failure occurs.
Uptime Between Failures Expression The uptime between failure occurrences. This property
may be specified using a random sample form a
distribution.
Count Between Failures Expression The count between failure occurrences. This property
may be specified using a random sample from a
distribution.
Time To Repair Expression The time required to repair a failure when one occurs.
This property may be specified using a random sample
from a distribution.
897 / 1277
On Entering ( State Assignments) Repeat Group, Optional state assignments when an entity is entering
Assignments the Workstation object.
Before Exiting ( State Repeat Group, Optional state assignments when an entity is ready to
assignments) Assignments exit the Workstation object.
On Balking ( State Assignments) Repeat Group, Optional state assignments when an entity is balking at
Assignments entering an input or output buffer of the object.
On Reneging ( State Repeat Group, Optional state assignments when an entity is reneging
Assignments) Assignments from an input or output buffer of the object.
Assign If.State Assignments Expression Condition required to perform the assignment. Used
only with On Balking and On Reneging assignments.
State Variable Name.State State Variable Name Name of the state variable that will be assigned a new
Assignments or Reference value.
Secondary Resources Repeating Property The secondary resources that are required for activities
at this Workstation object.
SecondaryResources.Object Specific, From List The method for specifying the object(s) required as a
Type secondary resource.
SecondaryResources.Object Object Instance The name of the object type that is required.
Name Name
SecondaryResources.Object List Object List Instance The name of the object list from which one or more
Name Name objects will be selected.
SecondaryResources.Activity All, Specific, All But The range of activities that the secondary resource is
Range Specific required for.
SecondaryResources.Activity Setup, Processing, The specific activity at this Workstation object that the
Teardown secondary resource either is or is not required for.
SecondaryResources.Destination Node Instance The name of the specific node location that the seized
Node Name resource(s) will be requested to move to.
898 / 1277
SecondaryResources.Units Per Expression truncated The number of capacity units that are required per
Object to integer object.
( SecondaryResources) Selection Smallest Distance, The goal used to rank object preference when multiple
Goal Largest Distance, candidates are available.
Preferred Order,
Smallest Value,
Largest Value
Materials.Consumption Type Material, Bill Of Indicates whether to consume a single material or bill
Materials of materials. The material consumption will be required
to start the processing time of a batch (i.e., is a material
consumption requirement per batch).
Materials.Production Type Material, Bill Of Indicates whether to produce a single material or bill of
Materials materials. The material production will occur after
finishing the processing time of a batch (i.e., is a
material production result per batch).
Materials.Material Name Material Instance The name of the material which is to be either
Name specifically consumed or produced, or whose Bill of
Materials is to be consumed or produced.
Materials.Lot ID String Optional string value indicating the lot identifier of the
consumed or produced material.
Materials.Produced Delay Time Expression An optional delay time after finishing the processing
time of a batch until the produced material is actually
added to the system.
899 / 1277
Maximum Makespan Expression The maximum length of the time allowed for this
operation, from the start of the setup activity until the
completion of the teardown activity at this Workstation
object. An operation cannot be started unless its
estimated makespan is less than this Maximum value
minus the Makespan Buffer Time. Note that, if the
Workstation object is following a Work Schedule, then
'off-shift' periods in the schedule will be factored into
and extend the estimated makespan time.
Makespan Buffer Time Expression An operation cannot be started unless its estimated
makespan is less than the Maximum Makespan minus
this Buffer Time.
Parent Cost Center Cost Center Name The cost center that costs allocated to this object are
rolled up into. If a parent cost center is not explicitly
specified, then costs will be automatically rolled up into
the parent object containing this object.
Capital Cost Expression The initial one-time setup cost to add this object to the
system.
Cost Per Use ( Input Buffer Expression The cost to hold an entity in this buffer irrespective of
Costs) the waiting time.
Holding Cost Rate ( Input Buffer Expression The cost per unit time to hold an entity in this buffer.
Costs)
Cost Per Use ( Output Buffer Expression The cost to hold an entity in this buffer irrespective of
Costs) the waiting time.
Holding Cost Rate ( Output Expression The cost per unit time to hold an entity in this buffer.
Buffer Costs)
Idle Cost Rate ( Resource Costs) Expression The cost per unit time charged, or accrued, to the cost
of the workstation during periods that the workstation
is scheduled but unutilized.
Cost Per Use ( Resource Costs) Expression The one-time cost that is accrued each time the
workstation is used, regardless of the usage duration.
This cost will be charged to the costt of the entity using
the workstation.
Setup Cost Rate ( Resource Expression The cost per unit time to use the workstation for setup
Costs) activity. This cost will be charged to the cost of the
entity using the workstation.
Processing Cost Rate ( Resource Expression The cost per unit time to use the workstation for
Costs) processing activity. This cost will be charged tot the
cost of the entity using the workstation.
Teardown Cost Rate ( Resource Expression The cost per unit time to use the workstation for
Costs) teardown activity. This cost will be charged to the costt
of the entity using the workstation.
Run Initialized Add-On Process Process Instance Occurs when the simulation run is initialized.
Name
Run Ending Add-On Process Process Instance Occurs when the simulation run is ending.
900 / 1277
Name
Entered Add-On Process Process Instance Occurs immediately after an entity as entered this
Name object and is about to start TransferIn Time.
Setting Up Add-On Process Process Instance Occurs when an operation's setup time is about to
Name begin.
Finished SetUp Add-On Process Process Instance Occurs when an operation's setup time is finished and
Name the release of secondary resources due to finish setup is
about to occur.
Processing Batch Add-On Process Instance Occurs when the processing time for a batch is about to
Process Name begin.
Processed Batch Add-On Process Instance Occurs when the processing time for a batch has
Process Name completed and the material production or release of
secondary resources due to finish the batch is about to
occur.
Tearing Down Add-On Process Process Instance Occurs when an operation's teardown time is about to
Name begin.
Finished Teardown Add-On Process Instance Occurs when an operation's teardown time is finished
Process Name and the release of secondary resources due to finish
teardown is about to occur.
Finished Good Operation Add- Process Instance Occurs when an operation has finished and the
On Process Name makespan of the operation has satisfied the Maximum
Makespan condition.
Finished Bad Operation Add- Process Instance Occurs when an operation has finished and the
On Process Name makespan of the operation has exceeded the Maximum
Makespan condition.
Exited Add-On Process Process Instance Occurs when an entity as exited this object.
Name
Failed Add-On Process Process Instance Occurs when this object has failed.
Name
Repaired Add-On Process Process Instance Occurs when a failure is repaired at this object.
Name
Evaluating Seize Request Add- Process Instance Occurs when this Workstation object is evaluating
On Process Triggers Name whether to accept or reject a request to seize capacity
of the workstation. In the executed decision process,
assigning a value of less than or equal to '0' to the
executing token's ReturnValue state ( Token.ReturnValue)
indicates that the seize request is rejected.
On Shift Add-On Process Process Instance Occurs when the object goes On Shift because of its
Name specified Work Schedule.
Off Shift Add-On Process Process Instance Occurs when the object goes Off Shift because of its
Name specified Work Schedule.
Log Resource Usage True or False Indicates whether usage related events for this resource
are to be automatically logged. Go to Results -> Logs
to view logged data.
901 / 1277
Transfer-In Constraints Disable, Default, Indicates the type of constraints used to determine
Custom Condition whether entities can transfer into this fixed object via
external input nodes. If specified as 'Default', then the
Can Transfer In & Out of Objects property setting for
the entity type will determine whether an entity can
perform a transfer into the object.
Transfer-Out Constraints Disable, Default, Indicates the type of constraints used to determine
Custom Condition whether entities can transfer out of this fixed object via
external output nodes. If specified as 'Default', then the
Can Transfer In & Out of Objects property setting for
the entity type will determine whether an entity can
perform a transfer out of the object.
Transfer-Out Condition Expression The condition required to allow an entity to transfer out
of this fixed object via an external output node.
Expected Setup Time Expression The expression used to estimate an expected setup
Expression time for an entity at this fixed object.
Expected Operation Time Expression The expression used to estimate an expected operation
Expression time for an entity at this fixed object.
Report Statistics True or False A Boolean property may be True or False and used in
expressions as a numeric 1.0 ( True) or 0.0 ( False) value.
902 / 1277
Simio Reference Guide
Consuming Material
903 / 1277
Primary and Secondary Resources
The Workstation object is considered to be a primary resource that is required during the entire operation: i.e. setup,
the processing of all batches, and teardown. In addition, any number of secondary resources may be required and
held by each batch across one or more of the three activities. Secondary resources can be specific resources or
selected based on rules from a list of resources. A secondary resource is added through the Secondary Resource
property on the Workstation.
904 / 1277
In this example below, a Workstation is the primary resource and the secondary resource is an object named
Resource1. Notice the Activity Range and Activity properties. Resource1 is only seized for the Setup and Teardown
activities, not the Processing activity.
905 / 1277
Sequence Dependent Setup Time
The Setup Time for each entity arriving to the Workstation can be set to a value that is determined by the
combination of an attribute on the previous entity and the same attribute on the current entity (i.e. Setup times for
From-To pairs are defined in a ChangeOverMatrix). The Setup Time Type property should be set to 'Sequence
Dependent'. The Operation Attribute is evaluated as a zero based index into the Changeover Matrix string list. An
Operation Attribute value of '0' means that the entity's comparison value is the first in the String List. The following
example of a Sequence Dependent Setup time uses a List Property to compare sequential operations and determine
which setup time should be used. The ModelEntity object has a String List with three values; Small, Medium and
Large. Each ModelEntity has a different value for the ListProperty. Since the Operation Attribute is set to
ModelEntity.ListProperty1, this is what is used to determine the Setup Time from the ChangeOver Matrix.
907 / 1277
Simio Reference Guide
Flow Library
Flow Object Library
Simio has developed a Flow Library that currently includes 10 pre-built object definitions that can be used to model flow
processing systems.
FlowSink Fixed Destroys flow entities representing quantities of fluids or other mass that have
finished processing in the model.
Tank Fixed Models a volume or weight capacity constrained location for holding entities
representing quantities of fluids or other mass.
ContainerEntity Entity Models a type of simple moveable container (e.g., barrels or totes) for carrying
flow entities representing quantities of fluids or other mass.
Filler Fixed Object used to model a process that fills container entities with flow entities
representing quantities of fluids or other mass. The filling flow rate of the Filler is
regulated by its 'FlowInput' flow node. Container entities enter the Filler through
its 'ContainerInput' basic node and exit the Filler from its 'Output' transfer node.
Emptier Fixed Object used to model a process that empties the flow contents of container
entities. The emptying flow rate of the Emptier is regulated by its 'FlowOutput'
flow node. Container entities enter the Emptier through its 'Input' basic node and
exit the emptier from its 'ContainerOutput' transfer node.
ItemToFlowConverter Fixed Object used to model a process that converts entities representing discrete items
into flow entities representing quantities of fluids or other mass. The flow rate out
of the ItemToFlowConverter is regulated by its 'Output' flow node. Discrete item
entities enter the object through its 'Input' basic node and are then processed into
flow.
FlowToItemConverter Fixed Object used to model a process that converts flow entities representing quantities
of fluids or other mass into entities representing discrete items. The flow rate into
the FlowToItemConverter is regulated by its 'Input' flow node. Discrete item
entities exit the object from its 'Output' transfer node.
FlowNode Node Node designed to regulate the flow of entities representing quantities of fluid or
other mass.
908 / 1277
Simio Reference Guide
FlowSource
The FlowSource object may be used to generate a flow of fluid or other mass of a specified entity type. The source of
supply is by default considered to be infinite, but alternatively may be configure to run out if a stopping condition is met.
The flow rate out of the FlowSource is regulated by its 'Output' flow node.
Please refer to the SimBit FlowConcepts for models using the FlowSource.
Listed below are the properties of the FlowSource:
Valid
Property Description
Entry
Entity Type Entity The entity type generated by the flow source.
Instance
Name
Maximum Expression The maximum volume to be generated by and flow out of this FlowSource object.
Volume Out If this limit is reached, then the FlowSource object will stop generating flow.
Maximum Expression The maximum weight to be generated by and flow out of this FlowSource object.
Weight Flow If this limit is reached, then the FlowSource object will stop generating flow.
Out
Maximum Expression The maximum time from the beginning of the simulation run after which this
Time FlowSource object will stop generating flow.
Stop Event Event The name of the event which will cause this FlowSource object to stop generating
Name Name flow.
Report True or Specifies if statitsics are to be automatically reported for this object.
Statistics False
909 / 1277
Simio Reference Guide
FlowSink
The FlowSink object may be used to destroy the flow of entities representing quantities of fluids or other mass that have
finished processing in the model.
The flow rate into the FlowSink is regulated by its 'Input' flow node.
Please refer to the SimBit FlowConcepts for models using the FlowSink.
Listed below are the properties of the FlowSink:
Property Valid Entry Description
Run Initialized Add-On Process Instance Occurs when the simulation run is initialized.
Process Name
Run Ending Add-On Process Instance Occurs when the simulation run is ending.
Process Name
Report Statistics True or False Specifies if statitsics are to be automatically reported for this
object.
910 / 1277
Simio Reference Guide
Tank
The Tank object may be used to model a volume or weight capacity constrained location for holding entities representing
quantities of fluids or other mass.
The flow rate into the Tank is regulated by its 'Input' flow node. The flow rate out of the tank is regulated by its 'Output'
flow node.
The tank may include Initial Contents of various entity types. Additionally, the Auto Refill Mode allows the specification of
when, if at all, the tank will be automatically refilled. The tank may also be automatically emptied or cleaned upon
particular event triggers and conditions. These are specified in the Purge Contents Triggers or Clean In-Place Triggers
repeating properties.
State assignments can be made when the Tank reaches various levels when rising and falling. Additionally, the Add-On
Process Triggers allow additional logic to be specified when using the Tank.
Please refer to the FillingEmpyingTank and TransferringFromOneTankToAnother models within the SimBit FlowConcepts,
as well as the InfectionPropagationUsingContinuousAndFlow SimBit for Tank examples.
Listed below are the properties of the Tank:
Property Valid Entry Description
Capacity Unit Volume, Weight The unit type to be used for specifying the tank's physical capacity.
Type
Initial Expression The initial maximum physical volume that can be stored in this tank.
Volume
Capacity
Initial Weight Expression The initial maximum physical weight that can be stored in this tank.
Capacity
Initial Repeat Group, The contents present in the tank when the system is initialized.
Contents Initial Contents
Unit Type Volume, Weight The unit type to be used for specifying the initial content quantity.
( Initial
Contents)
Auto Refill No Automatic Indicates whether the tank has automatic refills, and if so, whether a refill is
Mode Refills, Refill When triggered when the tank becomes empty, when its contents level has falledn
Empty, Refill below the 'Low' mark, or when some other specified triggering event occurs.
When Low, Refill The tank will be refilled to the maximum level determined by its physical
When Specific volume or weight capacity.
Event
Refill Valid Event Name The name of the event that will indicate when the tank is to be refilled.
Triggering
Event Name
911 / 1277
Delay Time Expression The delay time after a refill triggering event before the refill action is actually
Until Refill performed.
Refill Entity Entity Instance The entity type that the tank will be refilled with.
Type Name
Purge Repeat Group, Optional event-driven triggers that will immediately remove and dispose of
Contents Triggers all contents in the tank, putting the tank into an empty state.
Triggers
Triggering Valid Event Name The name of the event whose occurrence will indicate that all contents from
Event Name the tank are to be immediately removed and disposed of, putting the tank
( Purge into an empty state.
Contents
Triggers)
Condition Expression Optional condition to be evaluated whenever the triggering event occurs,
( Purge and which must also be true to purge the tank's contents.
Contents
Triggers)
Clean In- Repeat Group, Optional event-driven triggers that will immediately remove and dispose of
Place Triggers any contents held in the tank and then suspend new inflow until a specified
Triggers cleaning time has elapsed.
Triggering Valid Event Name The name of the event whose occurrence will indicate that the tank is to be
Event Name cleaned.
( Clean In-
Place
Triggers)
Condition Expression Optional condition to be evaluated whenever the triggering event occurs,
( Clean In- and which must also be true to trigger a cleaning operation.
Place
Triggers)
Cleaning Specific, The method used to specify the time required to clean the tank.
Time Type Sequence
( Clean In- Dependent
Place
Triggers)
Operation Expression The attribute expression to be evaluated for each cleaning operation and
Attribute whose 'from/to' value changes will determine the sequence-dependent times
( Clean In- required to clean the tank.
Place
Triggers)
Initial Expression The time required to clean the tank if the first cleaning operation or if the
Cleaning changeover state stored for the previous operation has been cleared.
Time ( Clean
In-Place
Triggers)
Changeover Changeover The name of the changeover matrix that defines the sequence-dependent
912 / 1277
Matrix ( Clean Matrix Name cleaning times.
In-Place
Triggers)
Low-Low Expression The contents level value to be used as the tank's 'Low-Low' mark.
Mark
Low Mark Expression The contents level value to be used as the tank's 'Low' mark.
Mid Mark Expression The contents level value to be used as the tank's 'Mid' mark.
High Mark Expression The contents level value to be used as the tank's 'High' mark.
High-High Expression The contents level value to be used as the tank's 'High-High' mark.
Mark
On New Repeat Group, Optional state assignments when a new inflow is starting to enter this Tank
Inflow Assignments object, which may be either the first inflow into an empty tank or a change in
Entering inflow entity type into a partially full tank.
( State
Assignments)
Above Low- Repeat Group, Optional state assignments when the contents level of the tank is rising
Low Mark Assignments above the tank's 'Low-Low' mark.
( On Tank
Level Rising
State
Assignments)
Above Low Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'Low' mark.
Tank Level
Rising State
Assignments)
Above Mid Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'Mid' mark.
Tank Level
Rising State
Assignments)
Above High Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'High' mark.
Tank Level
Rising State
Assignments)
Above High- Repeat Group, Optional state assignments when the contents level of the tank is rising
High Mark Assignments above the tank's 'High-High' mark.
( On Tank
Level Rising
State
Assignments)
Tank Full ( On Repeat Group, Optional state assignments when the contents level of the tank has reached
Tank Level Assignments the tank's maximum volume or weight capacity.
Rising State
Assignments)
Below High- Repeat Group, Optional state assignments when the contents level of the tank is rising
High Mark Assignments above the tank's 'High-High' mark. 913 / 1277
High Mark Assignments above the tank's 'High-High' mark.
( On Tank
Level Falling
State
Assignments)
Below High Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'High' mark.
Tank Level
Falling State
Assignments)
Above Mid Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'Mid' mark.
Tank Level
Falling State
Assignments)
Below Low Repeat Group, Optional state assignments when the contents level of the tank is rising
Mark ( On Assignments above the tank's 'Low' mark.
Tank Level
Falling State
Assignments)
Below Low- Repeat Group, Optional state assignments when the contents level of the tank is rising
Low Mark Assignments above the tank's 'Low-Low' mark.
( On Tank
Level Falling
State
Assignments)
Tank Empty Repeat Group, Optional state assignments when the contents level of the tank has fallen to
( On Tank Assignments zero and the tank has thus become empty.
Level Falling
State
Assignments)
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
New Inflow Process Instance Occurs when a new inflow is starting to enter this Tank object, which may be
Entering Name either the first inflow into an empty tank or a change in the inflow entity type
Add-On into a partially full tank.
Process Note than a token executing this add-on process will be associated with the
flow entity that is entering the tank. Also, if the logic of the specified process
includes any delays, then the inflow rate into the tank will be halted until the
process has completed.
Tank Level Process Instance Occurs when the contents level of the tank is rising above the tank's 'Low-
Rising - Name Low' mark.
Above Low-
Low Mark
Add-On
Process
914 / 1277
Tank Level Process Instance Occurs when the contents level of the tank is rising above the tank's 'Low'
Rising - Name mark.
Above Low
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is rising above the tank's 'Mid'
Rising - Name mark.
Above Mid
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is rising above the tank's 'High'
Rising - Name mark.
Above High
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is rising above the tank's 'High-
Rising - Name High' mark.
Above High-
High Mark
Add-On
Process
Tank Level Process Instance Occurs when the contents level of the tank has reached the tank's maximum
Rising - Tank Name volume or weight capacity.
Full Add-On
Process
Tank Level Process Instance Occurs when the contents level of the tank is falling below the tank's 'High-
Falling - Name High' mark.
Below High-
High Mark
Add-On
Process
Tank Level Process Instance Occurs when the contents level of the tank is falling below the tank's 'High'
Falling - Name mark.
Below High
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is falling below the tank's 'Mid'
Falling - Name mark.
Below Mid
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is falling below the tank's 'Low'
Falling - Name mark.
Below Low
Mark Add-
On Process
Tank Level Process Instance Occurs when the contents level of the tank is falling below the tank's 'Low-
Falling - Name Low' mark.
Below Low-
Low Mark
Add-On
915 / 1277
Process
Tank Level Process Instance Occurs when the contents level of the tank has fallen to zero and the tank has
Falling - Tank Name thus become empty.
Empty Add-
On Process
Contents First In First Out, The static rule used to rank flow entities located in this tank's
Ranking Rule Last In First Out, 'StorageTank.Contents' queue.
Smallest value
First, Largest Value
First
Report True or False Specifies if statitsics are to be automatically reported for this object.
Statistics
916 / 1277
Simio Reference Guide
ContainerEntity
The ContainerEntity object may be used to model a type of moveable container (e.g., barrels or totes) for carrying flow
entities representing quantities of fluids or other mass.
The ContainerEntity provides an easy way to define a discrete entity type that represents a type of container for carrying
flow. In terms of object design, this object is essentially a simplified combination of the ModelEntity and Tank objects.
State assignments can be made when the ContainerEntity becomes full or empty. Additionally, the Add-On Process
Triggers allow additional logic to be specified when using the ContainerEntity.
Listed below are the properties of the ContainerEntity:
Property Valid Entry Description
Capacity Volume, The unit type to be used for specifying the physical capacity of a container entity
Unit Type Weight of this type.
Initial Expression The initial maximum physical volume that can be stored in a container entity of
Volume this type.
Capacity
Initial Expression The initial maximum physical weight that can be stored in a container entity of this
Weight type.
Capacity
Initial Repeat The intial contents present in a container entity of this type when the entity is
Contents Group created.
Unit Type Volume, The unit type to be used for specifying the initial content quantity.
( Initial Weight
Contents)
Initial Expression The initial desired speed value for entities of this type.
Desired
Speed
Initial Network The initial network of links used by entities of this type to travel between node
Network Element locations. This includes the default 'Global' network and 'No Network
Property ( FreeSpace)'.
Network Exit & Re- When traveling on a network, the default method used by objects of this type to
Turnaround enter, Rotate turn around at a node in order to move in the opposite direction on a bidirectional
Method in Place, link. The 'Turnaround Method' property of a Network element may also be used
Reverse to override this default on a network-by-network basis.
Free Space Direct To The behavior used to steer an entity of this type when traveling in free space to a
Steering Destination, destination.
Behavior Follow 'Direct To Destination' will steer an entity in a straight line to its destination.
Network Path 917 / 1277
Network Path 'Follow Network Path If Possible' will prefer to steer an entity along a path
If Possible following its currently assigned network, staying within the boundries of the drawn
path width. However, if no followable network path exists to the entity's
destination then the entity will be steered in a straight line. Note: In order to use
this steering behavior, make sure the entity's travel mode is set to 'Free Space
Only'.
Update Expression The time interval between updates checking an entity's adherence to the network
Interval path.
Avoid True or False Indicates whether the steering behavior will attempt to avoid collisions with other
Collisions entities that are following the same network path.
Initial Expression The initial priority value for entities of this type.
Priority
Initial Sequence An initial destination sequence that entities of this type use for routing purposes.
Sequence Property
On Container Repeat Optional state assignments when the contents level of a container entity of this
Full ( State Group, type has reached the container's maximum volume or weight capacity.
Assignments) Assignments
On Container Repeat Optional state assignments when the contents level of a container entity of this
Empty ( State Group, type has fallen to zero and the container has thus become empty.
Assignments) Assignments
Container Process Occurs when the contents level of a container entity of this type has reached the
Full Add-On Instance container's maximum volume or weight capacity.
Process Name
Container Process Occurs when the contents of a container entity of this type has fallen to zero and
Empty Add- Instance the container has thus become empty.
On Process Name
Initial Numeric The initial number of objects of this type in the system at the beginning of the
Number in simulation run. Entities are initially located in free-space at the object instance
System location.
Maximum Numeric The maximum number of objects of this type that can simultaneously be in the
Number in system. If this limit is exceeded then a runtime error is generated.
System
Destroyable True or False Specifies whether objects of this type can be destroyed using the Destroy Step.
Can Transfer True or False Indicates whether entities of this type are by default allowed to transfer into and
In & Out of out of fixed objects via those object's external input / output nodes.
Objects
Due Date Expression The expression used to return a 'due date' value for an entity of this type.
Expression
918 / 1277
Gantt True or False An expression evaluated at run time to determine if the entity should appear in the
Visibility Entity Gantt window.
Contents First In First The static rule to rank flow entities located in the 'FlowContainer.Contents' queue
Ranking Rule Out, Last In of a container entity of this type.
First Out,
Smallest
Value First,
Largest Value
First
Contents Expression The expression used with a 'SmallestValueFirst' or 'LargestValueFirst' ranking rule.
Ranking
Expression
Current Size State The optional name of a state variable that indexes into the object's associated
Index Variable symbol list, and whose value will automatically resize the object to match the size
of the indexed symbol.
Volume Numeric The initial logical volume of the object in cubic meters. If blank, the initial logical
volume will be the implicit volume defined by the Size. At runtime, the ratio
between the logical volume and the Size implicit volume will be kept constant.
Weight Numeric The weight density of an entity of this type in kilograms per cubic meter. The
Density default value for density is 1 kilogram per cubic meter. At runtime, a change to
Weight or Volume will make a change in the other to make sure Density remains
constant.
Current Expression An expression that returns a value for the index in the list for the current symbol to
Symbol display.
Index
Random True or False If true, each new object will be randomly assigned a symbol from the associated
Symbol list of symbols.
Current Expression An expression that returns the numeric index or string name of the current
Animation animation of the active symbol.
Index If the expression is not defined, returns an index that is out of the range of the list
of animations, or a name of an animation that does not exist, Simio will fallback to
using the action specified in the Default Animation Action.
Default Expression Indicates if and how Simio will animate objects that don't have an explicit
Animation animation set via the Current Animation Index expression.
Action None indicates no action will be taken. Moving indicates actively moving entities
will be animated with any available forward movement animations from the active
symbol. MovingandIdle indicates actively moving entity and idle objects will be
animated with any available forward movement or idle animations from the active
symbol.
919 / 1277
Simio Reference Guide
Filler
The Filler object may be used to fill any type of entity that has one or more container locations, including an entity type
defined using the ContainerEntity object. The properties, structure, and process logic design of the Filler is very similar to a
Server from the Standard Library. The Filler has InputBuffer, Processing, and OutputBuffer station locations, all of which are
animated within the Facility window. Container entities transfer through those stations in sequence, entering the Filler using
its ‘ContainerInput’ BasicNode and exiting the Filler using its ‘Output’ TransferNode. The primary difference between a
Filler and Server is that instead of a ‘Processing Time’ delay incurred by an entity that uses a Server, the processing delay
incurred by an entity at a Filler is instead determined by the time it takes to fill the entity’s container location(s). The flow
stream that fills containers at the Filler is pulled from the Filler’s ‘FlowInput’ FlowNode. Note that the capacity of the Filler
is automatically set to '1' ( Fixed) and should be set to a Value of '1' when using a work schedule.
The Filler object may fill the ContainerEntity object provided in the Flow Library, or a user specified type of entity (or
transporter) object that has containers. If the entity that enters the Filler has a Container element, then that container can be
filled. If an entity enters the Filler object and it has no container locations, then the filling time will be 0.0 and a warning will
be displayed to alert the user that there may be a modeling logic issue. Similarly, if an entity enters the Filler object and its
container location(s) are already full, then the filling time will be 0.0. The Filler object provides two Fill Target Types. A
container can either be filled until full, or a Desired Quantity can be added to each container using an expression. Note that
if the Desired Quantity expression does not return a positive quantity, then the filling time will be 0.0. Thus the user might
use a desired quantity expression that returns a value of 0.0 if the current container is not desired to be filled (e.g., don’t fill
a container unless it already contains flow contents of a certain type). The current flow container location being filled by a
Filler may be referenced in an expression by looking at is CurrentFlowContainer state variable. If the Fill Target Type is ‘Add
Specific Quantity’, then the filling operation will be considered completed when the desired quantity is added or the
container becomes full, whichever event occurs first. Note that if using work schedules and the Filler goes off-shift, then the
current filling operation is immediate suspended and will then be resumed when the Filler goes back on-shift. This
immediate suspension of all current processing activity is consistent with Simio’s other ‘Processor’ type objects.
The Filler may stop filling earlier than the specified fill target by using the Stop Early Triggers repeating properties.
The Balking and Reneging Options page provides additional information and examples on buffer capacities, balking and
reneging for the input and output buffers.
A Filler may have failures, which are specified within the Reliability section of the Properties window. State assignments can
be made upon entering, before processing, after processing, before exiting, on balking and on reneging the Filler.
Secondary Resources may be seized and/or released by the entity upon entering the Filler, and before and after filling
occurs. The Add-On Process Triggers allow additional logic to be specified when using the Filler. The Filler Add-On
Process Triggers are unique in that there are processes available for Before Processing and After Processing (as with
Server), but there are also processes for Filling Container and Filled Container, as these may be triggered multiple times for
an entity object entering the Filler with multiple containers.
An entity processing at a Filler may NOT be interrupted with the Interrupt step.
The Seize Constraint Logic repeat group supports imposing additional constraints on an entity's request to seize the object
by referencing Constraint Logic elements.
The Immediately Try Seize and Immediately Try Allocate When Released options within the Other Processing Options (and
Secondary Resources area) section of properties are typically advanced users. They deal with processing events on the
Simio event calendar that occur at the same time, including arrival of multiple entities to an object, or release of multiple
objects at a time for re-allocation. It's important to note that these properties do not affect processing for entities that
arrive on path with Allow Passing set to 'False', entities arriving via Conveyor, or any other construct that causes entities to
arrive one at a time at different simulation times. This feature will not provide any benefit because the second (or
following) entity will not arrive before the late event happens at the first entity's simulation time.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Filler.
Listed below are the properties of the Filler:
Property Valid Entry Description
Capacity Type Fixed, Work The availability of this Filler for processing. 'Fixed' indicates that this
Schedule Filler is always available. 'WorkSchedule' indicates that this Filler
follows a work schedule defining its 'On-Shift, Off-Shift' availability
over time.
920 / 1277
Work Schedule Work Schedule The name of the schedule that specifies the capacity for this resource
Name over time.
Work Day Repeat Group, Work Work Day schedule exceptions specific to this resource.
Exceptions Day Exceptions
Work Period Repeat Group, Work Work Period schedule exceptions specific to this resource.
Exceptions Period Exceptions
Ranking Rule First In First Out, Last The static ranking rule used to order entities waiting to be allocated
In First Out, Smallest capacity of this Filler object.
Value First, Largest
Value First
Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value
Expression First' ranking rule.
Dynamic Selection None, or one of Indicates whether this resource, when its capacity becomes available,
Rule several Dynamic dynamically selects the next seize request from its statically ranked
Selection Rules allocation queue using a dynamic selection rule.
Repeat Group True, False Indicates whether a repeat group data structure is used to define the
primary dispatching rule and any tie breaker rules.
Dispatching Rule See Dynamic The primary criteria used to select the next entity from the queue.
Selection Rules Note that using a particular dispatching rule may require some
specific model data about the candidate entities, such as due dates,
job routings, expected setup or operation times, etc.
Tie Breaker Rule None, or one of The secondary criteria used to break ties.
several Dynamic
Selection Rules
Dispatching Rules Repeat Group, The primary dispatching rule and any tie breaker rules, applied in the
Dispatching Rules order listed.
Filter Expression Expression Optional condition evaluated for each candidate entity that must be
true for the entity to be selected. In the expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an attribute of the
candidate entities (e.g., Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this specified
Window ( Days) time window will be considered for selection. Note that if there are
no candidates whose due dates fall within the look ahead window,
then the window will be automatically extended to include the
candidate(s) with the earliest due date.
Transfer-In Time Expression The time required to transfer an entity into this object.
Fill Target Type Fill Until Full, Add Indicates whether the Filler object will fill each container until full or
Specific Quantity add a specific desired quantity.
Quantity Unit Type Volume, Weight The unit type to be used for specifying the desired quantity to add to
a container.
Desired Quantity Expression The desired quantity to add to a container. Filling activity will end
once this volume or weight quantity has been added or the container
has become full, whichever event occurs first.
Stop Early Triggers Repeat Group, Optional event-driven triggers that will immediately cause the Filler
Triggers object to stop filling a container early,before reaching the specified921 / 1277
Triggers object to stop filling a container early,before reaching the specified
fill target.
Triggering Event Valid Event Name The name of the event whose occurence will trigger the Filler object
Name ( Stop Early to stop filling a container early, before reaching the specified fill
Triggers) target.
Condition ( Stop Expression Optional condition to be evaluated whenever the triggering event
Early Triggers) occurs, and which must also be true to trigger the Filler object to stop
early.
Off Shift Rule Suspend Processing, The processing rule used at the Filler at the end of a shift.
Finish Work Already If the rule is 'Suspend Processing', then the Filler will immediately
Started suspend all processing and set its resource state to 'OffShift'.
Processing will resume at the start of the next shift.
If the rule is 'Finish Work Already Started', then the Filler will not
accept any new entities but will continue processing if necessary to
finish work already started. The Filler's resource state will be set to
'OffShiftProcessing' if processing entities during an off-shift period.
Seize Constraint Repeat Group, Constraint logic used to enforce additional constraints on an entity's
Logic Constraint Logic request to seize the Filler.
elements NOTE: This repeat group applies only if the Filler has an input buffer.
Otherwise, if no input buffer, then this constraint logic will be ignored.
Seize Constraint Constraint Logic The name of the Constraint Logic element used to enforce additional
Logic.Constraint elements constraints on an entity's request to seize the Filler.
Logic Name
Immediately Try True, False For an arriving container entity, indicates whether to immediately try
Seize seizing the Filler before the execution of any other simulation logic in
the system and, if successful, skipping the Filler's allocation queue.
Setting this property to False will just insert the seize request into the
Filler's allocation queue. An evaluation of that queue will then be
scheduled on the simulation's current event calendar as a late priority
event.
NOTE: This property setting applies only if the Filler has an input
buffer. Otherwise, if no input buffer, then an arriving entity will always
immediately try to enter the Filler's processing station and seize it.
Immediately Try True, False Once a container entity has exited processing and released the Filler,
Allocate When indicates whether to immediately try allocating the released Filler
Released capacity to waiting seize requests before the execution of an other
simulation logic in the system.
Setting this property to False will skip immediate allocation. Instead,
an evaluation of the Filler's allocation queue will be scheduled on the
simulation's current event calendar as a late priority event.
Input Buffer Integer >= 0 The number of discrete entities that can be held in this Filler object's
Capacity input buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Input Buffer) Conditional, the buffer.
Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Node Name Node object Facility node location to send an entity that has balked at entering
922 / 1277
( Input Buffer) reference the buffer.
Output Buffer Integer >= 0 The number of discrete entities that can be held in this Filler object's
Capacity output buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Output Conditional, the buffer.
Buffer) Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Node Name Node object Facility node location to send an entity that has balked at entering
( Output Buffer) reference the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause entities to
abandon waiting in the buffer.
Wait Expression,vspecified The tolerable wait duration until a renege decision by an entity
Duration.Renege if the Trigger Type is waiting in the buffer.
Triggers 'Time Based'.
Triggering Event Event Reference, The name of the event whose occurrence will trigger a renege
Name.Renege specified if the decision by an entity waiting in the buffer.
Triggers Trigger Type is 'Event
Based'.
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to decide
Type .Renege Probabilistic whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified The renege condition or probability specified as an expression. If a
Or if the Renege probability then enter the chance of reneging as a value between 0.0
Probability.Renege Decision Type is (0%) and 1.0 (100%).
Triggers 'Conditional' or NOTE: If it is necessary to check in a conditional expression whether
'Probabilistic'. an entity is currently waiting for a specific type of constraint, the
entity 'Queuing' namespace provides several functions for that
purpose (e.g., Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object Facility node location to send a reneging entity.
Name.Renege reference
Triggers
Trigger Start Entered, Ended Indicates when the trigger becomes active for an entity occupying
Boundary.Renege Transfer In the buffer. Can be either immediately when the entity has entered the
Triggers buffer or, alternatively, not until its transfer into the buffer has been
ended (e.g., after a transfer-in time or any other entry related logic).
Failure Type No Failures, Specifies whether this Filler object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Processing See the Reliability page for additional information on Failures.
Count Based, Event
Count Based, 923 / 1277
Count Based,
Processing Time
Based
Failure Event Event Instance Name The name of the event which determines when the next failure occurs.
Name
Uptime Between Expression The uptime between failure occurrences. This property may be
Failures specified using a random sample form a distribution.
Count Between Expression The count between failure occurrences. This property may be
Failures specified using a random sample from a distribution.
Time To Repair Expression The time required to repair a failure when one occurs. This property
may be specified using a random sample from a distribution.
Action Type ( Table Reference Existing The type of table row reference action to perform.
Row Referencing - Row, Add New Row The 'Reference Existing Row' action type may be used to set a
Before Processing) reference to an existing table row in a data table or sequence table.
The row index into the table is specified by the Row Number
property.
The 'Add New Row' action type may be used to add a new row to an
output table. A reference will be automatically set to the newly
added row.
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Processing)
On Entering ( State Repeat Group, Optional state assignments when an entity is entering the Filler
Assignments) Assignments object.
Before Processing Repeat Group, Optional state assignments when an entity has been allocated
( State Assignments capacity to be processed at the object, but before entering (or
Assignments) ending transfer into) the object's processing station.
After Processing Repeat Group, Optional state assignments when an entity has completed its
( State Assignments processing and is about to attempt its exit from the object's
Assignments) processing station.
Before Exiting Repeat Group, Optional state assignments when an entity is ready to exit the Filler
( State Assignments object.
Assignments)
On Balking ( State Repeat Group, Optional state assignments when an entity is balking at entering an
Assignments) Assignments input or output buffer of the object.
On Reneging Repeat Group, Optional state assignments when an entity is reneging from an input
( State Assignments or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only with On
Assignments Balking and On Reneging assignments.
Condition.State Expression Custom condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
924 / 1277
State Variable State Variable Name Name of the state variable that will be assigned a new value.
Name.State or Reference
Assignments
Repeat Group True, False Indicates whether a repeat group data structure is used to define the
( Secondary secondary resources for processing. If a repeat group structure is
Resource for used, many of the below properties are specified within the repeat
Processing) group. OffShift Rule, Must Simultaneously Seize, Immediately Try Seize
and Immediately Try Allocate When Released are not within the
repeat group, thus not resource specific.
Object Type Specific, From List The method for specifying the object to be seized and held for the
( Secondary while an entity is being processed.
Resource for
Processing)
Object List Name Object List Instance The name of the object list from which an object will be selected to
( Secondary Name be seized.
Resource for
Processing)
Selection Goal Smallest Distance, The goal for selecting the object to seize.
( Secondary Largest Distance,
Resource for Preferred Order,
Processing) Smallest Value,
Largest Value,
Random
Value Expression Expression The expression evaluated for each object that is a candidate to seize.
( Secondary In the expression, use the keyword Candidate to reference an object
Resource for in the collection of candidates to be seized (e.g.,
Processing) Candidate.Object.Capacity.Remaining).
Request Move None, To Node Indicates whether a move to a specified location will be requested
( Secondary from the seized resource. Processing will not be able to start until the
Resource for resource has arrived to the requested location.
Processing)
Destination Node Node Instance The name of the specific node location that the seized resource will
( Secondary Name be requested to move to.
Resource for
Processing)
Off Shift Rule Finish Work Already The processing rule used if the secondary resource is at the end of a
( Secondary Started, Suspend shift because of a specified work schedule.
Resource for Processing, Switch If the rule is 'Finish Work Already Started', then the processing of the
Processing) Resources If Possible entity that is using the secondary resource will be allowed to
continue processing until finished. The secondary resource will not be
allowed to accept any new work.
If the rule is 'Suspend Processing', then the processing of the entity
that is using the secondary resource will be immediately suspended.
Processing will resume at the start of the secondary resource's next
925 / 1277
Processing will resume at the start of the secondary resource's next
shift.
If the rule is 'Switch Resources If Possible', then the processing of the
entity that is using the secondary resource will be immediately
suspended. The entity will then try to resume processing as soon as
possible by releasing the resource and seizing another available one
that satisfies the same resource requirements.
Number of Expression The number of individual resource objects to seize capacity units of.
Objects
( Secondary
Resource for
Processing)
Units Per Object Expression The number of capacity units to seize per resource object.
( Secondary
Resource for
Processing)
Selection Expression Optional condition evaluated for each candidate resource that must
Condition be true for the resource to be selected.
( Secondary In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute]
Resource for to reference an attribute of the candidate resource objects (e.g.,
Processing) Candidate.Object.Capacity).
Must True, False If multiple resources are required, indicates whether all of the
Simultaneously resources must be available before any can be seized.
Seize ( Secondary
Resource for
Processing)
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Secondary execution of any other simulation logic in the system and, if
Resource for successful, skipping the resource allocation queues.
Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Immediately Try True, False Once an entity has finished processing and released the resource,
Allocate When indicates whether to immediately try allocating the released resource
Released capacity to waiting seize requests before the execution of an other926 / 1277
Released capacity to waiting seize requests before the execution of an other
( Secondary simulation logic in the system.
Resource for Setting this property to False will skip immediate allocation. Instead,
Processing) an evaluation of the resource's allocation queue will be scheduled on
the simulation's current event calendar as a late priority event.
On Entering Repeat Group, Secondary resource seizes required when an entity is entering the
( Other Resource Resource Seizes Filler object.
Seizes)
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
Resource Seizes -- successful, skipping the resource allocation queues.
On Entering) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Before Processing Repeat Group, Secondary resource seizes required once an entity has been allocated
( Other Resource Resource Seizes Filler capacity, but before entering (or ending transfer into) its
Seizes) processing station.
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
Resource Seizes -- successful, skipping the resource allocation queues.
Before Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
After Processing Repeat Group, Secondary resource seizes required after all possible container
( Other Resource Resource Seizes elements of an entity have been filled and the entity is now about to
Seizes) attempt its exit from the Filler's processing station.
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
Resource Seizes -- successful, skipping the resource allocation queues.
After Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- On Entering) an evaluation of the resource's allocation queue will be scheduled on
the simulation's current event calendar as a late priority event.
Before Processing Repeat Group, Secondary resource releases to be performed once an entity has
( Other Resource Resource Releases been allocated Filler capacity, but before entering (or ending transfer
Releases) into) its processing station.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- Before an evaluation of the resource's allocation queue will be scheduled on
Processing) the simulation's current event calendar as a late priority event.
After Processing Repeat Group, Secondary resource releases to be performed after all possible
( Other Resource Resource Releases container elements of an entity have been filled and the entity is now
Releases) about to attempt its exit from the Filler's processing station.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- After an evaluation of the resource's allocation queue will be scheduled on
Processing) the simulation's current event calendar as a late priority event.
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Process Name
Run Ending Add- Process Instance Occurs when the simulation run is ending.
On Process Name
Entered Add-On Process Instance Occurs immediately after an entity has entered this object and is
Process Name about to start the 'Transfer-In Time'.
Before Processing Process Instance Occurs when an entity has been allocated Filler capacity, but before
Add-On Process Name entering (or ending transfer into) the Filler's processing station.
Filling Container Process Instance Occurs when the Filler is about to start filling a container element of
Add-On Process Name the current entity in its processing station.
Filled Container Process Instance Occurs when the Filler has finished filling a container element of the
Add-On Process Name current entity in its processing station.
After Processing Process Instance Occurs when all possible container elements of an entity have been
Add-On Process Name filled, and the entity is now about to attempt its exit from the Filler's
processing station.
Exited Add-On Process Instance Occurs when an entity has exited this object.
Process Name
Failed Add-On Process Instance Occurs when this object has failed.
Process Name
928 / 1277
Repaired Add-On Process Instance Occurs when a failure is repaired at this object.
Process Name
Evaluating Seize Process Instance Occurs when this Filler object is evaluating whether to accept or
Request Add-On Name reject a request to seize capacity of the filler. In the executed decision
Process Triggers process, assigning a value of less than or equal to '0' to the executing
token's ReturnValue state ( Token.ReturnValue) indicates that the seize
request is rejected.
On Shift Add-On Process Instance Occurs when the object goes 'on shift' because of its specified work
Process Name schedule.
Off Shift Add-On Process Instance Occurs when the object goes 'off shift' because of its specified work
Process Name schedule.
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
Transfer-In Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer into this fixed object via external input nodes. If specified
as 'Default', then the Can Transfer In & Out of Objects property
setting for the entity type will determine whether an entity can
perform a transfer into the object.
Transfer-In Expression The condition required to allow an entity to transfer into this fixed
Condition object via an external input node.
Transfer-Out Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer out of this fixed object via external output nodes. If
specified as 'Default', then the Can Transfer In & Out of Objects
property setting for the entity type will determine whether an entity
can perform a transfer out of the object.
Transfer-Out Expression The condition required to allow an entity to transfer out of this fixed
Condition object via an external output node.
Expected Setup Expression The expression used to get a deterministic estimation of the setup
Time Expression time for an entity at this fixed object.
Stop Early Event Valid Event Name Optional name of an event whose occurrence will trigger the Filler
Name object to stop filling a container early, before reaching the specified
fill target.
NOTE: This property has been deprecated. Use the Process Logic
Stop Early Triggers repeat group instead.
Report Statistics True or False Specifies if statitsics are to be automatically reported for this object.
929 / 1277
Simio Reference Guide
Emptier
The Emptier object may be used to empty any type of entity that has one or more container locations, including an entity
type defined using the ContainerEntity object. The properties, structure, and process logic design of the Emptier is very
similar to a Server from the Standard Library. The Emptier has InputBuffer, Processing, and OutputBuffer station locations,
all of which are animated within the Facility window. Container entities transfer through those stations in sequence, entering
the Emptier using its ‘Input’ BasicNode. Discrete entities then exit the Emptier using its ‘ContainerOutput’ TransferNode
while flow stream exits the Emptier using the 'FlowOutput' FlowNode. The primary difference between an Emptier and
Server is that instead of a ‘Processing Time’ delay incurred by an entity that uses a Server, the processing delay incurred by
an entity at an Emptier is instead determined by the time it takes to empty the entity’s container location(s). Note that the
capacity of the Emptier is automatically set to '1' ( Fixed) and should be set to a Value of '1' when using a work schedule.
The Emptier object may empty the ContainerEntity object provided in the Flow Library, or a user specified type of entity
(or transporter) object that has containers. If the entity that enters the Emptier has a Container element, then that container
can be emptied. If an entity enters the Emptier object and it has no container locations, then the emptying time will be 0.0
and a warning will be displayed to alert the user that there may be a modeling logic issue. Similarly, if an entity enters the
Emptier object and its container location(s) are already empty, then the emptying time will be 0.0. The Emptier object
provides two Empty Target Types. A container can either be emptied until empty, or a Desired Quantity can be removed
from each container using an expression. Note that if the Desired Quantity expression does not return a positive quantity,
then the emptying time will be 0.0. Thus the user might use a desired quantity expression that returns a value of 0.0 if the
current container is not desired to be emptied (e.g., don’t empty a container unless it already contains flow contents of a
certain type). The current flow container location being emptied by an Emptier may be referenced in an expression by
looking at is CurrentFlowContainer state variable. If the Empty Target Type is ‘Remove Specific Quantity’, then the emptying
operation will be considered completed when the desired quantity is removed or the container becomes empty, whichever
event occurs first. Note that if using work schedules and the Emptier goes off-shift, then the current emptying operation is
immediate suspended and will then be resumed when the Emptier goes back on-shift. This immediate suspension of all
current processing activity is consistent with Simio’s other ‘Processor’ type objects.
The Emptier may stop emptying earlier than the specified empty target by using the Stop Early Triggers repeating
properties.
The Balking and Reneging Options page provides additional information and examples on buffer capacities, balking and
reneging for the input and output buffers.
An Emptier may have failures, which are specified within the Reliability section of the Properties window. State assignments
can be made upon entering, before processing, after processing, before exiting, on balking and on reneging the Emptier.
Secondary Resources may be seized and/or released by the entity upon entering the Emptier, and before and after
emptying occurs. The Add-On Process Triggers allow additional logic to be specified when using the Emptier. The Emptier
Add-On Process Triggers are unique in that there are processes available for Before Processing and After Processing (as
with Server), but there are also processes for Emptying Container and Emptied Container, as these may be triggered
multiple times for an entity object entering the Emptier with multiple containers.
An entity processing at a Emptier may NOT be interrupted with the Interrupt step.
The Seize Constraint Logic repeat group supports imposing additional constraints on an entity's request to seize the object
by referencing Constraint Logic elements.
The Immediately Try Seize and Immediately Try Allocate When Released options within the Other Processing Options (and
Secondary Resources area) section of properties are typically advanced users. They deal with processing events on the
Simio event calendar that occur at the same time, including arrival of multiple entities to an object, or release of multiple
objects at a time for re-allocation. It's important to note that these properties do not affect processing for entities that
arrive on path with Allow Passing set to 'False', entities arriving via Conveyor, or any other construct that causes entities to
arrive one at a time at different simulation times. This feature will not provide any benefit because the second (or
following) entity will not arrive before the late event happens at the first entity's simulation time.
The Work Day and Work Period Exceptions pages provides additional information on work schedule exceptions for the
Emptier.
Listed below are the properties of the Emptier:
Property Valid Entry Description
Capacity Type Fixed, Work The availability of this Emptier. 'Fixed' indicates that this Emptier is
Schedule always available. 'WorkSchedule' indicates that this Emptier follows a
work schedule defining its 'On-Shift, Off-Shift' availability over time.
930 / 1277
Work Schedule Work Schedule The name of the schedule that specifies the capacity for this resource
Name over time.
Work Day Repeat Group, Work Work Day schedule exceptions specific to this resource.
Exceptions Day Exceptions
Work Period Repeat Group, Work Work Period schedule exceptions specific to this resource.
Exceptions Period Exceptions
Ranking Rule First In First Out, Last The static ranking rule used to order entities waiting to be allocated
In First Out, Smallest capacity of this Emptier object.
Value First, Largest
Value First
Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value
Expression First' ranking rule.
Dynamic Selection None, or one of Indicates whether this resource, when its capacity becomes available,
Rule several Dynamic dynamically selects the next seize request from its statically ranked
Selection Rules allocation queue using a dynamic selection rule.
Repeat Group True, False Indicates whether a repeat group data structure is used to define the
primary dispatching rule and any tie breaker rules.
Dispatching Rule See Dynamic The primary criteria used to select the next entity from the queue.
Selection Rules Note that using a particular dispatching rule may require some
specific model data about the candidate entities, such as due dates,
job routings, expected setup or operation times, etc.
Tie Breaker Rule None, or one of The secondary criteria used to break ties.
several Dynamic
Selection Rules
Dispatching Rules Repeat Group, The primary dispatching rule and any tie breaker rules, applied in the
Dispatching Rules order listed.
Filter Expression Expression Optional condition evaluated for each candidate entity that must be
true for the entity to be selected. In the expression, use the syntax
Candidate.[ EntityClass].[ Attribute] to reference an attribute of the
candidate entities (e.g., Candidate.Entity.Priority).
Look Ahead Expression Only candidate entities whose due dates fall within this specified
Window ( Days) time window will be considered for selection. Note that if there are
no candidates whose due dates fall within the look ahead window,
then the window will be automatically extended to include the
candidate(s) with the earliest due date.
Transfer-In Time Expression The time required to transfer an entity into this object.
Empty Target Type Empty All Contents, Indicates whether the Emptier object will empty all contents from
Remove Specific each container or remove a specific desired quantity.
Quantity
Quantity Unit Type Volume, Weight The unit type to be used for specifying the desired quantity to
remove from a container.
Desired Quantity Expression The desired quantity to remove from a container. Emptying activity
will end once this volume or weight quantity has been removed or
the container has become empty, whichever event occurs first.
931 / 1277
Stop Early Triggers Repeat Group, Optional event-driven triggers that will immediately cause the
Triggers Emptier object to stop emptying a container early,before reaching
the specified empty target.
Triggering Event Valid Event Name The name of the event whose occurence will trigger the Emptier
Name ( Stop Early object to stop emptying a container early, before reaching the
Triggers) specified empty target.
Condition ( Stop Expression Optional condition to be evaluated whenever the triggering event
Early Triggers) occurs, and which must also be true to trigger the Emptier object to
stop early.
Off Shift Rule Suspend Processing, The processing rule used at the Emptier at the end of a shift.
Finish Work Already If the rule is 'Suspend Processing', then the Emptier will immediately
Started suspend all processing and set its resource state to 'OffShift'.
Processing will resume at the start of the next shift.
If the rule is 'Finish Work Already Started', then the Emptier will not
accept any new entities but will continue processing if necessary to
finish work already started. The Emptier's resource state will be set to
'OffShiftProcessing' if processing entities during an off-shift period.
Seize Constraint Repeat Group, Constraint logic used to enforce additional constraints on an entity's
Logic Constraint Logic request to seize the Epmtier.
elements NOTE: This repeat group applies only if the Emptier has an input
buffer. Otherwise, if no input buffer, then this constraint logic will be
ignored.
Seize Constraint Constraint Logic The name of the Constraint Logic element used to enforce additional
Logic.Constraint elements constraints on an entity's request to seize the Emptier.
Logic Name
Immediately Try True, False For an arriving container entity, indicates whether to immediately try
Seize seizing the Emptier before the execution of any other simulation
logic in the system and, if successful, skipping the Emptier's
allocation queue.
Setting this property to False will just insert the seize request into the
Emptier's allocation queue. An evaluation of that queue will then be
scheduled on the simulation's current event calendar as a late priority
event.
NOTE: This property setting applies only if the Emptier has an input
buffer. Otherwise, if no input buffer, then an arriving entity will always
immediately try to enter the Emptier's processing station and seize it.
Immediately Try True, False Once a container entity has exited processing and released the
Allocate When Emptier, indicates whether to immediately try allocating the released
Released Emptier capacity to waiting seize requests before the execution of an
other simulation logic in the system.
Setting this property to False will skip immediate allocation. Instead,
an evaluation of the Emptier's allocation queue will be scheduled on
the simulation's current event calendar as a late priority event.
Input Buffer Integer >= 0 The number of discrete entities that can be held in this Emptier
Capacity object's input buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Input Buffer) Conditional, the buffer.
Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Node Name Node object Facility node location to send an entity that has balked at entering
( Input Buffer) reference the buffer.
Output Buffer Integer >= 0 The number of discrete entities that can be held in this Emptier
Capacity object's output buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Output Conditional, the buffer.
Buffer) Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Condition Or Expression The balk condition or probability specified as an expression. If a
Probability probability then enter the chance of balking as a value between 0.0
( Output Buffer) (0%) and 1.0 (100%).
Balk Node Name Node object Facility node location to send an entity that has balked at entering
( Output Buffer) reference the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause entities to
abandon waiting in the buffer.
Wait Expression,vspecified The tolerable wait duration until a renege decision by an entity
Duration.Renege if the Trigger Type is waiting in the buffer.
Triggers 'Time Based'.
Triggering Event Event Reference, The name of the event whose occurrence will trigger a renege
Name.Renege specified if the decision by an entity waiting in the buffer.
Triggers Trigger Type is 'Event
Based'.
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to decide
Type .Renege Probabilistic whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified The renege condition or probability specified as an expression. If a
Or if the Renege probability then enter the chance of reneging as a value between 0.0
Probability.Renege Decision Type is (0%) and 1.0 (100%).
Triggers 'Conditional' or NOTE: If it is necessary to check in a conditional expression whether
'Probabilistic'. an entity is currently waiting for a specific type of constraint, the
entity 'Queuing' namespace provides several functions for that
purpose (e.g., Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object Facility node location to send a reneging entity.
Name.Renege reference
Triggers
Trigger Start Entered, Ended Indicates when the trigger becomes active for an entity occupying
Boundary.Renege Transfer In the buffer. Can be either immediately when the entity has entered the
Triggers buffer or, alternatively, not until its transfer into the buffer has been
ended (e.g., after a transfer-in time or any other entry related logic).
933 / 1277
Failure Type No Failures, Specifies whether this Emptier object has failures that affect the
Calendar Time object's availability, and the method used to trigger the failure
Based, Processing occurrences. See the Reliability page for additional information on
Count Based, Event Failures.
Count Based,
Processing Time
Based
Failure Event Event Instance Name The name of the event which determines when the next failure occurs.
Name
Uptime Between Expression The uptime between failure occurrences. This property may be
Failures specified using a random sample form a distribution.
Count Between Expression The count between failure occurrences. This property may be
Failures specified using a random sample from a distribution.
Time To Repair Expression The time required to repair a failure when one occurs. This property
may be specified using a random sample from a distribution.
Action Type ( Table Reference Existing The type of table row reference action to perform.
Row Referencing - Row, Add New Row The 'Reference Existing Row' action type may be used to set a
Before Processing) reference to an existing table row in a data table or sequence table.
The row index into the table is specified by the Row Number
property.
The 'Add New Row' action type may be used to add a new row to an
output table. A reference will be automatically set to the newly
added row.
Row Number Expression The one-based row index into the table.
( Table Row
Referencing -
Before Processing)
On Entering ( State Repeat Group, Optional state assignments when an entity is entering the Emptier
Assignments) Assignments object.
Before Processing Repeat Group, Optional state assignments when an entity has been allocated
( State Assignments capacity to be processed at the object, but before entering (or
Assignments) ending transfer into) the object's processing station.
After Processing Repeat Group, Optional state assignments when an entity has completed its
( State Assignments processing and is about to attempt its exit from the object's
Assignments) processing station.
Before Exiting Repeat Group, Optional state assignments when an entity is ready to exit the
( State Assignments Emptier object.
Assignments)
On Balking ( State Repeat Group, Optional state assignments when an entity is balking at entering an
Assignments) Assignments input or output buffer of the object.
On Reneging Repeat Group, Optional state assignments when an entity is reneging from an input
( State Assignments or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only with On
934 / 1277
Assignments Balking and On Reneging assignments.
Condition.State Expression Custom condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name Name of the state variable that will be assigned a new value.
Name.State or Reference
Assignments
Repeat Group True, False Indicates whether a repeat group data structure is used to define the
( Secondary secondary resources for processing. If a repeat group structure is
Resource for used, many of the below properties are specified within the repeat
Processing) group. OffShift Rule, Must Simultaneously Seize, Immediately Try Seize
and Immediately Try Allocate When Released are not within the
repeat group, thus not resource specific.
Object Type Specific, From List The method for specifying the object to be seized and held for the
( Secondary while an entity is being processed.
Resource for
Processing)
Object List Name Object List Instance The name of the object list from which an object will be selected to
( Secondary Name be seized.
Resource for
Processing)
Selection Goal Smallest Distance, The goal for selecting the object to seize.
( Secondary Largest Distance,
Resource for Preferred Order,
Processing) Smallest Value,
Largest Value,
Random
Value Expression Expression The expression evaluated for each object that is a candidate to seize.
( Secondary In the expression, use the keyword Candidate to reference an object
Resource for in the collection of candidates to be seized (e.g.,
Processing) Candidate.Object.Capacity.Remaining).
Request Move None, To Node Indicates whether a move to a specified location will be requested
( Secondary from the seized resource. Processing will not be able to start until the
Resource for resource has arrived to the requested location.
Processing)
Destination Node Node Instance The name of the specific node location that the seized resource will
( Secondary Name be requested to move to.
Resource for
Processing)
Off Shift Rule Finish Work Already The processing rule used if the secondary resource is at the end of a
( Secondary Started, Suspend shift because of a specified work schedule.
Resource for Processing, Switch If the rule is 'Finish Work Already Started', then the processing of the
Processing) Resources If Possible entity that is using the secondary resource will be allowed to
935 / 1277
Processing) Resources If Possible entity that is using the secondary resource will be allowed to
continue processing until finished. The secondary resource will not be
allowed to accept any new work.
If the rule is 'Suspend Processing', then the processing of the entity
that is using the secondary resource will be immediately suspended.
Processing will resume at the start of the secondary resource's next
shift.
If the rule is 'Switch Resources If Possible', then the processing of the
entity that is using the secondary resource will be immediately
suspended. The entity will then try to resume processing as soon as
possible by releasing the resource and seizing another available one
that satisfies the same resource requirements.
Number of Expression The number of individual resource objects to seize capacity units of.
Objects
( Secondary
Resource for
Processing)
Units Per Object Expression The number of capacity units to seize per resource object.
( Secondary
Resource for
Processing)
Selection Expression Optional condition evaluated for each candidate resource that must
Condition be true for the resource to be selected.
( Secondary In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute]
Resource for to reference an attribute of the candidate resource objects (e.g.,
Processing) Candidate.Object.Capacity).
Must True, False If multiple resources are required, indicates whether all of the
Simultaneously resources must be available before any can be seized.
Seize ( Secondary
Resource for
Processing)
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Secondary execution of any other simulation logic in the system and, if
Resource for successful, skipping the resource allocation queues.
Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Keep Reserved If Expression On processing completion, an optional condition indicating whether
( Secondary to keep the released resource capacity reserved for possible later
Resource for reuse by the same owner object. Other objects without a reservation
Processing) will be unable to seize the reserved capacity unless the reservation is
cancelled.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute]
to reference an attribute of the candidate resource object(s) being
released (e.g., Candidate.Object.Capacity).
Note that when an owner object is attempting to select a resource
from a group of candidates (e.g., from a list or from a population of
some resource type), by default a preference will be given to select a
resource that has already been reserved by that entity irrespective of
the specified selection goal.
Leaving this property blank (no condition) is equivalent to entering
False.
Reservation Expression If the keep reserved condition is true, then an optional wait time
Timeout before automatically cancelling the reservation.
( Secondary In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute]
Resource for to reference an attribute of the candidate resource object(s) being
936 / 1277
Resource for to reference an attribute of the candidate resource object(s) being
Processing) released (e.g., Candidate.Object.Capacity).
Immediately Try True, False Once an entity has finished processing and released the resource,
Allocate When indicates whether to immediately try allocating the released resource
Released capacity to waiting seize requests before the execution of an other
( Secondary simulation logic in the system.
Resource for Setting this property to False will skip immediate allocation. Instead,
Processing) an evaluation of the resource's allocation queue will be scheduled on
the simulation's current event calendar as a late priority event.
On Entering Repeat Group, Secondary resource seizes required when an entity is entering the
( Other Resource Resource Seizes Emptier object.
Seizes)
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
Resource Seizes -- successful, skipping the resource allocation queues.
On Entering) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Before Processing Repeat Group, Secondary resource seizes required once an entity has been allocated
( Other Resource Resource Seizes Emptier capacity, but before entering (or ending transfer into) its
Seizes) processing station.
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
Resource Seizes -- successful, skipping the resource allocation queues.
Before Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
After Processing Repeat Group, Secondary resource seizes required after all possible container
( Other Resource Resource Seizes elements of an entity have been emptied and the entity is about to
Seizes) attempt its exit from the Emptier's processing station.
Immediately Try True, False Indicates whether to immediately try seizing the resource before the
Seize ( Other execution of any other simulation logic in the system and, if
successful, skipping the resource allocation queues.
937 / 1277
Resource Seizes -- successful, skipping the resource allocation queues.
After Processing) Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority
event.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- On Entering) an evaluation of the resource's allocation queue will be scheduled on
the simulation's current event calendar as a late priority event.
Before Processing Repeat Group, Secondary resource releases to be performed once an entity has
( Other Resource Resource Releases been allocated Emptier capacity, but before entering (or ending
Releases) transfer into) its processing station.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- Before an evaluation of the resource's allocation queue will be scheduled on
Processing) the simulation's current event calendar as a late priority event.
After Processing Repeat Group, Secondary resource releases to be performed after all possible
( Other Resource Resource Releases container elements of an entity have been emptied and entity is now
Releases) about to attempt its exit from the Emptier's processing station.
Immediately Try True, False Indicates whether to immediately try allocating the released resource
Allocate When capacity to waiting seize requests before the execution of any other
Released ( Other simulation logic in the system.
Resource Releases Setting this property to False will skip immediate allocation. Instead,
-- After an evaluation of the resource's allocation queue will be scheduled on
Processing) the simulation's current event calendar as a late priority event.
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Process Name
Run Ending Add- Process Instance Occurs when the simulation run is ending.
On Process Name
Entered Add-On Process Instance Occurs immediately after an entity has entered this object and is
Process Name about to start the 'TransferIn Time'.
Before Processing Process Instance Occurs when an entity has been allocated Emptier capacity, but
Add-On Process Name before entering (or ending transfer into) the Emptier's processing
station.
Emptying Process Instance Occurs when the Emptier is about to start filling a container element
Container Add-On Name of the current entity in its processing station.
Process
Emptied Container Process Instance Occurs when the Emptier has finished emptying a container element
Add-On Process Name of the current entity in its processing station.
After Processing Process Instance Occurs when all possible container elements of an entity have been
Add-On Process Name emptied, and the entity is now about to attempt its exit from the
Emptier's processing station. 938 / 1277
Emptier's processing station.
Exited Add-On Process Instance Occurs when an entity has exited this object.
Process Name
Failed Add-On Process Instance Occurs when this object has failed.
Process Name
Repaired Add-On Process Instance Occurs when a failure is repaired at this object.
Process Name
Evaluating Seize Process Instance Occurs when this Emptier object is evaluating whether to accept or
Request Add-On Name reject a request to seize capacity of the emptier. In the executed
Process Triggers decision process, assigning a value of less than or equal to '0' to the
executing token's ReturnValue state ( Token.ReturnValue) indicates that
the seize request is rejected.
On Shift Add-On Process Instance Occurs when the object goes 'on shift' because of its specified work
Process Name schedule.
Off Shift Add-On Process Instance Occurs when the object goes 'off shift' because of its specified work
Process Name schedule.
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
Transfer-In Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer into this fixed object via external input nodes. If specified
as 'Default', then the Can Transfer In & Out of Objects property
setting for the entity type will determine whether an entity can
perform a transfer into the object.
Transfer-In Expression The condition required to allow an entity to transfer into this fixed
Condition object via an external input node.
Transfer-Out Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer out of this fixed object via external output nodes. If
specified as 'Default', then the Can Transfer In & Out of Objects
property setting for the entity type will determine whether an entity
can perform a transfer out of the object.
Transfer-Out Expression The condition required to allow an entity to transfer out of this fixed
Condition object via an external output node.
Expected Setup Expression The expression used to get a deterministic estimation of the setup
Time Expression time for an entity at this fixed object.
Stop Early Event Valid Event Name Optional name of an event whose occurrence will trigger the Emptier
Name object to stop emptying a container early, before reaching the
specified empty target.
NOTE: This property has been deprecated. Use the Process Logic
Stop Early Triggers repeat group instead.
Report Statistics True or False Specifies if statitsics are to be automatically reported for this object.
939 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
940 / 1277
Simio Reference Guide
ItemToFlowConverter
The ItemToFlowConveyor object is used to model a process that converts entities representing discrete items into flow
entities representing quantities of fluids or other mass.
The flow rate out of the ItemToFlowConverter is regulated by its 'Output' flow node. Discrete item entities enter the object
through its 'Input' basic node and are then processed into flow.
When creating flow, the user has the option to either copy attributes from the input discrete entity, or to create new flow
with no copying. If copying, then all possible states, table references, and destination settings are copied over. See the Flow
Entity Creation Method property for more information.
The conversion logic properties are evaluated in the context of the input. Thus, for the ItemToFlowConverter, the
conversion logic properties can be based on attributes of the discrete item entity.
The discrete item input buffer capacity for the ItemToFlowConverter object can be infinite, limited, or specified as ‘0’ to not
have any buffer. If a limited buffer or no buffer situation, then blocking can occur. The Balking and Reneging Options page
provides additional information and examples on capacities, balking and reneging for the input buffer.
The converter may stop producing outflow early before reaching flow quantity specified by using the Stop Early Triggers
repeating properties.The converter may also may require the removal and disposal of generated flow upon particular
event triggers and conditions. These are specified in the Purge Contents Triggers and Clean In-Place Triggers repeating
properties.
Listed below are the properties of the ItemToFlowConverter:
Property Valid Entry Description
Flow Quantity Unit Volume, Weight The unit type to be used for specifying the flow quantity per discrete
Type item.
Flow Quantity Per Expression The amount of outflow created from a discrete item entity.
Item
Stop Early Triggers Repeat Group, Optional event-driven triggers that will immediately cause the
Triggers ItemToFlowConverter object to stop producing outflow for the
current discrete item entity early, before reaching the specified flow
quantity per discrete item. The converter's flow container will be put
into an empty state and ready to process the next discrete item.
Triggering Event Valid Event Name The name of the event whose occurrence will trigger the
Name ( Stop Early ItemToFlowConverter object to stop producing outflow for the
Triggers) current discrete item early, before reaching the specified flow
quantity per discrete item. The converter's flow container will be put
into an empty state and ready to process the next discrete item.
Condition ( Stop Expression Optional condition to be evaluated whenever the triggering event
Early Triggers) occurs, and which must also be true to trigger the
ItemToFlowConverter object to stop early.
Flow Output Entity Same As Item, Valid The entity type of the created outflow.
Type Entity Type
Item Ranking Rule First In First Out, Last The static ranking rule used to order discrete item entities to be
In First Out, Smallest processed into flow.
Value First, Largest
Value First
Item Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value
Expression First' ranking rule.
941 / 1277
Expression First' ranking rule.
Flow Entity Copy Item The method used to create a flow entity. If copying item attributes,
Creation Method Attributes,Create then all possible state values, destination settings, and table
New ( No Copying) references will be copied from the processed discrete item entity to
the created flow entity.
Purge Contents Repeat Group, Optional event-driven triggers that will immediately remove and
Triggers Triggers dispose of any generated flow waiting to exit the
ItemToFlowConverter object, putting the converter's flow container
into an empty state and cancelling any further outflow for the
discrete item entity whose conversion was in-process.
Triggering Event Valid Event Name The name of the event whose occurrence will indicate that any
Name ( Purge generated flow waiting to exit the converter object is to be
Contents Triggers) immediately removed and disposed of, putting the converter's flow
container into an empty state and cancelling any further outflow for
the discrete item entity whose conversion was in-process.
Condition ( Purge Expression Optional condition to be evaluated whenever the triggering event
Contents Triggers) occurs, and which must also be true to purge the converter's flow
container.
Clean In-Place Repeat Group, Optional event-driven triggers that will immediately remove and
Triggers Triggers dispose of any generated flow waiting to exit the converter object
and then suspend further processing until a specified cleaning time
has elapsed.
Triggering Event Valid Event Name The name of the event whose occurrence will indicate that the
Name ( Clean In- converter's flow container is to be cleaned.
Place Triggers)
Condition ( Clean Expression Optional condition to be evaluated whenever the triggering event
In-Place Triggers) occurs, and which must also be true to trigger a cleaning operation.
Cleaning Time Specific, Sequence The method used to specify the time required to clean the converter's
Type ( Clean In- Dependent flow container.
Place Triggers)
Cleaning Time Expression The time required to clean the converter's flow container.
( Clean In-Place
Triggers)
Operation Expression The attribute expression to be evaluated for each cleaning operation
Attribute ( Clean and whose 'from/to' value changes will determine the sequence-
In-Place Triggers) dependent times required to clean the converter's flow container.
Initial Cleaning Expression The time required to clean the converter's flow container if the first
Time ( Clean In- cleaning operation or if the changeover state stored for the previous
Place Triggers) operation has been cleared.
Changeover Changeover Matrix The name of the changeover matrix that defines the sequence-
Matrix ( Clean In- Name dependent cleaning times.
Place Triggers)
Input Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity ItemToFlowConverter object's input buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Input Buffer) Conditional, the buffer.
942 / 1277
Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Node Name Node object Facility node location to send an entity that has balked at entering
( Input Buffer) reference the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause entities to
abandon waiting in the buffer.
Triggering Event Event Reference, The name of the event whose occurrence will trigger a renege
Name.Renege specified if the decision by an entity waiting in the buffer.
Triggers Trigger Type is 'Event
Based'.
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to decide
Type .Renege Probabilistic whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified The renege condition or probability specified as an expression. If a
Or if the Renege probability then enter the chance of reneging as a value between 0.0
Probability.Renege Decision Type is (0%) and 1.0 (100%).
Triggers 'Conditional' or NOTE: If it is necessary to check in a conditional expression whether
'Probabilistic'. an entity is currently waiting for a specific type of constraint, the
entity 'Queuing' namespace provides several functions for that
purpose (e.g., Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object Facility node location to send a reneging entity.
Name.Renege reference
Triggers
Trigger Start Entered, Ended Indicates when the trigger becomes active for an entity occupying
Boundary.Renege Transfer In the buffer. Can be either immediately when the entity has entered the
Triggers buffer or, alternatively, not until its transfer into the buffer has been
ended (e.g., after a transfer-in time or any other entry related logic).
On Item Entering Repeat Group, Optional state assignments when a discrete item entity is entering
( State Assignments this ItemToFlowConverter object.
Assignments)
On Balking ( State Repeat Group, Optional state assignments when an entity is balking at entering an
Assignments) Assignments input or output buffer of the object.
On Reneging Repeat Group, Optional state assignments when an entity is reneging from an input
( State Assignments or output buffer of the object.
Assignments)
943 / 1277
Assign If.State Expression Condition required to perform the assignment. Used only with On
Assignments Balking and On Reneging assignments.
Condition.State Expression Custom condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name Name of the state variable that will be assigned a new value.
Name.State or Reference
Assignments
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Process Name
Run Ending Add- Process Instance Occurs when the simulation run is ending.
On Process Name
Item Entered Add- Process Instance Occurs immediately after a discrete item entity has entered this
On Process Name ItemToFlowConverter object.
Processing Item Process Instance Occurs when a discrete item entity is about to be processed into
Add-On Process Name outflow.
Created Flow Process Instance Occurs when flow content has been created from a discrete item
Add-On Process Name entity, just before the flow entity attempts to start exiting the
ItemToFlowConverter object.
Flow Exited Add- Process Instance Occurs when the outflow created from a discrete item entity has fully
On Process Name exited this ItemToFlowConverter object.
Cleaning Process Instance Occurs when a clean-in-place operation is beginning at the converter.
Converter Add-On Name
Process
Cleaned Converter Process Instance Occurs when a clean-in-place operation is finishing at the converter.
Add-On Process Name
Transfer-In Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer into this fixed object via external input nodes. If specified
as 'Default', then the Can Transfer In & Out of Objects property
setting for the entity type will determine whether an entity can
perform a transfer into the object.
Transfer-In Expression The condition required to allow an entity to transfer into this fixed
Condition object via an external input node.
Report Statistics True or False Specifies if statitsics are to be automatically reported for this object.
944 / 1277
Simio Reference Guide
FlowToItemConverter
The FlowToItemConverter object used to model a process that converts flow entities representing quantities of fluids or
other mass into entities representing discrete items.
The flow rate into the FlowToItemConverter is regulated by its 'Input' flow node. Discrete item entities exit the object from
its 'Output' transfer node.
When creating discrete entities, the user has the option to either copy attributes from the flow, or to create new discrete
entities with no copying. If copying, then all possible states, table references, and destination settings are copied over. See
the Item Entity Creation Method property for more information.
The conversion logic properties are evaluated in the context of the input. Thus, for the FlowToItemConverter object, the
conversion logic properties can be based on the attributes of the new inflow entity.
The discrete item output buffer capacity for the FlowToItemConverter object can be infinite, limited, or specified as ‘0’ to
not have any buffer. If a limited buffer or no buffer situation, then blocking can occur. The Balking and Reneging Options
page provides additional information and examples on capacities, balking and reneging for the output buffer.
The converter may stop waiting for inflow and create a discrete item earlier than the flow quantity specified by using the
Stop Early Triggers repeating properties. The converter may also may require the removal and disposal of inflow collected
upon particular event triggers and conditions. These are specified in the Purge Contents Triggers and Clean In-Place
Triggers repeating properties.
Listed below are the properties of the FlowToItemConverter:
Property Valid Entry Description
Flow Quantity Unit Volume, Weight The unit type to be used for specifying the flow quantity per discrete
Type item.
Flow Quantity Per Expression The amount of inflow required to create a discrete item entity.
Item
Stop Early Triggers Repeat Group, Optional event-driven triggers that will immediately cause the
Triggers FlowToItemConverter object to stop waiting for additional inflow
and create the next discrete item entity early, using whatever inflow
that has accumulated in the converter's flow container but before
reaching the specified flow quantity per discrete item.
Triggering Event Valid Event Name The name of the event whose occurence will trigger the
Name ( Stop Early FlowToItemConverter object to stop waiting for additional inflow
Triggers) and create the next discrete item entity early, using whatever inflow
that has accumulated in the converter's flow container but before
reaching the specified flow quantity per discrete item.
Condition ( Stop Expression Optional condition to be evaluated whenever the triggering event
Early Triggers) occurs, and which must also be true to trigger the
FlowToItemConverter object to stop early.
Item Output Entity Same As Inflow, The entity type of the created discrete items.
Type Valid Entity Type
Item Entity Copy Flow The method used to create a discrete item entity. If copying flow
Creation Method Attributes,Create attributes, then all possible state values, destination settings, and
New ( No Copying) table references will be copied from the accumulated flow entity to
the created discrete item entity.
Purge Contents Repeat Group, Optional event-driven triggers that will immediately remove and
Triggers Triggers dispose of any inflow collected by the converter object for creating
945 / 1277
Triggers Triggers dispose of any inflow collected by the converter object for creating
the next discrete item entity, putting the converter's flow container
back into an empty state.
Triggering Event Valid Event Name The name of the event whose occurrence will indicate that any inflow
Name ( Purge collected by the converter object is to be immediately removed and
Contents Triggers) disposed of, putting the converter's flow container back into an
empty state.
Condition ( Purge Expression Optional condition to be evaluated whenever the triggering event
Contents Triggers) occurs, and which must also be true to purge the converter's flow
container.
Clean In-Place Repeat Group, Optional event-driven triggers that will immediately remove and
Triggers Triggers dispose of any inflow collected by the converter object for creating
the next discrete item entity and then suspend new inflow until a
specified cleaning time has elapsed.
Triggering Event Valid Event Name The name of the event whose occurrence will indicate that the
Name ( Clean In- converter's flow container is to be cleaned.
Place Triggers)
Condition ( Clean Expression Optional condition to be evaluated whenever the triggering event
In-Place Triggers) occurs, and which must also be true to trigger a cleaning operation.
Cleaning Time Specific, Sequence The method used to specify the time required to clean the converter's
Type ( Clean In- Dependent flow container.
Place Triggers)
Cleaning Time Expression The time required to clean the converter's flow container.
( Clean In-Place
Triggers)
Operation Expression The attribute expression to be evaluated for each cleaning operation
Attribute ( Clean and whose 'from/to' value changes will determine the sequence-
In-Place Triggers) dependent times required to clean the converter's flow container.
Initial Cleaning Expression The time required to clean the converter's flow container if the first
Time ( Clean In- cleaning operation or if the changeover state stored for the previous
Place Triggers) operation has been cleared.
Changeover Changeover Matrix The name of the changeover matrix that defines the sequence-
Matrix ( Clean In- Name dependent cleaning times.
Place Triggers)
Output Buffer Integer >= 0 The number of discrete entities that can be held in this
Capacity FlowToItemConverter object's output buffer.
Balk Decision None, Blocked, The method used by an entity to decide whether to balk at entering
Type ( Output Conditional, the buffer.
Buffer) Probabilistic If the decision type is 'Blocked', then an entity attempting to enter
the buffer will balk if the buffer is full rather than be blocked. Or, if a
zero capacity buffer, the entity will balk if its attempt to transfer
directly into or out of the object is blocked.
Balk Node Name Node object Facility node location to send an entity that has balked at entering
( Output Buffer) reference the buffer.
946 / 1277
( Output Buffer) reference the buffer.
Renege Triggers Repeat Group Optional time or event-driven triggers that can cause entities to
abandon waiting in the buffer.
Triggering Event Event Reference, The name of the event whose occurrence will trigger a renege
Name.Renege specified if the decision by an entity waiting in the buffer.
Triggers Trigger Type is 'Event
Based'.
Renege Decision Always, Conditional, The method used by an entity when the trigger occurs to decide
Type .Renege Probabilistic whether to abandon waiting in the buffer.
Triggers
Renege Condition Expression Specified The renege condition or probability specified as an expression. If a
Or if the Renege probability then enter the chance of reneging as a value between 0.0
Probability.Renege Decision Type is (0%) and 1.0 (100%).
Triggers 'Conditional' or NOTE: If it is necessary to check in a conditional expression whether
'Probabilistic'. an entity is currently waiting for a specific type of constraint, the
entity 'Queuing' namespace provides several functions for that
purpose (e.g., Entity.Queuing.IsWaitingRidePickupQueue).
Renege Node Node object Facility node location to send a reneging entity.
Name.Renege reference
Triggers
Trigger Start Entered, Ended Indicates when the trigger becomes active for an entity occupying
Boundary.Renege Transfer In the buffer. Can be either immediately when the entity has entered the
Triggers buffer or, alternatively, not until its transfer into the buffer has been
ended (e.g., after a transfer-in time or any other entry related logic).
On New Inflow Repeat Group, Optional state assignments when a new inflow is entering this
Entering ( State Assignments FlowToItemConverter object, which may be either the first inflow to
Assignments) begin creation of a new discrete item or a change in the inflow entity
type.
Before Item Repeat Group, Optional state assignments when a discrete item entity is ready to
Exiting ( State Assignments exit this FlowToItemConverter object.
Assignments)
On Balking ( State Repeat Group, Optional state assignments when an entity is balking at entering an
Assignments) Assignments input or output buffer of the object.
On Reneging Repeat Group, Optional state assignments when an entity is reneging from an input
( State Assignments or output buffer of the object.
Assignments)
Assign If.State Expression Condition required to perform the assignment. Used only with On
Assignments Balking and On Reneging assignments.
Condition.State Expression Custom condition required to perform the assignment. Used only
Assignments with On Balking and On Reneging assignments. 947 / 1277
Assignments with On Balking and On Reneging assignments.
State Variable State Variable Name Name of the state variable that will be assigned a new value.
Name.State or Reference
Assignments
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Process Name
Run Ending Add- Process Instance Occurs when the simulation run is ending.
On Process Name
New Inflow Process Instance Occurs when a new inflow is starting to enter this
Entering Add-On Name FlowToItemConverter object, which may be either the first inflow to
Process begin creation of a new discrete item or a change in the inflow entity
type.
Note that a token executing this add-on process will be associated
with the flow entity that is entering the converter. Also, if the logic of
the specified process includes any delays, then the inflow into the
converter will be paused until the process has completed.
Create Item Add- Process Instance Occurs when a discrete item entity has been created from
On Process Name accumlulated inflow, just before the entity attempts to enter the
output buffer or exit the FlowToItemConverter object.
Item Exited Add- Process Instance Occurs when a discrete item entity has exited this
On Process Name FlowToItemConverter object.
Cleaning Process Instance Occurs when a clean-in-place operation is beginning at the converter.
Converter Add-On Name
Process
Cleaned Converter Process Instance Occurs when a clean-in-place operation is finishing at the converter.
Add-On Process Name
Transfer-Out Disable, Default, Indicates the type of constraints used to determine whether entities
Constraints Custom Condition can transfer out of this fixed object via external output nodes. If
specified as 'Default', then the Can Transfer In & Out of Objects
property setting for the entity type will determine whether an entity
can perform a transfer out of the object.
Transfer-Out Expression The condition required to allow an entity to transfer out of this fixed
Condition object via an external output node.
Report Statistics True or False Specifies if statitsics are to be automatically reported for this object.
948 / 1277
Simio Reference Guide
FlowNode
A FlowNode object is a node specifically designed to regulate the flow of entities representing quantities of fluid or other
mass.
Common applications of a FlowNode object include use as an 'Input' or 'Output' node for controlling flow into or out of
another object (such as an object representing a tank). A FlowNode may be used to model a flow control point in a
network of links.
The output entity type of the outflow from the node can be dynamically changed by assigning the flow node’s
FlowRegulator.CurrentDesiredOutputEntityType' state variable.
The FlowNode allows optional dynamic updating of either maximum flow rate and/or the output yield factor of the node’s
flow regulator. Values are updated based on the Update Interval time specified. Note that the first update is done to the
initial flow rate and/or initial yield value at simulation time 0, and then updated every Update Interval time specified.
Please refer to the SimBit FlowConcepts for models using the FlowNode. Note that FlowNodes are also incorporated into
the FlowSource, FlowSink and Tank objects.
Listed below are the properties of the FlowNode:
Property Valid Entry Description
Flow Rate Volume Flow The unit type to be used for specifying the maximum flow rate of the node's flow
Unit Type Rate, Weight regulator.
Flow Rate
Initial Expression The initial maximum flow rate allowed by the node's flow regulator.
Maximum
Flow Rate
Initial Expression The initial output yield factor for the regulator. This factor is entered as a ratio of
Output output to inflow, and may be used to scale the flow into the regulator such that
Yield there is a physical loss or gain represented in the regulator's output flow.
Factor
Initial Entity Name Optional property specifying the initial desired entity type of the outflow
Output produced by the node's flow regulator. If unspecified, then the output flow entity
Entity type will be automatically determined by the inflow entity types.
Type
Regulator True, False Specifies whether the node's flow regulator is enabled when the system is
Initially initialized.
Enabled
Flow SingleFlow ( No The mode used by the node's flow regulator to control the inflow from inbound
Control Merging), links.
Mode Merge Flow
( Input
Flow
Control)
Inbound By Link Weight, The rule used by the node's flow regulator to prioritize inflows from inbound links.
Link Rule By Flow Priority If the rule specified is 'By Link Weight', then the flow entity on the inbound link
with the largest selection weight will be selected first. If the rule is specified as 'By
Flow Priority', then the flow entity with the largest priority value (regardless of the
link used) will be selected first.
949 / 1277
Switch State Variable Optional discrete variable to use as a switch control mechanism for dynamically
Control Name changing the current inbound link selection. If this property is specified, then the
Variable selection weight expressions of the node's inbound links will be reevaluated
( Input whenever the switch control variable's value changes in order to change priority to
Flow the link with the now largest weight. The inbound link selection weight expressions,
Control) as a typical modeling approach, are recommended to be based on the switch
control variable's current value. For example, enter link selection weight expressions
such as 'MySwitchControlVar == 1', 'MySwitchControlVar == 2', etc.
Flow Expression The expression used to return the priority value of an inflow request at the node.
Priority
Expression
Merge Any Entity Specifies the match conditions required to merge inflow requests at this node into
Matching Type, Same a single output flow. If the matching rule is specified as 'Any Entity Type', then all
Rule Entity Type inflows may be merged together regardless of entity type. If the matching rule is
specified as 'Same Entity Type', then only the inflows of the same entity type may
be merged.
Merge Proportional The allocation rule used by the node's flow regulator to merge inflow from
Allocation Based on inbound links.
Rule Inflow Rates,
Preferred Order
By Link Weight,
Proportional
Based on Link
Weights
Flow Single Flow The mode used by the node's flow regulator to control outflow to outbound links.
Control ( No Splitting),
Mode Split Flow
( Output
Flow
Control)
Outbound By Link Weight, The rule used by the node's flow regulator to send outflows to outbound links. If
Link Rule Shortest Path the rule is specified as 'By Link Weight', then the outbound link with the largest
selection weight will be selected by a flow entity. If the rule is specified as 'Shortest
Path' and the flow entity has an assigned destination, then the next link in the
shortest pah to that destination will be selected. For any flow entity that does not
have an assigned destination, then the 'By Link Weight' is always assumed.
Switch State Variable Optional discrete variable to use as a switch control mechanism for dynamically
Control Name changing the current outbound link selection. If this property is specified, then the
Variable selection weight expressions of the node's outbound links will be reevaluated
( Output whenever the switch control variable's value changes in order to change priority to
Flow the link with the now largest weight. The outbound link selection weight
Control) expressions, as a typical modeling approach, are recommended to be based on the
switch control variable's current value. For example, enter link selection weight
expressions such as 'MySwitchControlVar == 1', 'MySwitchControlVar == 2', etc.
Split Evenly If The allocation rule used by the node's flow regulator to split outflow to outbound
Allocation Possible, links.
Rule Preferred Order If the rule is specified as ‘Evenly If Possible’, then the flow regulator will distribute
By Link Weight, flow as evenly as possible to the node’s outbound links while still maximizing total
Proportional outflow.
Based On Link If the rule is specified as ‘Preferred Order By Link Weight’, then the flow regulator
Weights, will distribute flow in priority order to the node’s outbound links while still
maximizing total outflow. The outbound link with the largest selection weight will
Proportional be selected first, and if that link cannot accept the full output then overflow will be
Based On Link sent to the outbound link with the next largest selection weight and so forth.
Weights If 950 / 1277
sent to the outbound link with the next largest selection weight and so forth.
Weights If If the rule is specified as ‘Proportional Based On Link Weights’, then the flow
Possible regulator will proportionally distribute flow to the node’s outbound links using the
ratios of the link selection weights. This rule will not maximize total outflow, but
rather, will reduce the output to all links as necessary to maintain the specified
ratios.
If the rule is specified as ‘Proportional Based On Link Weights If Possible’, then the
flow regulator will distribute flow as proportionally as possible to the node’s
outbound links using the ratios of the link selection weights, while still adjusting
when necessary to maximize total outflow. For example, if there are three
outbound links designated to receive 20%, 30%, and 50% of the flow and the
outbound link designated for 50% becomes blocked, then this rule will
automatically adjust so that the other two outbound links will receive 40% and 60%
of the flow until the blockage is cleared.
Maximum Expression The expression used to regularly update the maximum flow rate of the node's flow
Flow Rate regulator.
Equation
Output Expression The expression used to regularly update the output yield factor of the node's flow
Yield regulator.
Factor
Equation
Bound Node Name The name of an external output node that this node has been bound to in order to
External transfer flow out of the containing (parent) object. The transfer attempt will be
Output performed by a flow entity immediately upon entering the node and, if successful,
Node any other flow regulator logic for the node will be ignored.
Report True or False Specifies if statitsics are to be automatically reported for this object.
Statistics
951 / 1277
Simio Reference Guide
FlowConnector
The FlowConnector object may be used to define a direct, zero travel distance connection from one flow node location to
another.
Please refer to the SimBit FlowConcepts for models using the FlowConnector.
Listed below are the properties of the FlowConnector:
Valid
Property Description
Entry
Selection Expression The weight expression for this link if using a 'By Link Weight' rule to select an
Weight outbound link from a node.
Report True or Specifies if statitsics are to be automatically reported for this object.
Statistics False
952 / 1277
Simio Reference Guide
Pipe
The Pipe object may be used to define a flow connection from one flow node location to another where flow travel time
and pipeline volume is of significant interest. NOTE: There are known issues with the New Inflow Entering options when
multiple flow entities of the same entity type arrive into a single pipe; currently, the state assignments and add-on
processes are triggered for each unique flow entity.
The pipe may be automatically emptied upon particular event triggers and conditions. These are specified in the Purge
Contents Triggers repeating properties.
State assignments can be made when the Pipe has a new inflow entity type or is full or empty. Additionally, the Add-On
Process Triggers allow additional logic to be specified when using the Pipe object.
Auto Stop If True, False Indicates whether to automatically stop flow through this Pipe object if there is no
No Inflow available inflow.
If this property is set to False and the pipe's inflow rate goes to zero, then any flow
already present in the pipe will continue trying to move at the last desired flow
velocity until the pipe is emptied. Otherwise, if this property is set to True, then all
flow through the pipe will be stopped until the inflow rate becomes positive again.
Purge Repeat Optional event-driven triggers that will immediately remove and dispose any flow
Content Group, present in the pipe, putting the pipe into an empty state.
Triggers Triggers
Triggering Valid Event The name of the event whose occurence will indicate that all flow present in the
Event Name Name pipe is to be immediately removed and disposed of, putting the pipe into an empty
( Purge state.
Contents
Triggers)
953 / 1277
Condition Expression Optional condition to be evaluated whenever the triggering event occurs, and
( Purge which must also be true to purge the pipe's contents.
Contents
Triggers)
Selection Expression The weight expression for this link if using the 'By Link Weight' rule to select an
Weight outbound link from a node.
On New Repeat Optional state assignments when a new inflow is starting to enter this Pipe object,
Inflow Group, which may be either the first inflow to an empty pipe or a change in the inflow
Entering Assignments entity type.
( State
Assignments)
On Pipe Full Repeat Optional state assignments when the pipe's volume has become completely filled.
( State Group,
Assignments) Assignments
On Pipe Repeat Optional state assignments when the pipe's volume has become empty.
Empty ( State Group,
Assignments) Assignments
New Inflow Process Occurs when a new inflow is starting to enter this Pipe object, which may be either
Entering Instance the first inflow into an empty pipe or a change in the inflow entity type.
Add-On Name Note that a token executing this add-on process will be associated with the flow
Process entity that is entering the pipe. Also, if the logic of the specified process includes
any delays, then the inflow rate into the pipe will be paused until the process has
completed.
Pipe Full Process Occurs when the pipe's volume has become completely filled.
Add-On Instance
Process Name
Pipe Empty Process Occurs when the pipe's volume has become empty.
Add-On Instance
Process Name
Report True or False Specifies if statitsics are to be automatically reported for this object.
Statistics
Cross Ellipse, Specifies the geometric shape of this link's cross section.
Section Rectangle,
Shape Trapezoid
954 / 1277
Simio Reference Guide
Project Library
The Project Library is a list of objects (i.e. models) that are contained within a project. The Project Library is found in the
Libraries window, from within the Facility window. It appears under the Standard Library and it can be expanded vertically
in the case of a large library. When a new model is created, it appears in the Project Library. A model can be dragged into
the Facility window of another model from the Project Library. If the model appears grey in the Project Library, this
indicates that it cannot be placed into the active Facility window because that particular model is currently active and you
cannot drag a model into itself.
For information on how to create a new object for the Project Library, see Creating New Objects.
The models within the Project Library can also be viewed in the Project window, where they can be renamed, edited and
deleted. To navigate to the Project window, select the name of the project within the Navigation window. You can also edit
a model by selecting the model from within the Navigation window.
A user can import a library of objects from another project into the current project and they will appear in the Project
Library and therefore available for use in the current project. To import a library, select the Load Library icon from the
Project Home ribbon (or right click in the Libraries panel and select Load Library). Select an .spfx file and the models from
that selected project will then appear in a new Library called MySimioProject. Models from this imported library can be
copied or subclassed into the current project from within the Project window. They can also be subclassed with a simple
right click from the Project Library window. Unloading a library from the Libraries panel can also be done by using the right
click option within that Library.
ModelEntity
You will find one ModelEntity automatically created within a new Project Library. The ModelEntity is the default entity
definition in your project. A user does not need to drag it into the Facility window. A ModelEntity called DefaultEntity is
already part of the Project and can therefore be created by a Source object or with the Create Step without having an
instance in the Facility window. However, if you would like to change the symbol of the Entity or change any of the
properties of the instance, you need to drag a ModelEntity into the Facility window from the Project Library. Additional
instances of ModelEntity can also be dragged into the model.
For information on the difference between Entities and Tokens, see the Tokens and Entities help page.
Listed below are the properties of the ModelEntity:
Property Valid Entry Description
Initial Desired Rate Table The initial desired speed value for objects of this type.
Speed Instance
Initial Travel Free Space The initial travel mode for entities of this type.
Mode Only, 'Free Space Only' indicates that the entities are required to perform travel
Network movements in free space.
Only, 'Network Only' indicates that the entities are required to perform travel
Network If movements using the currently assigned network.
Possible 'Network If Possible' indicates a preference for the entities to perform travel
movement using the currently assigned network, but if no followable network
path exists to the next destination then travel in free space is allowed.
NOTE: Refer to the user-assignable 'CurrentTravelMode' state variable of an
entity to dynamically change its travel mode during a simulation run. An
entity's travel mode may also be changed using the 'Outbound Travel Mode'
property provided by a node.
Initial Network Network The network of links used by objects of this type to travel between node
Element locations. This includes the default 'Global' network and 'No Network
Property (FreeSpace)'.
Network Exit & Re- When traveling on a network, the default method used by objects of this type
Turnaround enter, to turn around at a node in order to move in the opposite direction on a
Method Rotate in bidirectional link. The 'Turnaround Method' property of a Network element
Place, may also be used to override this default on a network-by-network basis.
Reverse
Free Space Direct To The behavior used to steer an entity of this type when traveling in free space
Steering Destination, to a destination.
Behavior Follow 'Direct To Destination' will steer an entity in a straight line to its destination.
Network 'Follow Network Path If Possible' will prefer to steer an entity along a path
Path If following its currently assigned network, staying within the boundries of the
Possible drawn path width. However, if no followable network path exists to the
entity's destination then the entity will be steered in a straight line. Note: In
order to use this steering behavior, make sure the entity's travel mode is set to
'Free Space Only'.
Update Interval Expression The time interval between updates checking an entity's adherence to the
network path.
Avoid Collisions True or Indicates whether the steering behavior will attempt to avoid collisions with
False other entities that are following the same network path.
Initial Priority Expression The initial priority value for objects of this type.
Initial Sequence Sequence An initial destination sequence that objects of this type use for routing
Property purposes.
Initial Cost Expression The initial value of the Cost state for an object of this type, which stores the
total cost that has been allocated to the object.
Initial Cost Rate Expression The initial value of the Cost.Rate parameter for an object of this type, which
indicates a cost per unit time that is to be allocated to the object.
957 / 1277
indicates a cost per unit time that is to be allocated to the object.
Initial Number Numeric The initial number of objects of this type in the system at the beginning of the
in System simulation run. Entities are initially located in free-space at the object
instance location.
Maximum Numeric The maximum number of objects of this type that can simultaneously be in
Number in the system. If this limit is exceeded then a runtime error is generated.
System
Destroyable True or Specifies whether objects of this type can be destroyed using the Destroy
False Step.
Can Transfer In True or Indicates whether entities of this type are by default allowed to transfer into
& Out of False and out of fixed objects via those object's external input / output nodes.
Objects
Due Date Expression The expression used to return a 'due date' value for an entity of this type.
Expression
Gantt Visibility True or An expression evaluated at run time to determine if the entity should appear
False in the Entity Gantt window.
Current Size and State The optional name of a state variable that indexes into the object's associated
Orientation Variable symbol list, and whose value will automatically resize and orient the object to
Index match the size and orientation of the indexed symbol.
Orientation.Yaw Numeric The yaw (or heading) angle in degrees, measured clockwise from -Z, of the
object in the X-Z plane.
Orientation.Pitch Numeric The pitch angle of the object in the Y-Z plane.
Orientation.Roll Numeric The roll angle of the object in the X-Y plane.
Volume Numeric The initial logical volume of the object in cubic meters. If blank, the initial
logical volume will be the implicit volume defined by the Size. At runtime, the
ratio between the logical volume and the Size implicit volume will be kept
constant.
Weight Density Numeric The weight density of an entity of this type in kilograms per cubic meter. The
default value for density is 1 kilogram per cubic meter. At runtime, a change
to Weight or Volume will make a change in the other to make sure Density
remains constant.
Current Symbol Expression An expression that returns a value for the index in the list for the current
Index symbol to display.
Random Symbol True or If true, each new object will be randomly assigned a symbol picture from the
False associated list of symbols which is stored internally.
Note that, since physical sizes are determined by the state variable specified
as the Current Size and Orientation Index (defaulted to 'ModelEntity.Picture'
in new model entities), the physical size of the entity will not change until the
state variable does. To make the entity have both the symbol picture and size
specified by the symbol, set Random Symbol to 'False' and make sure Current
Size Index and Current Symbol Index use the same state variable (which in
new model entities is already defaulted to 'ModelEntity.Picture for you). Then
randomly assign a value to that state variable in process logic.
Current Expression An expression that returns the numeric index or string name of the current
Animation Index animation of the active symbol.
If the expression is not defined, returns an index that is out of the range of the
list of animations, or a name of an animation that does not exist, Simio will
fallback to using the action specified in the Default Animation Action.
Default Expression Indicates if and how Simio will animate objects that don't have an explicit
Animation animation set via the Current Animation Index expression.
Action None indicates no action will be taken. Moving indicates actively moving
entities will be animated with any available forward movement animations
from the active symbol. MovingandIdle indicates actively moving entity and
idle objects will be animated with any available forward movement or idle
animations from the active symbol.
Link Segment Smooth, The type of link movement transitions for this object. Smooth indicates the
Transition Type Immediate object will smoothly move between different angles of the different link
segments. Immediate will immediately change the angle of the object at the
next link segment.
Dynamic Label Expression An expression returning the string to show in a floating label above a
Text dynamic entity at runtime.
Draw Type Single, Indicates the way the entity should be drawn. 'Single' indicates a single
Segmented symbol, scaled to the entity's length, width and height. 'Segmented' indicates
multiple symbols scaled to the entity's width and height, with each symbol
drawn along the entity's length along its occupied links.
*NOTE: To have the entity actually move segmented, this property should be
‘Segmented’ and the entity symbol itself must be able to be segmented. For
example, to animate a train, go to the Project Home ribbon, click New
Symbol -> Create New Symbol, and place a number of individual cars into
the symbol. The new symbol should be applied to the ModelEntity placed in
the Facility window.
958 / 1277
*NOTE: Default values for both the Link Segment Transition Type and Dynamic Label Text can be set within the Definitions
tab / External view of the ModelEntity.
959 / 1277
Simio Reference Guide
960 / 1277
Simio Reference Guide
961 / 1277
Simio Reference Guide
Assigning States
You might be familiar with the term “attribute” or “variable” from other software packages. In Simio, you’ll find States and
Properties.
Properties of an object are the input parameters associated with that object. A Property holds a specific data type. It is a
static input parameter (e.g. processing time, batch size) for the object and does not change during the running of the
simulation. Properties are used to send information between objects (inputs and outputs) and they are also used for
experimentation when a user wants to experiment with using different input parameters for their model.
A State represents a numeric or string value that may change during the run. It is sometimes referred to as a State Variable
because its value can vary during the run. A State can be added to any object in your Project Library. When a State is added
to the main model object, it can be seen and accessed by all the objects within that main model. Therefore, it is similar to
what is often referred to as a “global variable” in other software packages. When a State is added to another object, such
as the ModelEntity object, it is part of that object’s definition. Therefore, a state on a ModelEntity is similar to what is often
referred to as an “attribute” of each entity that is going through the system. For example, if you add a Discrete State to the
default ModelEntity object, called “MyCustomState”, then each entity that enters the system will have MyCustomState on it
and therefore can have a unique value assigned to that State. For example, a State on an entity might contain a value that
specifies this entity’s unique bar code, this entity’s due date or a number that will be used to identify which shipment this
entity should go into. And the value of the state can be updated or referenced during the run with the syntax
ModelEntity.MyCustomState, in an expression.
A common task in simulation is to assign values to a State within the model logic. In Simio, we provide a number of
different ways to make assignments. The easiest and most straightforward way to make an assignment to a State variable is
to use the properties found under the State Assignments category of each object. These properties provide an easy,
straightforward way to make an assignment to a State when an entity is either entering or exiting this object. As an
alternative, you can use the Add-On Process triggers to execute a process, where you can use an Assign Step, along with
other logic, to make an assignment to a State.
Two Different Approaches for Making a State Assignment upon Entering the Server Object
962 / 1277
Simio Reference Guide
Secondary Resources
Secondary Resources
Secondary resources are available within the Server, Combiner and Separator objects in the Standard Library, as well as the
Workstation ( Deprecated) object. Within the Flow Library, the Filler and Emptier objects both contain secondary resources
as well. A secondary resource is simply an additional resource that may be seized and/or released to assist with processing
at the object. Each of the objects mentioned has a 'primary' resource that is included with the object that is used for
processing. You may consider an operator, worker, tool or any other limited resource that is needed for all or part of
processing to be a secondary resource.
Within Servers, Combiners and Separators of the Standard Library and Filler and Emptier of the Flow Library
There are also secondary resources that can be used with the Server, Combiner and Separator objects, as well as the Filler
and Emptier within the Flow Library. These resources are specified within the Secondary Resources section of properties for
the object. The secondary resources section of properties is broken up into three sections, including 'For Processing', 'Other
Resource Seizes' and 'Other Resource Releases'.
Within the 'For Processing' section, any resource(s) specified here will be seized before the entity begins within the object
and will be released once processing is complete. This can be a single resource or one from a list, or can be defined
through a repeat group of multiple resources. The properties are specified directly in the main property window for the
object or within the repeat group, if defined. Resources that are specified as the 'For Processing' will be seized before any
resources specified in the 'Other Resource Seizes' / 'Before Processing' and will be released after any resources in the 'Other
Resource Releases' / 'After Processing'.
Additionally, multiple resources can be specified for seizing / releasing at various other times within the object. For the
Server and Separator, this includes On Entering, Before Processing and After Processing. For the Combiner, it includes On
Parent Entering, Before Processing and After Processing. Within each of these categories, the repeating property editor
may be opened by pressing the small box to the right to enter multiple resources to seize or release at the specified time.
Within each of the 'Other Resource Seizes' sections, the Must Simultaneously Seize property determines whether or not
multiple resources must all be available at the same time before any of them is seized.
Secondary resources allow the user the flexibility to 'carry' resources between objects. For example, you may seize an
operator upon entering Server1 and not release that operator within Server1. Then the entity continues through several
other servers and finally releases the Operator after processing at Server5.
Within any of the secondary resources sections, the resource seized may be 'reserved' if the Keep Reserved If property
expression results in a 'True' or '1' type evaluation. See the Reservations page for more details about keeping resources
reserved. Optional Skip Seize If and Skip Release If expressions can be used for conditional seizing and releasing.
963 / 1277
Within Workstations ( Deprecated)
There are secondary resources that may be used with the Workstation ( Deprecated) object. These resources are specified
within the Other Requirements section of properties for the Workstation and are allocated to the entity for specific
processing tasks within the workstation. Any secondary resources specified in this manner are allocated for setup,
processing, teardown or all activities, based on the Activity Range property specified. The activitites which the resources are
used for are specified within the Secondary Resources repeating property editor. There are no options to keep a resource
'reserved' within this section of Secondary Resources of a Workstation object.
Properties for the 'Resources for Processing' are found within the properties of Server, Combiner, Separator, Filler and
Emptier.
Listed below are the properties of the Other Resource Seizes:
Property Valid Entry Description
964 / 1277
Object Specific, From List The method for specifying the resource object(s) to be seized.
Type
Object List Object List Instance The name of the object list from which one or more resource objects will be
Name Name selected to be seized.
Selection Smallest Distance, The goal for selecting resource objects to seize.
Goal Largest Distance,
Preferred Order,
Smallest Value,
Largest Value,
Random
Selection Expression The expression evaluated for each resource that is a candidate to seize. In
Expression the expression, use the keyword Candidate to reference an object in the
collection of candidates to be seized (e.g.,
Candidate.Object.Capacity.Remaining).
Request None, To Node Indicates whether a move to a specified location will be requested from the
Move seized resource(s). Server activity will not continue until all resources have
arrived to the requested location.
Destination Node Instance Name The name of the specific node location that the seized resource(s) will be
Node requested to move to. It is sometimes useful to use a function of the fixed
object to access its input or output node, such as 'Server.Input' or
'Combiner.Output' to move the resource to a node associated with the
object.
Number of Expression The number of individual resource objects of which to seize capacity units.
Objects
Units Per Expression The number of capacity units to seize per resource object.
Object
Selection Expression An optional condition evaluated for each candidate resource that must be
Condition true for the object to be eligible for seizing. In the condition, use the
keyword 'Candidate' to reference an object in a collection of candidates
(e.g., Candidate.Object.Capacity.Remaining).
Resource Expression Optional value that can alter the rate at which work is performed using the
Efficiency seized resource(s), expressed as a fraction. The actual work duration is the
planned work duration divided by the efficiency. Hence, an efficiency value
greater than 1 shortens the time and a value less than 1 lengthens the time.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to
reference an attribute of the candidate resource objects (e.g.,
Candidate.Object.Capacity).
Set this property to blank to declare the resource efficiency as undefined.
On Seized Process Instance Optional process that is executed by tokens associated with each seized
Process Name resource.
Skip Seize Expression Optional condition indicating whether to skip the seize requirement.
If
Object List Object The name of the object list from which one or more resource objects will be released.
Name List
Instance
Name
Release All, Indicates whether to release all owned resources of the specified type or to release a
Quantity Specific specific quantity.
Type
Number of Expression The number of individual resource objects of which to release capacity units.
Objects
Units Per Expression The number of capacity units to release per resource object.
Object
Release First The order in which to release the resources that have been seized by the entity.
Order Seized
First, Last
Seized
First
Selection Expression An optional conditoin evaluated for each seized resource that must evaluate to true for
Condition the resource to be eligible to be released. In the condition, use the keyword 'Candidate'
to reference an object in the collection of candidates (e.g., Candidate.Object.ID ).
Keep Expression Optional condition indicating whether to keep the released resource capacity reserved
Reserved If for possible later reuse by the same owner object. Other objects will be unable to seize
the reserved capacity unless the reservation is cancelled.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being released (e.g.,
Candidate.Object.Capacity).
Note that when an owner object is attempting to select a resource from a group of
candidates (e.g., from a list or from a population of some resource type), by default a
preference will be given to select a resource that has already been reserved by that
entity irrespective of the specified selection goal.
Leaving this property blank (no condition) is equivalent to entering False.
Reservation Expression If the keep reserved condition is true, then an optional wait time before automatically
Timeout cancelling the reservation.
In the expression, use the syntax Candidate.[ ObjectClass].[ Attribute] to reference an
attribute of the candidate resource object(s) being released (e.g.,
Candidate.Object.Capacity).
On Process Optional process that is executed by tokens associated with each released resource.
Released Instance
Process Name
Skip Expression Optional condition indicating whether to skip the release requirement.
Release If
966 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
967 / 1277
Simio Reference Guide
Specific Time
Specific Time as Process Type
If the Process Type property is specified as 'Specific Time', the entity will be delayed for that specific amount of time
before it moves from the processing station. This is the default behavior for the Server/Combiner/Separator objects and
only behavior for the Server in Simio sprint versions prior to Simio 7.119 (and Combiner/Separator prior to Simio 7.130).
Process Name
If the Process Type property is specified as 'Task Sequence' and the Process Type within the particular Task is specified as
'Process Name', the task is considered finished once the token that was created to execute the invoked process has ended
its processing.
968 / 1277
Submodel
If the Process Type property is specified as 'Task Sequence' and the Process Type within the particular Task is specified as
'Submodel', the task creates a new entity of a specified entity type and then sends that new entity to a specified node (the
starting point for the submodel). The task is considered finished once the entity that was created to execute the submodel
has ended its processing (i.e., has been destroyed).
Resource Requirements
Within each processing task, Simio also supports the definition of resource requirements, which includes specifying the
resource that will be seized and released for the task and whether the resource will be 'reserved' for additional tasks.
The Off Shift Rule property is specified for each particular task. Therefore, if multiple resources are specified through the
use of data tables (see below), the Off Shift Rule is by task and pertains to all resources seized.
Note that the default values for the Keep Reserved If and Reservation Timeout properties (as shown below) are set to 'True'
and 'Math.Epsilon' respectively. If these property values are left unchanged by the user, then by default once the task is
finished the entity will always momentarily keep reserved the resource(s) that were seized to perform the task, just in case
there happens to be an immediate next task whose specified resource requirements will prefer to re-seize (continue using)
the same resource(s).
If there is no immediate re-seize, then the resource reservation(s) will be automatically cancelled at the end of the same
time step as the epsilon reservation timeout period expires. This default behavior is intended to make it easy for the user to
model the same task resource(s) being used for multiple tasks that are performed consecutively.
The Skip Requirement If property allows the user to specify an optional condition that is evaluated for each task. If
evaluated to 'True', any resource(s) requirements specified will not be seized and released.
Material Requirements
In addition to resource requirements for a given task, Simio also supports material requirements, which includes specifying
969 / 1277
In addition to resource requirements for a given task, Simio also supports material requirements, which includes specifying
the material (or bill of materials) that will be consumed or produced for the task. The material (or bill of materials)
consumed or produced may also be associated with a given inventory storage location. A Lot ID (string) may also be
specified for a material.
Note that an Action Type property with choices ‘Consume’ or ‘Produce’ allows the user specify either material consumption
required to start the processing of the task or material production that occurs after the processing of the task is finished.
The material consumption will occur after all resources are seized, but before the Starting Task add-on process. The
material production will occur after the Finished Task add-on process, but before releasing any seized resources.
For the consumption of materials, the user can specify, using the Must Simultaneously Consume property, whether or not all
required materials must be available for material allocation. The Skip Requirement If property allows the user to specify an
optional condition that is evaluated for each task. If evaluated to 'True', any material requirements specified will not be
consumed/produced.
State Assignments
There are three times during a particular task when one or more state assignments can be made. 'Task Ready' state
assignments will occur once all of the task's predecessor tasks have been satisfied and the entity is about to start seizing
require resources and consuming required materials needed for the task. 'Starting Task' state assignments will occur once
all resources and materials have been seized and consumed and the task is about to start. 'Finished Task' state assignments
are made when the task has been finished.
970 / 1277
Once the data table has been generated, data can be entered into the table. Within the Facility window, as shown below,
once the Server has the Process Type of 'Task Seqeuence', the Processing Tasks property will be visible. Right-clicking on the
Processing Tasks property will allow the user to 'Set Referenced Property' to the table named 'Table1'. The name 'Table1'
will then appear within the Processing Tasks property field with a green (reference) arrow. Clicking on the ... button to the
right will open the repeating property editor and the properties within this repeat group will then automatically reference
the table columns within Table1. Any column property that was previously deleted (because it would not be used for
whateever reason) will appear with the property default value.
Within the HealthCareClinic example (See Support ribbon / Examples), there are two servers in the system that help to
process two different types of entities. Data tables are used in this example to store the various information for specific
process tasks, as can be seen in the picture below. Relational tables and key columns are used within this example so that
both Server objects reference the same data table for processing task information, based on the patient (entity) type and
activity (key).
971 / 1277
Using Task Sequences with Data Tables - Multiple Resources, Materials or State Assignments for a Specific Task
Another example of using task sequences with data tables is within the SimBit
ServersUsingTaskSequenceWithDataTables_FlowLine. This small example takes the data table concept a bit further so that
multiple resources (and/or materials or state assignments) can be used within a single process task. Note that, by default,
each task in the Processing Tasks repeating properties has a single resource/resource list specification and single material
requirement. If multiple resources/workers are required for a particular task, the resource requirements can be stored in a
separate data table than that described above. This similar approach can also be taken for specifying multiple materials or
state assignments within a given task. Within an object using the 'Task Sequence' option, the Other Task Sequence Options
section of properties is available. The Task Resources Referenced Table Name, Task Materials Referenced Table Name and
Task State Assignments Referenced Table Name properties have a pull down list of data tables. In the below example, the
'Task Resources' table stores information regarding the multiple task resources for a given task. Within the Processing Tasks
repeating properties, the Resource Requirements properties will then reference a different table than the table that stores
the individual task information. The tables must be relational with foreign key and key columns as shown in the SimBit
documentation.
For more information on structuring Task Sequences, please refer to the Task Sequence element and Task Sequence -
Discussion and Examples.
For SimBit examples that include Task Sequences, please refer to ServerUsingTaskSequence,
ServersUsingTaskSequenceWithDataTables_FlowLine, ServersUsingTaskSequenceWithDataTables_JobShop and
ServerUsingTaskSequenceWithWorkers. Additionally, the HealthCareClinic example includes task sequences using data
tables, as noted in the above discussion.
Listed below are the properties of the Processing Tasks Repeating Properties in Server/Combiner/Separator:
Property Valid Entry Description
Sequence Real Sequence number used to define the task precedence constraints. To model
Number a task sequence that is simply a serially ordered set of tasks, define the tasks
with increasing sequence numbers (e.g., the first task is numbered '10', the
second task is numbered '20', and so forth). Shown if the Task Precedence
Method (Other Task Sequence Options) is 'SequenceNumberMethod'.
For a more in-depth discussion on task sequence numbering including
972 / 1277
For a more in-depth discussion on task sequence numbering including
examples of how to model sequences with tasks processed in parallel, please
refer to the Task Sequence element documentation.
ID Number Integer Unique integer identifier number for the task. Shown if the Task Precedence
Method (Other Task Sequence Options) is 'ImmediatePredecessorsMethod'
or 'ImmediateSuccessorsMethod'.
Branch Type Always, Indicates whether the task is always performed, whether it is instead treated
Conditional, as the first task of a conditional or probabilistic branch in the process
Probabilistic workflow.
Process Type Specific Time, The method used to model the processing of a task.
Process Name,
Submodel
Process Name Process Instance The name of the process that will be executed in order to perform the task.
Name The task will be considered finished once this invoked process has ended.
Submodel Create New (No The method used to create an entity that will be sent to some other distinct
Entity Creation Copying), Copy part of the overall model. The task will be considered finished once this
Method Original Entity created submodel entity has ended its processing (i.e., been destroyed).
Attributes If copying the original entity's attributes, then all possible state values and
table references will be copied from the original entity to the created
submodel entity
.
Submodel Valid Entity The type of entity to be created that will be sent to the submodel. The task
Entity Type Name will be considered finished once this entity has ended its processing (i.e., has
been destroyed).
Submodel Node Name The node that is the starting point for the submodel.
Starting Node
Save Original Entity Reference Optional entity reference state variable to save a reference to the original
Entity State Variable entity being processed at the server. Can be a state variable defined on the
Reference submodel entity, to allow easy access to submodel logic to the original
entity's attributes.
Changeover ChangeoverLogic The name of the ChangeoverLogic element used to determine any sequence
Logic Name Name dependent setup times.
Go to Definitions, Elements to add a new ChangeoverLogic element to the
model.
Resource None, Average, The processing rule used to alter the rate at which the task is performed if
Efficiency Rule Count, Maximum, there are seized resources with defined efficiency values. The actual task
Minimum, Sum duration is the planned task duration divided by the efficiency.
If the rule is ‘None’, then seized resource efficiency is ignored.
If the rule is ‘Average’, then the average seized resource efficiency value is
used.
If the rule is ‘Count’, then the number of seized resources with a defined
efficiency value is used.
If the rule is ‘Maximum’, then the largest efficiency value is used.
If the rule is ‘Minimum’, then the smallest efficiency value is used.
If the rule is ‘Sum’, then the sum of the seized resource efficiency values is
used.
Immediate Valid Integer ID Lists the ID numbers of the tasks which must be finished or cancelled before
Predecessors Numbers this task can start. To specify more than one predecessor, enter multiple task
ID numbers separated by commas. Shown when the Task Precedence
Method is 'ImmediatePredecessorsMethod'.
Immediate Valid Integer ID Lists the ID numbers of the tasks which can't start until this task is finished or
Successors Numbers cancelled. To specify more than one successor, enter multiple task ID
numbers separated by commas. Shown when the Task Precedence Method is
'ImmediateSuccessorsMethod'.
Auto Cancel None,All Event type that will trigger an automatic cancellation of the task.
Trigger Immediate The default setting is 'All Immediate Predecessors Cancelled'. If left
Predecessors unchanged, then the task will be automatically cancelled if all its immediate
Cancelled predecessors in the task sequence are cancelled. This default setting is
recommended if you want conditional or probabilistic branching to
automatically cancel all tasks in unselected branches.
For a more in-depth discussion of this option including examples, please
refer to the Task Sequence element documentation.
Object Type Specific, Select The method for specifying the resource object(s) to be seized.
From List
Object Name Object Name The name of the resource object to be seized.
Object List Object List Name The name of the object list from which one or more resource objects will be
Name selected to be seized.
Selection Goal Smallest The goal for selecting the resource object(s) to seize.
Distance, Largest
Distance,
Preferred Order,
Smallest Value,
Largest Value,
Random
Request Move None, To Node Indicates whether a move to a specified location will be requested from the
seized resource(s). The task will not start until all resources have arrived to
the requested location.
Destination Object Name The name of the destination node to which the seized resource(s) will be
Node requested to move.
Off Shift Rule Finish Work The processing rule used if a resource required for the task is at the end of a
Already Started, shift because of its specified work schedule.
Suspend If the rule is 'Finish Work Already Started', then the processing of the task will
Processing, be allowed to continue until finished. The resource will not be allowed to
Switch Resources accept any new work.
If Possible If the rule is 'Suspend Processing', then the processing of the task will be
immediately suspended. Processing will resume at the start of the resource's
next shift.
If the rule is ‘Switch Resources If Possible’, then the processing of the task will
be immediately suspended. The affected entity will then try to resume the
task'sprocessing as soon as possibly by releasing the resource and seizing
another available one that satisfies the same task resource requirements.
NOTE: This property setting may vary from task to task but not from
973 / 1277
NOTE: This property setting may vary from task to task but not from
resource requirement to resource requirement for the same task. Thus, if
using a table driven approach to define task sequence data, the value of this
property must be either left constant or specified as a column reference in
the table that defines each individual processing task. Referencing a column
in the Task Resources Referenced Table Name (if using that option) is invalid.
Number of Expression The number of individual resource objects to seize capacity units of.
Objects
Units Per Expression The number of capacity units to seize per resource request.
Object
Selection Expression An optional condition evaluated for each candidate resource that must be
Condition true for the resource to be eligible for seizing. In the condition, use the
keyword 'Candidate' to reference an object in the collection of candidates
(e.g., Candidate.Object.Capacity.Remaining)
Resource Expression Optional value that can alter the rate at which the task is performed using
Efficiency the seized resource(s), expressed as a fraction. The actual task duration is the
planned task duration divided by the efficiency. Hence, an efficiency value
greater than 1 shortens the time and a value less than 1 lengthens the time.
In the expression, use the syntax Candidate.[ObjectClass].[Attribute] to
reference an attribute of the candidate resource objects (e.g.,
Candidate.Object.Capacity).
Set this property to blank to declare the resource efficiency as undefined.
Must True, False If multiple resources are required for the task, indicates whether all of the
Simultaneously resources must be available before any can be seized.
Seize NOTE: This property setting may vary from task to task but not from
resource requirement to resource requirement for the same task. Thus, if
using a table driven approach to define the task sequence data, the value of
this property must either be left as a constant or specified as a column
reference in the table that defines each individual processing task.
Referencing a column in the Task Resources Referenced Table Name (if using
that option) is invalid.
Immediately True, False Indicates whether to immediately try seizing the resource before the
Try Seize execution of any other simulation logic in the system and, if successful,
skipping the resource allocation queues.
Setting this property to False will just insert the seize request into the
resource allocation queues. An evaluation of the queues will then be
scheduled on the simulation's current event calendar as a late priority event.
NOTE: This property setting may vary from task to task but not from
resource requirement to resource requirement for the same task. Thus, if
using a table driven approach to define the task sequence data, the value of
this property may only be specified as a constant or by referring to a column
in the table that defines each individual processing task.
Keep Reserved Expression Optional condition indicating whether to keep the released resource
If capacity reserved for possible later reuse by the same owner object. Other
objects will be unable to seize the reserved capacity unless the reservation is
cancelled.
In the expression, use the syntax Candidate.[ObjectClass].[Attribute] to
reference an attribute of the candidate resource object(s) being released
(e.g., Candidate.Object.Capacity).
Note that when an owner object is attempting to select a resource from a
group of candidates (e.g., from a list or from a population of some resource
type), by default a preference will be given to select a resource that has
already been reserved by that entity irrespective of the specified selection
goal.
Leaving this property blank (no condition) is equivalent to entering False.
Reservation Expression If the keep reserved condition is true, then an optional wait time before
Timeout automatically cancelling the reservation.
In the expression, use the syntax Candidate.[ObjectClass].[Attribute] to
reference an attribute of the candidate resource object(s) being released
(e.g., Candidate.Object.Capacity).
Immediately True, False Once the task has completed and released the resource requirements,
Try Allocate indicates whether to immediately try allocating the released resource
When capacity to waiting seize requests before the execution of an other
Released simulation logic in the system.
Setting this property to False will skip immediate allocation. Instead, an
evaluation of the resource allocation queues will be scheduled on the
simulation's current event calendar as a late priority event.
NOTE: This property setting may vary from task to task but not from
resource requirement to resource requirement for the same task. Thus, if
using a table driven approach to define task sequence data, the value of this
property may only be specified as a constant or by referencing a column in
the table that defines each individual processing task.
Skip Expression Optional condition indicating whether to skip the resource requirement.
Requirement If
Consumption Material, Indicates whether to consume a single material or a bill of materials. The
Type BillOfMaterials material consumption will be required to start the processing of the task.
Production Material, Indicates whether to produce a single material or a bill of materials. The
Type BillOfMaterials material consumption will occur after finishing the processing of the task.
Material Name Material Name The name of the material which is to be either specifically consumed or
produced, or whose bill of materials is to be consumed or produced.
Inventory Site None, Indicates the fixed object that is the inventory location. Applies only to
Type ParentObject, material elements whose Location Based Inventory property is set to True.
SpecificObject The 'ParentObject' setting may be used to indicate that the inventory site is
the Server, Combiner or Separator.
Site Object Fixed Object The name of the fixed object that is the inventory location.
Name
Lot ID String Optional string value indicating the lot identifier of the consumed or
produced material.
Must True, False Indicates whether all of the task's required materials must be available
Simultaneously before any can be consumed.
Consume NOTE: This property setting may vary from task to task but not from
material requirement to material requirement for the same task. Thus, if
using a table driven approach to define task sequence data, the value of this
property may only be specified as a constant or by referencing a column in
the table that defines each individual processing task.
Skit Expression Optional condition indicating whether to skip the material requirement.
Requirement If
Assign When Task Ready, Indicates when to perform the state assignment.
Starting Task, 'Task Ready' is when all the task's predecessor dependencies have been
Finished Task satistfied and the entity is about to try seizing or consuming the resources
974 / 1277
Finished Task satistfied and the entity is about to try seizing or consuming the resources
and materials needed (if any) to perform the task.
'Starting Task' is when all of the task's resource and material requirements (if
any) have been satisfied and the processing of the task is about to begin.
'Finished Task' is when the processing of the task has been finished.
State Variable State Variable Name of the state variable that will be assigned a new value.
Name Name
Task Ready Process Instance Occurs when all of the task's predecessor dependencies have been satisfied
Add-On Name and the entity is about to try seizing or consuming the resources and
Process materials needed (if any) to perform the task.
Starting Task Process Instance Occurs when all of the task's resource and material requirements (if any) have
Add-On Name been seized or consumed by the entity and the processing of the task is
Process about to begin.
Finished Task Process Instance Occurs when the processing of the task has been finished.
Add-On Name
Process
975 / 1277
Simio Reference Guide
Example 2
A buffer has zero capacity. An arriving entity balks if it is unable to begin transferring into the next desired location in the
same time step.
Example 3
An arriving entity balks entering a buffer using the following conditional probability distribution:
Example 4
An arriving entity has a maximum tolerable queue length, determined by generating a sample from
Random.Triangular(3,6,15). The entity balks if the buffer’s queue length is greater than its tolerance.
976 / 1277
Reneging Examples
Example 1
An arriving entity enters the queue but will always renege if waiting in the queue between 10-12 minutes.
Example 2
An arriving entity enters the queue but will renege when the event ER_EvalTime is triggered only if the entity's priority value
is less than 3 and there are 5 or more entities in the queue.
977 / 1277
Simio Reference Guide
Reservations
Reservations for Resources (including Resource, Worker and Vehicle within the Standard Library)
The 'Reserve' capability is automatically incorporated into various Standard Library objects with the Secondary Resources
options within Server, Combiner, and Separator. See the Keep Reserved If and Reservation Timeout properties in these
objects. Reservation capability is also available within the Secondary Resource options in the Filler and Emptier of the Flow
Libary.
If there are multiple reservations for the same resource, then standard ranking and dynamic selections rules apply in terms
of the order of who (among the owners with reservations)gets to use the resource. Note that there is no limit on the
number of active concurrent reservations for a resource (i.e., you can have a 100 entities with reservations for the same
resource at any given time). When a resource becomes available, if there are active reservations then it will only allow an
entity with an active reservation to seize it. If there happen to be multiple entities with active reservations waiting in the
resource's AllocationQueue trying to seize it, then the best entity with a reservation per the allocation queue’s ranking rule
and/or the resource’s dynamic selection rule will be the next entity to get the resource. For example, suppose Entity1
( Priority = 1), Entity2 ( Priority = 2), and Entity3 ( Priority = 3) all are trying to seize Worker1[1]. But only Entity1 and Entity2
have reservations. If Worker1[1] is released, it will look in its AllocationQueue for the next entity to seize it. Let’s suppose its
ranking rule is ‘Largest Priority First’. Entity3 is the highest ranked entity in its allocation queue, but that entity has no
reservation so it can’t seize the worker. Both Entity1 and Entity2 have reservations, so Entity2 is the next entity to get the
worker because it has the highest priority among all the waiting entities with reservations.
When attempting a Seize or Ride step, the entity will prefer to immediately select a reserved resource. But if it cannot
select that resource, then it will simply select the best resource immediately available per the specified selection goal/rule
at the Seize or Ride step. For example, suppose an entity is trying to select a resource from a list that has Worker1[1],
Worker2[1], and Worker3[1] using Preferred Order selection goal, and it has a reservation for Worker1[1]. It will prefer to
immediately seize Worker1[1] but if that worker is being used by someone else then the entity will instead seize any
available worker if possible using the specified Preferred Order selection goal. So if Worker2[1] is immediately available
then it will simply seize Worker2[1].
Additionally, within the Transfer node of any Standard Library object, if a Transporter is used for transfer ( Worker/Vehicle),
the Keep Reserved If property is available to reserve the transporter upon dropping off an entity after transport. This then
allows resources to be allocated for transport to a Server, for example, reserved and used for processing at that Server and
then reserved and used for transport to the next destination. It is important to note that if a transporter has a ride capacity
greater than 1 (default), the transporter will not be reserved by the entity(s) riding on the transporter and a runtime
warning will be displayed (see below).
Transfer Node - 'Keep Reserved If' True with Ride Capacity Greater than 1
While many objects include the ability for reservations, Simio also includes this capability within the Steps in the Processes
window. The Reserve step in a process may be used to arbitrarily reserve a resource’s capacity for possible later use.
Reserved resource capacity is capacity that, although unallocated, has been set aside for a specific future owner thus
preventing its use by anyone else without a reservation. The UnReserve step may be used to cancel any reservations for a
resource made by a specified owner up to a desired number of reserved capacity units cancelled.
978 / 1277
There are a number of functions available related to reservations on objects. These include
ResourceName.Capacity.Reserved, ResourceName.Capacity.ReservedTo(owner), and a number of
ResourceName.ReservationOwners.* functions. These are listed on the Functions, States and Events for All Intelligent
Objects page under the Functions available for Intelligent Objects that are Enabled as Resource Objects.
979 / 1277
Simio Reference Guide
Tally Statistics
Tally Statistics
Tally statistics are available within the BasicNode and TransferNode objects, as well as the Source, Sink, Server, Combiner,
Separator and Workstation (Deprecated) external nodes. Tally statistics can be specified when an object enters a node (On
Entered) and when an object exits a node (On Exited).
Within the repeating property editor, the user may select the situation when the tally statitstic will be calculated. The Tally If
property determines whether tallies are generated when an entity enters/exits the node, or when a transporter (vehicle or
worker) enters/exits the node. Alternatively, the tally may be generated when any object enters ('No Condition') or when a
specific condition is met ('Custom Condition'). Multiple tallies can be generated by simply specifying multiple rows in the
repeat group, as shown below.
As with the Tally step within the Processes window, any tallies that are generated with the Tally Statistics section of an
object must have an associated TallyStatistic element defined within the Elements panel of the Definitions window. For
example, in the above screen shot, the Tally Statistic Names of 'Blue_In_Server' and 'Total_In_Server' must be defined.
With either basic or transfer type node, the On Entered tally statistics are generated prior to the 'On Entered' add on
process and crossing capacity (if specified) is allocated. The On Exited tally statistics are generated prior to releasing the
crossing capacity (if specified) and Exited add on process.
980 / 1277
Simio Reference Guide
The example below illustrates a Source object with an add-on process named AssignCustomProperties that is called
just after each entity has been created.
These images are from the Process Window of the new Add-On Process, with an Assign Step that assigns a new State
Variable to the Entity.
981 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
982 / 1277
Simio Reference Guide
Reliability
Reliability
The Reliability section of Properties window is included in the following Standard Library objects: Server, Combiner,
Separator, Workcenter, Resource, Vehicle and Conveyor. This section allows the user to define failure and repair time
information for the object. By default, there are no failures when an object is initially placed in the Facility Window.
No Failures
If the Failure Type is set to 'No Failures', then failures will not occur for the specific object. By default, there are no
failures for an object when it is originally placed in the Facility Window.
Calendar Time Based Failures
If the Failure Type is set to 'Calendar Time Based' failures, the user will specify both the Uptime Between Failures, as
well as the Time to Repair properties. With this type of failure, the simulation clock is used to determine when the
failure will begin.
If the entity is being processed by the object at the time the failure occurs, the entity will stop processing (and its
remaining processing time stored), and the failure begins for the repair time specified. Once the failure has been
repaired, the entity will resume processing at the object.
Note
The standard library objects are defined so that if they go off-shift during a repair, the repair time continues during
the off-shift period. If the user would like the repair time to stop during the off-shift period, the object should be
subclassed and customized.
Examples
Example 1 - Calendar Time Based Failures
983 / 1277
Reliability_Example 1
In this example, the Server may begin processing an entity at time 0.0 for 10 minutes. When the failure occurs at time 8
minutes, the entity processing stops and the failure repair time begins for 2 minutes. Once the failure has been repaired at
10 minutes, the remaining 2 minutes of the entity processing begins.
Example 2 - Event Count Based Failures
Reliability_Example 2
In this example, the Server has event count based failures, based on the event called ‘Tool_Change’. After this event has
been called 10 times, the failure will occur and will take between 3 to 5 minutes, based on a uniform distribution, to be
repaired.
Example 3 - Processing Count Based Failures
Reliability_Example 3
984 / 1277
In this example, the Server has a processing count based failure based on a Uniform distribution between 50 and 100
entities. Therefore, once that number of entities has completed processing through the Server, the failure will occur for a
repair time based on a triangular distribution with a mean of 2 minutes, mode of 4 minutes and maximum of 6 minutes.
985 / 1277
Simio Reference Guide
Day Day Pattern Specifies the Day Pattern to use for this exception.
Pattern Name
End Time Valid Date and Time Specifies the ending date and time for this exception.
Value Real Specifies the capacity value to be used for the duration of this
exception.
Cost Real Specifies the cost multiplier to be used for the duration of this
Multiplier exception.
987 / 1277
Simio Reference Guide
Project Templates
On the File tab, users may select New From Template, which will open an existing project that may include existing data
tables and/or models/objects within the project. Clicking on the New From Template option opens a selection of
templates that are pre-installed with Simio:
A user can create their own templates by just saving a project file, ideally with a Name, Icon, and Description set in the
Project Properties, and saving it to the Project Templates location: C:\Users\Public\Documents\Simio\ProjectTemplates.
Scheduling and Wonderware MES Templates
The two ISA95 Schema templates will automatically add either seven (7) or nine(9) new data tables to the simulation
model, including Resources, Routing Destinations, Materials, Material Lots, ManufacturingOrders, Routings, BillOfMaterials,
WorkInProcess ( Product Based only) and Manufacturing Orders Output ( Product Based only). Within each of the tables,
multiple columns have been added, including key columns to relate several of the tables. The tables have been added to
be similar (although not identical) in structure to the SchedulingDiscretePartProduction example, available through the
Support ribbon, Examples button.
In addition to automatically adding tables to the model, this template also generates three (3) string lists within the
Definitions tab / Lists panel. This includes the RoutingType, MaterialColor and OrderStatus. MaterialColor list includes
None, Red, Green and Blue while OrderStatus includes New and WIP. These string lists are referenced in the various tables
listed above. A Changeover Matrix, named 'MaterialColorMatrix' as well as a ChangoverLogic element named
'SequenceDependentSetupMatrix' have also been originally configured within this template.
The ISA95 Schema templates will also add new Scheduling based objects to the Project, as seen in the Navigation
window, each with a 'Sched' preceeding the original Standard Library object name. These objects are pre-filled with data
for scheduling type examples.
The Wonderware InBatch Schema and Wonderware MES Schema templates adds the lists and tables into a Simio
model that are used to integrate with Wonderware MES. These templates add MES based objects to the Project, as seen in
the Navigation window, each with a 'MES' preceeding the original Standard Library object name. These objects are pre-
filled with data for scheduling type examples. See the Content Ribbon - RPS ( Enterprise) page for more add-ins within
Simio RPS Edition.
For more information on the Wonderware MES add-ins described above, see
http://www.simio.com/downloads/public/software/SimioProductionSchedulingWonderwareMESInterface.pdf.
988 / 1277
Simio Reference Guide
Models can also be subclassed from the Facility window by right clicking on the object in the library window, located on
the left side of the interface.
Creating an Object by Subclassing Another Object Including Default Data Using "Create Object From This" Option
In addition to using the above methods to created a subclass object, objects include the right click option to Create Object
From This object instance. When an object, such as a Server, for example, has already been placed within the Facility
window and property data for that object has been changed from the original defaults, the user may wish to right click and
select the Create Object From This option. This will create a subclass of the same type of object (Server in this example),
load the subclass object with default values from the values of the properties of the existing object and replace the object
with an instance of the new subclass. For example, the user may have an existing Server, named Server2, with a specified
work schedule, multiple processing tasks including workers and materials, and reliability data.
989 / 1277
If the right click option to Create Object From This is used, a subclass Server with its default data coming from the Server2
instance will be created within the project. The Server2 will then also become an instance of that subclass MyServer2 (and
no longer a standard Server). Additional subclassed object instances may be placed in the same model by using the Project
library.
This option for subclassing an object is very useful in "data-driven" models where the user wishes to configure a single
instance of a type of object using table data. This functionality can be used then to create a custom derived object to make
placement of table-bound object instances easier. See the Table-Based Objects (Auto-Create) page for more information.
Subclass objects, such as MyServer2, will be shown in a table column list when the column is an Object Reference 'Object
Type'. Thus, these subclass objects, including data, can be auto-created.
Modifying Data within a Subclassed Object Using "Update ** Object Property Defaults From This" Option
Once an object has been subclassed, either through by right clicking on a library object to Subclass (object) or by using the
Create Object From This (object and default data), the default property data can be automatically updated. By right
clicking on a subclassed object, the option to Update ** Object Property Defaults From This will update the property
information on particular object and all other similar object instances within the Facility window. For example, using
MyServer2 discussed above, the user could change property data within the processing tasks and reliability areas for a
placed MyServer2 instance. Right clicking that MyServer2 instance in the Facility window will give the option to Update **
Object Property Defaults From This. The property values will then be updated within the MyServer2 object, as well as the
all of the instances of that object in the Facility window (not just the one that was edited).
990 / 1277
Object within the Facility Window
New Model
Externally Visible
The input and output nodes for the object whose logic is in the Facility window can also be automatically added to the
External view. This is done by right-clicking on the node and selecting either the 'Bind to New External Input Node' or 'Bind
to New External Output Node' options, as shown below.
991 / 1277
Within the Definitions tab, External window, new nodes are placed that will be used to connect into and out of the newly
defined model logic in the Facility window. For external input nodes, the Node Class Name is specified as 'BasicNode',
Input Location Type as 'Node' and the Node Name is automatically generated. For external output nodes, the Node Class
Name is 'TransferNode' and the Input Location Type is 'None'. It is important to note that with the Transfer Node that is
generated by using 'Bind to External Output Node', the node name is placed in the Facility window's node Advanced
Options area under the property Bound External Output Node. This can be seen in the example below.
IMPORTANT NOTE: An external node cannot be used as both external output node and external input node.
External Window
For an example of using building a new object with logic in the Facility window, refer to the SimBit
FacilityModelWithinModel.
New Object Logic within the Processes Window
The most flexible approach is to create the object definition behavior from scratch using a process model. This is the
approach that was used to create the Standard Library.
Within Simio, we have provided a basis for new object logic within the Processes window, called a Processor. By selecting
New Model > Fixed Object > Processor from the Project Home tab, a new Fixed model is added, and it includes a Station
and Input and Output Nodes. It also includes a process for processing entities, as shown below. Additional logic would be
added between the EndTransfer and Transfer steps within the Processes window.
Processor
For an example of using building a new object with logic in the Processes window, refer to the SimBit
ProcessModelWithinModel.
Objects created by Custom Code
Simio objects are created from Simio Processes, Steps and Elements. A user can create their own custom Steps and
Elements from any .NET language and then use these to create their own Simio objects. User created Steps, Element, Add-
Ins, or Dynamic Selection Rules should be placed in the [Simio Binary Directory]\UserExtensions\ directory. See the
Custom Simio Extensions page and C:\Program Files\Simio\Simio API Reference Guide.chm for additional information
on creating custom logic with code.
Anatomy of an Object
Object Types define core functionality. Object Types include fixed, link, node, agent, entity (agent) and Transporter (entity).
An object type defines a mode of behavior (e.g. provides a pathway between two nodes). An object model defines the
actual behavior of the object within its class (e.g. accumulating conveyor). You, as a user, can define a wide range of
behaviors within each object class.
Properties (static) pass values into the model logic for the object. The properties for the object are shown in the Properties
window, located on the lower right side of the GUI. Standard Library Objects have a fixed number of properties that are
important for the behavior of that object. Sub-classed objects can include the original object properties and also any user-
defined properties. All of the properties for a given object can be found in the Properties panel in the Definitions window.
States (dynamic) change over time. States can be specified as Discrete, Level or Movement. The state names for a given
model can be seen in the States panel of the Definitions window. Additional states can be added in this panel as well.
States can be referenced during the simulation run as they dynamically change over time.
Events fire and trigger actions. Events can be added or changed within the Events panel of the Definitions window of an
object.
External views define the object’s graphical appearance within a Facility window and entry and exit points for the object.
When defining a new model object or modifying a subclassed object, the external view is used to place the external nodes
(entry / exit points), as well as the symbol of the object and graphical queues. The External view is defined in the External
panel within the Definitions window. By default, all objects placed in the Facility window will be automatically shown in the
External view. The right-click menu when an object is selected allows the user to turn off the 'Externally Visible' option on
an object by object basis.
Consoles depict the dynamic state over time. Status labels, plots and buttons can be placed in an object's console to
graphically view the simulation progress and states throughout the simulation run.
992 / 1277
993 / 1277
Simio Reference Guide
External View
The object builder should decide what this object (or model) will look like when it is placed into a model. This is controlled
in the External View under the Definitions window. If the object is built with other objects, the objects will all be visible in
the External View by default. To set an object to not be displayed in the external view, right click on that object in the
Facility window and unselect Externally Visible. If the object is built with processes only, the object builder will need to
create an External View manually and must place External Input and Output Nodes. See the Entry and Exit Points section
below for additional information on this.
Entry and Exit Points
If entities or other types of objects will be entering this object (or model), the object builder should ensure that there is at
least one entry point and exit point defined. If this object is built with other objects, the entry and exit points are usually
nodes. A node can be set up to be an entry point by right clicking on that node in the Facility window and selecting 'Bind
To External Input Node' and this will automatically create a new External Input Node where entities can enter into this
object. An exit node can be defined similarly by right clicking on an existing node in the Facility window and selecting 'Bind
To External Output Node'. If this object is built with only processes and no objects, the object builder will need to create
External Input and Output Nodes in the External View. This is done by clicking on the External Node icon in the ribbon and
placing two nodes into the External View. Make one of these nodes the entry point into the object by setting the Node
Class Name property to 'BasicNode' and the Input Location Type property to 'Station'. Next, select the Station where the
entities should go when they enter into this object. Make the other node the exit point out of the object by setting the Node
Class Name property to 'TransferNode' and the Input Location Type to the default of 'None'.
994 / 1277
Data Tables
If the object (or model) contains data tables, the object builder will need to create Repeat Group properties that will have
the exact same structure as the data tables and will contain the same data. All the references in the model will then
reference the new Repeat Group properties instead of the Data Tables. This is because when you place this model (or
object) inside another model, the Data Tables should live at the top level model, instead of inside this submodel. This will
allow the user to be able to see the data and the Tables and manipulate the data or bind the tables to an outside source.
By creating Repeat Group properties on the submodel and referencing these instead of the Data Tables, this allows the
user to pass data down into the submodel from the top level model. ( Remember that information can only be passed into
an object through properties).
Before this object/model is placed inside another model, the user should export the data from each table to a .csv file.
Next, the user should click the 'Convert to Repeat Group' icon in the ribbon to convert this table to a Repeat Group
property. By clicking this, Simio automatically creates a new Repeat Group property with the same structure as the table. It
also changes all the references in the model to now reference this Repeat Group, instead of the Table. And it renames the
table so the _original is appended to the name. This model is no longer looking at this table for data, but instead at the
Repeat Group property.
The user will go to the new project (the top level model) and load the custom object into this new project so that it
995 / 1277
The user will go to the new project (the top level model) and load the custom object into this new project so that it
appears in the Project Library. The user will place an instance of the object into the Facility window of the model. The user
will then create new Data Tables in this model. To assist in creating a Table with the same schema/structure as the table in
the submodel, Simio gives the users the option to select available Schemas from the drop down available with the Add
Data Table icon. Select the schema of the Repeat Group from the submodel that was just placed into the model. A new
Data table has been created and now the data can be imported from the .csv file. Import the data by clicking the Import
icon.
Next, the user will tell the Repeat Group property on the instance of the submodel to look at this new Data Table for data.
Click on the instance of the submodel that was placed in the Facility window and find the new Repeat Group property.
Enter a reference to the appropriate row in the Data Table so that it maps the data from the Table into the Repeat Group.
An important step that is often missed is that the Repeat Group itself must be set to reference the Data Table, like the
example below.
This will send the data from the Data Table down into the submodel’s repeat group property so that the submodel can use
this information in its logic.
996 / 1277
Simio Reference Guide
The Internal Version of a Simio object is automatically incremented each time a change is made to the object.
To view the existing version of an object, with an object placed in the Facility window, right click on the model and select
Object References / View.
Below is an example of the Internal References window that will appear, displaying the User Defined Version and the
Internal Version number.
997 / 1277
Advanced Tip: In some unusual situations, an object in your project may behave erratically because it has gotten out of
sync with the library it came from. In these cases it may help to use Shift-Click to enter this feature in edit mode. This will
allow you to reset the Internal Version of the object to 0 and reload a fresh definition of the object. To edit the existing
version of an object, with the object placed in the Facility window, right-click on Model and the shift-click on Object
References. This will allow you to edit the Internal Version.
Add / Remove Explicit References
In addition to the above described internal references of a given model, the right click menu on a model also allows the
option for Object Reference / Add/Remove references. The Add/Remove option will open a dialog to allow the explicit
reference to another object definition, without having the instantiate an object of that type inside the model. This is
particularly useful if, for example, the user is creating a custom link with StartingNode and EndingNode are going to be of
type BasicNode or TransferNode. That model may then have an expression, such as
'StartingNode.BasicNode.CurrentTravelerCapacity', for example, because the BasicNode object is explicitly referenced.
Note that this is only needed if you are pulling in references from other projects/libraries. Simio looks at sibling objects in
the same project when resolving name and auto-referencing.
However, in order for a user to know that what changes have been made, these changes have to be added to the object.
This is done via the Describe Changes button on the Edit ribbon of the library.
998 / 1277
Clicking on that option will bring up the Change Description dialog shown below. Note that at this time it is not possible to
tie in the version number with the changes associated with that version.
999 / 1277
Simio Reference Guide
Animation
Animation
In Simo, modeling and animation are done as a single step. You can layout your model with realistic spatial relations that
accurately mimic your real life system. The Facility window is a 3-D drawing space in which you place objects that represent
the physical components of your system. The appearance of these objects can be easily changed by altering the color of
the default objects or replacing the objects with a symbol from the large library of default symbols provided by Simio.
Simio provides symbols in the following categories; buildings, equipment, medical, restaurant, people, vehicles, trucks and
other. But Simio does not limit the user to the symbols provided. The user can import their own images or download from
the Trimble 3D warehouse or Autocad. This feature allows you to incorporate symbols that provide a more realistic feel to
your model.
Simio allows the user to add static symbols, labels and imported screen shots into the model as well. The user can easily
add logic to the model to change the appearance of objects and entities as they change states throughout the run. The
ability to change the view and see the model from a 3D perspective provides a excellent tool for presenting the real life
view of the system. See the example models to see Simio animation in use.
Status Labels, Status Plots, Status Pies, Floor Labels, Circular Gauges, Linear Gauges, Stacked Bars and Buttons can be
placed in the Facility Window. They can also be attached to objects in the Facility Window. If they are attached to Entities
or Transporters, they will travel with those dynamic instances. They can be placed in the External and Console views as well.
To see specific information about this features, see the Console help page.
A user can create Named Views which is a saved view of the current position and orientation of the camera. These named
views can then be combined into a series of camera sequences, which can then be played back by the user. The user can
also record an .avi video of the animation of a model by using the Record Run Animation button. Named Views, camera
sequences and .avi recording can all be found on the View ribbon.
1000 / 1277
Simio Reference Guide
Symbols
Symbols
A user can add animation components, such as attached queues and status labels, as well as download, import and create
new symbols from the Symbols tab ribbon. Symbols can be added as static objects within the Facility window or they can
replace the standard Simio symbol of an object. For example, to change the symbol of the Default Entity from a green
triangular to a custom symbol, simply select the entity object and then either select a symbol from the Simio symbol
library, import a symbol from an existing file or go to the 3D Warehouse to download a symbol for importing.
There is also a special case when you use an attached Status Label on a Dynamic Object. If the Status Label is attached to
an object, but is referencing another object, the object and its parent must be specified. For example, to reference a
resource in a function while the Status Label is attached to an entity (or other object), the resource should referenced as
'Model.ResourceName' not just 'ResourceName'. See the below example screen shot.
'ModelEntity.SeizedResources.CapacitySeizedOf(Resource)' is the original expression if used in a Decide step, for example.
However, because the Status Label is attached to the ModelEntity, the name of the resource must be specified as
Model.ResourceName so the attached label looks like 'SeizedResources.CapacitySeizedOf(Model.ResourceName)'.
1001 / 1277
Downloading, Importing and Creating New Symbols
Downloading
A symbol can be downloaded from the Trimble 3D Warehouse. This is a site on the web that contains hundreds of
thousands of 3D images that you can incorporate into your model. To download a symbol, go to the Project Home tab in
the ribbon menu and click on the New Symbol icon. Select the option for Download Symbol and you will be connected to
the Trimble 3D Warehouse. You must have an internet connection to access this website.
After the symbol has been selected from the Trimble 3D Warehouse and the user downloads it, Simio will display the new
symbol in an Import pop up window.
The image is first shown in 2D but can also be viewed in 3D by clicking on the 3D icon in the top left corner of the import
window. The large blue arrow on the image shows the user which direction Simio will consider to be the front of this
image. If the user wishes to rotate the symbol, the Rotate icon provides options for rotating at 90, 10 or 1 degrees
clockwise or counterclockwise.
The image of a person is displayed next to the symbol to provide a hint regarding the size of this symbol as compared with
the size of a human in the Simio application. The user can resize the symbol (in terms of meters) with the length, width and
height boxes in the Object Size panel.
In addition to displaying the downloaded image in Simio, the Sketchup file is also stored in the \My Documents\My
Simio3D Warehouse Downloads directory of your computer. Trimble SketchUp (free download) can be used to customize
an image (e.g. adding or removing components or changing colors).
Importing
A symbol can be imported from a file, such as a symbol created in Trimble SketchUp or AutoCAD (*.dxf and *.dwg).
AutoCAD is a very popular standard supported by many products that features both 2D and 3D drawings. (Note: Not all
1002 / 1277
AutoCAD is a very popular standard supported by many products that features both 2D and 3D drawings. (Note: Not all
products follow the standard closely so results may vary on *.dxf/*.dwg files generated from programs other than
AutoCAD.) Symbols can be imported from a .jpg file and the symbol will become a 2D image. Simio supports importing
from a number of 3D formats, which can be viewed by selecting the All Items button when performing the import for
opening a particular type file.
To import a file, go to the Project Home tab in the ribbon menu and click on the New Symbol icon. Select the option for
Import Symbol and find the file to import. The symbol will be displayed in the Import Window and can be resized and
rotated similar to a downloaded symbol discussed above. Or if you'd like to import a symbol for an object, select the
object and then click the Import Symbol icon in the Symbols ribbon menu. For more information on importing animation
symbols (e.g. people that walk, run, jump, etc.), refer to the Animating Moving Objects (Walking People) page.
With regards to importing 2d and 3d symbols, *.png format is the only 2d image format imported that has
translucency/alpha values in it. Please note that translucency in 3d files is different than 2d files. Importing files that include
transparency depends upon whichever materials are defined in the 3d model.
Exporting a Simio symbol and Using a Simio Symbol in another project
A symbol can be exported out of Simio. It is saved as a Simio specific format(.ssfx). The symbol can then be used in
another project. In order for the symbol to be used in another project, it must be placed in the correct directory on your
computer so that Simio can recognize it. You should be able to find the Symbols folder under
\Public\PublicDocuments\Simio. Any .ssfx files placed in this folder will be recognized by Simio and will be accessible via
the Place Symbol drop down menu from the Drawing Ribbon tab.
Creating New Symbols
A new symbol can be created by the user using the drawing tools, colors and textures. This new symbol can be exported
so that it can be reused in other projects. When it is exported, it is stored in [public documents]\Simio\Symbols. To create a
new symbol, go to the Project Home tab in the ribbon menu and click on the New Symbol icon. Select the option for
Create New Symbol and a new window will appear where you can create the new symbol.
There are two windows that are available, Design and Look, as shown below. Within the Design window, any existing
symbol is shown (from our library of symbols, for example). A new symbol can be added by using the various buttons on
the Drawing ribbon. Within the Look window, various 'looks' can be applied to the same single symbol 3d geometry. Each
look may have a different texture or color. When multiple looks are applied, the symbols then appear within the symbol
library as multiple symbols to be selected. As an example, Simio's animated people are really a single 3d geometry model,
but N textures applied. This saves on both disk and video memory as opposed to having X different symbols with the same
geometry.
1003 / 1277
Symbols, Textures and File Size / Run Performance
When downloading and editing symbols, there is some symbol size information to keep in mind. First of all, using images
with low polygon count will keep the project file size small. Additionally, using lower fidelity 3D models may make your
animation run faster, but it is highly dependent on your particular graphics card and CPU. And finally, there is no difference
in drawing speed for stationary or moving objects. 100 stationary servers will draw just as fast as 100 moving entities.
However, the simulation itself may be slower with moving objects because of the additional logic involved.
When deciding on textures for symbols, keep the following information in mind. The advantage of .dds files is potentially
significant memory savings when rendering them. The size on disk is the size in memory. Unlike something like a .jpg file
where the size on disk is often significantly smaller than the size in memory. The possible disadvantage to .dds files is that
they are dependent on driver support, and users may run into problems on some drivers/graphics settings. Users can force
the emulation of DDS support by setting File->Settings->Graphics->Compressed Texture Hardware Support to
“Disabled”. To generate a *.dds file, users can download a tool, for example Paint.NET (http://www.getpaint.net/), which
can convert image files into *.dds format.
1004 / 1277
Simio Reference Guide
Drawing
Drawing
A user can add symbols, lines, rectangles, ellipses, curves, polygons and labels to the Facility Window or External Window
of their model.
You can also change the color of any object or add texture to the object. After adding these drawings to the model, the
user can change the line style, the object's height or the line width by selecting the object (i.e. curve) and viewing the
Drawing tab.
With polylines and curves, additional vertices may be added or removed by using the Add Vertex and Remove Vertex
buttons on the Edit ribbon. When a polyline or curve is selected and the Add Vertex button is pressed, the polyline or curve
will get an extra vertex added to the end. You may click to place the vertex anywhere in the Facility window. If the new
vertex is placed on the line between two other vertices, it will be added to the middle section of that line. If the new vertex
is placed outside of the line, it will be added as a vertex at the end of the line. To remove a vertex, simply click on the
vertex to remove and select the Remove Vertex button and the line will be redrawn.
NOTE: Multi-Select of objects, as well as Ctrl-X ( Cut), Ctrl-C ( Copy), and Ctrl-V ( Paste), are supported for all items on the
Drawing tab. Please refer to the User Interface for more details.
Adding Labels to the Facility Window
Simio provides the ability to add two different types of labels to the Facility Window. The Floating Label is simple, one line
of text. The text size, font or color cannot be changed in this label. It is similar to the labels that are attached to the objects
that are placed in the window. In both 2D and 3D view, the label will always remain faced at the screen (upright in the Z
direction).
The Floor Label draws a text box on the floor of the Facility Window. Therefore, in 3D view, the label remains flush to the
floor. It has more flexibilty for changing the appearance of the text. Once the Floor Label is drawn in the Facility Window,
select it to see the Appearance Tab in the Ribbon. The Appearance Tab allows you to control how many characters per line
will appear in the label. The background color for this label can easily be changed by clicking on the Background Color
icon. You can also change the text for the label by clicking the Edit button found in the Text group of the Ribbon. A Label
Text dialog will appear where you may change the text. In order to change the appearance of the text, you can use the
following tags:
<b> and </b> will make the text bold
<i> and </i> will make the text italic
<u> and </u> will make the text underlined
You can change the color of the text by putting the name of the color in a tag, such as <red>
The font of the text can be changed by putting the name of the font in a tag, such as <font name="Arial">
Floor Labels can also show the value of expressions. To specify an expression put it between curly braces. For
example, a label with the text “The current day is: <b>{ Math.Floor( Run.TimeNow/24)}</b>”, at hour 50, would show
“The current day is: 2”, with the 2 in bold text.
1005 / 1277
If using the Default Font (not specifying a particular font, for example <font name="Arial">), you can choose the Default
Font ‘spacing’ for the floor label. The Proportional and Fixed buttons don't affect the overall text layout, only the text not
surrounded by <font> tags. The default Proportional font is “Tahoma” while the default Fixed font is “Consolas”.
1007 / 1277
Simio Reference Guide
When the object is selected in the Facility Window, the user can change the properties of the object instance in the
Properties window. The user can change the Current Symbol Index property and put an expression that will return a value
that is the index in the associated symbol list - the symbols that are displayed in the Active Symbol list. Whatever value is
returned by the expression in this property will determine which symbol is displayed during the run. The value returned
must be an integer so that it corresponds to a value in the symbol list.
When the Random Symbol property is set to 'True', each new object will be randomly assigned a symbol from the
associated list of symbols. Note that, since physical sizes are determined by the state variable specified as the Current Size
Index (defaulted to ModelEntity.Picture in new model entities), the physical size of the entity will not change until that state
variable does. To make the entity have both the symbol picture and size specified by the symbol, set Random Symbol to
'False', and make sure the Current Size Index and Curren Symbol Index use the same state variable (which in new model
entities is already defaulted to 'ModelEntity.Priority' for both properties), then randomly assign a value to that state
variable in process logic.
In the example below, the expression in the Current Symbol Index is ModelEntity.Picture. This is a built-in state variable
that can be used to hold a value for the entity symbol.
Properties Window
1008 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1009 / 1277
Simio Reference Guide
A user may use a numeric index for the animation by removing the Animation string state and adding an Animation real
state OR by adding a different real state and changing the Current Animation Index property value appropriately.
Alternatively, the Current Animation Index property may be set to a string or numeric value directly in the property field
itself. See the examples shown below under Current Animation Index.
Animated People and Animations for Simio’s Library\Animated\* Directories
Within the Project Symbols on the Symbols ribbon, there are a number of animated people that come automatically with
Simio. They are located within Library\Animated\* directories and include a number of male and female symbols, as well
as children, elderly persons, and toons. Within a given directory, the symbols are similar, with the each having different
clothing (textures). An entity symbol may be changed from the default green triangle to an animated person by selecting
one of the available animated symbols within the directory.
Once placed in a model, a symbol is associated with one or more animations. To get a list of available animations for a
given object, be sure the object's Active Symbol is one with animations, then right click on the object and select List
Animations of Active Symbol, which brings up a simple dialog with a list.
1010 / 1277
Note that the animations above have both a numeric and string value. If using the default ModelEntity.Animation state, the
string value would be assigned. If using a numeric state, the numeric value would be assigned.
For example, in an Assign step when the entity is created, you may assign ModelEntity.Animation =
Random.Discrete(“Walk”, .25, “Run”, .5, “Sit”,.75, “Dance”,1). In this case, 25% of the entities created would walk through the
simulation, another 25% would run, another 25% would sit and the remaining would dance.
IMPORTANT NOTE: Animations in the list are case-sensitive. If the animation is not exactly as noted when assigned, the
default animation will be the first one listed. All animations in the list are consistent for animated symbols (i.e., all have the
same 21 animations listed above).
Current Animation Index
The Current Animation Index allows the animations to be listed by either name or number, so any of these values would be
correct within the Current Animation Index property field (using the animations shown above for the woman):
21 – This will make the entity dance.
“Walk Pushing” – This will make the entity walk as though they are pushing something.
ModelEntity.Animation – This will look at the entity’s ModelEntity.Animation string value to determine what the
animation will look like – when an entity is created, for example, you could assign ModelEntity.Animation =
Random.Discrete(“Sit Driving”, .5, “Stand Texting”, 1) such that 50% of the entities will sit and appear to be driving
and the other 50% will stand and appear to be texting.
ModelEntity.NumericProperty – This will look at the entity’s ModelEntity.NumericProperty integer value to determine
what the animation will look like – similar to above, except that with this property, if it is a real or integer value, you
may assign it to ‘9’ for walking, ‘21’ for dancing, etc.
Not having the expression defined, returning an invalid index (like 0 or something beyond the bounds), or an invalid name
(like empty string ""), makes Simio fallback to doing the default animation, based on the Default Animation Action
property.
Default Animation Action
The Default Animation Action property can be one of the following values:
None - Simio will have no default animation.
Moving - Simio will have default animation when the object is moving, and Current Animation Index did not provide
an explicit animation.
MovingAndIdle - Simio will have default animation when the object is moving or when it is idle, and Current
Animation Index did not provide and explicit animation.
Default Animation Action and Current Animation Index will be disabled unless you have at least one symbol applied to the
object that has animations in it.
Refer to the SimBit AnimatedPeople for several examples of animating moving objects.
-----------------------------------------------------------------------------------------------------
Importing New Animations
1011 / 1277
Simio includes a number of Animated symbols (male and female), which can be found in Library\Animated\People. Users
also have the capability to import their own animations.
New animated symbols can be imported using either the Project Home ribbon, New Symbol button ( Import Symbol) or by
highlighting an existing symbol in the Facility window and selecting the Import Symbol button from the Symbols ribbon.
Typical 3D files have a *.dae (digital asset exchange) filename extension and are in COLLADA (interchange file format for
interactive 3D applications) file format. Once imported, there is an Import Options dialog that allows the user to specify
several features.
Ignore Uncolored Faces property determines if the import will ignore any faces without color or texture information. This
value is set to ‘False’ as a default. The Load Material property determines if any material settings, such as color and texture,
will be considered. This value is set at ‘True’ as a default. The Split Animation File property is a path to a text file that
describes how the first animation should be split, with an entry on each line of the file in the form N1-N2 Name, where N1
is the start frame, N2 is the end frame and the Name is the animation name.
Once the Import Options dialog is accepted, the Import dialog is displayed. This includes options to specify the size of the
symbol, name, and rotations options on the Import tab.
Additionally, there is an Animation tab on the import dialog. This includes two buttons, Default Forward Animation and
Default Idle Animation, as well as time / distance fields, and Play/Stop buttons.
Default Forward Animation is enabled when Distance is > 0, and disabled otherwise. When enabled, it defaults to True.
Default Idle Animation is enabled when Distance == 0, and disabled otherwise, it defaults to False.
When a selected animation has Default Forward Animation turned on, it will be included in the set of animations Simio
looks at when trying to do "default animation" for some agent that is currently moving.
When a selected animation has Default Idle Animation turned on, it will be included in the set of animations Simio looks at
when trying to do "default animation" for some object that is NOT currently moving.
Default Idle Animation Example:
Below, you will see that the ‘Idle’ animation was selected (under the Name property) and the Distance is specified as ‘0’.
The Default Idle Animation button is available, and in this case it is selected, as an idle animation symbol to be displayed
for the idle activity. Note that when the button is selected, it will appear in ( ) next to the animation name on the dropdown
list.
1012 / 1277
Default Idle Animation Example:
Below, you will see that the ‘Walk’ animation was selected (under the Name property) and the Distance is specified as ‘0.1’.
The Default Forward Animation button is now available instead of the Default Idle Animation button. The Play and Stop
buttons may be used to see what the animation will look like, for example, how fast the person appears to walk. Once the
Default Forward Animation button is selected, the ( ) will be shown next to the animation on the dropdown and the
animation will be available for use within the simulation.
The function key, F11, allows the capability of collapsing all of the ribbons and other windows so that the simulation
animation can be seen on the full screen. Pressing the F11 or Esc key while in full screen will then put back the ribbons and
windows that were collapsed. The F11 key can also be used in all other windows, such as Processes, Data (for tables),
Results, and Experiments.
View
The 2D icon changes the view to a 2D top down view. This is the default view. Left click on any empty space and drag to
pan. Right click and drag up and down to zoom.
The 3D icon changes the view to a 3D perspective view. There are many ways to move around in the 3D view including:
Left click on any empty space and drag to pan
Right click and drag up and down to zoom and drag left and right to rotate
Left-click and drag any object to move it in the horizontal plane
Ctrl and drag any object to move it on top of another object
Ctrl and drag any object selection handle to rotate it
Left-click to select a node object
Ctrl+Shift and left-click on a node to start drawing a link
Scroll wheel standard zoom in and out
Alt+Wheel for 10x finer zoom than the standard zoom
Ctrl+Scroll wheel changes the viewing angle of the camera
Shift+Scroll wheel moves the camera straight up and down
Up arrow moves forward
Down arrow moves left
Left arrow turns left (or moves left in top-down mode)
Right arrow turns right (or moves right in top-down mode)
Shift+Left arrow moves left
Shift+Right arrow moves right
[W] key sets the camera 1.7 meters off the ground, with the angle pointing almost straight out (i.e. “walking mode”)
Pinch-to-zoom and two-finger-rotate gestures are also supported, provided user has a touch screen
The View All icon brings all objects into view within the window.
The Auto Rotate icon starts auto-rotating the view. The user can click on any empty space to stop the rotation. Once auto-
rotation is stopped, the view will remain where it currently is.
The Walk icon sets the camer 1.7 meters off the ground, and has the same function as the [W] key listed above.
The Background Color icon will change the background color of the entire Facility window floor in both the 2D and 3D
views.
The SkyBox icon opens a library of static and dynamic scenes that can be placed in the 3D animation. Dynamic scenary
includes several options for clouds that move with the animation as the model runs. Typically, the Speed Factor should be
set to 5 - 10 or greater to see movement. Static skybox options include many outdoor scenes. The 'None' option will
remove any existing skybox. Users can create their own SkyBoxes as well. The “library” skyboxes are simply *.zip files with
images inside them with the names front, back, left, right, top, bottom. They don’t need to have all of those names in them,
Simio will use whatever ones it finds. They are located in the Skybox folder under \Public\PublicDocuments\Simio.
The Day/Night Cycle icon is available if the SkyBox is set to a dynamic skybox. This on/off icon indicates if the animation
should alter the ambient light and display a moving sun and moon in accordance witht a day/night cycle.
Snap to Grid will snap moving object or handle locations to grid lines to allow for object alignment. The snap locations
will be dependent on the grid level. In the below diagram, the left grid shown is the default zoom location and objects will
snap to those larger grid lines when placed. The right grid shown is zoomed in several times and displays more granular
grid lines, in which case, the objects will snap to those smaller grid lines. Thus, zooming in within the Facility window will
provide the user with more precise placement. Both Grid and Snap can be turned on/off using the right-click menu or
pressing the G (Grid) or S (Snap) keys.
Additionally, Snap to Grid also snaps rotations of objects. When rotating objects with snap enabled, the object will rotate
in 15 degree increments (thus 4 rotations to move the object 90 degrees).
1014 / 1277
When placing objects, note that the center of the object is the location of the snap to grid. When snap is turned on and a
link is being drawn, or a link vertex moved, Simio will not only snap to the grid, but snap to the closest *visible* (on the
screen) node. A dashed blue line will show what node caused the snap, as shown below.
Named Views
Named Views allow you to place the camera at a location and save that view for later using Add View. You can either pick
a specific view to go to, or cycle through them using the Change View option. Change or delete a specific view using the
Manage Views option. Named views may have a name as well as a 'HotKey' that will allow users to simply press the
HotKey on the keyboard and move to that particular view.
Map
There are two button options under the Maps section of the ribbon. The Set Map Location button provides options for
setting the latitude and longitude coordinates of 0,0 in the model. The Map View option provides a drop down list of
options for the type of map to see, from various online sources. Additional information on maps and creating links
between nodes using the maps can be found on the Maps page.
Camera Tracking
There are three buttons in the Camera Tracking group, including Change Item and Camera Placement buttons and a
small options button, which opens a Camera Tracking Options dialog. These icons are disabled until you enter run mode
and have at least one item for tracking. As shown below, the right-click option on any Agent, Entity or Transporter (this
includes Workers / Vehicles) allows the selection of the 'Trackable with Camera' option. When selected, the camera icon will
have a small square around it. Once the 'Trackable with Camera' option is selected, the agent / entity / transporter identifier
will appear on the Change Item list. Selecting 'Trackable with Camera' when the item is already on the Change Item list will
remove it from the tracking list. By default, all non-destroyable agents, such as Workers and Vehicles, are put onto the
Change Item list for selection at the start of the simulation run. If there are no Workers or Vehicles in your model, the
Change Item button will remain disabled in run mode, until you have selected 'Trackable with Camera' for a particular
object such as an entity.
When running, you can click on the button part of Change Item to cycle between tracking different items in the model, or
1015 / 1277
When running, you can click on the button part of Change Item to cycle between tracking different items in the model, or
tracking nothing, and letting you move the camera where you wish. If you click the drop down part, you can select a
specific item, or [None], meaning you want to turn off tracking.
The Camera Placement dropdown allows you to change the perspective of tracking and how you would like to track the
object. Options include 'Move camera with object', 'Watch from a distance', 'Follow behind' and 'Lead in front', providing
multiple camera angles from which to view agents. When an item you are tracking (such as an entity) gets destroyed, Simio
will put you back to the view you were when you first selected the item to be tracked.
Within the Camera Tracking Options dialog, the Follow Distance Ratio property indicates how much closer or farther the
camera should be than the default distance when following an object from behind. A value 0.5 would follow twice as close,
whereas a value of 2 would follow twice as far. A larger distance ratio is useful to view more of the Facility window when
following an entity or object.
Camera Sequences
Within the Camera Sequences group, there are options to Edit and Play. A Camera Sequence is a sequence of instructions
that can be played back either by selecting the Sequence under the Play button, or by using a hotkey associated with the
sequence. Therefore, the Edit button allows you to Add / Edit / Delete an entire sequence of named views or a particular
view within the sequence. To add a camera sequence, simply type a sequence name in the Name column and an associated
key in the HotKey column. You will then be able to expand the sequence by pressing the + button. This will open the Views
dialog for inputting the specific Named View, Seconds to Stay (at that particular view), and the Seconds To Next View (to
change between the views).
The Play button will display the available sequences that may be selected. Once a sequence is selected, Simio will rotate
through the various views. If there is currently a sequence playing, a small icon will be displayed in the lower right corner
with the sequence name. The sequence will stop if the user performs any other action (i.e., such as changing the view,
mouse click, etc.). Once all views have been displayed, the camera will remain at the last view specified.
Video
The Video group contains the Record Run Animation and Stop Recording buttons. These buttons allow the user to create
an .avi recording of the model animation. Clicking on the Record Run Animation button will prompt the user to choose a
name and location for their .avi file. The user will also be prompted to select a video compressor. The options that the user
will be given will vary depending on what is installed on the PC. We recommend using a state of the art codec, like DivX,
Xvid, x264, ffmpeg, or others. Once the user begins the interactive model run by clicking the Run button, an .avi video of
each animation frame will begin. The recording stops when the model runs ends or when the user clicks the Stop Recording
button.
1016 / 1277
The video will record the animation in the working space of the Facility window. If the user switches into another Simio
window while the recording is occuring, whatever is present in the same defined space as the Facility window, will be
recorded. For example, if the user switches over to the Data window during the recording, the tables will be recorded, but
the left hand panel will not be in view, assuming the Library Panel was expanded in the Facility window. If the user collapses
the Library panel before recording, the working space will be increased, thereby creating a larger area for animation
capture both in the Facility window and other windows. To begin recording in full screen mode, click the Record Run
Animation button, hit F11 to get to full screen mode and then hit F5 to begin the model run.
If the user switches into an application outside of Simio, whatever is shown in that same Facility window space is also
recorded. This allows a user to animate a model running in the Facility window and then switch over to a spreadsheet to
show external data and then move back into Simio to show more animation or possibly another Simio window, such as the
tables in the Data window.
1017 / 1277
Simio Reference Guide
Maps
On the View ribbon, there are two button options under the Maps section. The Set Map Location button provides options
for setting the latitude and longitude coordinates of 0,0 in the model. This setting will be used for things such as placement
of the background map, if enabled. The Map View option provides a drop down list of options for the type of map to see,
from various online sources. The option selected will set the map tile source for the current view. It is important to note that
the map is only displayed with the model when the user is connected to the internet with access to the map; the map does
not become a permanent part of the model itself.
The options within the Set Map Location are utilized when a map is displayed. The By Latitude and Longitude option
always shows the current lat/long to which the map is centered.
Users can change the default latitude and longitude by using the By Address option. Please note that By Address will only
find an address when a map is currently loaded. The Find Address dialog will appear where the user can enter a specific
street address, city and state name or particular landmark (as shown below). A dialog will then ask the user to select the
specific address from the list, providing a list of possible options based on the original user input. Once the location has
been entered, the map center will move to the particular location and the default coordinates within the By Latitude and
Longitude dialog will update.
There is also an option to set the map location to the computer's current location, provided the computer graphical
location is enabled. The options for setting the computer location vary by operating system.
Note that Simio uses a “Web Mercator” (https://en.wikipedia.org/wiki/Web_Mercator) projection to convert from the
spherical lat/long coordinates to our 2 dimensional x,y,z coordinates. This simply means that things close to the equator are
their actual size, while the further you get away, the more distorted they become. Additionally, not only does Simio use
that projection, but it further scales down the size so that things close to 0,0 are much closer to their actual meter offsets
from that location. If a user zooms all the way out, they may find the world's width does not match the earth's
circumference.
1018 / 1277
Moving an Object to a Specific Map Location
When the map is enabled, any similulation object may be moved to a given location within the map as well. This can be
done by right-clicking on an object (such as a BasicNode, Server, or TransferNode, for example), selecting the Move Object
option and moving the object to a latitude and longitude, address or computer's current location.
This add link option will call out to a routing service to get the road route between two geographic locations. It will set the
resulting link’s Drawn to Scale property to 'False', and set the Logical Length property to the measured length of the entire
route. Below you see the link that was drawn from the two nodes selected in the above diagram:
1019 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1020 / 1277
Simio Reference Guide
Visibility
Visibility
From within the Facility Window, the Visibility Ribbon can be used to toggle on and off various objects, as well as view the
networks.
When the Grid, Axes, Labels, Node Labels, Arrows, Links, Nodes, Queues, Status and Buttons icons are highlighted,
this indicates that they are visible within the window. If the user clicks on any of these icons and unhighlights it, the
particular feature will not appear in the window. It is important to note that when an feature is not visible, it also is not
editable. Therefore selecting, copying, deleting, etc. of groups of objects will not select anything that is not visible. An item
must be made visible first before it can be edited.
The Direct Shadows icon shows or hides shadows from a directional light source, like the sun. The light source in Simio is
fixed in the corner at a 45 degree angle. However, if Direct Shadows are used in conjunction with a dynamic Skybox and
the Day/Night cycle, the shadows will be adjusted for the change in the light source. The Diffuse Shadows icon shows or
hides soft shadows from other objects interacting with the illumination of an object. Only one of the shadows icons may be
on at a time. Note: If running Simio under DirectX or OpenGL software fallback, shadows will not work.
The Entity Instances icon determines whether or not the Entity and Transporter instances will be visible while in run mode.
If disabled, any instances that exist when going into run mode will be hidden and then shown again when leaving run
mode. If enabled, these instances will be visible at all times including run mode. The Dynamic Labels icon works in
conjunction with a property on Entities and Transporters (which includes Worker / Vehicle) named Dynamic Label Text (in
the Animation category of properties). The Dynamic Label Text is an expression which returns a string to show a floating
label below a dynamic entity at runtime. This floating label is similar to the label shown on fixed objects ( Source1, Server1,
Sink1, etc.). The Dynamic Labels icon on the Visibility ribbon allows users to enable or disable these labels separately from
the Labels specified for other fixed objects.
The View Networks dropdown, highlights the links within the network(s) that are selected. Each network highlight can be
individually toggled on and off. When selected, the Union icon shows the union of all selected networks. The link is in the
union of the selected networks if it is a member of ANY of the networks. When selected, the Intersection icon shows the
intersection of all selected networks. The link is in the intersection of the selected networks if it is a member of ALL of the
networks.
Note that subsections of the Visibility section icons ( Grid, Labels and Axes) can currently be found on the View ribbon in
the Console, External, and Symbol editing ribbons.
1021 / 1277
Simio Reference Guide
Animating Links
Drawing and Animating Links
Links generally animate best if they are drawn approximately or exactly to scale. If they are not close to scale, then you will
see entities animate with overlap or gaps between them that do not really exist in the logical model. In this example, we
will place a conveyor between a Source and Sink object. Select and then drag and drop a Source and a Sink object 10
meters apart. To ensure that they are 10 meters apart, the nodes should be placed so that their centers are directly on the
vertical lines. To get an idea of how nodes should be placed see the image below:
Let's add a conveyor between the Source and the Sink. Click on the Conveyor object in the Standard Library and then click
on the TransferNode displayed on the Source and have the conveyor end at the BasicNode displayed with the Sink.
Another way to add a Conveyor is to click on the TansferNode displayed on the Source while holding down the Ctrl+Shift
keys and dragging the link to the BasicNode at the Sink. Because the type of link isn't yet determined, a small menu will be
displayed to select the type of link, in this case Conveyor.
The Drawn to Scale option in the Properties window determines the relationship between the animated length and the
logical length used in calculating movement in the model. If Drawn To Scale is 'False', that means that the logical length
will be exactly the value specified in the Logical Length property. This is best to use if you know the exact link length and it
is important that the model reflect that. The disadvantage of this approach is that if you later adjust the path (e.g. move the
Source and Sink in our example closer or further apart) that adjustment will not be reflected in the model. If Drawn To
Scale is set to 'True', that means that the Logical Length property will be ignored and instead the length used in the model
logic will be determined by the length drawn in your animation. This is best to use when you are experimenting with
different layouts and you want the model logic to reflect what you are currently looking at. The disadvantage of this
approach is that you don’t have an exact logical length. In our example, it is likely that you drew the conveyor slightly more
or less than 10 meters. While this might not matter in early experimentation, it could be important in your final analysis.
Adding Vertices or Nodes to an Existing Link
When the link is selected in the Facility window, the Edit tab is displayed in the Ribbon. This contains a library of path
decorators, as well as options to add and remove vertices or insert a node to the link. Additional vertices may be added to
or removed from a link by using the Add Vertex and Remove Vertex buttons. When a link is selected and the Add Vertex
button is pressed, a green vertex is provided that can be placed anywhere along the link. To remove a vertex, simply click
on the vertex to remove and select the Remove Vertex button and the link will be redrawn.
When an existing link is selected in the Facility window, the user may also add a node to the link by using the Insert button
and selecting the type of node (i.e, BasicNode for example). If the link has one or more existing nodes that are no longer
required, the user may right click on the node (as in BasicNode1 below) and select ‘Remove Node and Join Links’, then
select the path that will remain as the current link (e.g, Path1 below).
1022 / 1277
An additional option on the Edit ribbon is the Always Orient Vertically button that provides the option to have the entities'
vertical orientation always remain upright regardless of the angle of the actual link that is selected. This is useful for people
going up stairs, for example. Note that tihs option only affects animation. Logically, the entities still occupy space on the
link as if they are vertically aligned at the same angle as the link itself.
Path Decorators
There is a library of path decorators that are provided with Simio. Simply clicking on a path decorator from that window
will change the appearance of the link that is selected. In our example, we will select the roller path decorator that is found
in the window.
Once the path decorator is added to an object in our project, it appears in the Path Decorators panel within the Project
window. Click on the name of the Project in the Navigation window to open the Project window. Path Decorators are
stored in [public documents]\Simio\PathDecorators . Even though this example was for a conveyor type link, any type of
link can have a Path Decorator displayed on it.
When multiple links are connected that have path decorators, the node (BasicNode or TransferNode) that connects the
links may be highlighted to access the Appearance ribbon. There are Link Graphic options for Merge and No Merge that
provide the user the ability to specify how the paths look when they intersect at the node. Merge will blend the paths such
that they are solidly connected as shown below, whereas the No Merge draws the links such that they do not connect at the
node intersection.
1023 / 1277
Changing Link Starting and/or Ending Node
The right-click menu for any type of link consists of options to add or remove the link to a network, as well as to change the
starting or ending node to which the node is attached. When the user selects Change Starting Node, a new starting node
may be selected and then the link will be disconnected from its current starting node. The ending node and all vertices will
remain intact. The same process can be used to change the ending node for a link.
Paths Automatically Connecting Nodes in the Order That They Were Placed
1024 / 1277
After the links get created, they are all selected as well, so edits can be made, if desired, within the Properties window on
the right.
Note that this only shows up if the last undoable action was placing a node. So if you place 3 nodes, then go create a table,
then come back to the Facility window, you *will not* see this option, as the last undoable action was create a table.
1025 / 1277
Simio Reference Guide
The top of the list that appears when a user types an "a" into the Expression Editor
The expression editor can be used to specify a random distribution. The user should type in the word Random into the
expression editor, followed by a period (.) and they will be given the choice of all the random distributions supported by
Simio. To see a list of all distributions found in Simio, see the Distributions help page.
The top of the list that appears when a user types Random. into the Expression Editor
1026 / 1277
The expression editor can be used to apply math functions to any value. The user should type in the word Math into the
expression editor, followed by a period (.) and they will be given the choice of all the math functions supported by Simio.
The top of the list that appears when a user types Math. into the Expression Editor
If the user should type in the name of an object from the model into the expression editor, followed by a period (.), they
will be given the choice of all the functions, properties and states that can be referenced for this particular object. To learn
more about functions that are available in Simio, see the Functions help page. You might also need clarification on what
name to put into a function. See the Object Hierarchy page to learn whether to reference the object definition name, the
object instance name or the object runspace (i.e. ModelEntity vs DefaultEntity).
The top of the list that appear when ModelEntity. is entered into the Expression Editor
1027 / 1277
Anything that appears bold in the expression editor dropdown, is a valid selection that will return a value. If the selection is
not in bold, you need to type a period (.) and add additional information to the expression in order to get a valid response.
If a double greater than sign (>>) appears after a name listed in the Expression Editor drop down, this indicates that if this
name is selected alone, it is a valid expression. However, there are other functions available with this choice. By selecting
the name in the drop down and then typing another period (.), the available functions will appear. See the example below.
Next to each of the selections within the expression editor is a graphical symbol that indicates if the selection is a property,
state, function, statistic function, and so on. The tooltip for the selection also indicates what the selection represents, as
shown below.
1028 / 1277
Flexibility With Buiding Expressions
Simio supports the use of both logical expressions and numeric expressions together. Various math and logical operators,
as well as Simio keywords, are available for use. A logical expression is one that compares two terms or expressions and
results in a True or False. When used in a mixed (logical and numeric) expression, True is interpreted as 1 and False is
interpreted as 0. The following example demonstrates how both types of expressions can be used together in a numeric
expression field.
( PartA.Priority>3) * 10
If PartA.Priority is greater than 3, then this expression will return 10, otherwise it will return 0.
Referencing Tables within Expressions
Table values can be referenced within an expression by using 'TableName.PropertyName'. When using a table within a
larger expression, i.e., 'TableName.PropertyName * XYZ', within a delay type field, the units for the PropertyName value
should not be specified within the table. See Data Tables for more information.
Time Units within Expressions
When a property, that has specified time units, is used within an expression, Simio converts everything to the base time
units for calculations. The base time units in Simio is always Hours. Here is an example to aid in the understanding of how
Simio does calculations.
If you have a property that you've set the Unit Type to 'Time' and you've indicated that the Default Units are 'Minutes', if you
use this property in an expression, such as 'MyProperty * 4', Simio will convert the value of MyProperty to the base unit of
Hours for calculation, even though you've specified the Default Units of MyProperty to be 'Minutes'.
1029 / 1277
Simio Reference Guide
Entity.NumberJobSteps Returns the total number of rows in the entity's assigned sequence table (if any)
TableName.AvailableRowCount Returns the number of available rows for the table, given the current table
selection context.
Functions available for the Simio state variable type Queue State:
Function Return Value
NumberWaiting Returns the current number of entities waiting in this Queue.
AverageTimeWaiting Returns the average time that an entity waits in this Queue.
MaximumTimeWaiting Returns the maximum time that an entity waits in this Queue.
1030 / 1277
MinimumNumberWaiting Returns the minimum number of entities waiting in this Queue.
MinimumTimeWaiting Returns the minimum time that an entity waits in this Queue.
MinimumCostWaiting Returns the minimum cost that an item accumulated while it waited in the queue.
MaximumCostWaiting Returns the maximum cost that an item accumulated while it waited in the queue.
AverageCostWaiting Returns the average cost that an item accumulated while it waited in the queue.
ItemAtIndex(index) Returns a reference to the item ranked at a specific index position in the queue.
IndexOfItem(object) Returns the rank position of a specified object in the queue. If the queue does not
contain the object, then the value 0 is returned.
Contains(object) Returns True(1) if the queue contains the specified object. Otherwise the value False
(0) is returned.
TimeWaiting (object) Returns the time that a specified object has been waiting in the queue. If the queue
does not contain the object then NaN is returned.
Functions available for the Simio State variable type List States:
Function Return Value
AverageTime(stateValue) Returns the average time that the object has spent in this Resource State.
NumberOccurences(stateValue) Returns the number of times that this object has gone into this Resource State.
PercentTime(stateValue) Returns the percentage of the total simulation time that this object has been in
this Resource State.
TotalTime(stateValue) Returns the total amount of time that this object has been in this Resource State.
Therefore, to reference the percentage of time that an object was in a certain state, use the syntax
[ ObjectName].PercentTime(stateValue), where stateValue is the number referencing the state in the String List. The first
value in the String List is value 0.
Functions available for the Simio String States:
Function Return Value
String.Length(string) Returns the length of a string
String.Substring(string, startindex[, Returns the string starting at the specified index of the string until the end. If
length]) the length argument is specified, then returns a string of that length starting
at the index.
String.Format(formatstring, arg1, Returns a formatted string using the specified format string with any number
arg2, …) of parameters. The formatString argument should contain a format pattern
that follows .NET string formatting conventions.
String.Compare(string1, string2 [, Compares two specified strings and returns 0 if the two strings are equal, -1
useLocalCultureInfo]) if the first string is less than (alphabetically before) the second string, or 1 if
the first string is greater than (alphabetically after) the second string.
The useLocalCultureInfo argument indicates whether to use local culture-
specific information to influence the string comparison. If this argument is
false or unspecified, then the comparison will be culture-insensitive
(invariant culture).
String.CompareIgnoreCase(string1, Compares two specified strings, ignoring case, and returns 0 if the two
string2 [, useLocalCultureInfo]) strings are equal, -1 if the first string is less than (alphabetically before) the
second string, or 1 if the first string is greater than (alphabetically after) the
second string.
The useLocalCultureInfo argument indicates whether to use local culture-
specific information to influence the string comparison. If this argument is
false or unspecified, then the comparison will be culture-insensitive
(invariant culture).
String.CompareSequenceNumbers( Compares two specified sequence number strings and returns 0 if the two
sequenceNumber1, sequence numbers have no implied dependency relationship, -1 if an item
sequenceNumber2) assigned the first sequence number must come before an item assigned the
second sequence number, or 1 if an item assigned the first sequence number
must come after an item assigned the second sequence number.
1032 / 1277
String.ToLower(string Returns a copy of a specified string converted to lowercase.
[,useLocalCultureInfo]) The useLocalCultureInfo argument indicates whether to use the local
culture-specific casing rules. If this argument is false or unspecified, then the
casing rules used will be culture-insensitive (invariant culture).
String.Trim(string) Returns a specified string with any leading and trailing white-space
characters removed.
String.NewLine Returns the newline constant defined for the local platform. Useful for
adding a line break to form a multi-line string.
HalfWidth Returns the confidence interval half width around the average of the observations
recorded.
MinimumTimeWaiting Returns the minimum time that an entity waits in this Queue.
Run.ExperimentName Returns the name of the experiment if running in experiment mode. Returns
an empty string if running in interactive mode.
Run.Mode Returns the mode that the model is running in. Numeric values returned by
this function are Interactive Mode = 1, Experiment Mode = 2, or Operational
Planning Mode = 3. ( Note: Operational Planning Mode is for RPS
( Enterprise) software only.)
Run.ProjectName Returns the name of the project containing the main running model.
Run.ReplicationNumber Returns the scenario replication number that the run corresponds to. In
interactive mode, the default replication number is 1, but can be changed
within the Advanced Options button.
1033 / 1277
Run.ScenarioName Returns the name of the experiment scenario if running in experiment mode.
Returns an empty string if running in interactive mode.
Run.WarmUpPeriod Returns the time period in hours after the beginning of the run at which
statistics are to be cleared. Applies to runs in experiment mode only.
Run.ResultSetID Returns a unique identifier for the results produced by a run. Separate
identifiers exist for interactive, plan or experiment runs, each of which is
assigned a new value whenever the corresponding modle, plan or
experiment is reset.
Run.ResultSetTimeStampUtcString Returns the DateTime that the current ResultSetID was created. This is not a
simulation date and time. It is the actual date and time, expressed as
Coordinated Universal Time ( UTC).
Run.FreezePeriod Returns the time period in hours after the beginning of the run at which time
the 'freeze period' is to be over. RPS licensing only.
Run.RunNumber Returns a one-based run count, incremented if a run restart occurs using the
RestartRun step.
DateTime.Year(dateTime) Returns the day of the year, expressed as an integer between 1 and 366, for
the specified numeric datetime (simulation time) value.
DateTime.Month(dateTime) Returns the month component, expressed as an integer between 1 and 12, for
the specified numeric datetime (simulation time) value.
DateTime.DayOfWeek(dateTime) Returns the day of the week, expressed as an integer between 1 ( Sunday) and
7 ( Saturday), for the specified numeric datetime (simulation time) value.
DateTime.DayOfMonth(dateTime) Returns the day of the month, expressed as an integer between 1 and 31, for
the specified numeric datetime (simulation time) value.
DateTime.DayOfYear(dateTime) Returns the day of the year, expressed as an integer between 1 and 366, for
the specified numeric datetime (simulation time) value.
DateTime.Hour(dateTime) Returns the hour component, expressed as an integer between 0 and 23, for
the specified numeric datetime (simulation time) value.
DateTime.Minute(dateTime) Returns the minute component, expressed as an integer between 0 and 59,
for the specified numeric datetime (simulation time) value.
DateTime.Second(dateTime) Returns the second component, expressed as an integer between 0 and 59,
for the specified numeric datetime (simulation time) value.
DateTime.DaysInMonth(month, Returns the number of days in the specified month and year. Specify the
year) month as a number ranging from 1 to 12 and the year as a number ranging
from 1 to 9999.
DateTime.SystemNow Returns the current datetime from the computer (actual time, not simulation
time), expressed in the computer's current timezone.
DateTime.SystemNowUtc Returns the current datetime from the computer (actual time, not simulation
time), expressed as Coordinated Universal Time ( UTC).
Color.FromRGB ( R, G, Returns a Color value using the specified Red, Green and Blue color channel arguments.
B)
1035 / 1277
Simio Reference Guide
Listed below are the Functions available for all Intelligent Objects that have External Nodes (i.e.Input and Output
nodes):
Function Return Value
Input Returns a reference to the external input node associated with the object.
Output Returns a reference to the external output node associated with the object.
Listed below are the Functions available for Intelligent Objects that are Enabled as Resource Objects *:
Function Return Value
Capacity Returns the current capacity of the object.
Capacity.Allocated Returns the current number of capacity units of the object that are
allocated (have been seized).
Capacity.Allocated.Average Returns the average number of capacity units of the object that have
been allocated during the run.
Capacity.Allocated.Minimum Returns the minimum number of capacity units of the object that have
been allocated during the run.
Capacity.Allocated.Maximum Returns the maximum number of capacity units of the object that have
been allocated during the run.
Capacity.Allocated.Total Returns the total number of capacity units of the object that have
been allocated during the run.
Capacity.AllocatedTo(owner) Returns the current number of capacity units of this resource that are
allocated to (have been seized by) a specified owner object.
Capacity.Reserved Returns the current number of capacity units of the resource that have
been reserved.
Keep in mind that the function ReservedTransporter for entity objects is
not related to the Reserve step or this function.
1038 / 1277
Capacity.ReservedTo(owner) Returns the current number of capacity units of the resource that have
been reserved for use by a specified owner object.
Keep in mind that the function ReservedTransporter for entity objects is
not related to the Reserve step or this function.
Capacity.Average Returns the average scheduled capacity of the object during the run.
Capacity.Minimum Returns the minimum scheduled capacity of the object during the run.
Capacity.Maximum Returns the maximum scheduled capacity of the object during the run.
Capacity.TimeOfLastChange Returns the simulation time (in hours) that the capacity of this resource
most recently changed.
Capacity.TimeOfNextChange Returns the simulation time (in hours) of the next scheduled capacity
change of this resource.
*Note: If the resource is not following a work schedule then this
function simply returns infinity since the timing of any future capacity
changes are unknown.
Capacity.TimeSinceLastChange Returns the elapsed time duration (in hours) since the most recent
capacity change of this resource.
Capacity.TimeUntilNextChange Returns the time duration remaining (in hours) until the next scheduled
capacity of this resource.
*Note: If the resource is not following a work schedule then this
function simply returns infinity since the timing of any future capacity
changes are unknown.
Capacity.IdleCost Returns the total cost that was accrued to the cost of the resource due
to idle capacity units.
Capacity.UsageCostCharged Returns the total cost that was charged to users of the resource's
capacity.
ResourceOwners The objects that currently own (have seized) capacity units of this
resource.
ResourceOwners.NumberItems Returns the number of objects that currently own (have seized)
capacity units of this resource.
ResourceOwners.FirstItem Returns a reference to the first owner in the list of owners that have
currently seized capacity units of this resource.
ResourceOwners.LastItem Returns a reference to the last owner in the list of owners that have
currently seized capacity units of this resource.
ResourceOwners.AllProcessingSuspended Returns True (1) if each owner of the resource has at least one
associated process token currently suspended. Otherwise, the value
False (0) is returned.
ReservationOwners Provides functions for accessing the objects that currently have
reservations for capacity units of this resource.
ReservationOwners.NumberItems Returns the number of objects that currently have reservations for
capacity units of this resource.
ReservationOwners.FirstItem Returns a reference to the first object in the list of objects that
currently have reservations for capacity units of this resource.
ReservationOwners.LastItem Returns a reference to the last object in the list of objects that
currently have reservations for capacity units of this resource.
ReservationOwners.Contains (owner) Returns True (1) if the objects that currently have reservations for
capacity units of this resource include the specified object. Otherwise,
the value False (0) is returned.
* Note: Standard Library Objects that are enabled as 'Resource Objects' include Node, Link, Vehicle, Operator and fixed
objects such as Server, Combiner, Separator, etc.
Listed below are the Inherited States of all Intelligent Objects:
State Description
Trace Flag A flag to turn on/off trace information for this object. A value of 0 denotes off, all other values
denote on.
Size The current volume size of this object in cubic meters. Has state parameters Size.Length,
Size.Width, and Size.Height.
Cost The current cost of this object in the default currency units. Each intelligent object has a cost
'level' state that gets/sets the total cost that has been allocated to the object. The value of the
state may increase continuously over time based on the value of its Cost.Rate parameter. It is a
user-assignable state.
AllocationQueue The queue of objects that are waiting to seize this object.
CurrentCapacity State that may be assigned to dynamically change the current capacity of this object.
Listed below are the Inherited Events associated with all Intelligent Objects:
Event Description
CapacityChanged Fired when the resource capacity for this object has been changed by a work schedule.
1040 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1041 / 1277
Simio Reference Guide
IMPORTANT NOTE: Entities inherit all Functions, States and Events for Intelligent Objects, plus have additional
ones listed below.
Listed below are the Functions available for any object derived from Simio base class - Entity object:
Function Return Value
EntityType Returns a reference to the entity type of this entity.
TimeInSystem Returns the time duration (in hours) that this entity has been in
the system (is equal to Run.TimeNow - TimeCreated).
Population.TimeInSystem.Minimum Returns the minimum time (in hours) that an entity of this
entity's population type was in the system.
Population.TimeInSystem.Maximum Returns the maximum time (in hours) that an entity of this
entity's population type was in the system. 1042 / 1277
entity's population type was in the system.
Population.TimeInSystem.Average Returns the average time (in hours) that an entity of this
entity's population type was in the system.
TimeCreated Returns the time that the entity was created in hours.
Population.Capacity Returns the sum of the current scheduled capacity for all
entities of this entity's population type in the system.
Population.Capacity.Remaining Returns the sum of the current unallocated capacity for all
entities of this entity's population type in the system.
Population.Capacity.Allocated Returns the sum of the current capacity that has been
allocated for all entities of this entity's population type in the
system.
Population.Capacity.Allocated.Total Returns the total number of capacity units for all entities of
this entity's population type that have been allocated during
the run.
Population.Capacity.Utilized Returns the sum of the current utilized capacity for all entities
of this entity's population type in the system.
1043 / 1277
Population.CostPerItem.Average Returns the average cost that was accumulated by destroyed
entities of this entities's population type.
Sequence.CurrentJobStep Returns the entity object's current one-based step index into
the entity's assigned sequence table.
Sequence.ExpectedOperationTimeRemaining Returns the sum of the expected operation times for the
remaining steps in the entity’s assigned sequence, including
the current job step.
Sequence.SlackTime Returns the expected amount of time that would be left until
due date after completing the entity's assigned sequence, if
the sequence's remaining operation time was started now.
This function returns a value equivalent to the expression
'( Entity.Sequence.DueDate – Run.TimeNow) -
Entity.Sequence.ExpectedOperationTimeRemaining'.
1044 / 1277
Sequence.SlackTimePerOperation Returns the average slack time per remaining operation for
the entity's assigned sequence. This function returns a value
equivalent to the expression 'Entity.Sequence.SlackTime /
Entity.Sequence.NumberJobStepsRemaining'.
Sequence.DueDate Returns a due date for the entity to complete its assigned
sequence. The 'Due Date Expression' property for the entity
type is used to get the due date value.
Sequence.ModifiedDueDate Returns a modified due date value for the entity's assigned
sequence, which is the highest of either the due date or the
expected completion date if the sequence's remaining
operation time was started now. This function returns a value
equivalent to the expression
'Math.Max( Entity.Sequence.DueDate, Run.TimeNow +
Entity.Sequence.ExpectedOperationTimeRemaining)'.
Sequence.DestinationNodes.IndexOfItem(node) Returns the one-based step index (or job step) of the first
occurrence of a specified destination node in the entity's
assigned sequence. If the entity does not have an assigned
sequence then the value 0 is returned.
TotalDistanceTraveled Returns the total distance that has been traveled by the entity,
irrespective of how the travel movements were performed
(free space or on a network).
CurrentNetwork.Distance(fromNode, toNode) Returns the shortest travel distance between two nodes using
the entity's current network.
NetworkDistanceTo.Node(node) Returns the shortest travel distance from the entity object's
current location tot a specified node using the entity's current
network.
LastLinkUsed Returns the most recent link used by the entity to complete a
travel or instant transfer (in the case of a connector link) into a
new node location. The value returned by this function is
updated whenever the entity transfers from the end of a link
into a node, or transfers across a connector from one node
into another node.
Listed below are the Inherited States of any object derived from Simio base class - Entity object:
State Description
Picture A utility state to hold a picture index. This state can then be referenced in an expression for
Current Symbol Index.
Size The current volume size of the object in cubic meters. Has state parameters Size.Length,
Size.Width, and Size.Height.
Movement The total linear distance that this object has traveled in free space or on its current network
link. Has state parameters Movement.Rate, Movement.X, Movement.Y, Movement.Z,
Movement.Pitch, Movement.Heading, and Movement.Roll.
DesiredSpeed The desired movement rate of this object. Non-zero does not mean the object is currently
moving.
Volume The current logical volume of the object. At runtime, the ratio between the logical volume
and the Size implicit volume will remain constant.
CurrentTravelMode The current travel mode for the entity. Possible values include FreeSpaceOnly (0),
NetworkOnly (1), or NetworkIfPossible (2).
1048 / 1277
Listed below are the Inherited Events associated with any object derived from Simio base class - Entity object:
Event Description
Destroyed The Destroyed event provides notification that the entity has been destroyed.
Engaged The Engaged event provides notification that the entity has been engaged (locked) to a location on
a link.
Transferring The Transferring event provides notification that the entity has started transferring into another
object or a station location.
Transferred The Transferred event provides notification that the entity has completed transferring into another
object or a station location.
1049 / 1277
Simio Reference Guide
IMPORTANT NOTE: Transporters inherit all Functions, States and Events for Intelligent Objects, as well as
Functions, States and Events for Entities, plus have additional ones listed below.
Listed below are the Functions available for any object derived from the Simio base object class - Transporter:
Function Return Value
RideStation.Capacity.Remaining Returns the remaining ride capacity of the transporter.
RideStationLoad Returns the current 'load' on the station location that holds the entities riding on
the transporter. The ride station 'load' is defined as the sum of current entities
reserving space on and intending to ride the transporter plus the current
number of riders.
RideStationOverload Returns the current difference bewteen the load and capacity values (a positive
difference indicating an 'overload') for the station location that holds the
entities riding the transporter. The ride station 'load' is defined as the sum of
current entities reserving space on and intending to ride the transporter plus the
current number of riders. This function returns the difference between the load
and current ride capacity ( Overload = Load - Capacity).
NumberRiders.Loading Returns the current number of riders being loaded onto the transporter by a
Pickup step.
NumberRiders.Unloading Returns the current number of riders being unloaded onto the transporter by a
Dropoff step.
Listed below are the Inherited States available for any object derived from the Simio base object class - Transporter:
1050 / 1277
State Return Value
HomeNode (on the standard The name of the Node that is set as the Home node for this object. This state is
Vehicle object) assignable.
ResourceState (on the standard The current resource state of this object (numeric values for this state are Idle =
Vehicle object) 0, Busy = 1, Failed = 3, OffShift = 4).
Listed below are the Inherited Events associated with any object derived from Simio base class - Transporter object:
Event Description
RiderLoaded (on the standard The RiderLoaded event provides notification to the vehicle's
Vehicle object) OnVisitingNode process that a rider has been loaded.
RiderUnloaded (on the standard The RiderUnloaded event provides notification to the vehicle's
Vehicle object) OnVisitingNode process that a rider has been unloaded.
EventCountBasedFailuresReset (on An occurrence of this event will reset the 'EventCountBasedFailures' timer.
the standard Vehicle object)
Allocated (on the standard Vehicle The Allocated event provides notification to the vehicle's OnVisitingNode
object) process that capacity of this Vehicle object has been allocated.
Released (on the standard Vehicle The Released event provides notification to the vehicle's OnVisitingNode
object) process that capacity of this Vehicle object has been released.
1051 / 1277
Simio Reference Guide
How many units of Server3 are currently allocated to some object in the system?
Server3.Capacity.Allocated
How many units of capacity of Workstation1 are currently available to be seized/allocated?
Workstation1.Capacity.Remaining
Is this object based on a Fixed object class? (returns 1 for True and 0 for False)
Is.Fixed
How do I determine the ID of the object Resource1?
Resource1.ID
Can I manually change the capacity of an object, Server1, using an Assign step?
Yes, by assigning the state of the object, Server1.CurrentCapacity, in an Assign step. This will change the value that is
returned by the Server1.Capacity function. NOTE: This is an alternative to specifying a schedule for an object.
IMPORTANT NOTE: Entities inherit all Functions, States and Events for Intelligent Objects, plus have additional
ones listed below.
Listed below are the Functions available for Fixed Resource Objects, such as the standard Servers, Separators,
Combiners, Resources and Workstations ( Deprecated):
Function Return Value
NumberInSystem Returns the current number in system.
Inventory(material) Returns a reference to the inventory holding the specified material at this
fixed object. If there is no such inventory defined, then the Nothing keyword
is returned.
ExpectedSetupTimeFor(entity) Returns an estimate of the expected setup time for a specified entity at the
fixed object.
NOTE: Refer to the ExpectedSetupTimeExpression property in Advanced
Options for the fixed object to specify the expression used to estimate a
setup time for an entity.
ExpectedOperationTimeFor(entity) Returns an estimate of the expected opeartion time for a specified entity at
the fixed object.
1052 / 1277
NOTE: Refer to the ExpectedOperationTimeExpression property in the
Advanced Options of the fixed object to specify the expression used to
estimate an operation time for an entity.
HasActiveChangeover Returns True (1) if there is an active changeover occurrence at the resource.
Otherwise, the value False (0) is returned.
Listed below are the Inherited States of any object derived from Simio base class - Fixed object:
State Description
ResourceState The current resource state of this object (numeric values for this state are dependent on the type
of object and can be found within the List States page).
1053 / 1277
Simio Reference Guide
How many travelers are on their way to BasicNode1 (i.e. have their destination node set to this node)?
BasicNode1.NumberTravelers.RoutingIn
How many entities are currently located at the node named "WaitingArea"?
WaitingArea.NumberTravelers
For any external input node, a new set of functions are now provided to return some basic information on the node’s
associated object, such as the capacity, load, or overload. Such information on the input locations of input nodes is often
useful or required to implement dynamic routing logic. For example, in the TransferNode object in the Standard Library,
when setting an entity’s next destination using the Select From List option, the new functions are useful in selecting the best
destination node from a list of candidates.
I'd like to know the capacity of the InputBuffer of Server3, by using a function for Input@Server3.
[email protected]
How many entities are en route to Input@Combiner1, intending to enter the stations of Combiner1, plus the current
entities already arrived to the node but still waiting to enter the stations, plus the current entities occupying the
stations.
[email protected]
Functions available for any object derived from the Simio base object class Node:
Function Return Value
IsExternalNode Returns whether the node is an external node.
Nearest.InputNode Returns the external input node that is the shortest straight-
line distance from this node. Note that, if this node is an
external node, then any other external nodes attached to
the same associated object are excluded from
consideration as the nearest node.
NumberTravelers.RoutingInToEnterAssociatedObject For an external input node, this function returns the current
number of travelers with their destination set to this node
and which can enter the node's associated object.
InboundLinks.NumberItems Returns the number of drawn inbound links into this node.
OutboundLinks.NumberItems Returns the number of drawn outbound links into this node.
AssociatedStationLoad For an external input node, this function returns the current
'load' on the station locations inside the node's associated
object that may be entered using the node
The associated station 'load' is defined as the sum of
current entities en route to the node intending to enter the
stations, plus the current entities already arrived to the
node but still waiting to enter the stations, plus the current
entities occupying the stations.
AssociatedStationOverload For an external input node, this function returns the current
difference between the load and capacity values (a positive
difference indicating an 'overload') for the station locations
inside the node's associated object that may be entered
using the node.
The associated station 'load' is defined as the sum of
current entities en route to the node intending to enter the
stations, plus the current entities already arrived to the
node but still waiting to enter the stations, plus the current
entities occupying the stations. This function returns the
difference between that load and the current station
capacity ( Overload = Load - Capacity).
Inherited States available for any object derived from the Simio base object class Node:
State Description
EntryQueue The queue of entities that are waiting to enter this node.
RidePickupQueue The queue of entities that are waiting at this node to be picked up by and ride on a
transporter.
CurrentTravelerCapacity State used to get or set the current maximum number of travelers that may
simultaneously occupy this node.
Inherited Events available for any object derived from the Simio base object class Node:
Event Description
Entered The Entered event provides notification that a traveler has entered the crossing point of the node.
(on the standard TransferNode and BasicNode)
Exited The Exited event provides notification that a traveler has exited the crossing point of the node.(on
the standard TransferNode and BasicNode)
RiderWaiting The RiderWaiting event provides notification that a traveler has entered the RidePickupQueue of
the node waiting for a ride. (on the standard TransferNode)
1057 / 1277
Simio Reference Guide
NumberTravelers.Minimum Returns the minimum number of travelers that have been on the link.
NumberTravelers.Maximum Returns the maximum number of travelers that have been on the link.
NumberTravelers.Average Returns the average number of travelers that have been on the link.
NumberTravelers.Entered Returns the total number of travelers that have entered the link.
NumberTravelers.Exited Returns the total number of travelers that have exited the link.
NumberTravelers.Accumulated Returns the total number of travelers that are accumulated on the link.
Note:An entity is counted as an ‘Accumulated’ traveler on a link if the
entity has reached the end of the link and has been stopped there without
being engaged to the link OR if the entity’s leading edge has collided with
the trailing edge of an entity in front of it on the link, and the entity has
accumulated behind that entity without being engaged to the link.
Therefore, the NumberTravelers.Accumulated function is tracking
accumulation anywhere on the link, not just from the end. Once flagged
as ‘Accumulated’, the entity will continue to be considered ‘Accumulated’
until either its leading edge leaves the link or the collision situation is
cleared. If a link is a ‘Connector’ (i.e., drawn to scale with logical length =
0) then entities are never considered to be on the link and
NumberTravelers and NumberTravelers.Accumulated are always 0.
Accumulated Entities
TimeOnLink.Minimum Returns the minimum time that a traveler was on the link.
TimeOnLink.Maximum Returns the maximum time that a traveler was on the link.
TimeOnLink.Average Returns the aveage time that a traveler was on the link.
StartingNode Returns a reference to the node located at the drawn starting point of
this link. 1058 / 1277
this link.
EndingNode Returns a reference to the node located at the drawn ending point of
this link.
Vertices.NumberItems Returns the number of vertices in the link. Note that these are the
"interior vertices", meaning the end points of the link are excluded,
since those are already available via the nodes at each end. Therefore,
a straight link between two nodes would return 0 for NumberItems.
Vertices.LocationOfItemAtIndex(index).X Returns the current location of the specified vertex along the X axis of
the Simio grid.
Vertices.LocationOfItemAtIndex(index).Y Returns the current location of the specified vertex along the Y axis
(vertical) of the Simio grid.
Vertices.LocationOfItemAtIndex(index).Z Returns the current location of the specified vertex along the Z axis of
the Simio grid.
Listed below are the Inherited States of any object derived from Simio base class - Link object:
State Description
TransferInState State indicating whether an entity is currently transferring onto this link ( Idle = 0,
Busy = 1).
DesiredSpeed The desired movement rate of the 'Mark' on this link, which is a reference point
along the link's length whose movement represents the link's movement. Non-zero
does not indicate that the link 'Mark' is currently moving.
Movement The position of the 'Mark' on this link, which is a reference point along the link's
length whose movement represents the link's movement. This state variable has a
parameter that returns the current Rate (speed) of the mark.
EntryQueue The queue of entities that are waiting to enter this link.
Contents State used to access the queue of entities that are physically located on the link. *
Note that they are ranked in order of entry onto the link.
DistanceFromFirstEdgeToEnd The distance from the leading or trailing edge of the first entity on this link to the
end of the link.
DesiredDirection The desired traffic direction on this link. Assignable values are
Enum.TrafficDirection.Either, Enum.TrafficDirection.Forward,
Enum.TrafficDirection.Reverse, or Enum.TrafficDirection.None.
CurrentVolumeFlowIn State used to get the current total volume flowed into this link. The 'rate' from this
state is also available.
CurrentVolumeFlowOut State used to get the current total volume flowed out of this link. The 'rate' from
this state is also available.
CurrentWeightFlowIn State used to get the current total weight flowed into this link. The 'rate' from this
state is also available.
CurrentWeightFlowOut State used to get the current total weight flowed out of this link. The 'rate' from
this state is also available.
1059 / 1277
AvailableVolumeFlowInRate Gets the current potential volume inflow rate for the link if ideal case where there
are no link-related flow constraints. Note that this is a private variable primarily
intended for flow link object builders (and thus will only be visible inside a link
object's process view).
AvailableWeightFlowInRate Gets the current potential weight inflow rate for the link if ideal case where there
are no link-related flow constraints. Note that this is a private variable primarily
intended for flow link object builders (and thus will only be visible inside a link
object's process view).
1060 / 1277
Simio Reference Guide
Obsolete Functions
Obsolete Functions
Listed below are the Functions that are obsolete, meaning replaced by current functions, but may still be used in
older models.:
Obsolete Function Replaced by Current Function
ActualDurationFor(entity) CurrentBatchDurationFor(entity)
ActualSetupTime ExpectedSetupTimeFor(entity)
BatchesRequiredFor(entity) NumberBatchesRequiredFor(entity)
BatchParentID BatchParent.ID
Capacity.UnitsOwned Capacity.AllocatedTo(owner)
Capacity.CurrentOwners ResourceOwners
Capacity.CurrentOwners.NumberItems ResourceOwners.NumberItems
Capacity.CurrentOwners.FirstItem ResourceOwners.FirstItem
Capacity.CurrentOwners.LastItem ResourceOwners.LastItem
Capacity.CurrentOwners.ItemAtIndex(index) ResourceOwners.ItemAtIndex(index)
Capacity.CurrentOwners.IndexOfItem(owner) ResourceOwners.IndexOfItem(owner)
CurrentActivity
CurrentOperation
CurrentLinkID CurrentLink.ID
CurrentNodeID CurrentNode.ID
DestinationNodeID DestinationNode.ID
DisableRandomness Run.RandomnessDisabled
FrontTraffic.ID EntityAheadOnLink.ID
InputCapacity InputLocation.Capacity
1061 / 1277
InputLocation AssociatedStation
For example, InputLocation.Capacity is replaced with
AssociatedStation.Capacity
InputLocation.Load AssociatedStationLoad
InputLocation.OverLoad AssociatedStationOverLoad
InputLocation.NumberInLocation AssociatedStation.Contents
InputLocation.NumberWaitingEntry, AssociatedStation.EntryQueue.NumberWaiting
InputNumberWaiting
InputLocation.CapacityRemaining, AssociatedStation.Capacity.Remaining
InputRemainingCapacity
IsExternalInputNode IsInputNode
IsWaitingRide Queuing.IsWaitingRidePickupQueue
MaterialCostCharged UsageCostCharged
NumberParked ParkingStation.Contents
NumberOccupiedLinks
NumberOccupiedNodes
NumberRouting NumberRoutingIn
NumberRoutingIn NumberTravelers.RoutingIn
NumberTokensInProcess TokensInProcess.NumberItems
NumberTransportersRouting NumberRoutingIn.Transporters
ParentRunSpaceID Location.Parent.ID
Population.Name EntityType.Name
SeizedResources.CapacityUnitsOwned(resource) SeizedResources.CapacityOwnedOf(resource)
SequenceTableRow Sequence.CurrentJobStep
SequenceTableRowCount Sequence.NumberJobSteps
TableRow Sequence.CurrentJobStep
TaskInfo Task
TaskInfo.IDNumber Task.IDNumber
TaskInfo.Name Task.Name
1062 / 1277
TaskInfo.SeizedResources.NumberItems Task.SeizedResources.NumberItems
TaskInfo.SeizedResources.FirstItem Task.SeizedResources.FirstItem
TaskInfo.SeizedResources.LastItem Task.SeizedResources.LastItem
TaskInfo.SeizedResources.IndexOfItem(resource) Task.SeizedResources.IndexOfItem(resource)
TaskInfo.SeizedResources.ItemAtIndex(index) Task.SeizedResources.ItemAtIndex(index)
TaskInfo.SeizedResources.Contains(resource) Task.SeizedResources.Contains(resource)
TaskInfo.SeizedResources.CapacityOwnedOf(resource) Task.SeizedResources.CapacityOwnedOf(resource)
TaskInfo.TimeStarted Task.TimeStarted
TimeNow Run.TimeNow
1063 / 1277
Simio Reference Guide
Distributions
Distributions
Simio supports a number of distributions used to draw random samples. Simio supports an infinite number of random
number streams. To specify a particular stream for a distribution to use, list the number of the stream directly after the last
parameter proceeded by a comma. For example, Random.Triangular(.1, .2, .3, 2) to use stream number 2. When running a
model from an experiment, replications of the same scenario will use different portions of the stream and different
scenarios will start from the same point in the stream.
To access these distribution from within the Expression Editor, type in the word Random, followed by a period (.) to see the
list of distributions.
Beta Distribution
Binomial Distribution
Continuous Distribution
Discrete Distribution
Erlang Distribution
Exponential Distribution
Gamma Distribution
Geometric Distribution
JohnsonSB Distribution
JohnsonUB Distribution
LogLogistic Distribution
LogNormal Distribution
NegativeBinomial Distribution
Normal Distribution
PearsonVI Distribution
Pert Distribution
Poisson Distribution
Triangular Distribution
Uniform Distribution
Weibull Distribution
NOTE: Simio will produce an error if a delay time expression returns a negative value. This can occur if you use an
unbounded distribution that might produce negative values, such as a Normal Distribution, within a Delay.
Simio produces an error to alert you that your distribution would have a spike at time 0.0 and the mean would be higher
than what you specified. If you want to use an unbounded distribution and convert all negative values to 0.0 (ignoring the
above problems), then use an expression like: Math.Max(0.0, Random.Normal(5.0, 2.0))
Examples
1. How do I generate values for which:
10% of the time I get values between 0 and 25
35% of the time I get values between 25 and 50
55% of the time I get values between 50 and 100
EasyFit from Mathwave (http://www.mathwave.com/en/home.html) has both standalone and Excel versions.
A product named R has both free and commercial versions available. One source is http://www.r-project.org/.
1065 / 1277
Simio Reference Guide
Beta
Random.Beta(alpha1, alpha2)
The Beta distribution has a range from 0 to 1 and can take a wide variety of shapes based on the two shape parameters
(alpha1 and alpha2). The Pert distribution is a special case of the Beta and is often used as a rough model in the absence of
data.
The Expected Value of the Beta distribution is E (x) = Alpha1/( Alpha1+Alpha2).
1066 / 1277
Simio Reference Guide
Binomial
Random.Binomial( ProbababilityOfSuccess, NumberTrials)
The Binomial distribution is a discrete distribution representing the number of successes in a specified number of
independent trails. The parameters are the probability of success for each trial, and the total number of trials.
The Expected Value of the Binomial distribution is E (x) = ProbabilityofSuccess * NumberTrials.
1067 / 1277
Simio Reference Guide
Continuous
Random.Continuous(v1, c1, v2, c2, …. ,vN, cN)
This is an empirical distribution defined by a set of value and cumulative probability pairs(vi , ci) that define a piecewise
linear cumulative distribution function for a continuous random variable over the defined range of values.
This implementation has an implied V0 of 0. So C1 represents the probability of a value between 0.0 and V1. If you want
your first range to start at other than 0 (e.g. at V1), then specify C1 as 0.0.
This distribution may be used as an alternative to a theoretical distribution using empirical data to define the points on the
cumulative distribution function. Note that there is always an even number of parameters since the parameters are defined
in pairs (value, cumulative probability).
The Expected Value of the Continuous distribution is
1068 / 1277
Simio Reference Guide
Discrete
Random.Discrete(v1, c1, v2, c2, …. ,vN, cN)
This is an empirical distribution defined by a set of value and cumulative probability pairs (vi, ci) that define a stepwise
linear cumulative distribution function for a discrete random variable. This distribution defines a set of N possible discrete
values, where N is the number of value and cumulative probability pairs. Note that the number of parameters for this
distribution is 2*N. This distribution is typically used to make random discrete assignments to a state.
The Expected Value of the Discrete distribution is
Examples
Example 1 - Assigning a Single Value
Suppose you want to assign a value of 1, 2, 3 or 4 to an entity priority, based on a certain percentage to each value. 40% of
the entitys will have a priority of 1, 35% of the entities have a priority of 2, 10% have a priority of 3 and the remaining 15% a
priority of 4. The discrete distribution would be specified as Random.Discrete(1,.4,2,.75,3,.85,4,1) where the values are
specified in the distribution along with the cumulative probability.
Example 2 - Assigning a String State
You may wish to define an entity string state, named PartType, to a value based on a discrete distribution. Suppose you
wish for 50% of the entities created to be "TypeA", 20% are "TypeB" and the remaining 30% are "TypeC". Your discrete
distribution would then be Random.Discrete("TypeA",.5,"TypeB",.7, "TypeC",1)
Example 3 - Assigning a Value from Various Distributions
Suppose you wanted a processing time to be taken from one of two distributions. You can specify the value parameters
within the discrete distribution based on an expression. Let's say that 20% of the time, the value should be longer
processing time due to unforseen circumstances, while 80% of the time, the processing time is shorter. The discrete
distribution can be specified as Random.Discrete( Random.Normal(50,3),.2,Random.Normal(10,.5),1)
For examples of using the Discrete distribution, please refer to the SimBits CombineMatchingMembers, StringStates,
ImportExportTables and AnimatedPeople .
1069 / 1277
Simio Reference Guide
Erlang
Random.Erlang(mean, K )
The Erlang distribution models an n-phase activity where the time for each phase is exponentially distributed. The Erlang
has parameters that specify the mean and number of integer phases ( K ).
Erlang is the sum of K exponentials, each with an expected value of Mean/K. The Mean parameter is the mean of the
Erlang, not the mean of the individual exponentials.
1070 / 1277
Simio Reference Guide
Exponential
Random.Exponential(mean)
The Exponential distribution is often used to model inter-arrival times based on a Poisson process. This distribution has a
single parameter that specifies the mean. This distribution is generally not appropriate for modeling process delay times.
The Expected Value of the Exponential distribution is E (x) = mean.
For examples of using the Exponential distribution, please refer to the Source object's Interarrival Time property in many of
the SimBits and Examples.
1071 / 1277
Simio Reference Guide
Gamma
Random.Gamma(shape, scale)
The Gamma distribution has a shape and scale parameter. The mean of the distribution is the product of these parameters.
The Erlang is a special case of the Gamma with an integer shape parameter.
The Expected Value of the Gamma distribution is E (x) = shape * scale.
1072 / 1277
Simio Reference Guide
Geometric
Random.Geometric( ProbabilityOfSuccess)
The Geometric distribution is a discrete distribution and represents the number of failures before the first success. The
parameter for the distribution specifies the probability of success for each independent trial.
The Expected Value of the Geometric distribution is E (x) = (1 - ProbabilityOfSuccess) / ProbabilityOfSuccess.
1073 / 1277
Simio Reference Guide
JohnsonSB
Random.JohnsonSB (alpha1, alpha2, min, max)
The JohnsonSB is a bounded four-parameter distribution that can take a wide range of shapes based on the two shape
parameters (alpha1 and alpha2) and the minimum and maximum values.
The Expected Value of the JohnsonSB distribution is
1074 / 1277
Simio Reference Guide
JohnsonSU
Random.JohnsonSU (alpha1, alpha2, location, scale)
The JohnsonSU is an unbounded four parameter distribution that can take a wide range of shapes based on the two shape
parameters (alpha1 and alpha2), the location parameter a, and scale parameter b.
The Expected Value of the JohnsonSU distribution is
1075 / 1277
Simio Reference Guide
LogLogistic
Random.LogLogistic(shape, scale)
The LogLogistic distribution has one shape and one scale parameter, both of which must be non-negative. This distribution
has a range from 0 to infinity and is typically used to model a task time.
The Expected Value of the LogLogistic distribution is
1076 / 1277
Simio Reference Guide
Lognormal
Random.LogNormal(normalMean, normalStdDev)
A sample from the Lognormal distribution is generated by first generating a sample N from the normal distribution, and
then converting this to a Lognormal sample, LN, using the following equation:
LN = eN
Note that the parameters specified for the Lognormal are the mean and standard deviation of the underlying normal
before transformation to the Lognormal distribution. In some cases you may know the mean and standard deviation of the
Lognormal distribution and need to convert these to the corresponding mean and standard deviation of the normal for use
in specifying the distribution. Let LogNormalMean be the mean LogNormalStdDev be the standard deviation of the
Lognormal. You can calculate the mean (normalMean) and standard deviation (normalStdDev) of the underlying normal
distribution using the following formulas.
You then use the normalMean and normalStdDev as the parameters of the Lognormal distribution to generate samples
with mean and standard deviation given by LogNormalMean and LogNormalStdDev.
The Expected Value of the Lognormal distribution is E(x) = Lognormal Mean = e ^ (normalMean + normStdDev *
normStdDev/2).
1077 / 1277
Simio Reference Guide
NegativeBinomial
Random.NegativeBinomial( ProbabilityOfSuccess, NumberOfSuccesses)
The NegativeBinomial distribution is a discrete distribution and represents the number of failures before reaching the
specified number of successes. The parameters of the distribution are the probability of success for each trail, and the
number of required successes.
The Expected Value of the NegativeBinomial distribution is E (x) = ( ProbabilityOfSuccess * (1 -
NumberOfSuccesses))/NumberOfSuccesses.
1078 / 1277
Simio Reference Guide
Normal
Random.Normal(mean, standard deviation)
The Normal distribution has parameters that specify the mean and standard deviation. The Normal Distribution is often
used in situations where a value is the sum of several other values and by the central limit theorem can be approximated by
a normal distribution.
The Expected Value of the Normal distribution is E (x) = mean.
1079 / 1277
Simio Reference Guide
PearsonVI
Random.PearsonVI (shapeA, shapeB, scale)
The PearsonVI distribution has two shape parameters and one scale parameter. Both shape parameters and the scale
parameter are non-negative. This distribution has a range from 0 to infinity and is typically used to model a task time.
The Expected Value of the PearsonVI distribution is E (x) = (scale * shapeA )/ (shapeB - 1) for all shapeB > 1.
1080 / 1277
Simio Reference Guide
Pert
Random.Pert(minimum, mode, maximum)
The Pert distribution (also known as the Beta-Pert) is a special case of the beta distribution where the shape parameters are
computed from the minimum, mode (most likely), and maximum parameters. This is a useful distribution for modeling
expert data based on these three parameters. Unlike the triangular distribution the pert distribution provides a smooth
curve which can closely approximate the normal or lognormal distributions. The mean of the pert distribution is equal to
(minimum + maximum + 4 * mode) / 6.
The Expected Value of the Pert distribution is E (x) = (minimum + maximum + 4 * mode) / 6.
1081 / 1277
Simio Reference Guide
Poisson
Random.Poisson(mean)
The Poisson distribution has a single parameter that specifies the mean. This distribution is a discrete distribution that
models the number of occurrences in an interval of time when the events are occurring at a constant rate according to a
Poisson process. The time between each event is exponentially distributed and the number of events in a specified time is
Poisson distributed. The parameter of the distribution is the rate of event occurrence (events per unit time), and must be a
non-negative value. Note that for means >= 40, the distribution will be calculated using the Normal distribution.
The Expected Value of the Poisson distribution is E (x) = mean.
1082 / 1277
Simio Reference Guide
Triangular
Random.Triangular(minimum, mode, maximum)
The Triangular distribution has parameters that specify the minimum, mode (most likely), and maximum values. This
distribution is often used as a rough model in the absence of data. The Pert Distribution may also be used in this situation.
The Expected Value of the Triangular distribution is E (x) = (minimum + mode + maximum)/3.
1083 / 1277
Simio Reference Guide
Uniform
Random.Uniform(minimum, maximum)
The Uniform distribution has parameters that specify the minimum and maximum values. All values within this range have
an equal probability of occurring.
The Expected Value of the Uniform distribution is E (x) = (minimum + maximum)/2.
1084 / 1277
Simio Reference Guide
Weibull
Random.Weibull(shape, scale)
The Weibull distribution has a shape parameter and scale parameter. This distribution has a range from 0 to Infinity and is
skewed to the left. If the system has a large number of components that are all required for the system to function and each
component fails independently then the time between failures can be approximated by this distribution.
The Expected Value of the Weibull distribution is E (x) = (scale/shape)*Г (1/shape) where Г is the Gamma function.
1085 / 1277
Simio Reference Guide
Math Functions
Math Functions
Simio supports a number of math functions that can be used in an expression. To access these math functions from within
the Expression Editor, type in the word Math, followed by a period (.) to see the list of functions.
Math.Abs(value)
Returns the absolute value of the specified number. The absolute value of a number is its unsigned magnitude.
Math.Acos(value)
Returns the arc cosine of the specified number (in radians).
Math.Asin(value)
Returns the arc sine of the specified number (in radians).
Math.Atan(value)
Returns the arc tangent of the specified number (in radians).
Math.Ceiling(value)
Returns the smallest integer not less than the specified number.
Math.Cos(value)
Returns the cosine of the specified number (in radians).
Math.e
Returns the value of the mathematical constant e, which is approximately 2.718.
Math.Epsilon
Represents the smallest real value greater than zero. ( Note: The standard BasicNode and the standard
TransferNode objects do a delay for Math.Epsilon, in order to guarantee the correct order of events. The Delay
step actually interprets Math.Epsilon as a delay of 0.0, but it forces the event to be put at the end of the current
event list.)
Math.Exp(value)
Returns the value of the mathematical constant e, to the power of the specified number.
Math.Floor(value)
Returns the largest integer not greater than the specified number.
Math.If(test1, value1, test2, value2, test3, value3, …, otherwise value)
Returns the value specified in valueN if the testN is True. Returns the value specified in otherwiseValue if all the
testN are False. For example, Math.If( ModelEntity.Priority == 2, 1, 3) would return the value of 1 if the
expression ModelEntity.Priority == 2 is True and would return the value of 3, otherwise.
Math.IsNaN(value)
Returns the value of 0 true and 1 if false, based on the value that is evaluated. If the value is NaN (which means
Not a Number), then the function will return a "True" or 1. If the value is not NaN, it will return a "False" or 0.
This function is used in conjunction with the Math.NaN function.
Math.Log (value)
Returns the natural logarithm (base e) of the specified value.
Math.Log10 (value)
Returns the logarithm (base 10) of the specified value.
Math.Max (value1, value2, value3, ...)
Returns the value which is the maximum between the multiple specified values (i.e. expressions).
Math.Min (value1, value2, value3, ...)
Returns the value which is the minimum between the multiple specified values (i.e. expressions).
Math.NaN
Returns the value of NaN, which means Not a Number. It may be used in some special cases with Math.If(), for
example, to return a value indicating that nothing was valid within the Math.If() so there isn't a value.
1086 / 1277
example, to return a value indicating that nothing was valid within the Math.If() so there isn't a value.
Math.NaN can be used in conjunction with the Math.IsNaN()function. One of the special rules of NaN is that it
does not equal anything, even itself. So the expression “Math.NaN == Math.NaN” would be false. In order to
test if a value is NaN, then you need to use Math.IsNaN(), so the expression “Math.IsNaN( Math.NaN)” is true.
Math.Pi
Returns the value of Pi, which is approximately 3.1415.
Math.Pow (value, power)
Returns the result of the specified value to the specified power. For example, Math.Pow(2,3) returns 8.
Math.Remainder (value1, value2)
Returns the remainder, which is defined as value1-(math.floor(value1/value2)*value2)
Math.Round (value[, digits]) where digits is the number of significant digits (defaults to 0)
When used without optional argument, returns the closest integer to the specified number. This function rounds
down from .50 and rounds up from .51. For example, Math.Round(4.5) will return 4 and Math.Round(4.51) will
return 5.
If you would like to round a number to a specific number of significant digits, specify the number of digits in
the optional second argument. For example, if you have the number 1.2345 and you'd like to round it to 2
significant digits after the decimal, you would use the expression, Math.Round(1.2345, 2) to get 1.23.
You can also use this with expressions. For example if you would like to take a number in hours (like
Run.TimeNow) and display it in minutes to the nearest tenths, you would use the expression
Math.Round( Run.TimeNow*60, 1). A time of 1.5123 hours would be displayed as 90.7 minutes.
Math.Sin (value)
Returns the sine of the specified number (in radians).
Math.Sqrt (value)
Returns the square root of the specified number.
Math.SumOfSamples (randomExpression, numberOfSamples)
Independently samples a specified random expression for a specified number of times and returns the total
sum of the samples.
The expected value returned will be the expected value of the random expression, multipled by the number of
samples. For example, if the Random Expression is specified as 'Random.Uniform(1,2) and the Number of
Samples is specified as '100', then the expcted sum of the samples is 1.5 x 100 =150. Therefore, if you enter the
expression 'Math.SumOfSamples( Random.Uniform(1,2),100)' and then disable randomness in the model, you
will see that expression always returns the value 150.
If the specified number of samples is not a positive integer, then the function returns the value of 0.0
Math.Tan (value)
Returns the tangent of the specified number (in radians).
1087 / 1277
Simio Reference Guide
1088 / 1277
Simio Reference Guide
Keywords
Keywords Available in Simio
The following keywords are available for use throughout Simio:
Infinity - A keyword representing the numeric value of infinity. This keyword is always interpreted and returned as
double.PositiveInfinity. See Comptability Notes for change in Infinity interpretation in Simio sprint 69+.
False - A keyword used to denote a False condition. This has a numeric value of 0.
True - A keyword used to denote a True condition. This has a numeric value of 1.
Nothing - A keyword used to denote a null object or element reference. May be used in a comparison statement to check
whether an object or element reference exists (e.g., ObjectReferenceValue == Nothing).
ParentObject - A keyword used to specify a non-ambiguous reference to the parent object in a function argument or
comparison statement (e.g. Entity.SeizedResources.CapacityOwnedOf( ParentObject)).
Is - The 'Is' keyword followed by a class or type name returns the value True (1) if the item is of that class or type.
Otherwise, the value False (0) is returned. Note that this keyword can follow the 'Candidate' keyword to determine if the
candidate object being evaluated is an instance of the specified class or is a specific instance.
For example, 'Is.PartA' would result in a 0 ( False) if the object was not a 'PartA' type of object instance and a 1 ( True) if it
was. This may be used in a Decide step, for example, or as the Selection Weight of a path.
Similarly, a Decide step upon entering a node may have a Condition-based expression, 'Is.Vehicle', which would evaluate to
True for incoming vehicles, but false for incoming model entities.
1089 / 1277
Simio Reference Guide
Enumerations
Enumerations
Simio has a number of built in Enumeration types that are used throughout the product and can be referenced in an
expression. To access these enumerations from within the Expression Editor, type in the word Enum, followed by a period
(.) to see the list.
An example of using an Enum within an expression is shown below. This is a scenario where a user is changing the direction
of travel on a Path and can choose from a list of possible values from Enum.TrafficDirection
1096 / 1277
Simio Reference Guide
1097 / 1277
Simio Reference Guide
There is also a small run icon and stop icon in the Quick Access Toolbar at the very top left of the Simio application. This
can be accessed from anywhere in the application and allows the user quick access to start, pause or stop a run. Note that a
run can begin by the user hitting F5 (and paused with F5) and can be stopped with Shift-F5.
1098 / 1277
Automatically Return Zero Instead of NaN in Expressions is initially set to False. If it is True, then for any element or state
function with no parameters that is used in an expression, the engine will automatically adjust a NaN result returned by the
function to zero. This was implicitly true in Sprint 85 and older.
Do Not Perform Unit Conversions for State Parameters is initially set to False. If it is True, then the engine will not properly
handle conversions of state parameters such as Weight or Volume parameters of a queue that is holding entities. This was
implicitly True in Sprint 89 and older.
Maximum Expression Stack Size indicates the size of the stack expressions to evaluate before throwing a runtime error. For
example, if expression A calls into expression B, which calls into expression C, a stack size of at least 3 would be necessary.
The default value is set to '20'. These options have been put into the software for compatibility reasons, so that when a
changes was made internally to the Simio software, it would not automatically 'update' a user's model such that their results
are different.
Ensure Foreign Nodes Cast To Non Node Types Are Associated Nodes is set to False by default. If True, Simio will give a
runtime error if a node is referenced via the Foreign/Candidate/Owner keywords, the cast given is not a Node type, and the
node is not associated with an object as an external input or output node. This option was implicitly True in Sprint 90 and
older.
Always Allow 'Infinity' As Link Selection Weight Value is an option that recommended to be set to False. This indicates
whether 'Infinity' is always allowed as a possible value for a link selection weight.
Assume Input Node Entries Are To Associated Object If No Drawn Outbound Links is initially set to True. If it is True, then if an
entity is entering a node with no drawn outbound links and that node is an external input node to enter another object, the
engine will assume the entity's objective is to enter the input node's associated object and thus execute the node's standard
'OnEnteredAssociatedObject' process (if specified). Prior to Sprint 99, a runtime error would be given if the node had no
outbound links.
Ignore Short Circuit Evaluation In Expressions is initially set to True. If it is True, then Simio will not 'short circuit' evaluation
of expressions using && or || in them. For example, 'MyRefState != Nothing &&
Random.Uniform(MyRefState.MyEntity.MyState, 100)< 5' will normally 'short circuit' evaluation if it sees that MyRefState is
Nothing and will not evaluate the latter part of the && statement. If the setting is True, Simio will evaluate both parts no
matter what. This option was added to the software within Sprint 101.
Ignore Primary-Foreign Key Relationships When Evaluating Table Property 'RandomRow' Function is initially set to False. If
using TableName.PropertyName.RandomRow function syntax in an expression and this seting is set to True, then the value
returned by the RandomRow function will ignore any foreign-primary key relationships and always return a random row
index into the entire table, regardless of whether or not the active token or object is referencing a row selection in the
table. This option was added in Simio Sprint 102.
Throw Error If Index Out Of Range When Evaluating An 'ItemAtIndex' Function is initially set to True. If using
Collection.ItemAtIndex(index)function syntax in an expression and this setting is set to True, then when evaluating the
function, a runtime error will be thrown if the index argument is out of range. Otherwise, an undefined or null value will be
returned without any error. This option was added in Sprint 105.
Use Performance-Optimized Steps is initially set to True. If this setting is True, then at runtime Simio will attempt to use
1099 / 1277
Use Performance-Optimized Steps is initially set to True. If this setting is True, then at runtime Simio will attempt to use
performance-tuned versions of certain steps where possible. The recommended value for this setting is True.
Default List State Results Classification Data Item String represents the default string used as the Data Item field for
classifying results reported by list states in the model. Note that you may insert a state variable label into the Data Item
classification string by using the special parameter '$(StateValueLabel)'. When a list state is reporting statistics for an
individual state value, if that parameter occurs within the Data Item classification string then it will be replaced with the
actual state value label. The default value for this is 'Time$(StateValueLabel)'.
Prevent Monitor Triggering During State Initialization is initially set to True. Indicates whether monitors in the model will be
prevented from triggering during the value initialization of their monitored state variables.
Harvest Available Rows Via Union Across All Rows Referenced From Original Table is initially set to False. Indicates whether
calculation of available rows will result from the union of all row relations into tables referenced via foreign key from the
table explicitly selected. This was implicitly True in Sprint 134 and older.
Always Associate Dynamic Selection Rule Evaluations With the Objects Making The Selections is initially set to True. Indicates
whether expression evaluations when using a dynamic selection rule are always associated with the objects making the
selections. The recommended value for this setting is True. For models built in Sprint 134 or older, this value should be
changed to True to utilize the dynamic selection rules correctly.
Set CurrentJobStep When Setting Row On Sequence Destination Table is initially set to False. Indicates if, when executing a
SetRow on a table, and that table contains sequence destinations, and a previous table selection was made with foreign
keys into that table, if the CurrentJobStep should be set to the row indicated in the SetRow step. The recommended value
for this setting is False. This was implicitly True in Sprint 134 and older.
Use Consistent Table Reference Searches is initially set to True. Indicates how, when resolving a table reference, multiple
references in the context will be searched. If True, then the object or element containing the property that is referencing the
table will be searched first, then the active token, then the active token's associated object, then the active token's context
object (if including the context object in the search). The recommended value for this setting is True.
Ignore Table References When Resolving Schedule Exceptions is initially set to False. Indicates if, when resolving the exception
repeat groups for a work schedule on a resource, the table references set on the resources will be ignored. The
recommended value for this setting is False.
Include Context Object In Table Reference Searches is initially set to True. Indicates whether, when resolving a table reference,
references to the active token's context object will be included in the search. The recommended value for this setting is
True.
Always Allocate Resources To First Eligible Seize Requests is initially set to True. Indicates whether to always allocate a
resource's available capacity to the first eligible seize request(s) waiting in its allocation queue. The recommended value for
this setting is True. This option was added in Simio Sprint 146.
Ignore Table References When Resolving Table States Indexed By Row is initially set to False. Indicates when resolving table
states in the form of TableName[RowNumber].StateName that existing table references on the object should be ignored.
The recommended value for this setting is False. This option was added in Simio Sprint 150.
Automatically Clear Entity Destination Node First Before Executing Route Step is initially set to False. Indicates whether to
automatically clear an entity's reference to a destination node first before executing a Route step. This option was added in
Simio Sprint 156.
Node.AssociatedStationHasSpaceFor() Function Considers All Possible Redirect Stations is initially set to True. Indicates
whether the AssociatedStationHasSpaceFor() function provided by an external input node considers all possible redirect
stations in addition to the node's most immediate associated station location. For example, if the node is the input node of
a Server with an input buffer, this setting determines whether that node's AssociatedStatsionHasSpaceFor() function
considers space in both the input buffer and processing station locations of that Server or only its input buffer. This option
was added in Simio Sprint 156.
Allow Route Request Queue Bypassing indicates whether an entity executing the Route step is allowed to immediately be
assigned a destination node bypassing the route request queue. The recommended value for this setting is False (but is set
to True for models prior to Sprint 157).
Run OnEvaluatingRouteRequest As A Regular Process indicates whether the OnEvaluatingRouteRequest process of a
RoutingGroup element is executed as a 'regular' process instead of a 'decision' process. This option was added to Simio
Sprint 156 and has a recommended setting of False.
Run Resource OnCapacityAllocated Process After Seize Step on Seized Process When a resource is seized, indicates whether
the resource's OnCapacityAllocated process is executed after the On Seized Process optionally specified by the Seize step.
This option was added in Simio Sprint 160 and has a recommended setting of True (set to False for old models).
Run Resource OnCapacityReleased Process After Release Step on Released Process When a resource is released, indicates
whether the resource's OnCapacityReleased process is executed after the On Released Process optionally specified by the
Release step. This option was added to Simio Sprint 160 and has a recommended setting of True (set to False for old
models).
Schedule Late Current Event To Try Allocating When Resource Capacity Increased Indicates whether to schedule a late
priority current event to try allocating whenever the capacity of a resource has been increased. Otherwise, allocation will be
immediately attempted before the execution of any other simulation logic in the system. The recommended value for this
setting is True.
Token.IsSuspended Function Considers Only Suspensions Applied Explicitly To The Token Indicates whether the IsSuspended
function provided by a token considers only suspensions applied explicitly to the token, not any suspensions applied to the
token's parent process. This option was added to Simio Sprint 162 and has a recommended setting of False.
Routing Group As Context On Evaluating TokenIndicates whether when evaluating the Destination Node List Name and
Destination Blocked Condition for a RoutingGroup element, if the routing group should be set as the 'context' element for
the executing token. This option was added to Simio Sprint 166 and has a recommended setting of True.
Schedule Late Current Event To Try Batching When Batch Queue Item InsertedIndicates whether to schedule a late priority
current event to try batching whenever a new item has been inserted into the parent or member queue of a BatchLogic
element. Otherwise, batching will be immediately attempted before the execution of any other simulation logic in the
system. This option was added to Simio Sprint 167 and has a recommended setting of True (set to False for old models).
Exclude Unrelated Rows In Timer Arrival TablesIndicates whether to exclude unrelated rows if an arrival table used to
schedule timer events has primary key/foreign key relationships. The recommended value for this setting is True. This
option was added to Simio Sprint 170.
Report Material Consumption Cost as Usage Cost Charged Indicates whether the total cost charged to consumers of a
specific material is reported in the results as 'UsageCostCharged' instead of 'MaterialCostCharged'. The recommended
value for this setting is True. This option was added to Simio Sprint 176.
Allow Material Allocation Queue Bypassing Indicates whether an object executing a Consume step is allowed to
immediately consume material bypassing the material allocation queue. The recommended value for this setting is False.
This option was added to Simio Sprint 176.
Schedule Late Current Event To Try Allocating When Material Produced Indicates whether to schedule a late priority current
event to try allocating to waiting consumption requests whenever material has been produced. Otherwise, allocation will
be immediately attempted before the execution of any other simulation logic in the system. The recommended value for
this setting is True. This option was added to Simio Sprint 176.
Evaluate Expression Functions in Expressions Using Units of Expression Indicates whether expression functions used in
expressions will be evaluated using the units specified for the expression itselt. The recommended value for this setting is
False.
Always Do Full Checks of Batch Logic Parent Queues If this setting is False, then depending on the matching rule used, the
batch logic element may stop further checking of entities waiting in its parent queue if the entity waiting at the front of the
queue cannot collect its required batch quantity. The recommended value for this setting is True so that further checking is
always allowed.
1100 / 1277
Always Use Seize Selection Goal When Checking Resource Allocation Queue Indicates whether a Seize step's selection goal
should be used not only at the initial seize attempt, but also whenever any resource allocation queue check occurs - if
waiting for resources is necessary - regardless of the Must Simultaneoulsy Seize option setting. The recommended value
for this setting is True. This option was added to Simio Sprint 186.
Automatically Adjust Timer's Target Triggering Event Count If Zero To One If this setting is True and an event count-based
timer's Triggering Event Count expression property has returned the value zero, then the target triggering event count for
that timer will be automatically adjusted to one. The recommended value for this setting is False.
Auto Destroy Zero Volume Entities In Containers With Zero Rate Inflow If this setting is False, entities in a container that fall
to zero volume with an existing inflow, where the inflow rate is zero will not automatically be destroyed. Doing so may
constrain upstream flows. The recommended value for this setting is True to remove the potential upstream constraint.
Allow Indexing Past Related Rows For Table State Indexing If this setting is True, when explicitly indexing into a table to get
a table state value (in the form TableName[Index].TableState) if the table has foreign keys into a master table for which the
table selections have a row set, and the specified index goes beyond the set of 'detail' rows for that selection, then the
index will instead be used as a raw index into the overall table, instead of a runtime error being thrown. The recommended
value for this setting is False.
Search Associated Objects Of Candidate Objects for Table References If this setting is True, when using table references in the
form Candidate.TableName (such as Candidate.TableName.ColumnName), if the Candidate object has an Associated
object, such as the Input Node of a Server having an associated Server object, then that associated object's table references
will also be used to find avalue if the value isn't found using the Candidate's table references. The recommended value for
this setting is True. This option was added to Sprint 191.
On Seized Process Compatibility Mode Indicates whether to execute an On Seized Process of a Seize step using token
associated object and token context object references that are compatible with Simio version Sprint 190 or earlier.
On Released Process Compatibility Mode Indicates whether to execute an On Released Process of a Release step using
token associated object and token context object references that are compatible with Simio version Sprint 190 or earlier.
Search Copies Table References When Searched Table Is Implicitly Referenced If this setting is True, when a Search step is
used to search a table with rows that are only implicitly referenced by the incoming token tothe Search step (for example,
searching a 'detail' table of a master-detail relationship with the reference to the 'master' table is already set on the
incoming token), then all table references on the incoming token copied to the 'found' token. If this setting is False, then
those references will not be copied in that case. This option was added to Sprint 194.
Auto Cancel Move Request If Resource Released Indicates whether to automatically cancel a resource move request if that
resource is released. The recommended value for this setting is True.
Search Step Uses Explicit Copy Over Table Row References Indicates whether the copying of table row references over from
an original token executing a Search step to new tokens associated with found items is based solely on the step's Copy
Over Table Row References property value, removing all restrictions that were required by previous Simio versions.
Enabling thisoption also ensures that the table row references for the original token are always included in match condition
and search expression evaluations. The recommended value for this setting is True. This option was added to Sprint 198.
Always Check Specific Run Space Context When Resolving Table Row References Indicates whether the specific run space
context is always checked when resolving table row references. The recommended value for this setting is True.
Exclude Entities Transferring Out of Child Stations From Resource Utilization Indicates whether capacity allocated to entities
transferring out of child station locations of a resource are excluded from that resource's utilization calculations. The
recommended value for this setting is True. This option was added to Sprint 201.
1101 / 1277
Simio Reference Guide
Trace
Trace
The Trace window can be displayed by clicking on the Trace Window icon in the Run Tab of the ribbon menu. The Trace
window will appear at the bottom of the application and will read Trace - Trace On. If the user clicks the Trace Window
icon again, the window will remain but it will read Trace - Trace Off. To close the window, the user can click the X in the top
right corner of the Trace Window. This window can be moved around the application by clicking and dragging. It is
important to note that if a project was saved with the Trace Window on, Simio will automatically open the Trace Window
when opening a project to avoid running with the trace accidentally turned on. Excluded Steps and Processes are not
shown in the Trace.
If the Trace has been on during the model run, the contents will also be written to a .csv file. This file can be located in the
same location where the project file is saved. This file can be loaded into Excel so it can be filtered and sorted for ease in
troubleshooting and understanding of the exact processing steps of the model. There is a limit to the size of the file so if
the model is run for a long period of time, the .csv file might not contain all of the contents of the trace.
The time units that are displayed within the Trace Window can be changed by selecting the desired units from the Units
Settings button, Time property drop down, found on the Run Ribbon.
A user can filter the Trace window by any of the column headers. There is a filter icon located to the right of each column
name. This allows the user to hide sections of the trace so it is easier to analyze the sections of that are of interest. For
instance, if you would like to only trace the activities of one particular entity or one particular process, you can filter so that
you only view the activity of that entity or process in the Trace window. No other activity is displayed in the Trace until the
filter is removed. To set a filter, select the filter icon within a given column and and select the entity (or object, process,
token, step, etc.) of interest from the drop down. Simio allows for more than one filter at a time. The filters that are set are
displayed at the bottom left of the Trace window. Filters can be removed by selecting the 'x' next to the filter on the bottom
left of the Trace window, by selecting (All) within a given filtered column or by clicking on the 'x' next to the filter within the
column filter dropdown. Custom filters may also be specified (see below custom filter dialog).
Filtering Trace by Entity (Customer.179) and Starting to Add an Additional Filter by Object
Any runtime errors that occur within a simulation model run will automatically be displayed within the Trace window,
regardless of whether the Trace Window button is enabled. This will allow users to more easily view the Entity, Object,
Process and Step associated with the error that occurred.
Trace Type
Additionally, there are three types of trace that can be shown, determined by the Advanced Options > Trace Type within
the Run ribbon. The default is to Trace Everything, which includes trace actions taken by tokens and elements at any level in
the system. A second alternative is Trace Top Level Model Only, which will only display trace actions taken by tokens that are
at the top level model. This can be useful with some debugging scenarios where the amount of trace generated by the
system is large and the debug target is an item in the top level model (for example, a process). The third options is Trace
Table Row Resolution. This trace option will generally increase the trace size substantially and thus should be used only
when running to debug a particular table(s) reference issue. The existing table references for a token, associated object and
other objects are displayed when resolving a table row reference.
1102 / 1277
Simio Reference Guide
Breakpoints
Adding a Breakpoint
A Breakpoint can be added to an object, node or link in the Facility window, or to a step within the Processes window. It
causes the execution of the model to pause when an entity or a transporter arrives to the specified object, node or link or
when a token arrives to the specified step.
A Breakpoint can be added in two ways in the Facility window. A breakpoint may be added by clicking the Breakpoint icon
in the Run ribbon when the object, node, or link is selected. Alternatively, if an object, node or link is selected in the Facility
window, right-click will bring up a small menu that includes Breakpoint.
Similarly, within the Processes window, a breakpoint may be added to a step in several ways. First, the Breakpoint icon on
either the Run ribbon or Process ribbon can be selected when the desired step is highlighted. Alternatively, if a step is
selected, the right-click menu provides a Breakpoint option to turn the breakpoint off and on. Steps with breakpoints are
then shown in red.
*NOTE: A breakpoint that is set on a step within a decision type process (i.e., OnEvaluating**) or OnRunEnding may be
used to step through a decision process.
1103 / 1277
Breakpoint Properties
Listed below are the properties of Breakpoints:
Property Description
Expression The expression to be evaluated.
When The option for determining when to break on a specified expression. WhenTrue will break when the
expression specified is evaluated to true. WhenChanged will break when the expression specified has
changed from the previously evaluated value when that breakpoint object or step was reached.
Count The option for a count-based break, based on the number of times the breakpoint has been 'hit'.
Condition Always will not track the count, EqualTo will break when the hit count is equal to the Count value, and
AtLeast will break when the hit count is equal to or greater than the Count value.
Count The value associated with the Count Condition for breaking either EqualTo or AtLeast a certain value.
1104 / 1277
Simio Reference Guide
Simio also provides the user with the ability to specify a stopping condition for the model run, which is done in the
properties of both a StateStatistic and a TallyStatistic. See Elements for information on these statistic elements.
1105 / 1277
Simio Reference Guide
Warning Level
Warning Level
The Warning Level sets the warning reporting level for the current model. There are three levels of warnings:
Alert User - Display warnings in a pop-up window. If this option is selected, the runtime warnings for the current
model will be written to the Trace window and will also appear in pop-up message boxes during an interactive
simulation run. The user will have the option of preventing individual warnings from appearing in pop-ups.
Write to Trace Only - Report warnings to the Trace window. If this option is selected, the runtime warnings for the
current model will be written only to the Trace window.
Do Nothing - Turn off warning reporting.
When a warning pop-up is displayed, the user will be given the option to turn off future warnings of the same type. In the
bottom left corner of the pop-up, a box may be checked that indicates "Don't show this warning again". Within the
Advanced Options, Warning Levels area, there is an option to Re-enable Disabled Warnings, which will re-enable all
previous disabled warnings for the current simulation model.
There are several automatic warnings that have been implemented within Simio. These include when the limit of a given
object has been exceeded (as defined in the object's Maximum Number in System property), when a potential deadlocking
situation has occurred at a node (when two bidirectional links intersect at a node), when the number of active tokens has
exceeded a given value and when the number of active agents or entities in the model is exceeded (the last two possibly
due to logic issues and potentially resulting to memory issues).
1106 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1107 / 1277
Simio Reference Guide
Randomness
Randomness
Within the Advanced Options button on the Run ribbon within the Facility window and the Processes window, the options
to Disable Randomness and specify the Random Number are available.
Disable Randomness
Disabling randomness is often useful to facilitate verification and debugging, and for generating deterministic schedules,
but is not appropriate for most typical simulation applications. If the randomness is disabled, any random distribution
reference will return the expected value instead of a random variate. Additionally any probabilistic selection in the logic
(e.g., probability based Decide step, link selection weights, the table property RandomRow function, Random selection
goal in Route step) will always select the choice that includes the 0.5 (or “50%”) cumulative probability. When randomness
is disabled, failures are also disabled.
There is a Run.RandomnessDisabled function that is available to determine during the simulation run whether the
randomness is turned off or on. This function may be useful in process steps to change the logic or data in your system if
the DisableRandomness button is 'True' or 'False'. For example, you may wish to have a Decide step that is
'ConditionBased'and evaluates the Expression 'DisableRandomness==False', meaning that distributions will be used. The
True exit may have a Delay step that delays for Random.Normal(10,1), where the average delay is 10 minutes; however, the
False exit may have a Delay step may delay for 11 minutes, using a 10% 'buffer' since there are no distributions utilized.
Replication Number
The Replication Number option is for use in interactive model only. This option may be used to generate the same
sequence of random samples during an interactive run as would be generated for a specific replication when running the
model in experiment mode. All random number streams will be initialized using seed values corresponding to the specified
replication number. This is useful if the user detects an error, warning or problem with output in one of the simulation runs
and would like to interactively view a particular replication.
1108 / 1277
Simio Reference Guide
Financials
Financials
Financials can be added to a model by either adding a Cost Center element manually and then assigning a value to the
CostCenter.Cost or the CostCenter.Cost.Rate with an Assign Step, or by using the Financial properties on each Standard
Library object. See the Financials category of the properties of each Standard Library object to see where to assign costs
such as Capital Cost, Cost Per Use, Holding Cost and Transportation Costs.
Within the Advanced Options button on the Run ribbon within the Facility window and the Processes window, the options
to specify Financial information, including the default currency type and exchange rates, is available.
Default Currency
The default currency option sets the default currency units assumed by the simulation model for financial data entry and
reporting purposes. The value is initially USD (United States dollar). Options to change the default currency can be found
on the CostCenter element, as well as on any currency type state, such as Cost. The level state, Cost, is available on all
intelligent objects and may be assigned by using the Assign step.
Set Exchange Rates
This option will set the exchange rates to be used by the model for conversion between any currency and Simio's base
currency which is the US Dollar (USD). For a currency whose exchange rate is not explicitly specified, a 1:1 exchange rate
will be assumed. When this option is selected, the dialog shown below is displayed. Under the currency column, a drop-
down list of over 100 world-wide currency types is available. The exchange rate column requires an integer or real value.
1109 / 1277
Simio Reference Guide
Animation Speed
Speed Factor
The Speed Factor represents the amount of simulation time between each animation frame. Lower values produce slower,
more fluid animation. Higher values produce faster, more coarse animation. The time between animation frames can be
adjusted by using the Adjust Speed slider or by typing in a new value into the Speed Factor text box. This is just an
arbitrary scale. It will adjust how smooth the animation is by scheduling more or less frames to render. The speed of the
animation will vary from machine to machine, depending on your machine's performance. The scale is in tenths of a second,
so “10” will schedule a frame render for every 1 second of animation time, and “600” will schedule a frame render for every
minute of simulation time.
Simio provides an Advanced Animation dialog that allows for several additional animation settings.
Within the Animation grouping, there are several options. Animation Type can be set to either Smooth or Coarse. Smooth
animation will draw every animated frame, according to the speed factor. Coarse animation will draw less frames, which
produces faster animation that is less smooth. We recommend using Smooth animation when recording a video with the
.avi recording features.
Also under Animation, Minimum Number of Frames to Display is used an advanced animation option. If a full cycle of a
default idle animation will last less than this many animation frames, then Simio will instead just show the first frame of the
idle animation. This gives the effect of faster animation speeds showing static poses (instead of very jerky animation), and
slower animation speeds showing the full idle animation.
Large World Space Enhancements enables some enhancements to allow for displaying and interacting with things more
correctly at larger distances from the origin (several hundred km). The enhancements sacrifice some drawing performance
for correctness. The project will need to be reloaded to see this take effect.
Within the UI Responsiveness grouping, Calendar Events Between UI Updatesindicates how many calendar events should
execute before the UI is updated (including repainting the view for animation). A lower number may provide smoother
animation and more responsive UI, a higher number will increas simulation speed.
Also within the UI Responsiveness grouping is the Minimum Number of UI Updates Per Second. For the interactive runs
(including fast-forward and plan), this indicates the minimum number of UI updates (including repainting the view for
1110 / 1277
(including fast-forward and plan), this indicates the minimum number of UI updates (including repainting the view for
animation), that should be done per second. A larger number may provide more responsiveness UI, a lower number will
increase simulation speed a small amount. Setting a value to zero here indicates to only use a cound of executed calendar
events to indicate when to update the UI.
1111 / 1277
Simio Reference Guide
Units Settings
The Unit Settings button provides a list of nine (9) combo boxes for various unit types in the simulation. The dialog allows
the user to set the units used to display time, length and distance travel rate, area and rate, volume and volume flow rate,
and mass and weight flow rate.
These units are displayed in the the reports, pivot grid, watch window, status bar and trace window. Note that Status Labels
in the Facility window are always shown in the default unit setting.
1112 / 1277
Simio Reference Guide
Watching an Object
Watching States, Functions and Elements During an Interactive Run
The Watch window allows the user to view the values of an object's states, functions and elements during the run. The
Watch window also includes Processes and their active tokens under their parent object, as well as child object information
within a hierarchical parent object. A dynamic object, such as an entity, can also be watched but the Watch only lasts as
long as the entity is in the system, i.e. until it is destroyed or the run ends. Watches added to instances persist across runs. It
is important to note that Watches are not saved with the project.
You can explicitly show and hide the Watch window by using the Watch button in the Windows group on the Project Home
tab. To add a Watch on an object, simply right click on the object in the Facility Window and select Watch. To remove a
Watch from an object, right click on the object and select Watch again or select the row for the object in the Watch window
and hit the Delete key. When the model is run, the values associated with that object will appear in the Watch window
under the object's name. The values are updated only when the run is paused or each time the user hits the Step button
from the Run group. The Watch window can be moved around the interface by clicking the top part of the window and
dragging it to a new location. If it is moved to the middle of the interface, it can be resized to meet your needs.
1113 / 1277
Simio Reference Guide
As you can see in the above picture, the model trace can be quite extensive. This trace output is automatically saved to the
file ‘ModelName_Model_Trace.csv’ in the folder where the model is located. You may wish to later view the file, rename it or
search the file for specific information.
Within the Trace window, the trace file can also be filtered to include only information you wish to view. Each column within
the Trace window has a filter button to the right of the column name. For example, perhaps you would like to view the
specific trace information for a given entity instead of all entities in the system. Within the entity column, click on the filter
button and select the entity you would like to view. Filters can later be removed to view all of the trace content by selecting
(All) from a specific column's filter list. The existing filters are shown at the bottom left of the Trace window.
Any runtime errors that occur within a simulation model run will automatically be displayed within the Trace window,
regardless of whether the Trace Window button is enabled. This will allow users to more easily view the Entity, Object,
Process and Step associated with the error that occurred.
Reviewing Simulation Data via Animation objects or Watch window
Other tools are also available when debugging a simulation model. These include the ability to view certain pieces of
information during the simulation model, from the number in a given queue to the value of particular function or statistic.
Animation in the Facility or Console windows
Within the Facility and Console windows, you may graphically animate any number of variables or functions by using the
tools on the Animation tab, such as status labels, plots or pies. For example, a status label may be useful for displaying the
value of a user defined state variable, ‘inventory’, that you increase / decrease throughout the model. Status symbols can be
stand alone or can also be attached to a particular object. This can be done by highlighting the object, such as a Server or
Node and selecting the animation symbol from the Symbol tab. See the following functions, states and events pages for
entity, node, transporter, resource and link objects for a listing of expressions you may wish to animate.
As just mentioned, animation can be attached directly to an object. This can be a stationary object, such as a Server, but
can also be a dynamic object, such as an Entity, Worker or Vehicle. Viewing information, such as an property or state of an
entity, as it moves through the system can provide invaluable information. Additionally, floor labels can include embedded
1115 / 1277
entity, as it moves through the system can provide invaluable information. Additionally, floor labels can include embedded
expressions that can be very useful for debugging. See three SimBits, ExamplesofFunctions_StaticObjects.spfx,
ExamplesofFunctions_DynamicObjects.spfx and OverflowWIP.spfx to see many of the functions displayed in the Facility
window and attached to objects.
Watch Window
The Watch window is another very useful tool for viewing information during the simulation run. Within this window, you
can view the values of various states and functions for any number of objects in the system. To add a Watch on a particular
object, right click on the object in the Facility window and select Watch. This will automatically open the Watch window at
the bottom portion of the project. The Watch button on the Project Home tab can be used to turn the Watch window off
and on. When the model is run, any objects that are being watched will be displayed with a “+”. Clicking on the “+” will
expand the object to show any functions, variables and processes associated with it. Refer to the Watching an Object page
for more details.
Additionally, the model itself has a section containing any user defined state variables as well. The values are updated
when the run has paused or when the Step button is used to move through the model. More detailed information about the
user interface can be found in on the Watch window section of help. By watching the values of functions and states on
specific objects and the model, this will allow you to make sure that values are being updated as you expect.
Summary
Simio includes many interactive tools for helping in the verification phase of your simulation project. Whether you have an
error that has occurred in your model or simply are stepping through the model to be sure that the logic you have
implemented is working correctly, using a combination of the Trace window, Watch window and/or animation within the
Facility window can help provide great insight into the processes that are being run and decisions that are being made
within your simulation model.
1116 / 1277
Simio Reference Guide
1117 / 1277
Each scheduled event item (either on the current events list or future events heap) maintains the following information:
Event time: The time that this event is to be executed.
Event method: A method that is to be called to execute the logic associated with the event.
Event object: An object (e.g. an entity) that is associated with the event.
Event index: An index that is incremented and assigned to each event item when it is scheduled.
Event type: An event type ( Normal, Early, Late) that is used to break ties between events.
The events that are on the current events list are all scheduled to occur at the current time ( Run.TimeNow). The times on
the future events heap will be greater than or equal to Run.TimeNow. The algorithm executes each of the events on the
current events list until it is empty. Note that during this period time does not advance. It then advances time to the time of
the next event on the future events heap (always the top item on the heap) and continues removing all events from the
heap that are scheduled at that time and places them on the current events list for execution.
The process of handling ties (i.e. events scheduled to occur at the same time) is very important in simulation engine design.
Although a minimum heap is very efficient in handling large numbers of events, it is not very good at dealing with ties. In
Simio the relative position of tied events are ignored when on the heap, but then sorted properly once moved to the
current events list. This sorting is done first by event type to make events scheduled as Early to execute first, events
scheduled as Normal to execute next, and finally followed by events scheduled as Late. Within an event type the events are
ordered by event index; i.e. the order in which they were scheduled. An example of an Early event is an “initialization” event
for the simulation. An example of a Late event is the “end of run” event that occurs at the end of the simulation. The vast
majority of events are Normal events.
The heap is maintained during the simulation using operations that “bubble” an event up or down the tree. A bubble down
operation compares an event item to its left and right child. If it is less than or equal to both it is in its proper location and
the bubble operation is complete. Otherwise it trades places with its child with the smallest event time and this process
continues until the event is bubbled down to its correct location in the tree. A bubble up operation is slightly faster because
we are comparing an event to its parent, and trading with the parent if the event time for the parent is greater. Hence a
bubble down requires two comparisons at each step where a bubble up requires only one.
Whenever we add a new event to the future event heap we add it to the next position in the bottom row of the heap and
bubble it up to its correct location in the tree. Whenever we remove the next event from the calendar we remove the top
most event node from the tree, and then move the far right event from the bottom row to the newly open position in the
top row, and then bubble it down.
Note that if a scheduled event is canceled it can be removed from the tree and replaced with far right event from the
bottom row which is then bubbled up or down as necessary. Likewise an event that changes its scheduled event time can
remain on the heap and simply bubble up or down as necessary.
1118 / 1277
Simio Reference Guide
Run-time Profiling
Run-time Profiling
The ability to Enable Run-time Profiling can be found in the Advanced Options button on the Run ribbon. The Profile
window can be activated by selecting the Profile button in the Project Home ribbon under Windows.
Run-time profiling, if enabled, will record step execution counts and timing for various parts of the model to provide run-
time performance information.
Within the Profile window, there are several columns that can provide information on run-time performance. The
Object.Process.step information is specified under the "Item" column. The "% Time in Parent" column shows the step's run-
time contribution to the parent object as displayed by the ">" symbol (expand to get more details on the steps beneath
that ">"). The "% Time Overall" column shows what this step's run-time contribution is to the overall run, rather than just to
its immediate parent. The "Count" column is how many times this particular step was hit. The columns can be sorted, and
we default to what you see above. Note that sorting is within each row's parent row, rather than across all rows.
1119 / 1277
Simio Reference Guide
Interactive Logging
Interactive Logging ( Enterprise)
Interactive Logging can be enabled by selecting the appropriate option within the Advanced Options dialog. This is only
available in the Simio Professional and RPS ( Enterprise) Editions of Simio.
This option will enable logging to the following logs during an interactive run, including the Resource Usage Log, Resource
State Log, Resource Capacity Log, Constraint Log and Transporter Usage Log. See the associated help topics for details on
each of these log reports.
1120 / 1277
Simio Reference Guide
Simulation Replications
Simio Replications
Simulation results are generally based on replicating a simulation model multiple times to generate identically distributed
and independent ( IID ) output samples. For example we might replicate a simulation model 25 times, and use the average
waiting time recorded in each of the 25 replications as an estimate of the true but unknown value for the expected waiting
time. Based on the IID assumption we can then use the 25 samples to generate a confidence interval on the expected
waiting time.
Each replication will automatically initialize both the system state and statistics. The model state is initialized by initializing
all objects within the model to their default starting state, and running the OnRunInitialized process for each object to
allow user-customization of the initialized state. The model statistics are initialized by zeroing out all statistics values (e.g.
the average time in system). If a warm up time is specified for the replication the statistics are initialized again at the end
of the warm up time without reinitializing the system state. In other words the initial statistics recorded during the warm up
period are discarded, but the simulation continues running from its current state.
Simio makes it easy to setup an experiment for a model that is comprised of one or more scenarios. Each scenario may
have one or more controls (i.e. properties that supply inputs to the model), and one or more responses (i.e. a value such as
average waiting time that is recorded at the end of each replication). Simio will then automatically run replications across
each specified scenario, changing the values for the controls, and recording the values for the responses. The built-in
SMORE plots will then display the results of a specified “primary” response for each scenario that combines error
(confidence interval) and risk (percentiles) measures, and optionally plot individual samples and/or histograms of the
individual response samples that are recorded at the end of each replication.
Each replication typically employs random numbers for generating samples for the time between arrivals, processing times,
repair times, etc. These random numbers are automatically generated by Simio using the built-in Mersenne twister
pseudorandom number generator. This state of the art generator has an extremely long period (2^(19937) – 1 or about
10^6001) that means from a practical sense the sequence will never repeat within a Simio simulation scenario.
The random numbers within a model are generated from independent streams, and you can employ as many streams
within your model as you desire. The initialization seeds for each stream are automatically set by Simio. By default all
random samples are taken from internal stream number 0, however you can specify a different stream by appending the
optional stream parameter for each distribution. For example Random.Uniform(3,5,1) returns a random sample from a
uniform distribution between 3 and 5 using random stream number 1. As we will discuss below the ability to select a
specific stream is important when using a method called common random numbers ( CRN) to reduce the variability in our
estimators when comparing multiple scenarios.
When replicating a simulation model each replication samples from a different but defined starting point within the
stream. These starting points are set very far apart in the stream so that there is no practical risk of overlap. Since the
random numbers in each replication are different, each replication produces a statistically independent estimate for each
of the output responses.
Although the random numbers that are used across replications are different (because they have a different but defined
starting point in the stream), they are identical for each replication within each stream across scenarios. Hence rerunning a
simulation experiment with the same set of controls will always produce exactly the same results for each replication. For
example the random numbers generated for stream number 3 and replication number 8 will always be the exactly the same
sequence of numbers, regardless of which scenario is being evaluated. This is important for two reasons: first it makes our
simulation experiments repeatable, and second it makes it possible to use common random numbers across scenarios.
The random sampling from streams across replications and scenarios is illustrated in the following example with 3
replications, 2 streams, and 7 scenarios. Stream 1 is represented by shades of blue and stream 2 is indicated by shades of
red. The different shades of blue and red indicate that a different segment of random numbers within each stream is being
used across the three replications. Hence although the three replications sample from the same streams, the random values
returned from those three streams are different because we start of different positions within those streams. Hence the
results across replications are independent samples. However if we look down across scenarios we see that the random
samples by stream and replication number are identical across scenarios. Hence we have the potential to have highly
correlated results across the scenarios.
1121 / 1277
This pattern of random sampling supports the concept of common random numbers to reduce the variability of our
estimators when comparing across scenarios. The basic idea of common random numbers is that we would like the
differences between scenarios to largely reflect the differences in control settings and not the particular set of random
values that were used for a particular scenario. In other words we would like to subject all the scenarios to the same
random pattern of arrivals, process times, etc., and in doing so create correlation across the scenarios, while keeping
independence across the replications. This will improve the underlying results for many statistical analysis procedures that
compare alternatives. For example both the built in Simio subset selection procedure and the Nelson and Kim add in for
selecting the best system benefit from the use of common random numbers.
To make effective use of common random numbers it is important to create as much correlation as possible across the
scenarios. This is done by ensuring (to the extent possible) that the common random numbers that are generated across
scenarios are used in the same way. Note that letting all random variables sample from the default stream (0) will typically
not achieve this because the controls on the model (e.g. number of servers), will change the sampling pattern from the
steam, and therefore a random sample that was used for a processing time may now be used for an inter-arrival time, etc.
Ensuring the exact same usage of random numbers is not always convenient to do in all cases throughout the model, but
typically very easy to do for arrival processes. By using a separate random number stream for all arrival processes we can
guarantee that we get the exact same sequence of arrivals across all scenarios.
A good practice is to always use stream 1 for inter-arrival times, stream 2 for task times, and then default everything else to
stream 0. This is very simple and effective way to induce correlation across scenarios and improving our ability to draw
conclusions from the results.
1122 / 1277
Simio Reference Guide
Experiments
Experiments
Experiments are used to define a set of scenarios to be executed using the model. They are executed in batch mode. This is
typically done (once a model has been validated) to make production runs that compare one or more variations of the
system.
Each scenario has a set of control variables (e.g. size of each input buffer) and output responses (e.g. the throughput,
waiting times, etc.). The control variables are the values assigned to properties of the associated model. Before adding an
experiment you typically add properties to your main model to serve as the controls that you want to change for each
scenario. Since most models contain random components (e.g. service times, failures, etc.) replications of the scenario are
required to allow the computation of confidence intervals on the results.
For every data table with 2 or more data bindings in the model, there is a column within the Experiment Design view of an
experiment. The header of a column is the table name and the cell values are a drop down of the named bindings for that
table. For a particular scenario, a user can set the various bindings to be used per table. The default value of the cell for a
new scenario will be the currently active databinding for that table. When using the OptQuest add-in, Simio also uses the
default active binding for each table. See the Data Connectors page for more information.
An experiment is not owned by a model. Rather, an experiment references and uses a model (is “bound” to a model). This
means that, if a model is removed from a project, any experiments that referenced and used that model may remain in the
project to preserve experiment results. Users should be able to distribute experiments between projects.
Within the Analysis section of the Experiment properties window, a user can specify a warmup period for the run, as well as
a confidence level.
Creating a New Experiment
An Experiment can be added to a project in two different ways. It can be added from within the Project Home ribbon by
selecting the New Experiment icon. A fixed type model must be active (highlighted in the Navigation window) and the new
Experiment is bound to this active model. An Experiment can also be added from within the Experiments panel in the
Project window. The drop down menu of the Add Experiment icon in the ribbon gives the user a choice of all the fixed type
models that exist in the project. The user must select a model for the experiment to be associated with. The experiment can
then be renamed, edited, duplicated and deleted from the Experiments panel.
Adding an Experiment
The control values for a given scenario may be copied into the Model properties in the Facility window. See Controls for
additional information.
Sorting and Filtering the Experiment Grid
The columns of the Experiment grid are categorized for easier reading. Columns and categories can be reordered. The
Experiment Grid can be filtered and sorted. Clicking in the upper right hand corner of a column will bring up the filtering
menu. This allows the user to select a value to filter by or allows the user to create a custom filtering expression. The grid
can also be sorted by clicking once or twice on the column header to be sorted. Multiple sorts can be added with shift-
click.
Additionally, the columns of the experiment grid can be rearranged. The first row of column headers (Scenario,
Replications, Controls) can be dragged around to change the order of the columns. For example, a user might want to have
the Controls columns appear first in the grid and therefore they would drag the Controls column header to the left of
Scenario. Similarly, a user can rearrange the second row of column headers, but only within the umbrella of the parent
column header. For example, a user can rearrange the order of the individual Controls columns by dragging the columns
around underneath the larger Controls column.
1124 / 1277
It now appears next to Status column. To hide the column, Right Click 'Last Run Completed At' and select 'Hide This
Column'.
This tab opens a view like the Dashboard Reports view for interactive runs. Under Experiments, however, there are a
different set of data sources, as shown below, where the “Summaries” data sources include average/half-with/min/max
across replications, and the “Details” data sources have the individual replication observations.
In the below graph, the HospitalEmergencyDepartment example was used, with additional Responses to capture
ScheduledUtilization statistics for the Nurse and Doctor workers. Once the experiment scenarios were run, the Response
Results Summaries were used to generate a ‘Chart’ type dashboard. Within the Chart’s Data Items, the ‘ResponseName’ is
used within the Series, the ‘ScenarioName’ is specified under Arguments and the ‘Mean’ under the Values section. A Filter
Element (List Box) was used for the filtering section on the right side of the dashboard below (‘ResponseName’ under
Dimensions Data Items).
1125 / 1277
Batch Means and HalfWidth Calculations
The method of batch means attempts to obtain a sequence of independent samples (batch-means) by aggregating h
successive observations of a steady state simulation. For a given single replication, data points are divided into batches and
the average value of the data points within each batch are the batch means. These batch means are then used to calculate
the stochastic process’ half width, which is a measure of how far the system tends to stray from its average value.
This batch means method is automatically enabled for TallyStatistics and StateStatistics for experiments with a single
replication. Simio’s standard library has a TallyStatistic (in Sink). All other automatic statistics within the Standard Library
objects are custom generated and do not use StateStatistics or TallyStatistics elements. For users that would like to see a
batch means calculation on ‘utilization’, for example, would need to manually add a StateStatistic to mimic our internal
custom statistic.
For the interactive simulation run, Simio does not utilize batch means, and therefore, no half-width calculations are made.
For the experiment, if there is more than one replication, Simio does not generate the batch means half-width. However, if
there is one replication, the confidence level from the element (or from the experiment if the element says ‘Default’) is used
to calculate the batch means half-width.
1126 / 1277
Simio Reference Guide
Controls
Control Variables
The control variables are the values assigned to properties of the associated model. Before adding an experiment you
typically add properties to your main model to serve as the controls that you want to change for each scenario. Once a
property exists in your model, it will appear as a column in the experiment table in the Experiment Design Window. The
property's DisplayName is what will appear as the column name. The user can create multiple scenarios, each with a
different value in the control variable.
Even though there are default values for the properties (controls), the experiment will use the values that are specified in
the Experiment Design table. Using the example below, if the default value of the ServerCapacity property is set to 3, the
experiment will ignore this and use the values specified in the table (1, 1, 2, 2), for each scenario, respectively. Therefore, do
not assume that the default property values will be used if the field in the Experiment Design table is left empty. The
experiment will use the value of 0.
1127 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1128 / 1277
Simio Reference Guide
Constraints
If your limitation involves Controls “interacting” with each other – such as the sum of the lengths of a set of conveyors has
to be less than a certain value – then you can represent this using a Constraint column. Constraints are added by clicking
the Add Constraint button in the Experiment section of the Design Ribbon. Constraints are designed to identify any out of
limit controls that have been manually defined as well as to limit automatic creation (by OptQuest) of scenarios with
controls that would be out of limits. The values displayed in a constraint column will be the value of the expression defined
in the Expression property. When using OptQuest, this column will only show values that are within the constraint bounds –
this only works for linear constraints (no multiplication or division). All scenarios that violate input constraint bounds are
discarded before running in Simio thus will never show up on the screen. List and Enum type controls cannot be part of a
Constraint expression, as they are not linear. Boolean controls evaluate to '1' (True) or '0' (False), so may be included within
a Constraint expression.
Responses Vs Constraints
If all members of your system limitation expression can be represented by a Control – use a Constraint .
1129 / 1277
If any member of your limiting expression needs to run a Scenario in order to be evaluated – use a Response.
1130 / 1277
Simio Reference Guide
Analysis - ExperimentProperties
Experiment Properties Window
The Experiment Properties window is where a user can specify a Warm-up Period for the run, as well as the Confidence
Level for the experiment. This is done in the Properties window of the Experiment. To access the properties window, right
click on the Experiment within the Navigation window and select Experiment Properties.
Default Integer Specifies the default number of replications for newly created scenarios. When
Replications creating new scenarios, this value will be used to initialize the Replications Required
property.
Confidence 90%, 95%, The confidence level used to calculate confidence interval half-width statistics for
Level 98%, 99% result averages across replications.
Upper 75%, 80%, The percentile of data which is the upper bound of the box in the Experiment
Percentile 90%, 95%, Response Chart ( SMORE plot).
99%
Lower 1%, 5%, 10%, The percentile of data which is the lower bound of the box in the Experiment
Percentile 20%, 25% Response Chart ( SMORE plot).
Primary Valid Specifies which response is considered the most important. This is available for use
Response Response by add-ins, such as the OptQuest Add-In.
Concurrent Integer Specifies the maximum number of replications that will be run simultaneously. The
Replication default value of 0 allows Simio to determine this value.
Limit Note: Simio RPS ( Enterprise), Simio Professional and Simio Team1 allow
Replication Runner and include up to 16 concurrent replications simultaneously.
Additional replication runner licenses can be purchased.
1131 / 1277
Replication InProcess, Specifies if replications should be run in the Simio process, or in a separate process.
Runner External32Bit, Choose InProcess for smaller models, Extternal32Bit for moderate sized models, or
External, External for the largest models. Choose None to only use the Distribute Runs
None option.
Distribute True, False Specifies if the replications should be distributed to other computers on your local
Runs network. This feature is available in Team1, Professional and RPS ( Enterprise)
Editions of Simio.
Note: Considering the waiting time of entities during the warm-up period could bias the results of the run and Simio takes
the position of excluding that bias. Therefore, the average waiting time statistic within a replication is not dependent on
what happened during the warm-up period.
Note: An experiment’s Confidence Level setting may also be used to calculate runtime confidence interval half-widths on
TallyStatistic or StateStatistic element averages in the model. See the ConfidenceLevel property of the TallyStatistic and
StateStatistic elements for more information.
OptQuest for Simio Parameters
This section within the experiment properties will appear when the OptQuest for Simio Add-In is selected. This is where
you define properties for that Add-In, which will aid in finding an optimal solution for your model.
Select Best Scenario using KN Parameters
This section within the experiment properties will appear when the Select Best Scenario using KN Add-In is selected. This
is where you define properties for that Add-In, which will aid in selecting the best scenario from a list of candidate
scenarios.
Select Best Scenario using GSP
This section within the experiment properties will appear when the Select Best Scenario using GSP Add-In is selected. This
is where you define properties for that Add-In, which is a scenario selection algorithm for large-scale problems.
1Legacy product
1132 / 1277
Simio Reference Guide
In the Properties Window of an Experiment, the user is able to set the Upper and Lower percentiles ( Upper Percentile will
be set to 75 and Lower to 25 by default), Confidence level used to calculate Confidence Intervals (95% by default).
Experiment Properties
1133 / 1277
The accuracy and usability of this plot depends on having a large amount of data, which means a large number of
repetitions. All aspects of the plot will not be displayed fully unless we have a sufficient amount of data. Simio always
displays the Mean, Max, and Min. Once the scenario has at least six replications, the Median, Upper and Lower Percentiles,
and all Confidence Intervals will be displayed. The Ribbon now has new buttons allowing the user to be able to turn on/off
Confidence Intervals, Observations, Upper/Lower Bounds, and Lines Between Means.
SMORE Plot
On the bottom left-hand corner of the Response Chart Window is a Raw Data tab. This tab allows the user to view the
1134 / 1277
On the bottom left-hand corner of the Response Chart Window is a Raw Data tab. This tab allows the user to view the
values that are used to construct the SMORE plots for each Response including the Mean, Minimum Value, Maximum
Value, Mean Confidence Interval Half Width, Upper and Lower Percentile values, the bounds for Percentile Confidence
Intervals. Copy Plot to Clipboard, Export Summaries, and Export Details buttons have been added to the Ribbon. Exporting
Summaries allows the user to export what they see in the Raw Data tab, while Export Details provides users with the exact
Response Value for each unique Scenario-Response-Repetition combination. Users can use this data to create their own
plots if they wish. Note that this is different than exporting the detailed results from the Experiment Design window.
1135 / 1277
Simio Reference Guide
1136 / 1277
Response Sensitivity Analysis
Response Sensitivity analysis calculates the sensitivity of each experiment Response to the model’s Input Parameters. It is
often used in the absence of real-world input data. The calculated sensitivities are a measure of how each Response in the
model is changed by changes in the Input Parameters. This is an indication of which Input Parameters have the most impact
on the Response. The analysis is performed independently for each active scenario in the experiment.
The basic calculation that is performed is a linear regression that relates each Response variable to the set of Input
Parameters. To perform this calculation the number of replications for the scenario has to be greater than the number of
Input Parameters included in the analysis. Hence if 10 replications are made, 9 or fewer Input Parameters can be
considered in the analysis.
The sensitivities are shown in the Response Sensitivity panel view for the Input Analysis tab in the Experiment window. The
user can view the sensitivity coefficients of each Input Parameter for each Response as either a tornado chart, stacked bar
chart, or a series of pie charts. These alternate views can be selected using the lower tabs in the Response Sensitivity view.
The user can also view the raw data in tabular form. Note that the Tornado chart shows a single selected Response at a
time, whereas the bar and pie charts show all responses simultaneously. The tornado chart displays the coefficients from
smallest to largest with a solid bar for the coefficient, and an outline for the negative of the coefficient. The outline is useful
for comparing the magnitude of the sensitivities. The following shows an example of a tornado chart with four input
parameters. Note that Input2 has a negative coefficient which implies that increases in the input parameter will decrease
the expected response.
1137 / 1277
Sample Size Error analysis is used once real world data has been collected to determine the overall impact of estimated
Input Parameters (based on real world samples) on the uncertainty in the Responses. This analysis is performed in the
Sample Size Error panel of the Input Analysis tab contained within the Experiment Window. Note that for an Input
Parameter to be included in the analysis you must specify the number of data samples used to estimate the Input
Parameter. The uncertainty resulting from input parameter estimation is expressed in terms of a Half Width Expansion
Factor, which expands the standard confidence interval on a response to account for uncertainty resulting from estimation
of the input parameters.
The method for computing the Half-Width Expansion Factor is based on a procedure developed by Song and Nelson at
Northwestern [ Quickly Assessing Contributions to Input Uncertainty, in review] and requires a special set of “bootstrap”
experiments. The number of bootstrap experiments is automatically determined by the procedure, but you can specify the
number of replications per bootstrap (>= 1) on the Sample Size Error ribbon under Analysis Setup. You can initiate the
analysis by clicking the Run Analysis button on this ribbon.
The following shows a sample output from the Sample Size Error analysis. The results displays the Half Width Expansion
Factor along with a chart showing the percentage of contribution from each input parameter. Below this chart is an
abbreviated SMORE plot that shows the standard confidence interval for the mean in tan and the expanded half width due
to uncertainty caused by estimation of the input parameters in blue. As we can see from this graph in this example we have
significantly more uncertainty attributable to estimation of the input parameters (blue) than uncertainty attributed to the
limited number or experiment replications (tan). In fact, the Half Width Expansion Factor tells us that the input related
uncertainty is over 7 times the experimentation related uncertainty.
The Sample Size Error analysis also provides a second bar chart (selected using the lower tabs) that shows the relative
benefit of collecting additional data for each input parameter. In many cases the bar chart will appear similar to the
relative contribution bar chart. However this is not always the case since it is possible the relative value of additional
samples will differ from the relative contributions. This is the case when the number of real world samples differs for each
input parameter.
The SimBit project named InputAnalysis includes two models, ResponseSensitivity and SampleSizeError, that show an
example of using input parameters with the analysis techniques described above.
1138 / 1277
Simio Reference Guide
OptQuest Add-In
What is 'OptQuest for Simio'?
OptQuest is offered for Simio as an add-on optimizer to the standard Simio products. OptQuest enhances the
optimization capabilities of Simio by searching for optimal solutions to your models.
Simulation models are usually used within the context of a decision making process, evaluating different possibilities for
the models controls and how these possibilities affect the system. Simio has the ability to create experiments allowing
users to enter input values and run multiple replications to return estimated value of the system performance. This can be
done by varying several different input value combinations eventually leading to an optimal solution. This method works
well for simple models, but it is easy to see that it could get quite tedious as the complexity expands.
OptQuest helps remove some of the complexity by automatically searching for the optimal solution for you. You describe
your simulation problem to OptQuest and it searches for input controls to maximize or minimize your objective (i.e.
maximizing profit or minimizing cost).
For additional information on the OptQuest engine, see the The OptTek Documentation on Optimization.
What does OptQuest do to my Simio Model?
OptQuest takes on the duties of setting property values, starting replications, and retrieving results. When the Add-In is
launched, OptQuest adds its own parameters in addition to the ones provided by the standard Experiment.
When the optimization runs, OptQuest starts the simulation by first resetting the run and changing the values of the input
properties to those identified by the Add-In. Then, OptQuest starts to run replications of the first scenario. After the
scenario runs, OptQuest retrieves the response values needed for the objective function and uses its set of algorithms to
determine the value of the next set of inputs to create. It then uses these inputs to run the next scenario and repeats this
process until it reaches a specified stopping condition or you stop the session.
An OptQuest Example
The AirportTerminal model that is part of the Simio example models available with the Simio installation, contains an
experiment that is set up to use the OptQuest Add-in. For detailed information on this example, see Experiment Example.
The Emergency Department example model also utilizes the OptQuest Add-In. This experiment uses the Multi-Weighted
Objective, where one response is being maximized and another is being minimized, as part of the objective function.
How OptQuest Works
OptQuest makes use of intelligent search methods and incorporates its special optimization algorithms alongside Simio’s
modeling power. Instead of using the algorithms to optimize a set of mathematical equations, it uses them to optimize a
set of stochastic process interactions.
Once the problem is described by defining the controls, objective, and constraints, OptQuest has enough information to
begin running scenarios. After the first scenario, OptQuest evaluates the responses of the scenario, analyzes, and then
returns values to be considered in the next scenario. After the second scenario runs, it once again analyzes the response
given to it by Simio, compares it to the previous response from the prior scenario, and once again returns new values to be
evaluated by Simio. This process of obtaining results and comparing to previous objective values repeats over and over
again until OptQuest meets one of its terminating criteria – either after reaching the maximum number of iterations or if
OptQuest has determined the objective value has stopped improving.
OptQuest Licensing
OptQuest is an optional add-on to Simio. It may be purchased when you purchase Simio or it may be added on later.
OptQuest in included with our non-commercial academic products but in such case is subject to the same limitations of
non-commercial use only. For commercial users, OptQuest requires activation to exploits its full capabilities.
Commercial customers who have not purchased OptQuest will find that it works in evaluation mode. Evaluation mode
allows a maximum of two controls and two constraints, and will produce a maximum of 20 scenarios.
What does an unlicensed version of OptQuest allow me to do?
The unlicensed version allows a maximum of 2 controls, 2 constraints, and will produce a maximum of 20 scenarios.
The Experiment Design Window
Because OptQuest is provided by Simio as an Add-In, OptQuest operates and appears very similar to a Standard Simio
Experiment. When a standard Simio experiment first opens there are four default columns:
Scenario Name - Defaults to a standard scenario number (i.e. 001, 002, etc.) but you can rename them any name that
you want.
Scenario Status – Reflects the state of the scenario. Status has five possible values:
Idle – Experiment has yet to run
Pending – Scenario is scheduled to run
Running – Scenario has started but has not completed required number of replications
Canceled – Scenario has been canceled during a run.
Completed – All replications complete
Replications Required - Reflects the number of Replications that Simio is scheduled to run. This defaults to five but
you can manually enter the number of replications required before running the experiment.
Replications Completed – The number of replications that are complete at the current point in time.
Experiment Properties
Also, Standard Simio Experiment properties/parameters can be found in the Properties window of the Experiment (select
Experiment in the Navigation window and right click to select Experiment properties):
Warm-up Period – The amount of time the user specifies to get the model to steady-state or to the level of interest
Default Replications – The number of replications to be run by each scenario.
Confidence Level – The level of accuracy you want Simio to use when calculating confidence intervals for statistics
Upper Percentile - The percentile of data which is the upper bound of the box in the SMORE plot. For example, if it
is set to 75%, that means that 75% of the data is lower than the value created by the plot.
Lower Percentile - The percentile of data which is the lower bound of the box in the SMORE plot.
Primary Response – The Objective Function (discussed further in Objective Function Section)
Simio will automatically import all of the model’s user defined properties and referenced properties (initially populated
with their initial values) as Controls for the experiment as columns. These are all grouped under “Controls” and the columns
are colored blue.
Using the OptQuest Add-In
1139 / 1277
Go to the Add-Ins Section of the Design Ribbon and select “OptQuest for Simio” from the Select Add-In drop down list.
Right-click on the experiment name and select Experiment Properties. The OptQuest Parameters will now be displayed in
the Properties window. These new OptQuest parameters are:
Min Replications – The minimum number of replications you would like Simio to run.
Max Replications – The maximum number of replications you would like Simio to run.
Max Scenarios – Determines the maximum number of scenarios you want OptQuest to create. It is possible that
OptQuest will come to an optimum solution before it creates this amount of scenarios.
Confidence Level – The level of accuracy you want OptQuest to use when statistically comparing one response value
to another.
Relative Error – Percentage of mean in which the half-width of the confidence interval is determined. For example, if
the mean is 50 and you set the Error Percent to 0.1 (or 10%), the confidence interval will be 50 ± 5. After running the
default number of Replications, OptQuest will determine if this condition has been satisfied. If not, Simio will run
more replications to reduce the variability.
Objective Type - Single Objective, Multi-Objective Weighted or Pattern Frontier. In Single Objective, OptQuest
determines the set of control values that optimizes the experiment's Primary Response. In Multi-Objective Weighted,
OptQuest optimizes across all responses with Objective set to Minimize or Maximize, taking into account each
response's Weight value, to determine a single "optimal" solution. In Pattern Frontier, OptQuest optimizes across all
responses with Objective set to Minimize or Maximize, and finds the set of scenarios that are optimal, rather than a
single "optimal" solution based on weights.
Experiment Parameters
Controls
The OptQuest Add-In adds additional properties to the input Controls. Without OptQuest, the user has to manually enter
the combinations of Control values that are to be tested. With OptQuest, each Input Control has a minimum value,
maximum value, and an increment size that dictates the step size for which OptQuest will move between the minimum and
maximum values to create scenario combinations.
Any Enum properties, List or Boolean properties that are defined as controls may also used within the OptQuest
optimization. For example, a 'ListProperty1' is a string list, consisting of East, West, North and South and an
'EnumerationProperty1' is a selection type enum. OptQuest will then simply choose different combinations of these values
as part of the optimization. By default, these are not automatically included in the optimization (see next paragraph for
details).
Sometimes not all Controls are used in an experiment. Each Control has a property called Include in Optimization with
values of 'Yes' or 'No'. By default this is set to 'No' for Enum and List controls and 'Yes' for all other controls. To exclude the
control from the experiment, simply set this parameter to 'No' and every scenario will use the default value for that
property.
Control Properties
1140 / 1277
Responses
To add a Response, simply click the Add Response button in the Experiment section of the Design Ribbon. The resulting
Response column can either act as a purely informative display of a certain statistic of interest or an objective function that
you are trying to optimize. Responses are designed to display the output from a model. In addition, you can add limits to
responses to assist in identifying any scenarios that violate the limits. If a Response is found to be infeasible for a particular
Scenario, the value will still be displayed, but will have its cell highlighted in red and will not be considered in optimization.
If the value is greater than the upper bound the cell will be shaded with a gradient that has more red on the right side of
the cell. Conversely, if the value of the Scenario is less than the lower bound, the cell will be shaded towards the left side of
the cell.
You can customize a Response column type with the information entered in the following properties:
Name – The name of this Response, which is reflected in the column header.
Expression – Where you enter the left-hand side of your expression or objective function.
Objective – Determines how OptQuest is to use the response information when determining the optimal solutions.
Objective can either be:
None – Just an informative response and not used to make decisions
Maximize Objective – OptQuest drives the Experiment to achieve the greatest values for the objective function
Minimize Objective – OptQuest drives the Experiment to achieve the lowest value for objective function
Upper Bound – Any values for this response above this value are considered infeasible.
Lower Bound – Any values for this response that are below this value are considered infeasible.
Response
Constraints
If you want to put a limitation on your experiment that involves input Controls “interacting” with each other – such as the
sum of the lengths of a set of conveyors has to be less than a certain value – then you can represent this using a Constraint
column. Constraints are added by clicking the Add Constraint button in the Experiment section of the Design Ribbon.
Constraints are designed to identify any out of limit controls that have been manually defined as well as to limit automatic
creation (by OptQuest) of scenarios with controls that would be out of limits. The values displayed in a constraint column
will be the value of the expression defined in the Expression property. When using OptQuest, this column will only show
values that are within the constraint bounds – this only works for linear constraints (no multiplication or division). All
scenarios that violate input constraint bounds are discarded before running in Simio thus will never show up on the screen.
If the constraint is used to validate a set of manually defined Controls, a violated Constraint will be shaded red in the same
manner as a violated Response. List and Enum type controls cannot be part of a Constraint expression, as they are not
linear. Boolean controls evaluate to '1' (True) or '0' (False), so may be included within a Constraint expression. For additional
information on using Responses and Constraints in an Experiment, see the Responses and Constraints page.
In Summary: If all members of your system limitation expression can be represented by an input Control – use a Constraint.
1141 / 1277
If any member of your limiting expression needs to run a Scenario in order to be evaluated – use a Response .
Constraint
You may want to find an optimal solution based on more than one Response by using the Multi-Objective Weighted
1142 / 1277
You may want to find an optimal solution based on more than one Response by using the Multi-Objective Weighted
optimization. Follow these steps:
1. Decide which Responses should be part of the objective function.
2. Set the Objective Goal to Maximize Objective or Minimize Objective for each Responses that will be included in the
optimization. Set the Weight property for each Response that will be used. (OptQuest multiplies each response value
by the weight, negates it if it is set to Minimize, and then adds them together to get the value of the overall
objective.)
3. Tell OptQuest to consider more than one Response via the Objective Type property. Set this to Multi-Objective
Weighted.
To find an optimal set of solutions based on more than one Response,instead of just one optimal solution, set the Objective
Type property to Pattern Frontier. In this case, the Weight property on each Response is not used, but each Response to
be used in the optimization must still have its Objective property set to either Minimize or Maximize.
Results and the Optimal Solution
The Objective Function will be graphed using Simio Measure of Risk & Error (SMORE) Plots. Although the Mean Value is
the primary area of concern, the SMORE plot allows the user to see the variability behind the values and to make decisions
accordingly. If two values have similar Means, the variability of the system can act as another level of information as to
which Scenario would be the best choice.
To easily spot the Optimal Solution, the Objective function can be sorted before running the Experiment so that as
OptQuest creates Scenarios it will plot Response values, in real time, ranked either ascending or descending. The Optimal
Solution would simply be the Scenario that is listed at the top of the Primary Response Column in the Design Tab or the
furthest to the left in the Response Chart.
1143 / 1277
Simio Reference Guide
1144 / 1277
Simio Reference Guide
The Add-In can only analyze one response at a time, so you must define a Primary Response in the Analysis window. This is
the Response column that you are going to base your decision upon and represents the quality of your system, similar to an
Objective Function. You must also define and Objective ( Maximize or Minimize) so that the Add-In can determine what is
considered “Best” – lower values or higher values.
1145 / 1277
Once you have all your parameters defined correctly, press the Run button and the Add-In will do all of the work. After, the
add-in is done running there will be only one scenario left checked in the Design Tab and only one scenario in the
Response Chart.
S. Kim and B. L. Nelson, "A Fully Sequential Procedure for Indifference-Zone Selection in Simulation," ACM Transactions
on Modeling and Computer Simulation 11 (2001), 251-273.
1146 / 1277
Simio Reference Guide
1147 / 1277
Simio Reference Guide
Experiment Example
An Example of Creating and Running an Experiment ( Using the AirportTerminal Example Model)
The Simio example model, titled AirportTerminal.spfx, contains an Experiment that utilizes the OptQuest for Simio Add-In.
It is recommended that you familiarize yourself with this example in order to learn about the features and capabilities that
available when running experiments in Simio. The following is a step by step approach on how this example experiment
was created. To create a new experiment, click on the New Experiment icon in the Project Home ribbon. You can also
create a new experiment by right clicking on the name of the model from within the Navigation window.
Experiment Contols
A Control is automatically added to your experiment for any user defined properties that are at the model level. In this
example, there are four model level Properties that have their Visible property set to ‘True’, which indicates that they will
appear as a control in an experiment. The properties are: CheckIn Kiosks, CheckIn Clerks, ID Check, Scanner Stations. In an
experiment that does not use the OptQuest Add In, these controls do not have properties. But when the OptQuest Add-In
is used, you need to specify the following properties, which tell OptQuest whether or not to include this in its optimization,
the minimum and maximum values to set this control to, and how to increment the value. Notice that in this example, only
the first two controls are included in the optimization because their Include In Optimization property is set to 'yes'.
Experiment Responses
Click on Add a Response in the Experiment Design ribbon to add a Response to your experiment. This example contains
three responses: Revenue, Profit and Cost. Click on the column header for Profit to see the properties of this Response. The
properties indicate that the expression being evaluated is the value of the “Profit” OutputStatistic (look in the Elements
panel within the model to see details on this statistic), and the Objective property indicates that the profit value should be
maximized. The other two responses have an expression defined, but not an objective.
Experiment Properties
The Experiment properties for this example are shown below. Note: To get the Experiment Properties window to display at
any time, right click on the name of the experiment in the navigation window and select Experiment Properties.
1148 / 1277
The Upper Percentile and Lower Percentile properties are used in the SMORE plots. The Primary Response property tells
Simio which Response to use for determining the optimal solution. In this example, we want our optimal solution to be
based on the Profit Response and the objective that is defined on that Response.
The OptQuest for Simio-Parameters section of the Experiment properties is where the user defines the information for the
OptQuest Add In. In this example, Simio will run a minimum of 6 replications and a maximum of 10 replications for each
scenario. OptQuest decides how many replications are required for each scenario. Before the user hits the run button to
begin the experiment, it appears to contain only one scenario. However, the OptQuest Add In runs multiple scenarios, until
it has found the optimal solution, based on your defined Controls, Constraints and Objective on the Primary Response. The
Experiment property, Max Scenarios, indicates that a maximum of 10 scenarios will be run. In this example, the full 10
scenarios are run.
1149 / 1277
Simio Reference Guide
Replication Runner
What is Simio Replication Runner?
Simio Replication Runner is a program that allows an Experiment in Simio to distribute it's replications to other computers
on the local network. When other network computers are running Simio Replication Runner, the Simio experiment will use
the resources on that computer for the experiment run, thus distributing the processing requirements across multiple
computers on the network.
An experiment will distribute it's runs across other machines running Replication Runner when it has it's Distribute Runs
property set to 'True'.
NOTE: SIMIO REPLICATION RUNNER IS ONLY AVAILABLE FOR USE WITH RPS ( ENTERPRISE ), PROFESSIONAL
AND TEAM1 LICENSES. Simio RPS ( Enterprise), Simio Professional and Simio Team1 allow up to 16 concurrent
replications. Additional replication runner licenses may be purchased.
1Legacy product
1151 / 1277
Simio Reference Guide
1152 / 1277
Simio Reference Guide
Simio’s extension points have been exposed as a set of interfaces that describe the methods and calling conventions to be
implemented by any user extended components. This set of interfaces is referred to as the Simio application programming
interface ( API ). For detailed information on the Simio API, see the file C:\Program Files\Simio\Simio API Reference
Guide.chm.
Simio Visual Studio Templates and Examples:
To help get started creating Simio user extensions, a number of predefined Simio project and project item templates for
Microsoft Visual Studio 2012, 2013 and 2015 are available. These templates provide reusable and customizable project and
item stubs that may be used to accelerate the development process, removing the need to create new projects and items
from scratch.
For more information, see Simio Visual Studio Templates.
Additionally, several User Extension Examples are included with the Simio installation.
General Steps to Create and Deploy a User Extension:
The general recommended steps to create and deploy a user extension are as follows:
Create a new .Net project in Visual Studio, or add an item to an existing project, using one of the Simio Visual Studio
templates. Note that, in addition to the commercial versions of Visual Studio, Microsoft also offers “Express” editions
which are available as free downloads from www.microsoft.com/express/Windows .
Complete the implementation of the user extension and then build the .Net assembly (.dll) file.
To deploy the extension, copy the .dll file into the [ My Documents]\SimioUserExtensions directory. If the folder
does not already exist you must create it. As an alternative, you may also copy it to [ Simio Installation
Directory]\UserExtensions, but ensure that you have proper permission to copy files here.
See Also
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1153 / 1277
Simio Reference Guide
1154 / 1277
After creating your custom project in Visual Studio and building the .dll file, move the .dll file into the [ My
Documents]\SimioUserExtensions directory. If the folder does not already exist you must create it. Restart Simio and it will
automatically find that .dll and recognize your custom user extension.
1155 / 1277
Simio Reference Guide
TextFileReadWrite – This folder contains an example project implementing a custom File element and custom Read
and Write steps. The File element may be added to a model to specify an external file name. The Read and Write
steps may then be used in process logic to perform runtime read or write to a specified File element.
BinaryGate – This folder contains an example project implementing a custom BinaryGate element and custom
OpenGate, CloseGate, and PassThruGate steps. A BinaryGate element may be added to a model to specify an
‘Open/Closed’ constraint. The OpenGate and CloseGate steps may then be used in process logic to open or close a
specified BinaryGate element. The PassThruGate step may be used in process logic to only allow an executing token
to continue (i.e., ‘pass thru’) to the next step in the process if the specified BinaryGate element is ‘Open’.
SimioSelectionRules – This folder contains the implementation of several custom selection rules, including commonly
used ‘Largest Value First’ and ‘Smallest Value First’ rules.
SourceServerSink – This folder contains an example project implementing a custom add-in that places Source, Server,
and Sink objects from the Simio Standard Library into the current model, and connects those objects using Path
objects from the Standard Library.
1156 / 1277
Simio Reference Guide
Built In Rules
There are a number of built in selection rules. The C# sources to these rules are provided at [ All User
Documents]\Simio\Examples\UserExtensions\SimioSelectionRules\.
These rules were built to be as generic as possible. Several domain specific rules can be used by simply using the right
expression in one of the rules.
Smallest Value First
Selects the entity which would have the smallest value for the given expression.
Largest Value First
Selects the entity which would have the largest value for the given expression.
For both the Smallest Value First and Largest Value First rules above, the Value Expression is used as the expression used
with the rule. The keyword 'Candidate' may be used to reference an object in the collection of candidates (e.g.,
Candidate.Entity.Priority). The Filter Expression may be used to filter the list before the specified rule is applied. Again, the
keyword 'Candidate' may be used to reference an object in the collection of candidates.
Standard Dispatching Rule
Allows a user to easily specify a commonly used dispatching rule such as Earliest Due Date ( EDD ) or Least Setup Time as
the dynamic selection rule for selecting the next entity to process at a location such as a Server or Workstation
( Deprecated).
A Filter Expression can be specified which is an optional condition for each candidate entity that must be true for the entity
to be considered for selection. In the expression, use the syntax 'Candidate.[ EntityClass].[ Attribute]' to reference an entity
attribute (e.g., Candidate.Entity.Priority).
A Look Ahead Window can be specified whereby only candidate entities whose due dates fall within a specific time window
will be considered for selection. If there are no candidates whose due dates fall within the look ahead window, then the
window will be automatically extended to include the candidate(s) with the earliest due date.
The below dispatching rules are available as drop-down list choices for the Dispatching Rule and Tie Breaker Rule sub-
properties (when Repeat Groups for Standard Dispatching Rule is 'False') or within the multiple Dispatching Rule properties
(when Repeat Groups for Standard Dispatching Rule is 'True').
Listed below are the Standard Dispatching Rules that are currently supported:
Dispatching Rule Description
FirstInQueue The entity ranked nearest the front of the queue is selected.
LargestPriorityValue The entity with the largest priority state value is selected.
SmallestPriorityValue The entity with the smallest priority state value is selected.
1157 / 1277
EarliestDueDate The entity with the earliest due date is selected.
CriticalRatio The entity with the smallest critical ratio is selected. Critical ratio is the amount of
time remaining to complete the entity’s assigned sequence in order to meet its due
date divided by the total operation time remaining to complete the entity’s
sequence. Assumes that each candidate entity has been assigned a destination
sequence.
LeastSlackTime The entity with the least slack time is selected. Slack time is the amount of time
remaining until the entity’s due date minus the total operation time remaining to
complete the entity’s sequence. Assumes that each candidate entity has been
assigned a destination sequence.
LeastSlackTimePerOperation The entity with the least average slack time per its remaining operations is
selected. Assumes that each candidate entity has been assigned a destination
sequence.
LeastWorkRemaining The entity with the least total operation time remaining to complete its assigned
sequence is selected. Assumes that each candidate entity has been assigned a
destination sequence.
FewestOperationsRemaining The entity with the fewest number of operations remaining to complete its
assigned sequence is selected. Assumes that each candidate entity has been
assigned a destination sequence.
LongestTimeWaiting The entity that has been waiting the longest time in the queue is selected.
ShortestTimeWaiting The entity that has been waiting the least time in the queue is selected.
LargestAttributeValue The entity with the largest value of the specified expression is selected.
SmallestAttributeValue The entity with the smallest value of the specified expression is selected.
CampaignSequenceUp The entity that has a campaign value equal to or next largest compared to the
value of the last processed entity is selected. If none of the waiting entities have
the same or larger value, then the rule starts a new campaign by selecting the
entity with the smallest value.
CampaignSequenceDown The entity that has a campaign value equal to or next smallest compared to the
value of the last processed entity is selected. If none of the waiting entities have
the same or smaller value, then the rule starts a new campaign by selecting the
entity with the largest value.
CampaignSequenceCycle Alternates back and forth between a campaign sequence up and a campaign
sequence down. If the campaign is increasing, it will continue to increase until no
entities remain with the same or larger campaign value. When this occurs, the rule
then switches to a decreasing campaign and begins selecting entities that have the
same or smaller campaign value. When all such entities are exhausted, the rule
returns to an increasing campaign strategy and the cycle repeats.
1159 / 1277
Simio Reference Guide
Protection
Protection
Protection features within Simio are located within the Edit ribbon of the main Simio project. First, navigate to the Project
window from within the Navigation window. The Models view will display the various models within the project.
Protect / Unprotect Buttons
The Protect/Unprotect feature allows an object builder to prevent an unauthorized user from viewing, subclassing, or
editing the object definition. This can be useful to protect your intellectual property or simply to prevent an object from
being accidentally changed by a novice or unauthorized user.
With the Models view open, click on the model to protect and select the Protect button from the Edit ribbon. You will be
asked to enter a password. When a project containing a protected object is loaded, the user will be prevented from
viewing or accessing the definition of any protected objects unless they have the password. The object can still be
instantiated normally in another model. To unprotect an object, select the object from within the Models view of the
Project window and select Unprotect from the ribbon. Note that protection is at the object/model level. A project might
contain multiple objects, some unprotected and others protected individually.
1160 / 1277
Simio Reference Guide
Once the data is imported from the ERP system, a schedule is generated by simulating the flow of jobs using the Simio
model with no variation. The simulation is then replicated multiple times with variation incorporated to generate
probabilistic risk measures for the associated schedule. The risk measures include the probability of meeting user-defined
targets, as well as expected, pessimistic, and optimistic schedule performance. Various built-in analytical tools like Gantt
charts, resource and entity activity tracking, root cause analysis, optimization, and even 3D animation can be used to
analyze and reduce the risk and improve the performance. The improved schedule and associated risk analysis may then be
exported back to the ERP system or deployed directly from Simio, if desired.
1162 / 1277
Simio Reference Guide
RPS users can author design-time "Modeling Helper" Add-Ins. These are pieces of code that are “bound” to a particular
model.
User starts implementation with the SimioAPI.Extensions.IModelHelperAddIn interface.
Add-Ins are loaded with the model, and unloaded when the model is closed.
Add-Ins have access to the full IModel design time API.
Add-Ins can subscribe to events on the model (right now only save).
Add-Ins can 'augment' the model’s property display and put their own properties in there as well.
Add-Ins specify an 'environment' under which they are valid to run (currently ONLY selection is 'Desktop').
Add-Ins are displayed in the Project Home ribbon under the Modeling Helper pull-down.
A normal Simio install will have no model helpers installed along with it.
By selecting an icon in the drop list, the user enables (or disables) that Add-In for the active project.
Once ANY Add-Ins are enabled, that will disable Undo/Redo. Simio will make sure users are aware of this:
Enabled Add-Ins can optionally add their own 'properties' alongside the model’s properties:
1163 / 1277
Simio Reference Guide
There are cases however where it is insufficient to run the model only once to create a schedule or generate results for a
scenario replication instance. Instead, the model must be run multiple times in succession, with information determined by
previous runs used as input data for the next run. Simulation runs are continued in succession until the desired objective is
achieved. This type of simulation approach is often referred to as a multi-pass approach.
1164 / 1277
Table States – Keep Values On Run Restart Option - For any State Column in a Data Table that is not an object or element
reference state type, or any Output Table, a Keep Values On Run Restart boolean option will be provided indicating
whether to keep the state column’s values from the previous run if a new run is started using the RestartRun step.
1165 / 1277
Simio Reference Guide
When defining a data table, many different type of columns are available from the Schema ribbon, including standard
properties, element reference properties and object reference properties, as seen above. These allow the user to define a
column as an expression, real, entity, transporter, tally statistic and so on. The data that is entered within each row of that
column must be of that certain type, as defined. Typically, each row in the table then has a value for each given column.
Additionally, state columns can be used to write data to specific rows either at initialization or during the simulation run.
1166 / 1277
Simio Reference Guide
The Target button on the Schema ribbon adds a new target to the table. A target’s Expression property is evaluated at the
end of a simulation run and classified according to the upper and lower bounds specified. When a target is added to a
table, two columns named Value and Status are automatically added. The Target name is shown above both of the
columns. To edit the target, click on the target name and the properties of the target will be visible.
The Value Classifications section of properties allow the user to specify a string value that will be written to the Status
column of the target after the simulation run is complete. For example, if the target is a time based value, these may
include On Time, Early, and Late.
The Appearance section contains a Display Name, which is shown on the top of the columns for the target. The Display
Format allows you to customize how the target value is displayed. For example a format of N1 indicates to display a
numeric with 1 digit to the right of the decimal point.
The Remove Target button removes a selected target from the table.
The performance classification slider on the Content ribbon allows the user to specify the ranges for target performance
coloring (red/yellow). Target performance values are the probability of meeting the specified target (expressed as a
percent). Adjust the sliders to specify the ranges used for applying color tot represent different performance levels. When a
slider is moved, an indication of the percentages is shown above the slider.
Data The format of the result of the expression (Real, Integer, Boolean, DateTime).
Format
1167 / 1277
Unit Type The classification of units for the expression (Unspecified, Time, TravelRate, Length, Currency,
CurrencyPerTimeUnit).
Lower Specifies the minimum value that should be considered acceptable for the target. Values below this
Bound bound will be highlighted in the table.
Upper Specifies the maximum value that should be considered acceptable for the target. Values above this
Bound bound will be highlighted in the table.
Units Units for the expression. These may be found under the Lower Bound and Upper Bound properties
and will depend on the Unit Type specified.
Within Optional string used to classify the status of the target if its value is within the target’s specified lower
Bounds and upper bounds.
Below Optional string used to classify the status of the target if its value is below the target’s specified lower
Lower bound.
Bounds
Above Optional string used to classify the status of the target if its value is above the target’s specified upper
Upper bound.
Bounds
No Value Optional string used to classify the status of the target if the order has not completed and thus there
is no value for that particular target. The Value column will read NaN, while the Status will be
reported as No Value (or optional string specified).
Category Optional string used as the Category for displaying the target to the Operational Planning user. If
Name defaulted, then the word "Targets" is used.
Enabled Visible when the table is bound to a data connector for export. If true, the column will be exported. If
Export false, it will not. There are four properties that are shown with the particular data exporter, including
Value, Status, Expected and WithinBoundsProbability.
Note that when in Interactive view, exporting the table with targets will export Value and Status.
When running in Planning mode, the targets will export Value, Status, Expected and Within Bounds
Probability.
These Enabled Export values are also reflected within the Data Connectors Exporter.
Below is an example of two tables that each includes a date time column (Due Date), a table state that is defined as a date
time (Ship Date), and a target (Slack / Target Date). Notice that there are two columns added for the target, including
Value and Status. In the table on the top left, the target's Expression property is calculated by subtracting the Ship Date
from the Due Date column. The target is then a 'Real' value and is defined as the Slack time (in days). In the table on the
bottom right, the target's Expression property is the same as the Ship Date and is a 'DateTme' value.
The target's Expression property is evaluated at the end of the simulation run and that expression is put into the appropriate
row under the Value column. If the entity/order is incomplete, the Value will be reported as NaN. The upper and lower
bounds are then evaluated and any string value classifications are used to determine the status of the same row.
1168 / 1277
Simio Reference Guide
1170 / 1277
Simio Reference Guide
The Planning Window provides access to various windows used for scheduling purposes. These include the following:
Resource Plan displays information about how the resources are being used in a Gantt chart format.
Entity Workflow provides information about specific entities and their flow in a Gantt chart format.
Logs provides all information about how the resources are being used and the order of entity processing in various log
formats – including the a Resource Usage Log, Resource State Log and Constraint Log.
Tables provides a view of all of the data and sequence tables that have been defined through the Data window.
Work Schedules allow users to model resource capabilities that change over time.
Changeover Matrices are used to model time durations that are dependent upon changes from one type of operation to
another (e.g., sequence-dependent setup times).
Facility Model allows the user to view the Facility window animation without editing it.
Results displays simulation and scheduling results in various formats, including Target Summary, Risk Plots and Detailed
Results.
1171 / 1277
Simio Reference Guide
The format of this Gantt window shows all of the resources in the simulation model in a Gantt chart format and includes
the Gantt ribbon, as discussed below.
In order for the Gantt chart to display a resource, the Log Resource Usage property under the Advanced Options category
of the particular object (within the Facility window) must be set to ‘True’. The Standard Library objects Server, Combiner,
Separator, Resource, Worker, Vehicle and Workstation (Deprecated) have resource logging capability. The Display
Category property also allows users to specify an optional text for hierarchically arranging resources within the Resource
Plan window. Backslashes may be used for multiple levels (e.g., One\Two\Three).
Within the Operational Planning ribbon, the Create Plan button allows the user to run the model to generate a resource
plan. This model will be run in a deterministic mode with no uncertainty to generate a resource plan. All distributions used
in the model will return their expected values and all failures in the model will be disabled.
Entities can be moved around on the Resource Gantt by dragging and dropping to a new location within the Gantt. See the
Plan Resource Constraints section below for more details.
Gantt Ribbon
Within the Gantt ribbon, there are a number of options for navigating within the Gantt chart (View/Zoom sections), as well
as turning on/off specific rows under the various resources (Visibility section).
The Home button allows you to select the current home date for the Gantt chart. Options include Today (default value),
First day of this Week, First day of this Month and a Specific day. If Specific day is selected, a dialog will appear for the
user to select the particular starting day from the calendar.
The Task Row and Task Group allows the various Tasks under each resource to be grouped by a custom expression selected
from within the Task Log. If nothing is specified, then the tasks go into the “Tasks” row under the corresponding resource. If
a Task Row is specified, then the tasks go in a row of that name *under* the existing “Tasks” row (expanded with the +). See
the Entity Workflow page, under Categorizing the Tasks, for an example.
Buttons are available on the Gantt ribbon for zooming In and Out of the Gantt chart view. Additionally, by placing the
cursor within the time scaler area (see below), the scroll wheel can be used to zoom in/out. Buttons are also available to
see All of the Gantt chart, as well as to zoom to a particular Range, such as an hour, day, week, month or year.
The Visibility buttons allow you to toggle on/off the various rows beneath the resources shown within the Gantt. These
include:
1172 / 1277
Tasks - Show or hide the task rows.
Task Resource Usage - Show or hide the resource usage rows under task rows.
Task Constraints - Show or hide the constraint rows under task rows.
Contraints - Show or hide the constraint rows. These display the various constrained entities.
Exceptions - Show or hide the exception rows. These relate to the resource schedules and includes day exceptions
and downtimes and other exceptions.
Population Members - Show or hide the population member rows. This would include specific member information
within vehicles and/or workers.
Summaries - Show or hide summary rows.
Resource States - Show or hide the resource state rows.
Capacity Plots - Show or hide the capacity plots rows. These are shown for multiple capacity resources only.
State Statistics - Show or hide the rows that display State Statistics that have their Log Observations property set to
'True'.
Table Columns - Show or hide the rows that display time-indexed column values.
Show Transporter Riders (On Resource Row / On Separate Row) - Show the Transporter's riders on either the
same row as the Transporter or on a separate row. Hide the riders all together by deselecting both options.
Show Filtered Out Items - When the Gantt is filtered to a specific Resource or Entity, the user can show or hide the
non-filtered items in the Gantt. By default, the items that are filtered out are not displayed. If the user clicks onto
Show Filtered Out Items, they will be shown on the Gantt in a muted, lighter color.
Gantt Chart
Within the Gantt chart, the resource names in the model are shown on the left side of the chart. To the right of each
resource is a calendar formatted view of the entities or orders that have utilized the resource. The entity orders are color
coded so it is easier to visualize the resources that a particular order has been processed through.
When hovering the mouse over the colored portion of particular entity, details such as the entity identifier, resource name,
start time, end time, duration and capacity units owned, are provided in an ‘info tip’ box. In the below example, the mouse
is hovered over Order_139 at the Mixing2 resource. The Additional Details section of the info tip will show entity specific
information specified within added columns in the Resource Usage Log.
In addition to the entity information shown above for a given resource, if the entity has an associated table row, all table
information will also be shown in the property window to the right when a particular entity at a given resource is selected.
This property window allows the user to edit any specific table data that is defined with the Editable property for the
column as 'True'. Grayed data (not Editable) is also displayed for reference purposes.
If the resource is a Fixed object, the Gantt chart is shown as above, with the entities shown directly to the right of the
resource name. However, if the Resource is a member of a population (such as a Worker or Vehicle), the Resource name
should be expanded (using the '+'). This will display the option to show the Population Members (again using the '+'). Once
the population members are displayed (such as WorkersFirstShift[1], WorkersFirstShift[2], etc.), the entities that were
processed with that resource are displayed to the right, as shown below.
If the Resource is a Worker or Vehicle that includes Load and Unload times for transporting, the graphical representation
on the Resource Plan Gantt shows a lighter color on the left (Load Time) and/or lighter color on the right (Unload Time)
while the actual Transport time is displayed in the middle with a darker shade of the color, as shown below. When hovering
over the particular entity that seized the Worker or Vehicle, the Loading, Riding, and Unloading durations are displayed.
1173 / 1277
By default, when a Resource is a Vehicle or Worker, any entity that is riding on the Vehicle or Worker will be displayed in
the Resource Gantt on the same row as the Vehicle/Worker. Whether or not these entities are displayed at all and where
they are displayed can be controlled by the user.
The user can select On Separate Row from the Gantt Ribbon, under Show Transporter Riders in the Visibility section of the
ribbon to change how the riding entities are displayed.
This will change the Gantt to display the riding entities on a separate row within the Gantt, as displayed below. In the
example below, we have changed the Initial Ride Capacity of the ForkLift to '2' and thus there are two entities riding on a
vehicle.
If a Resource has been seized, but not released, when the run finishes, the Resource will be displayed on the Gantt with
three dots following at the end. This indicates that the End Time of the seize is unknown and has not happen as of the time
of the run completion.
If there are State Statistics for a user defined List State in the model, whose Log Observation property is set to 'True', the
State Statistic will be displayed in the Resource Gantt, if the State Statistics button is selected in the Gantt ribbon. Hovering
over the row will show the value of the State Statistic, the start time, end time and the duration that the state has had this
value. The example below shows a custom Server, MyServer1, which has a state statistic for a user defined List State,
named PriorityState. The value of this List State changes throughout the model between NonPriorityItems to PriorityItems.
The Constrained Entities section will show any entities that have been waiting at the resource for processing. An example
of the Tanks resource’s Contrained Entities is shown below. The Constrained Entities can be hovered over individually to
find the starting time (in the input buffer), and ending time (in the input buffer). The constrained entities’ colors correspond
to the entity color as it is shown processing. The example below shows the Tanks resource, which has a capacity of 3 (as you
can see 3 entities processing at a time). There can also be multiple constrained entities, as shown below (2) for a given
resource.
1174 / 1277
Tasks and the Resource Plan Gantt
Expanding a resource using '+' will also display the Tasks section, showing the Task Sequence defined tasks associated with
each resource. Many of the Standard Library objects, such as Server, Combiner, and Separator include the Processing Type
of 'Task Sequence' in which individual Processing Tasks are specified in a repeating property. Those Tasks for each resource
can then be shown in the Gantt, as shown below. The '+' next to the Tasks can also be expanded to show any Constraints
and Resource Usage associated with the task.
When using Task Sequences, each task may have required secondary resources and materials before processing may begin.
These additional resources and materials, if not available, can cause the processing at a Server, Combiner or Separator to
be constrained. If resource processing is constrained by a task's constraint, the Resource Plan Gantt bar will be hatched, as
shown below. This should indicate to the user to open the resource using '+' to investigate further any constraints with the
task.
When the main resource(s)on the Gantt has a hatched area, the '+' should be used to open the resource to review the tasks.
The tasks can then also be opened using '+' to display the constraint(s) for the task. Typical constraints may include a
shortage of material, availability of the secondary resource (given busy at other locations) or availability of the secondary
resource due to offshift status. In the below example, the Filler1 resource shows a hatching area. When expanded, the
Process task associated with that resource is shown to be constrained as seen in the hover info box. Additionally, the
constrained entity (Order_122) box shows that it is constrained due to worker resource availability. Note that the hatched
areas in this example occur on Saturday and Sunday, which is when all 3 shift workers are off-shift.
1175 / 1277
Searching the Gantt for a Specific Item
Gantt views have a small search box at the top that does basic searching. If a user types or pastes a desired string in the
search, Simio will go to the first instance that contains that text, which could be a Resource / Entity along the left side or
within the Gantt timeline. The search does partial matches and is not case sensitive. The user can start the search by typing
in the desired string and pressing either Enter (keyboard), the search magnifying glass or the right arrow. Selecting the
magnifying glass or right arrow multiple times will highlight found instances on a row by row basis throughout the Gantt.
The sequence of found items is by row and not by timeline. The left arrow can be used to go backwards in the search to the
top of the Gantt. Simio will expand an entry to show instances found within the Tasks (such as a task name) or Constraints
of an entry. Search does not look for items within the hover tooltip of a Gantt entry.
In the example below, searching for Mixing1 matched a row containing that resource, while searching for 102 finds the first
instance of Order_102. Selecting the magnifying glass or right arrow will take the user to the next instance of 102 and so on.
1176 / 1277
Expanding the Resource State for Exceptions
For any resources that have a Capacity Type of 'WorkSchedule', the Resource State will display a '+' sign to the left that can
be expanded into work schedule exceptions. This includes Day Exceptions, as well as Downtimes and Other Exceptions.
Day Exceptions are an entire day with a given Day Pattern that may be different than the work day associated with the
resource's schedule. For example, perhaps a work schedule consists of five standard work days. A user may wish to have an
extended day type schedule on any particular day, which will then override the work schedule. To add a Day Exception
using the Gantt, click on the beginning of a given day and drag the mouse to the right. You will see a brown rectangle
added to the Gantt. The property window on the right is used to enter the desired Day Pattern name. One day at a time
can be added to the day exceptions.
Downtimes and Other Exceptions are periods of time that can be specified as a 'Downtime' (where the resource capacity
Value is '0' automatically) or a 'GeneralException' (where the user can specify the resource capacity Value as well as Cost
Multiplier. To add a Downtime or Other Exception using the Gantt, click on the beginning of a given time period and drag
the mouse to the right. You will see a brown hatched rectangle added to the Gantt. The property window on the right is
used to enter or change the desired Start Time, End Time, Exception Type and associated properties.
With all exceptions, you can view the exception details by hovering the mouse over the brown rectangle, as seen below.
Clicking and highlighting any exception will allow you to edit the details within the property window on the right.
1177 / 1277
Plan Resource Constraints (Drag and Drop within the Gantt Chart)
If the IncludeInPlanResourceConstraints property on the object instance is set to ‘True’, entities that have seized that object
can be reordered in the Resource Plan Gantt by dragging and dropping the entities within the Gantt.
Resource Allocation Dependencies (Reordering Entities Within the Same Resource Row)
If the IncludeInPlanResourceConstraints property on the object instance is set to ‘True’, entities that have seized that object
can be reordered in the Resource Plan Gantt by dragging and dropping the entities within the Object’s row in the Gantt. If
the user drags and drops an entity to a new location in the row, a new Allocation Rule is created and an entry is placed in
the Resource Allocation Dependencies table. When the Plan is re-generated, the rules listed in this table are used to
determine the order in which resource allocations occur. In other words, when some Candidate Entity Name wants to seize
from some Resource or List Name, it will not be allowed to do so until some other Dependent Entity Name (in
Stipulations tables, i.e. Follows Entity) has seized that same Resource or List Name for a specified number of seizes (in
Stipulations tables, i.e. Prior Usage Count). The user can manually delete rows from the Resource Allocation Dependencies
table. The plan should then be re-generated so that the deleted rules will not be applied to the plan.
In the example below, we have slightly modified the same example we have been using to include a single Inspection
server for RedPack orders before shipping. Order_130 is scheduled on the Inspection resource after Order_127 and
Order_128. The user drags Order_130 before Order_127 and Order_128 within the Inspection resourcce row in the Gantt
Chart, to create two new allocation dependencies: Order_130 must be scheduled before Order_127 and Order_128. The
plan is re-run and the new Gantt shows that Order_130 is scheduled before these two orders on the Inspection resource.
Original Plan
Resource List and Node List Requirements (Moving Entities to a New Resource Row in the Gantt)
If an entity is seizing from an object list, then it is possible for that entity to be forced to seize a specific object from that
object list, if the IncludeInPlanResourceConstraints property on the object instance is set to ‘True’. This is done by dragging
and dropping the entity into the row of the object that it should seize. If the user drags and drops an entity to a new
resource row, a new Resource List Requirement is created in the Resource List Requirement table. When the plan is re-
generated, the rules listed in this table are used to determine which object should be seized by the entities. In other words,
the Candidate Entity Name is going to seize from the list Resource List Name, and it will not be able to seize any
resource from the list, but instead it will only be able to seize (and have to wait for) the Required Resource. The user can
manually delete rows from the Resource List Requirements table. The plan should then be re-generated so that the deleted
rules will not be applied to the plan.
This same concept is true when selecting a destination from a Node List. Depending upon the model structure, you may be
selecting a Server (or other object) destination from a list of nodes based on particular rules. If an entity destination is
being selected from a node list, then it is possible for that entity to be forced to move to a specific node from that node
list, if the IncludeInPlanResourceConstraints property on the object instance is set to ‘True’. This is done by dragging and
dropping the entity into the row of the object that it should seize (and thus the associated node destination that it will
select). If the user drags and drops an entity to a new resource row, a new Node List Requirement is created in the Node
List Requirement table. When the plan is re-generated, the rules listed in this table are used to determine which node (and
associated object resource) should be selected by the entities. In other words, the Candidate Entity Name is going to
select from the list Node List Name, and it will not be move to any node (and associated object resource) from the list,
but instead it will only be able to move to the Required Node. The user can manually delete rows from the Node List
Requirements table. The plan should then be re-generated so that the deleted rules will not be applied to the plan.
In the example below, the entities are transferred to one of three Mixing locations (with associated Server resources);
Mixing1, Mixing2 and Mixing3. Originally, Order_111 moved to Mixing3 for processing. The Gantt below shows the new
Plan after the scheduler dragged Order_111 from Mixing3, up to Mixing1, creating an entry in the Node List Requirement
table. This entry caused the new plan to force Order_111 to transfer to and be processed by Mixing1, thereby also moving
Order_112 to Mixing3.
1178 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1179 / 1277
Simio Reference Guide
The Gantt ribbon is available from the Entity Workflow window. Within the Gantt ribbon, there are a number of options for
navigating within the Gantt chart (View/Zoom sections, see Resource Plan page for details), as well as turning on/off
specific rows under the various entities (Visibility section). Within the View section of the Gantt ribbon, there are multiple
fields to allow the user to customize the Entity Workflow Gantt presentation. First, the Owner Group allows the various
entities (items) within the Gantt to be grouped based on a column within the Resource Usage Log (see Logs panel). See
example 3 on the Resource Usage Log help page for more details. Additionally, the Owner Row can be specified as a
Resource Usage Log custom expression to split out the “main” resource time items into sub-rows under the main row. For
example, if the entity has parallel activities with multiple resources or multiple entities within an 'order', instead of having
them all shown together under the same category, they can be separated by work area or row grouping as specified within
a Resource Usage Log column. See the example below under Using Owner Row.
The View section of the Gantt ribbon also contains several task related properties. For those models with Task Sequences
and Tasks, the Task Row and Task Group options allow the various Tasks under each entity to be grouped by a custom
expression selected from within the Task Log. If nothing is specified, then the tasks go into the “Tasks” row under the
corresponding entity. If a task row is specified, then the tasks go in a row of that name *under* the existing “Tasks” row
(expanded with the +). See below for examples of Categorizing the Tasks.
By hovering over a given resource within the Gantt for an entity, the entity (order) name is displayed, along with the start
time, end time, duration and capacity units owned. If the entity has an associated table row, that information is also
displayed.
Right-Clicking in the Gantt
The user can select a Resource in the Gantt and right click. The menu gives the user the option to "Re-Run to here, Filter to
Resource: X, Filter to Entity: X, Filter To Expression Column and Clear Filter", where X is the current Resource that is selected
and the current entity that is selected.
Selecting "Re-Run to here" will bring the user to the Operational Planning Facility window and run the model and the
animation until that particular entity is processed at that particular Resource. Selecting "Filter to Resource: X" will filter the
Gantt so that all of the instances of that Resource in the Gantt will be brightly colored, but everything else in the Gantt will
be muted a lighter color, making it easy to focus only on that particular Resource. Selecting "Filter to Entity: X" will filter the
Gantt so that all of the instances of that Entity in the Gantt will be brightly colored, but everything else in the Gantt will be
muted a lighter color, making it easy to focus only on that particular Entity. When the Entity Workflow Gantt is filtered to a
particular Resource or Entity, the Resource Plan Gantt is also filtered to that same Resource or Entity and vice versa.
1180 / 1277
Viewing the Entity Constraints
Similar to the Resource Plan Gantt, the Entity information may be expanded by clicking on the ‘+’ to the left of the entity
name. This will provide additional information on the Constraints (if the Constraints button on the Gantt ribbon is selected)
for each entity during the simulation run. As you can see below, the entity Order_117 is first waiting for Material Availability
(BlueBulk) as well Destination Availability (Filler2). The order then has a period of time for Resource Availability while the
3rd shift workere is off shift over the weekend.
When the mouse hovers over a constraint for the entity, a display is shown that includes the type of object (Server, Worker,
Resource, etc.), as well as the type of constraint. Types of constraints include Destination Availability (waiting on Node List
allocation to a destination), Resource Availability (waiting for resource capacity to become available), Resource Arrival
(waiting for a worker or vehicle to arrive to the entity location) and Material Availability (waiting for material(s) specified
to be available for reservation).
Viewing the Targets
Targets are shown on the Entity Workflow Gantt only when they meet certain criteria, including being an entity-related
target, being of Data Format 'DateTime' and having Bounds that are also DateTimes. See the Targets - RPS (Enterprise)
page for more information.
Viewing the Tasks
Expanding the entity information using the ‘+’ will also provide detailed information on any Tasks (if the Tasks button on
the Gantt ribbon is selected) for each entity. Tasks are specified within many Standard Library objects by using the
Processing Tasks method of processing to specify the 'Task Sequence' for the object. Below the entity Order_101 includes a
Process task within the Mixing3 object, while Order_111 show both Setup and Process tasks. Hovering over a specific task
provides additional details about the task, including starting and ending times and duration. The Task Log shows detailed
information for all entities as well.
The '+' next to the Tasks can also be expanded to show any Constraints and Resource Usage associated with the task. When
using Task Sequences, each task may have required secondary resources and materials before processing may begin. These
additional resources and materials, if not available, can cause the processing at a Server, Combiner or Separator to be
constrained. If an entity is constrained by a task's constraint, the Entity Workflow Gantt bar will be hatched, as shown below.
This should indicate to the user to open the entity/order using '+' to investigate further any constraints with the task.
1181 / 1277
When a resource(s)on the Entity Workflow Gantt has a hatched area, the '+' should be used to open the entity to review the
tasks performed within that resource. The tasks can then also be opened using '+' to display the constraint(s) for the task.
Typical constraints may include a shortage of material, availability of the secondary resource (given busy at other locations)
or availability of the secondary resource due to offshift status. In the below example, the Filler1 resource shows a hatching
area. When expanded, the Process task associated with that resource is shown to be constrained as seen in the hover info
box. Additionally, the constrained entity (Order_120) box shows that it is constrained due to worker resource availability.
Note that the hatched area in this example occurs on Saturday and Sunday, which is when all 3 shift workers are off-shift.
1182 / 1277
Similar to using the Owner Group field, an additional column(s) in the Resource Usage Log can be added to further group
the items into their individual entities, in this case, for each of the 10 items in the order. Note that an expression is used to
determine what entity number (Owner.Object.Name) is used. This information can then be used to put each entity in the
order into a separate owner row.
Below, the Owner Row is now the new resource log column 'ItemInOrder', so each of the 10 items in the order can be seen
in its own row under the order itself.
1183 / 1277
Categorizing the Tasks
Within the Task Log (Logs), the Log ribbon allows for users to add additional columns. This is similar to the Resource
Usage Log where additional columns may be added for various reasons. Adding a custom expression column(s) to the Task
Log allows additional categorizing of tasks with the Tasks section for each entity. Tasks are specified within many Standard
Library objects by using the Processing Tasks method of processing to specify the 'Task Sequence' for the object. The below
will go through several examples of using the Task Row and Task Group properties on the Gantt ribbon.
All of the examples shown below are taken from the SchedulingBicycleAssembly example.
Task Row and Task Group Not Specified
In the below example, note that the Task Row and Task Group properties on the Gantt ribbon are specified as 'None'
meaning there is not categorizing of the tasks at this point. This is simply a much larger example than that shown above of
the tasks shown under the entity. In this example, there are multiple resources shown next to Order_SW_3, which is an
assembled entity with many tasks at multiple workcenters. Under each entity, the Tasks are displayed. In this example, there
are multiple tasks occuring for the assembled part at the same time. Note that the Tasks section is also expanded using the
'+' to show both Constraints and Resource Usage. These categories may be turned on/off by using the corresponding Task
Constraints and Task Resource Usage buttons on the Visibility section of the Gantt ribbon. *IMPORTANT NOTE: The
Constraints and Resource Usage sections under Tasks will only display material/resource constraints that are associated
with the task. This includes only those specified within the Processing Tasks repeating property editor. The Resource
Requirements and Material Requirements sections for a given task associate the resource/material with the task. The task
states (shown as Constrained and Executing in this example) indicate if the entity is waiting for either secondary resource or
material specified within the task. If a resource is specified as a secondary resource within the main property window of a
Server, it is not associated with a particular task.
1184 / 1277
row that each task item should go into. If the Task Row is not specified, the items go into a 'Tasks' row under their
associated owner. If specified, the tasks go into a row of that name under afformentioned 'Tasks' row if not grouping is
specified or into a row of that name directly under the specified grouping. In the example below, the Task Row is specified
as the 'Workcell' column from Task Log. Each Task Row category may then be expanded to view the Constraints and
Resource Usage for that section of tasks.
1185 / 1277
Send comments on this topic to Support
1186 / 1277
Simio Reference Guide
The Log view under the Planning tab only contains the Export Log, thus all export bindings should initially be configured
within the Results tab Log view shown above.
1187 / 1277
Simio Reference Guide
NOTE: The Avg, Min and Max values represent the number of units of a given resource that has been seized by this
particular owner. Therefore, if 1 unit of Resource1 is seized, a delay occurs, then another unit of Resource1 is seized, a delay
occurs, then both are released, the Min value would be ‘1’, the Max value would be ‘2’ and the Avg value would be the time
weighted average over the Duration.
By selecting the + button within a particular Resource row, the Resource is expanded to include the detailed information
about that resource and its state, as shown below.
Note: The small checkbox that can be seen at the bottom left of the Resource State Details, as well as on the Resource
Usage Log displays any Filters that may have been set for the data.
Adding a Column to the Usage Log
When the Resource Usage Log tab is selected, the Operational Planning and Log ribbons are available.
The Log ribbon provides the ability to change the Resource Usage Log.
For example, the Add button is available to add a column to the Resource Usage Log table. Additional columns can be
shown within the 'Additional Details:' hover tooltip for a Resource on the Gantt views, as well as used for categorizing the
Entity Gantt. When a column is added to the Resource Usage Log, there are several properties that may be specified for
the column, including:
Listed below are the properties of a Resource Usage Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource usage row in the log. Note that
the expression may contain references to either the resource object or the owner object; if
referencing the resource object, the keyword ‘Object’ must be used (e.g.,
Object.Capacity.ScheduledUtilization); if referencing the owner object, the keyword ‘Owner’ must be
used (e.g., Owner.Entity.Priority).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each resource usage row
Type in the log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage occurrence is
logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage occurrence is
logged. If ‘ValueChange’, then the expression’s change in value from the start time to the end time of
the usage occurrence is logged.
Gantt Indicates if this column should appear in one of the Gantt views. Options include None,
Display ResourceGantt, and EntityGantt. It is important to note that the values shown in the ResourceGantt
Type and EntityGantt will be the MOST RECENT values in the log for that resource or entity.
Use as Specifies how this color expression should be used when drawing a Gantt chart.
Gantt Color
Show in Specifies if this log expression should appear in tooltips in the Gantt views.
Gantt
Tooltips
Show in Specifies if this log expression should appear in the dropdowns in the Gantt views. This includes the
Gantt "Group" and "Row" dropdowns on the ribbon, as well as the "Filter to Expression Column" sub-menu
Dropdowns in the window's context menu.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Resource Usage Log may also be exported to a *.csv file by using the Export to CSV button.
Example 1 - Adding a Column to the Resource Usage Log for Sorting the Resources
This example shows the addition of a column to the Resource Usage Log chart. This column has the Gantt Display Type
property as 'ResourceGantt' so that the values are displayed within the Gantt chart as well. The Expression property is
generated from the Resources table.
1188 / 1277
Example 2 - Adding a Column to the Resource Usage Log to Show Resource Utilization
This example shows the addition of a column to the Resource Usage Log chart that will be displayed in the Resource Plan
Gantt. The Expression property references the resource 'Object'.
Example 3 - Adding a Column to the Resource Usage Log to Group within the Entity Workflow Gantt
This example is similar to Examples 1 and 2 in that it shows the addition of a column to the Resource Usage Log chart. This
column, however, will be used within the Entity Workflow Gantt. The GanttDisplayType property is 'EntityGantt'. Items
within the Entity Workflow Gantt can now be grouped using the Owner Group property on the ribbon, which is set to the
'MaterialName' column.
1189 / 1277
Example 4 - Adding Columns to the Resource Usage Log For Custom Gantt Colors
This example shows the addition of two columns to the Resource Usage Log chart that are used within the Resource Plan
Gantt. The Data Format property for both columns is 'Color' and the Gantt Display Type is 'ResourceGantt'. The Expression
for the FillColor column includes the order's Priority from the Manufacturing Orders table. Those orders with priority 1 will
be pink and those with priority 2 will be green. The Use As Gantt Color property indicates it is the fill color as
'OwnerItemFillColor'. The Expression for the BorderColor column includes the order's Order Status (0=New, 1=WIP). Those
orders that are WIP will have a red border, while those that are New will have a green border.
1190 / 1277
Simio Reference Guide
The Log ribbon provides the ability to change the Resource State Log.
For example, the Add button is available to add a column to the Resource State Log table. Additional columns can be used
within Dashboard and Table reports for filtering. When a column is added to the Resource State Log, there are several
properties that may be specified for the column, including:
Listed below are the properties of a Resource State Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log. Note that
the expression may contain references to the resource object, model variable or other expression; if
referencing the resource object, the keyword ‘Object’ must be used (e.g.,
1191 / 1277
referencing the resource object, the keyword ‘Object’ must be used (e.g.,
Object.Capacity.ScheduledUtilization).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each resource state row in
Type the log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage occurrence is
logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage occurrence is
logged. If ‘ValueChange’, then the expression’s change in value from the start time to the end time of
the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Resource State Log may also be exported to a *.csv file by using the Export to CSV button.
Example 1 - Adding a Column to the Resource State Log for Filtering the Resource States by Shift
This example shows the addition of a column to the Resource State Log. The 'Shift' column uses a model variable
defined/changed in process logic for the shift number. This value can then used in a Dashboard Report to graphically filter
the utilization pie charts for the resource states.
1192 / 1277
Simio Reference Guide
In the above example, the Shape, Weld, Cut and Finish resources have no scheduled capacity, based on their work
schedules. Thus, the allocated and utilized values are also zero. Then, at 8:00 am, the resources all have scheduled capacity
of 1. Note the Weld resource that has a scheduled capacity of 1, an allocated value of 1, yet a utilized value of 0 for a very
short period of time. This corresponds to a wait for material or secondary resource. Notice that the Weld resource has
allocated and utilized values of 1 when the material/resource arrive.
In the corresponding Entity Workflow gantt below, note that the OrderWIP1 entity that is processing at Weld is first
constrained by the availability of the Weld resource until 8 am. Then, there is a very short period of time where the entity is
waiting for the worker to arrive for processing. Once the worker arrives, the Weld resource goes into a 'utilized' state, as
seen in the Resource Capacity Log above.
Note: The small checkbox that can be seen at the bottom left of the Resource Capacity Log displays any Filters that may
have been set for the data.
Adding a Column to the Resource Capacity Log
When the Resource Capacity Log tab is selected, the Operational Planning and Log ribbons are available.
The Log ribbon provides the ability to change the Resource Capacity Log.
For example, the Add button is available to add a column to the Resource Capacity Log table. Additional columns can be
used within Dashboard and Table reports for filtering. When a column is added to the Resource Capacity Log, there are
several properties that may be specified for the column, including:
Listed below are the properties of a Resource Capacity Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log. Note that
the expression may contain references to the resource object, model variable or other expression; if
1193 / 1277
the expression may contain references to the resource object, model variable or other expression; if
referencing the resource object, the keyword ‘Object’ must be used (e.g.,
Object.Capacity.ScheduledUtilization).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each resource capacity
Type row in the log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage
occurrence is logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage
occurrence is logged. If ‘ValueChange’, then the expression’s change in value from the start time to
the end time of the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Resource Capacity Log may also be exported to a *.csv file by using the Export to CSV button.
1194 / 1277
Simio Reference Guide
The Log ribbon provides the ability to change the Resource Info Log.
For example, the Add button is available to add a column to the Resource Info Log table. When a column is added to the
Resource Info Log, there are several properties that may be specified for the column, including:
Listed below are the properties of a Resource Info Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource info row in the log. Note that
the expression may contain references to the resource object but there is no 'owner'; if referencing the
resource object, the keyword ‘Object’ must be used (e.g., Object.Capacity).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Resource Info Log may also be exported to a *.csv file by using the Export to CSV button.
1195 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1196 / 1277
Simio Reference Guide
As with all tables, the Constraint Log can be sorted on any column and/or filtered by column.
The Log ribbon provides the ability to change the Constraint Log.
For example, the Add button is available to add a column to the Constraint Log. Additional columns can be used within
Dashboard and Table reports for filtering. When a column is added to the Constraint Log, there are several properties that
may be specified for the column, including:
Listed below are the properties of a Constraint Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log. Note that
the expression may contain references to the resource object, model variable or other expression; if
referencing the resource object, the keyword ‘Object’ must be used (e.g.,
Object.Capacity.ScheduledUtilization).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each Constraint row in the
Type log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage occurrence is
logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage occurrence is
logged. If ‘ValueChange’, then the expression’s change in value from the start time to the end time of
the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
1197 / 1277
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Constraint Log may also be exported to a *.csv file by using the Export to CSV button.
1198 / 1277
Simio Reference Guide
The Log ribbon provides the ability to change the Transporter Usage Log.
For example, the Add button is available to add a column to the Transporter Usage Log. Additional columns can be used
within Dashboard and Table reports for filtering. When a column is added to the Constraint Log, there are several
properties that may be specified for the column, including:
Listed below are the properties of a Transporter Usage Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log. NNote that
the expression may contain references to either the resource object or the owner object; if referencing
the resource object, the keyword ‘Object’ must be used (e.g., Object.Capacity.ScheduledUtilization); if
referencing the owner object, the keyword ‘Owner’ must be used (e.g., Owner.Entity.Priority).
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each Transporter Usage
Type row in the log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage
occurrence is logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage
occurrence is logged. If ‘ValueChange’, then the expression’s change in value from the start time to
the end time of the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Transporter Usage Log may also be exported to a *.csv file by using the Export to CSV button.
1199 / 1277
Simio Reference Guide
Time - The simulation date and time that a material quantity changed.
Material - The name of the material that has been either produced or consumed.
Lot Id - The name of the optional string Lot ID that has been either produced or consumed.
Entity Id - The specific entity that produced or consumed the material quantity.
Entity - The specific entity that produced or consumed the material quantity. This defaults to the Entity Id unless a
Display Name is specified with the Entity.
Site Id - The specific inventory site location, if any, associated with the material production or consumption.
Task Id - The specific task, if any, associated with the material production or consumption.
Quantity - The quantity of material that was utilized. A positive quantity is a production of the material, while a
negative value is a consumption of the material.
Stock Level - The amount of material left after the quantity specified was added or subtracted from the total.
Lot Stock Level - The amount of material of a particular Lot ID that is left after the quantity specified was added or
subtracted from the total.
The Log ribbon provides the ability to change the Material Usage Log.
For example, the Add button is available to add a column to the Material Usage Log table. Additional columns can be
used within Dashboard and Table reports for filtering. When a column is added to the Resource Capacity Log, there are
several properties that may be specified for the column, including:
Listed below are the properties of a Material Usage Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log.
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each Material Usage row
Type in the log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage occurrence is
logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage occurrence is
logged. If ‘ValueChange’, then the expression’s change in value from the start time to the end time of
the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Material Usage Log may also be exported to a *.csv file by using the Export to CSV button.
Note that the Material Usage Log tracks *actual* consumption, not *requested* consumption. So if you ask for 10 units of
material, but only 4 are available, you'll get an entry saying quantity -4. Then if 10 more units get produced at some time
later, you'll get *another* entry with -6, fulfilling the consumption request.
In the example shown below, note that the first two entries at the start of the simulation run indicate that the Initial
Quantity for each of these materials had been specified. For several minutes after that, the quantities are reduced of each
material. Note also that at time 12:05:28 AM, an additional quantity of 80 Nails is produced, indicating a replenishment
type of logic. This example log was taken directly from the SimBit ServerWithMaterialConsumptionAndReplenish.spfx. The
SimBit was modified slightly by changing the Log Material Usage property to 'True' for both Wood and Nails Materials
elements. In this example, there are no Lot ID values specified for any materials.
The example shown below is also a modified version of the SimBit ServerWithMaterialConsumptionAndReplenish.spfx. In
this example, the original DefaultEntity object has been replaced a ModelEntity object named 'Order' that has a Display
Name of 'Order'. Additionally, a Lot ID property (string) has been specified for the materials. In this case, with the Wood
and Nails materials, the Initial Quantities values are broken up into "W11" and "W12" Lot ID values. The top level bill of
material, BookShelfMaterials, when specified within the Server object, also indicates the appropriate Lot ID string property
value (such as through an table or math function) that is required for that particular order. Note that the log on the left
below shows all materials and their respective Lot ID values. The log on the right was filtered on Lot ID to show only the
"W12" material. The Stock Level column indicates the total amount of inventory of the particular material name, whereas
the Lot Stock Level indicates the specific inventory for the Lot ID.
1200 / 1277
1201 / 1277
Simio Reference Guide
Task Id - The unique identifier for each task performed during the simulation. This Task Id is also used within a
number of other logs, including Resource Usage Log, Transporter Usage Log, Material Usage Log, Constraint Log
and Task State Log. Note that the Task Id has a '+' to expand the task information. This provides additional
information on the task states, which includes executing, constrained and suspended.
Entity Id - The specific entity that completed the task.
Entity - The entity type's Display Name that completed the task. If no Display Name is specified on the instance of
the ModelEntity object, this will be the same as the Entity Id field.
Facility Location - The name of the object location at which the task is performed.
Station - The station location at which the task is performed.
Task Sequence - The name of the Task Sequence element within which the task is specified. For all Standard Library
object processing tasks, this will be 'ProcessingTaskSequence'.
Task - The name of the task that was completed.
Start Time - The start time of the task that was completed.
End Time - The end time of the task that was completed.
Duration - The total time that the entity was processed through the specified task.
The Task Id can be expanded using the '+' to view the states of each particular task. This information is also available
within the Task State Log. A task is started when the entity enters the object and begins the processing tasks for that object.
The task may, however, be Constrained if a resource (including worker/vehicle) or material specified for the task is not
currently available. Once all resources and materials have been allocated, the task will start the Executing state. If the main
or secondary resource goes off-shift and the Off Shift Rule is ‘Suspend Processing’, the task state becomes Suspended.
These task states can also be seen graphically on the Gantt charts. See the example below that shows the MainFrame1 task
'Process' expanded to show that the task was constrained for an amount of time prior to executing.
The Log ribbon provides the ability to change the Task Log. For example, the Add button is available to add a column to
the Task Log table. Additional columns can be shown within the 'Additional Details:' hover tooltip for a Task on the Gantt
views, as well as used for categorizing the Entity Gantt. When a column is added, there are several properties that may be
specified for the column, as seen below. Any custom expression columns may be then used within the Resource Plan Gantt
or Entity Workflow Gantt to sort the tasks specified by Task Row and/or Task Group (see Gantt ribbon on those Gantt
charts). An example of using these task categories is shown on the Entity Workflow page. Additionally, the
SchedulingBicycleAssembly and SchedulingBatchBeverageProduction examples have additional Task Log columns for use
within the Task Row and Task Group categories in the Gantt charts.
Listed below are the properties of a Task Log Column:
Property Description
1202 / 1277
Expression The expression value to be recorded in this column for each task row in the log. Note that the
expression may contain references to either the entity that started the task, the token performing the
task or a table reference associated with task.
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each task row in the log.
Type If ‘StartTimeValue’, then the expression’s value at the start time of the task is logged. If
‘EndTimeValue’, then the expression’s value at the end time of the task is logged. If ‘ValueChange’,
then the expression’s change in value from the start of the task to the end of the task is logged.
Show in Specifies if this log expression should appear in tooltips in the Gantt views.
Gantt
Tooltips
Show in Specifies if this log expression should appear in the dropdowns in the Gantt views. This includes the
Gantt "Group" and "Row" dropdowns on the ribbon, as well as the "Filter to Expression Column" sub-menu
Dropdowns in the window's context menu.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible tot the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
1203 / 1277
Simio Reference Guide
Task Id - The unique identifier for each task performed during the simulation. This Task Id is also used within a
number of other logs, including Resource Usage Log, Transporter Usage Log, Material Usage Log, Constraint Log
and Task Log.
State - The state of the task, which may include executing (in the task delay), suspended (due to resource state
change) or constrained (cannot process yet due to resource or material constraint).
Entity Id - The specific entity that was in the task state.
Entity - The entity type's Display Name that was in the task state. If no Display Name is specified on the instance of
the ModelEntity object, this will be the same as the Entity Id field.
Start Time - The start time of the task state.
End Time - The end time of the task state.
Duration - The total time that the entity was in the specified state.
A task is started when the entity enters the object and begins the processing tasks for that object. The task may, however, be
Constrained if a resource (including worker/vehicle) or material specified for the task is not currently available. Once all
resources and materials have been allocated, the task will start the Executing state. If the main or secondary resource goes
off-shift and the Off Shift Rule is ‘Suspend Processing’, the task state becomes Suspended. These task states can also be
seen graphically on the Gantt charts. The Task Log includes all the task states for a particular task and can be expanded
using the '+' to view the Task State Log for a particluar task.
Adding a Column to the Task State Log
When the Task State Log tab is selected, the Operational Planning and Log ribbons are available.
The Log ribbon provides the ability to change the Task State Log.
For example, the Add button is available to add a column to the Task State Log table. Additional columns can be used
within Dashboard and Table reports for filtering. When a column is added to the Resource Capacity Log, there are several
properties that may be specified for the column, including:
Listed below are the properties of a Task State Log Column:
Property Description
Expression The expression value to be recorded in this column for each resource state row in the log.
Data The data type format for the value of this column’s specified Expression (e.g., Real, Integer, Boolean,
Format DateTime, String or Color).
Unit Type Classifies the units of the value returned by this column’s specified Expression (available for Data
Format types Real and Integer).
Evaluation The method used to evaluate and record this column’s expression value for each Task State row in the
Type log. If ‘StartTimeValue’, then the expression’s value at the start time of the usage occurrence is
logged. If ‘EndTimeValue’, then the expression’s value at the end time of the usage occurrence is
logged. If ‘ValueChange’, then the expression’s change in value from the start time to the end time of
the usage occurrence is logged.
Trait Filter Specifies the name of a Trait defined on a Simio Portal instance. That Trait's per-user value is used to
filter what the user can see from this log. Rows with values that match the value of the Trait for the
user will be visible to the user, others will be filtered out.
Note on Trait Filter property - Within Simio Portal, user would have a trait defined called 'XXTrait'. Each user then has their
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
1204 / 1277
own value (or comma separated values) assigned to 'XXTrait' for themselves. If the value of all expression columns with
Trait Filters assigned in a particular row of the log matches the values for the user’s trait(s), then they can see that row,
otherwise they can’t. Row filtering works for viewing the logs, using them as datasources for the Dashboards, and the Gantt
data as well. The filtering is “filtering in”, meaning not assigning a trait value for a user, or not even having a referenced trait
of that same name defined in the Simio Portal, will filter away all rows for that log.
In addition to the Add button, the Log ribbon includes options to change the Unit Settings. These options are similar to the
Unit Settings section of the Run ribbon within the Facility window and will change the units for all relevant windows.
All data within the Task State Log may also be exported to a *.csv file by using the Export to CSV button.
1205 / 1277
Simio Reference Guide
The Create Plan button will run the simulation model in a deterministic mode with no uncertainty to generate a resource
plan. All distributions used in the model will return their expected values and all failures in the model will be disabled.
When the Create Plan button is selected, Simio will run the simulation and display the results of the table states columns, as
well as the ‘TargetName Plan’ columns in the table. Creating the plan will not display any values within the ‘TargetName
Risk’ columns of the table.
The Analyze Risk button will run the simulation model in a stochastic mode with uncertainty to analyze the target risks
specified within the model.
The Planning Horizon Starting Time and Ending Type specify the starting and ending times of the simulation model and are
used for both creating the plan and analyzing the risk. These values can also be seen in the Facility window’s Run ribbon.
The Confidence Level and the Replications Required properties are utilized only when analyzing risk. The Confidence Level is
used to calculate the confidence interval half-width statistics for the target averages and feasibility probabilities estimated
by the risk assessment. The default confidence level is '95%', however the user may also select from the list to include 90%,
95%, 98% and 99%. The Replications Required property specifies the number of simulation replications to run for the risk
assessment. The default value is '10'.
When performing the risk analysis, the number of replications specified is run and then the values within the ‘TargetName
Risk’ columns will be generated. The ‘Average (Time Units)’ column is calculated by using the target expression and taking
the average value of that expression for the number of replications. The ‘Within Bounds Name Probability’ column values
are then determined from the number of simulation replications whose average values fall within the upper and lower
bounds specified by the user.
1206 / 1277
Simio Reference Guide
The Facility Model button can also be used to view the animated model running in planning mode. The Run ribbon within
this Facility Model view provides for functionality available on multiple ribbons in the standard Facility window. It includes
Run options, such as Run / Step / FastForward, as well as animation speed options. The Model Trace button allows users to
view the trace of the model while running in Planning mode. The ribbon also provides several of the View ribbon options,
such as 2D / 3D and named views.
1207 / 1277
Simio Reference Guide
1208 / 1277
Simio Reference Guide
1209 / 1277
After 2 replications, 67% and 33%:
1210 / 1277
Finally, after 1000 replications, 100% and 0%:
1211 / 1277
Simio Reference Guide
1212 / 1277
Simio Reference Guide
The Status will display "Within Bounds" if the value falls between the defined expressions in the Upper Bound and Lower
Bound properties of the Target. If the user has defined a Value Classification for the Within Bounds property on the Target,
such as OnTime, OnTime will appear in the Status column instead of Within Bounds. Similarly, the user can define custom
strings to display for a status of Above Bounds and Below Bounds, from within the Target’s properties. These are defined
when the Target itself is defined in a table within the model’s Data window.
The user might notice that some cells within the table are colored either yellow or red after the risk analysis is run. These
colors help the user identify which results are risky. By default, expected values with a within bounds probability of greater
than 80 percent are left uncolored. Values between 40 percent and 80 percent are colored yellow and values less than 40
percent are colored red. These percentages can be changed by the user by changing the Performance Classification slider
in the ribbon from the Risk Plots Results tab.
Double-clicking on a particular order/entity within the Target Detail tab will take the user to the same order within the
Entity Workflow Gantt.
The user can save a copy of the model in its current state for use as a baseline for comparison. The user might create an
Operational Plan and then want to make changes to the model or the data being read into the model. For more
information on comparing Operational Plans, see the Plan Comparison help page.
1213 / 1277
Simio Reference Guide
At this point, the user can make changes to the model and then re-run the Create Plan and/or re-run the Analyze Risk. The
new model can then be compared to the saved baseline model to see what differences the new changes made to the
Targets. In order to show the differences between the current model and the baseline, the user must go to the Target Detail
tab in the Results Panel. From within the Target Details tab, if there is a baseline model, the user will see the Show
Differences button available in the ribbon. If there is only one baseline, it will automatically be populated in the Compare
To selection box in the ribbon. If there is more than one baseline, the user can select which baseline model to compare
against.
When the Show Differences button is selected, the user will see new columns appear in the Target Details table. The
Show Differences button can be toggled on or off by the user to display and hide the new differences columns. When the
button is selected, there will be a new column named Change under each Target’s plan results and risk analysis results. This
will show the value change between the current model and the baseline model that is currently selected in the Compare To
selection box. In the Target’s plan results, there will also be a new column named Status Change that will show any change
in the Target’s status. In the Target’s risk analysis results, there will be a new column named Probability Change that will
show changes in the probability that this Target will be within the defined bounds. For more information on defining a
Target and its lower bound and upper bound, see the Target help page.
In the example above, the user saved a baseline operational plan and then made changes to the schedule within the current
model. After making the changes, they wanted to compare the target results of the current model with the new schedule to
the target results in the baseline. You'll notice that some orders went from OnTime to Late. You can see how much later the
order is expected to be in the Change column under Target Ship Date - Risk Analysis. You'll also notice that some orders
went from OnBudget to Overrun. And the Change column under Target Cost - Risk Analysis shows the new expected value
for the Cost Target.
1214 / 1277
Simio Reference Guide
If the user has performed the risk analysis, the results shown in the Risk Plots will include the mean, min/max values, range
and percentile values, as shown below.
1215 / 1277
When the mouse is placed on the outer lines, the minimum and maximum values are displayed as the range of the
observations. When the mouse is hovered over the tan circle, the mean of the observations is displayed. When the mouse is
placed over the upper portion of the box, it will display the top range (50% - 75%) including the median and upper
percentile value. Finally, when the mouse is hovered over the lower portion of the box, the lower range (25% - 50%)
including the lower percentile value and the median are shown.
The Target Chart and Operational Planning ribbons are available within the Risk Plots window. The Target Chart ribbon
includes buttons for the target data to be displayed in various ways.
The Plan Values button will display a red line for each observation on the box and whisker plot for the target. This displays
the Expected Value of the target as derived from the Plan. This expected value is also automatically calculated when
performing risk analysis, as the plan is run first.
The Confidence Intervals button will display three confidence intervals on the chart. The uppermost light blue rectangle
shows the confidence interval of the upper percentile and includes the start and end value of the interval. The lower light
blue rectangle shows the corresponding data for the lower percentile. The light brown rectangle shows the confidence
interval of the mean, and includes the start and end values, as well as the half-width.
The Histogram button will display a histogram of the replication data points on the SMORE plot. No additional data is
provided when hovering the mouse over the histogram.
The Limits button will display the upper and lower bound from the target when run in plan mode. The SMORE itself scales
to the available result data, so even if you have limits, they will not display if they are off the ‘sides’ of the SMORE.
However, if you have result data in the range of 0 – 10 for example, and the limits are at 2 and 6, the Limits button will
display them in light red over the SMORE plot area.
The Observations button simply displays each replication value for the target on the plot in light blue dots.
The Within Bounds Probability button will display a value within a box to indicate the probability of the target falling
within the bounds that were specified (including both the upper and lower bounds).
1216 / 1277
Simio Reference Guide
See the Pivot Grid page for more information regarding specifics of sorting, filtering and named views.
1217 / 1277
Simio Reference Guide
Clicking on 'Show Detail' in the top right corner of the report will display more information about each specific resource, as
seen below. For each resource that has been allocated to the given entity, information is displayed regarding the amount
and percentage of time the resource spent in various 'states'. For example, states of the resource may include OffShift,
Processing, Setup, Teardown or WaitingForSecondaryResource.
1218 / 1277
Clicking on 'Show Detail' in the top right corner of the report will display more information about each specific task, as
seen below. For each task that has been processed at the given resource, information is displayed regarding the amount
and percentage of time the resource spent in various 'states'. For example, states of the resource may include OffShift,
Processing, Setup, Teardown or WaitingForSecondaryResource.
1219 / 1277
Simio Reference Guide
The Export Schedule to MES add-in will save the schedule back to Wonderware MES. It will save the schedule start,
schedule end, schedule resource and set the status of the first job to “Ready”. The Import Downtime add-in will pull
downtime information from Wonderware MES using the Wonderware MES API and load them onto the appropriate
resource in Simio. Please note, for both features: User needs Wonderware MES Client installed on the computer to access
the Wonderware MES API.
See the the Project Templates page for additional table generating add-ins.
When using the Wonderware MES templates, once the various tables have been created within the Data tab, the user may
utilize the table binding option related to Wonderware MES. The Wonderware MES data bind reads the data tables and
views in the Wonderware MES Database using the Wonderware MES API. Note: User needs Wonderware MES Client
installed on the computer to access the Wonderware MES API.
For more information on the Wonderware MES add-in described above, see
http://www.simio.com/downloads/public/software/SimioProductionSchedulingWonderwareMESInterface.pdf.
1220 / 1277
Simio Reference Guide
1221 / 1277
Simio Reference Guide
Extras Library
Extras Library
Simio has developed an Extras Library that currently includes 8 pre-built object definitions that can be used to model
specialized material handling systems.
Crane Transporter A crane is moved by a Cab and may pickup and drop-off entities at nodes
that fall within the specified Bay.
Robot Fixed, A composite object that represents a robot. The robot hand is a transporter
Entities that can pickup/drop-off entities. Select the hand to edit its properties.
and
Transporter
Rack Fixed A rack is used to hold entities for a specified storage time. A rack can be
used with a Lift Truck for placing items on different shelves within the Rack.
LiftTruck Transporter A LiftTruck object may be used to transport entity objects between node
locations. When used in conjunction with a Rack, the Lift on the LiftTruck
will move vertically to the appropriate shelf height befoe executing a
pickup or drop-off. Additionally, an 'On Demand' routing type LiftTruck may
be used as a moveable resource that is seized and released for non-
transport related tasks by model process logic.
ElevatorNode Node An ElevatorNode defines an entry and exit node for the entities that ride on
an elevator. Each ElevatorNode references its associated Elevator and each
Elevator references a lsit of associated ElevatorNodes.
1222 / 1277
Simio Reference Guide
Bay
The Simio Extras Library contains two objects designed for modeling multiple cranes operating simultaneously in a bay -
including the Crane object and the Bay object. These objects may be used in conjunction with the Simio Standard Library.
A Bay is a fixed object that defines a rectangular region over which one or more Bridges may move. A Bay is placed in the
model by dragging it from the Library and then setting its properties. The Bay specifies the Number of Zones that are used
to control Bridge movements to prevent collisions. Each Bridge in the Bay occupies its current zone, and only one Bridge
may be in a zone at any one time. Before a Bridge can move to a new location, it must seize its destination zone. It is not
permitted to seize its destination zone until all intermediate zones are free. During a Bridge move, the Bridge holds both
its starting zone and destination zone and only releases its starting zone once it has reached its destination.
The following depicts two Bridges moving in a Bay with three Zones. The Bridges are currently located in Zones 1 and 3,
causing each zone to be busy. Before either Bridge can move to the node in Zone 2, it must first seize Zone 2. Since only
one Bridge can own a Zone at time, only one of the two Bridges may enter Zone 2 at any point in time. This automatically
prevents collisions from occurring with the two Bridges.
The Bay also has two properties related to deadlock prevention. The first is the Blocking Action which can be specified as
'None' or 'Push Idle Bridge'. If 'Push Idle Bridge' is selected, then a busy Crane will automatically push one or more idle
Cranes out of the way if necessary to complete a move. The second deadlock prevention property is a Boolean named Pre-
Check Zone Availability. If 'True', a move will not be started unless all zones are available for both the pickup and drop-off
operation. This prevents a crane from doing a pickup where it can’t complete the drop-off because of deadlocking.
Listed below are the properties of the Bay:
Valid
Property Description
Entry
Number of Real The number of control zones used in the Bay to prevent collisions. Only one bridge may
Zones occupy a zone at a time. The destination zone must be seized and all intermediate zones
must be idle before bridge movement can be initiated.
Blocking None, Specifies the action to take when a bridge is blocked by another bridge in the Bay. The
Action Push 'Push Idle Bridge' option will allow a busy Crane to push an idle bridge out of the way.
Idle
Bridge
Pre-Check True, If 'True', a move is only initiated if all required zones within this Bay are available. If so,
Zone False these zones are seized before the move is allowed to begin.
Availability
1223 / 1277
Bay True, If 'True', the Bay is visible during the simulation run.
Visibility False
Zone True, If 'True', the pickup and dropoff zones are highlighted.
Visibility False
1224 / 1277
Simio Reference Guide
Crane
The Simio Extras Library contains two objects designed for modeling multiple cranes operating simultaneously in a bay -
including the Crane object and the Bay object. These objects may be used in conjunction with the Simio Standard Library.
Crane pickups are done using the Ride on Transporter feature on the standard TransferNode (e.g. the output side of a
Server). The Crane will pick up an entity at the requesting TransferNode, and then drop the entity off at its destination
node. Crane drop-offs can be done at either a BasicNode or TransferNode. The Bay and Crane objects can also be used
with custom libraries as long as they support rider pickups using the standard transporter ride features.
The Bay and Crane objects are used together to model multiple cranes moving in a single bay. A Crane movement occurs
by first lifting the load from the pickup node to a specified travel height, traveling laterally at that height, and then
lowering the load to the specified drop-off node. All travel is done through free space without the need to explicitly draw a
network. The Crane object fully supports independent acceleration/deceleration for lateral movements. The Crane object
also supports multiple interacting cranes in a single Bay and provides sophisticated logic for preventing deadlocks.
The Crane object is a composite object made up of a Bridge, Cab, Lift, and Crane. The Bay object is a Fixed Object that is
placed in the Facility View, with one or more associated Crane objects.
The Crane is a composite object made up of a Crane hook (transporter), Lift (entity), Bridge (entity), and Cab (entity). To
edit the Crane properties, click on the Crane label or the Crane's transporter symbol represented by the hook. Users can
also click independently on the Bridge, Cab, and Lift objects to edit their properties. This is typically only done to change
the traveling height of the Bridge and or Cab. The key object is the Crane which represents the carrier or end effecter of the
device and is the object that is specified as the Transporter for picking up and moving an item. The Crane in turn causes its
associated Lift, Cab, and Bridge to move across the Bay. The Crane is derived from the Vehicle object in the Standard
Library, and shares many of the same properties.
More Details
A Crane is a transporter that represents the physical tool or device (e.g., a hook or clamp) on the end of the Lift that is used
to pick up the load. Locally, a Crane represents the entire device ( Bridge, Cab, Lift, and Crane) and is what is specified on
the TransferNode to make any move. A Crane is a dynamic Transporter that is created at runtime and may pick up, move,
and drop-off entities at Nodes. When using the Standard Library, the Crane is specified in the same way as any other
Transporter when traveling between Nodes.
The Crane object is created from the Vehicle and has most of the same properties. However, the Crane has been “locked
down” to run in free space only and has a fixed dynamic population of 1. The Crane location is initialized to its Initial
(Home) Node. Note that the Initial Node for the crane, as well as any pickup or drop-off nodes for the Crane must all fall
within the boundary of the Bay. The Crane has additional required properties that specify its Desired Lateral Speed and
Lateral Acceleration and Lateral Deceleration.
The Idle Action property specifies the behavior of the Crane when it returns to the idle state. The options are 'None'
(remain at last location in the down position), 'Go To Home' (move up to the travel height and then make a lateral move to
the Initial Node location), and 'Go To Up Position' (move up to the travel height but remain at the last lateral location).
1225 / 1277
the Initial Node location), and 'Go To Up Position' (move up to the travel height but remain at the last lateral location).
Note that once a Crane initiates an idle action, it rejects any new pickup request until the idle action is completed.
Listed below are the properties of the Crane:
Property Valid Entry Description
Task Selection Smallest The strategy used by the Crane object to select its next transport pickup or
Strategy Distance, Largest dropoff task.
Distance,Smallest
Priority, Largest
Priority, First In
Queue
Load Time Expression The time required for this Crane object to load an entity (i.e., the load time
per entity).
Unload Time Expression The time required for this Crane object to unload an entity (i.e., the unload
time per entity).
Minimum Dwell Until Specifies the minimum dwell time requirement for this Crane object when
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a
Type Until Full, No minimum amount of time the Crane is required to wait, or 'dwell', at a node
Requirement, to load and unload entities.
Specific Time
Event Name Event Name The name of the event that will indicate the expiration of the minimum wait
time requirement for this Crane object when loading and unloading entities
at a node.
Minimum Expression The specific minimum amount of time that this Crane object is required to
Dwell Time wait, or 'dwell', at a node to load and unload entities.
Dwell Only If Expression If specified, this condition will be used to indicate whether the Crane must
respect the minimum dwell time at a node if that requirement has not yet
expired, thereby forcing the Crane to wait, or 'dwell', at the node for possible
additional loads. Example uses of this property might include allowing the
Crane to exit a node before the minimum dwell time has expired if the crane
has reached full ride capacity, or if there is little to no chance of additional
loads. Another example condition might be to only respect the minimum
dwell time requirement if the crane is at a node meeting some specific
criteria.
Initial Desired Expression The initial desired lateral speed value for this Crane. NOTE: Refer to the user-
Lateral Speed assignable 'DesiredSpeed' state variable of a Crane to dynamically change its
desired lateral speed during a simulation run.
Lateral Real The rate of acceleration of the Crane when starting a lateral movement
Acceleration across the Bay.
Lateral Real The rate of decceleration of the Crane when stopping a lateral movement
Deceleration across the Bay.
Lift Speed Expression The vertical speed value the Lift moves the Crane in the up and down
direction.
Associated Valid Bay Name The associated Bay to which this Crane is assigned.
Bay
Travel Height Expression The vertical distance above the Bay where the Crane travels in the lateral
direction.
1226 / 1277
Initial Priority Expression The initial priority value of this Crane object. NOTE: Refer to the user-
assignable 'Priority' state of the Crane to dynamically change its priority value
during the simulation run.
Initial Node Node Instance The initial node location of this Crane object at the beginning of the
( Home) Name simulation run and the home location where the Crane returns.
Idle Action Go To Home, Go Specifies the action of the Crane object when it becomes idle. The options
To Up Position, include None, Go To Up Position or Go To Home. No pickup requests are
None accepted until the idle action is completed.
Capacity Type Fixed, Work The availability of this Crane type to perform tasks. 'Fixed' indicates that this
Schedule type of Crane is always available. 'WorkSchedule' indicates that each Crane
of this type follows a work schedule defining its 'On-shift', 'Off-shift'
availability over time.
Work Schedule The name of the schedule that defines the 'On-shift', 'Off-shift' availability of
Schedule Property this type of vehicle over time.
Failure Type No Failures, Specifies whether this Crane object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Event
Count Based
Event Name Event Instance The name of the event which determines when the next failure occurs.
Name
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Time To Expression The time required to repair a failure when one occurs.
Repair
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
1227 / 1277
Parent Cost Cost Center The parent cost center that costs charged, or accrued to the Crane are rolled
Center Name up into. If a parent cost center is not explicitly specified, then costs accrued to
a Crane will be automatically rolled up into the parent object that contains
the Crane's current location.
Capital Cost Expression The initial one-time setup cost to add a Crane of this type to the system.
Per Crane
Cost Per Rider Expression The cost to load and transport an entity using a Crane, irrespective of the
( Transport transportation time. This cost is allocated to an entity when it is loaded onto
Costs) the Crane.
Transport Cost Expression The cost per unit time to transport an entity using a Crane.
Rate
( Transport
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of a Crane when it is
Rate( Resource idle.
Costs)
Cost Per Expression The one-time cost that is accrued each time a Crane is used for a non-
Use( Resource transport task, regardless of the usage duration. This cost will be charged to
Costs) the cost of the owner object(i.e., task) using the Crane.
Usage Cost Expression The cost per unit time to use a Crane for a non-transport task. This cost will
(
Rate Resource be charged to the cost of the owner object (i.e., task) using the Crane.
Costs)
Run Initialized Process Instance Occurs when the simulation run is initialized.
Add-On Name
Process
Triggers
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Triggers
Allocated Process Instance Occurs when this Crane resource has been allocated to perform some
Add-On Name transport tasks, or when another object has seized this Crane resource for
Process some non-transport related task.
Triggers
Released Process Instance Occurs when this Crane resource has been released after completing a set of
Add-On Name tranport tasks, or when another object has released this Crane resource from
Process some non-transport related task.
Triggers
Failed Add- Process Instance Occurs when the Crane has failed.
On Process Name
Triggers
Entered Node Process Instance Occurs when this Crane has entered a node's crossing area, including
Add-On Name occurences when the Crane object has entered by unparking from a node's
Process parking station. 1228 / 1277
Process parking station.
Triggers
Unloaded Process Instance Occurs after an entity is unloaded from this Crane.
Add-On Name
Process
Triggers
Loaded Add- Process Instance Occurs after an entity is loaded onto the Crane.
On Process Name
Triggers
Exiting Node Process Instance Occurs when this Crane object is about to begin exiting a node's crossing
Add-On Name area, including occurences when the Crane is exiting by parking in a node's
Process parking station.
Triggers
Evaluating Process Instance Occurs when this Crane is evaluating whether to accept or reject a transport
Transport Name request from a potential rider. In the executed decision process, assigning the
Request Add- value less than or equal to 0.0 to the executing token's ReturnValue state
On Process ( Token.ReturnValue) indicates that the transport request is rejected.
Triggers
Evaluating Process Instance Occurs when a Crane is evaluating whether to accept or reject a a request
Seize Request Name from another object to seize the Crane resource. In the executed decision
Add-On process, assigning a value less than or equal to 0.0 to the executing token's
Process ReturnValue state ( Token.ReturnValue) indicates that the seize request is
Triggers rejected.
On Shift Add- Process Instance Occurs when the object goes 'on shift' because of its specified work schedule.
On Process Name
Triggers
Off Shift Add- Process Instance Occurs when the object goes 'off shift' because of a specified work schedule.
On Process Name
Triggers
Log Resource True or False Indicates whether usage related events for this Crane are to be automatically
Usage logged. Go to Results -> Logs to view logged data.
Display Name String Expression String expression returning the name displayed for this object in log entries
and trace. If not specified, then this property defaults to the object's unique
name.
Gantt True or False An expression evaluated at run time to determine if the agent/entity should
Visibility appear in the Entity Gantt window.
Experiment True or False If True, incremental animation events are executed when running in
Animation experiment mode. This will generate the exact same sequence of events as in
Events animation mode, but will execute much slower.
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
Bridge - Expression The travel height of the center of the Bridge above the floor.
Travel Height
Cab - Travel Expression The travel height of the center of the Cab above the floor. The Cab may be
Height placed above or below its associated Bridge.
1229 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1230 / 1277
Simio Reference Guide
Robot
The Simio Robot is a composite object that is used to model a revolute/jointed robot that can pick up entities at one node
and drop them at a second node. This is the most common robot configuration found in industrial applications. The robot
composite object is comprised of five objects that include the Robot (fixed base object), the Robot Rotator (entity), Robot
Lower Arm (entity), Robot Upper Arm (entity), and the Robot Hand (transporter). Only the Robot fixed base object is
visible in the Extras library and the other four components are automatically created by the Robot base when it is placed in
the Facility window. The default Simio robot is shown below:
The Robot object may be used in conjunction with the Standard Library, or any custom library that supports standard
pickup and drop-off logic using transporters. Robot pickups are done using the Ride on Transporter feature on the
TransferNode (e.g. the output side of a Server). The robot hand will pick up the entity at the requesting TransferNode, and
then drop the entity off at its destination node. The robot hand is specified as the transporter when initiating a transfer
using the robot.
The rotator turns about its vertical axis that is attached to the dark gray base to align the robot through 360 degrees of
rotation. The lower arm rotates in pitch relative to the extended arm of the rotator, and the upper arm rotates in pitch
relative to the lower arm. These three axis of rotation can position the tip of the upper arm at any location within its reach.
The robot hand is attached to the end of the upper arm and can pitch up and down and is used to pick up and drop off the
entity.
The properties for the robot are edited by selecting the robot base or the individual components of the robot. Basic
editing is done by selecting the robot base. This is used for editing the Initial Node (Home) for the robot hand, which is
required to both initialize the robot hand position, and provide a home node when the Idle Action on the robot hand is
specified as Go to Home. The Travel Mode is also specified on the base object as either 'Fixed Height' or 'Direct'. In the case
of the 'Fixed Height' mode, the robot first moves up/down as necessary to a specified height before the rotator is
permitted to rotate to its next location. Once the rotation is completed, it then moves up/down as necessary to its
destination. In the case of the 'Direct' mode the rotator, lower arm, and upper arm all move simultaneously as needed to
reach its new destination. In general, 'Direct' moves execute faster than 'Fixed Height' moves.
These components are typically only edited to change the rotation speeds. The robot hand is the actual transporter device
that is used to pick up and drop off entities; it is selected to edit the transporter related properties of the hand.
The RobotRotator has a property named Rotation Rate that is specified in degrees per second. When needed to execute a
move, the Rotator can turn in either direction at this specified rate. The RobotRotator also has a set of properties for
specifying the geometry of the joints associated with the rotator. The geometry properties of the robot are typically not
changed unless the robot components are resized or the graphics for the components are modified/changed. The
RobotRotator has an additional animation property to define the degrees of rotator turn per animation update. Smaller
values provide a smoother animation.
The RobotLowerArm specifies its Pitch Change Rate in degrees per second. This is the rate at which the lower arm changes
pitch relative to the rotator. When needed to execute a move, the lower arm can rotate in either direction of pitch at this
specified rate. The RobotLowerArm offset values should only be changed from their default when replacing the graphical
symbols for the components.
The RobotUpperArm specifies its Pitch Change Rate in degrees per second. This is the rate at which the upper arm changes
pitch relative to the lower arm. When needed to execute a move, the upper arm can rotate in either direction of pitch at
this specified rate.
The geometry properties for the upper arm includes joints offsets similar to the lower arm, as well as a vertical offset for
the robot hand and a lateral offset for moving the upper arm sideways from the centerline.
The RobotHand is a transporter that represents the physical tool or device (e.g. gripper) that is attached to the end of the
upper arm and picks up and drops off the entity. The RobotHand is specified on the TransferNode as the transporter that is
used to pick up an entity and move it to its destination. The RobotHand object is derived from the Vehicle and has many of
the same properties. However, the hand has been “locked down” to run in free space only.
The RobotHand may change its pitch relative to the upper arm to which it is attached. The Pitch Change Rate is specified
as a property of the hand, along with the Loading Pitch Angle, Travel Pitch Angle, and Unloading Pitch Angle. These last
three properties are used to specify the desired pitch angle of the hand relative to the floor when loading, traveling, or
unloading.
Listed below are the properties of the Robot:
Property Valid Entry Description
1231 / 1277
Initial Node Node Name The initial node location of the Robot Hand at the beginning of the
( Home) simulation run.
Travel Mode Fixed Height, Direct The Travel Mode for this Robot can be either 'Direct' or 'Fixed Height'.
If 'Direct', the Robot moves in a direct path to its destination. .If 'Fixed
Height', the Robot first moves to a specified height, and then travels at
that height to its destination.
Travel Height Expression The travel height for the Robot when using a 'Fixed Height' travel mode.
Experiment True, False If True, incremental animation events are executed when running in
Animation experiment mode. This will generate the exact same sequence of events
Events as in animation mode, but execute much slower.
RobotRotator - Expression The rotation rate, in degrees per second, of the Rotator which is
Rotation Rate attached to the base.
RobotRotator - Real The radial offset of the lower arm attachment joint from the center of
Radial Offset the base in the direction of the robot hand.
( Joint Geometry)
RobotRotator - Real The vertical offset of the attachment joint measured from the top of the
Vertical Offset Rotator.
( Joint Geometry)
RobotRotator - Real The offset of the Rotator relative to the Base in the X direction.
Rotational
Offset X ( Joint
Geometry)
RobotRotator - Real The offset of the Rotator relative to the Base in the Y direction.
Rotational
Offset Y ( Joint
Geometry)
RobotRotator - Real The offset of the Rotator relative to the Base in the Z direction.
Rotational
Offset Z ( Joint
Geometry)
RobotRotator - Real The maximum degrees of rotation with each update of the base, arms
Degrees and hand of the robot. The smaller this value, the smoother the
Rotation Per animation.
Update
( Animation)
RobotLowerArm Expression The pitch change rate, specified in degrees per second, of the lower arm
- Pitch Change relative to the base.
Rate
1232 / 1277
RobotLowerArm Process Name Occurs when the simulation run is initialized.
- Run Initialized
( Add-On
Process Triggers)
RobotLowerArm Real The offset of the interior rotator attachment joint measured outward
- Rotator Joint from the start of the lower arm.
Length Offset
( Joint Geometry)
RobotLowerArm Real The offset of the interior upper arm attachment joint measured inward
- Upper Joint from the end of the lower arm.
Length Offset
( Joint Geometry)
RobotLowerArm Real The offset of the lower arm measured in distance to the right of the
- Lateral Offset centerline of the robot extension.
( Joint Geometry)
RobotUpperArm Expression The pitch change rate, specified in degrees per second, of the upper
- Pitch Change arm relative to the lower arm.
Rate
RobotUpperArm Real The offset of the interior lower arm attachment joint measured outward
- Lower Joint from the start of the upper arm.
Length Offset
( Joint Geometry)
RobotUpperArm Real The offset of the interior robot hand attachment joint measured inward
- Hand Joint from the end of the upper arm.
Length Offset
( Joint Geometry)
RobotUpperArm Real The offset of the robot hand in the vertical direction measured going up
- Hand Vertical from the centerline of the upper arm.
Offset ( Joint
Geometry)
RobotUpperArm Real The offset of the upper arm measured in distance to the right of the
- Lateral Offset centerline of the robot extension.
( Joint Geometry)
RobotHand - Smallest Distance, The strategy used by the RobotHand to select its next transport pickup
Task Selection Largest or dropoff task.
Strategy Distance,Smallest
Priority, Largest 1233 / 1277
Priority, Largest
Priority, First In
Queue
RobotHand - Expression The time required for this RobotHand to load an entity (i.e., the load
Load Time time per entity).
RobotHand - Expression The time required for this RobotHand to unload an entity (i.e., the
Unload Time unload time per entity).
RobotHand - Expression The pitch angle of the end effector relative to the floor during loading
Loading Pitch (pickup) of an entity.
Angle
RobotHand - Expression The pitch angle of the end effector relative to the floor during
Unloading Pitch unloading (dropoff) of an entity.
Angle
RobotHand - Expression The pitch angle for the Robot's end effector relative to the floor when
Travel Pitch traveling.
Angle
RobotHand - Expression The pitch change rate of the end effector in degrees per second.
Pitch Change
Rate
RobotHand - Expression The initial priority value of this RobotHand at the beginning of the
Initial Priority simulation run.
RobotHand - Go to Home, Park The action of this RobotHand when it does not have any tasks to
Idle Action At Home perform.
RobotHand - First In First Out, The static ranking rule used to order requests waiting to seize this Robot
Ranking Rule Last In First Out, for a process task.
Smallest Value First,
Largest Value First
RobotHand - Expression The expression used with a 'Smallest Value First' or 'Largest Value First'
Ranking static ranking rule for ordering requests waiting to be allocated capacity
Expression of this Robot.
RobotHand - None, or one of Indicates whether this Robot, when it becomes available, dynamically
Dynamic several Dynamic selects the next seize request from its statically ranked allocation queue
Selection Rule Selection Rules using a dynamic selection rule.
RobotHand - Cost Center Name The cost center that costs allocated to robots of this type are rolled up
Parent Cost into. If a parent cost center is not explicitly specified, then costs
Center allocated to a robot will be automatically rolled up into the parent
object that contains the robot's current location.
RobotHand - Expression The initial one-time setup cost to add a robot of this type to the system.
Capital Cost Per
Robot
RobotHand - Expression The cost to load and transport an entity using a transporter of this type,
Cost Per Rider irrespective of the transportation time. This cost is allocated to an entity
( Transport Costs) when it is loaded onto the transporter.
RobotHand - Expression The cost per unit time to transport an entity using a transporter of this
Transport Cost type.
Rate ( Transport 1234 / 1277
Rate ( Transport
Costs)
RobotHand - Expression The cost per unit time charged, or accrued, to the cost of a robot of this
Idle Cost type when it is idle.
Rate( Resource
Costs)
RobotHand - Expression The one-time cost that is accrued each time a robot of this type is used
Cost Per for a non-transport task, regardless of the usage duration. This cost will
Use( Resource be charged to the cost of the owner object(i.e., task) using the robot.
Costs)
RobotHand - Expression The cost per unit time to use a robot of this type for a non-transport
Usage Cost task. This cost will be charged to the cost of the owner object (i.e., task)
Rate( Resource using the robot.
Costs)
RobotHand - Process Instance Occurs when this RobotHand has been allocated to perform a transport
Allocated Add- Name tasks.
On Process
Triggers
RobotHand - Process Instance Occurs when this RobotHand has been released after completing a
Released Add- Name tranport task.
On Process
Triggers
RobotHand - Process Instance Occurs when this RobotHand has entered a node.
Entered Node Name
Add-On Process
Triggers
RobotHand - Process Instance Occurs after an entity is unloaded from this RobotHand.
Unloaded Add- Name
On Process
Triggers
RobotHand - Process Instance Occurs after an entity is loaded onto the RobotHand.
Loaded Add-On Name
Process Triggers
RobotHand - Process Instance Occurs when this RobotHand is about to begin exiting a node.
Exiting Node Name
Add-On Process
Triggers
RobotHand - Process Instance Occurs when this RobotHand is evaluating whether or not to accept the
Evaluating Name pickup of an entity. In the executed decision process, assigning the value
Transport less than or equal to 0.0 to the executing token's ReturnValue state
Request Add-On ( Token.ReturnValue) indicates that the potential rider is rejected. 1235 / 1277
Request Add-On ( Token.ReturnValue) indicates that the potential rider is rejected.
Process Triggers
RobotHand - Expression The offset of the interior arm attachment joint measured outward from
Upper Joint the start of the robot.
Length Offset
RobotHand - True or False A Boolean property may be True or False and used in expressions as a
Report Statistics numeric 1.0 ( True) or 0.0 ( False) value.
1236 / 1277
Simio Reference Guide
Rack
The Rack object, as well as the LiftTruck object, are composite objects that are used to model storage and retrieval systems
comprised of racks and lift trucks that move entities onto and off of shelfs in the storage racks.
The Rack is comprised of the main Rack, which is a Fixed object representing the rack frame, and one or more associated
Shelfs (dynamically created entities). The Number Of Shelfs that are owned by the Rack, and the Shelf Capacity (i.e. the
maximum number of entities that can be stored on the Shelf) are two important properties of the Rack. Properties are also
used to specify the height of the first Shelf, and the spacing between subsequent Shelfs.
The Rack has an Input node where new entities can arrive to the Rack, and an Output node where entities can depart from
the Rack once their required storage time has been met. The entity arrivals and departures can use direct network transfers,
or can be picked up and dropped-off at the Rack using any type of transporter such as a Vehicle or Worker. However, if a
LiftTruck is employed, the LiftDevice will first move to the appropriate Shelf height before the transfer can take place. This
allows the explicit modeling of delays required by the moving of the LiftDevice.
When new entities arrive to the Rack, they are placed on an available Shelf. The Shelf Selection Rule is used to select
between the available Shelfs.
Each Shelf in the Rack has two animated station queues. The Shelf Storage station holds entities that are being stored on
the Shelf. The Transfer Staging station holds entities that are being transferred onto a LiftTruck and are currently waiting for
the LiftDevice to complete its move before the transfer can take place. Once the LiftDevice move is completed the entity
transfers from the Transfer Staging station queue to the LiftTruck's ride station, which is not animated. However, the entity is
also inserted into the LiftDevice's Lift Storage queue which animates the entities’ ride location on the LiftDevice.
The amount of time that an arriving entity is stored on the Rack is determined by the Hold Type which can be specified as
either 'Specific Hold Time', or 'Release Interval'. In the default case of 'Specific Hold Time', the holding time on the Shelf is
specified by the Shelf Storage Time expression. In the case of the 'Release Interval', an expression for the Time Between
Releases is specified. The Rack can be initialized with entities at the beginning of the simulation by specifying the Initial
Quantity, Initial Entity Type, and Initial Destination Node for the starting entities. These properties are specified under the
Initial Storage section.
Listed below are the properties of the Rack:
Property Valid Entry Description
Number of Integer The number of shelfs in this Rack.
Shelfs
Shelf Integer The maximum number of entities that can be placed on each
Capacity Shelf.
Height of Real The height of the first Shelf above the base for this Rack.
First Shelf
Shelf Real The distance between successive Shelfs after the first.
Spacing
Shelf Lowest Available, Highest The rule used to select a Shelf when dropping of an entity.
Selection Available, Least Remaining
Rule Capacity, Most Remaining
Capacity
Hold Type Specific Hold Time, Release The hold type for each entity specified as a Specific Time or
Interval Release Interval. In the case of a Release Interval, each entity is
released one at a time based on a time between releases.
1237 / 1277
Shelf Expression The holding time for an entity that is placed on a Shelf. After this
Storage time, the entity will depart the Rack.
Time
Time Expression The time between each entity release. Entities are released one at
Between a time until the Rack becomes empty.
Releases
Initial Integer The initial number of entities on this Rack at the start of the
Quantity simulation.
Initial Entity Instance Name The type of entity that is used to initialize the Rack.
Entity Type
Initial Node Instance Name The initial destination node for the entities that are initialized at
Destination this Rack.
Node
Report True or False A Boolean property may be True or False and used in expressions
Statistics as a numeric 1.0 ( True) or 0.0 ( False) value.
1238 / 1277
Simio Reference Guide
LiftTruck
The LiftTruck object, as well as the Rack object, are composite objects that are used to model storage and retrieval systems
comprised of racks and lift trucks that move entities onto and off of shelfs in the storage racks.
The LiftTruck is comprised of a main LiftTruck (transporter) and an associated LiftDevice (entity). The LiftTruck moves its
associated LiftDevice up and down to the appropriate shelf height when placing and removing entities onto and off of a
shelf. The LiftTruck logic is copied from Vehicle and has many of the same features and properties, with the exception that
a LiftTruck cannot park at a Node.
In addition to the normal Vehicle properties, the LiftTruck has two additional properties that specify the Vertical Lift Speed,
and the Lift Travel Height. These specify the speed at which the LiftDevice moves up and down, and the height that it
travels when moving between locations.
By default, the LiftTruck makes a smooth transition when moving between link segments. However, the associated
LiftDevice changes orientation as soon as the LiftTruck starts on the next link segment. The LiftTruck and LiftDevice can be
made to move together by changing the Link Transfer Transition Type in the Animation category to 'Immediate'.
Listed below are the properties of the LiftTruck:
Property Valid Entry Description
Initial Ride Integer The initial carrying capacity of this LiftTruck object.
Capacity
Task Selection Smallest The strategy used by the LiftTruck object to select its next transport pickup or
Strategy Distance, Largest dropoff task.
Distance,Smallest
Priority, Largest
Priority, First In
Queue
Load Time Expression The time required for this LiftTruck object to load an entity (i.e., the load time
per entity).
Unload Time Expression The time required for this LiftTruck object to unload an entity (i.e., the unload
time per entity).
Minimum Dwell Until Specifies the minimum dwell time requirement for this LiftTruck object when
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a
Type Until Full, No minimum amount of time the LiftTruck is required to wait, or 'dwell', at a
Requirement, node to load and unload entities.
Specific Time
Event Name Event Name The name of the event that will indicate the expiration of the minimum wait
time requirement for this LiftTruck object when loading and unloading
entities at a node.
Minimum Expression The specific minimum amount of time that this LiftTruck object is required to
Dwell Time wait, or 'dwell', at a node to load and unload entities.
Dwell Only If Expression If specified, this condition will be used to indicate whether the LiftTruck must
respect the minimum dwell time at a node if that requirement has not yet
expired, thereby forcing the LiftTruck to wait, or 'dwell', at the node for
possible additional loads. Example uses of this property might include
allowing the LiftTruck to exit a node before the minimum dwell time has
expired if the LiftTruck has reached full ride capacity, or if there is little to no
chance of additional loads. Another example condition might be to only
respect the minimum dwell time requirement if the LiftTruck is at a node
1239 / 1277
respect the minimum dwell time requirement if the LiftTruck is at a node
meeting some specific criteria.
Vertical Lift Expression The vertical speed of the LiftDevice when moving up or down.
Speed
Lift Travel Expression The height of the LiftDevice relative to the base of the LiftTruck when
Height traveling.
Initial Desired Expression The initial desired speed value for this LiftTruck when traveling between
Speed locations.
Initial Travel Free Space Only, The initial travel mode for the LiftTruck.
Mode Network Only, 'Free Space Only' indicates that the entities are required to perform travel
Network If movements in free space.
Possible 'Network Only' indicates that the entities are required to perform travel
movements using the currently assigned network.
'Network If Possible' indicates a preference for the entities to perform travel
movement using the currently assigned network, but if no followable network
path exists to the next destination then travel in free space is allowed.
NOTE: Refer to the user-assignable 'CurrentTravelMode' state variable of an
entity to dynamically change its travel mode during a simulation run. An
entity's travel mode may also be changed using the 'Outbound Travel Mode'
property provided by a node.
Initial Network Instance The initial network of links used by this LiftTruck object to travel between
Network Name node locations.
Network Exit & Re-enter, When traveling on a network, the default method used by objects of this type
Turnaround Rotate in Place, to turn around at a node in order to move in the opposite direction on a
Method Reverse bidirectional link. The 'Turnaround Method' property of a Network element
may also be used to override this default on a network-by-network basis.
Free Space Direct To The behavior used to steer an object of this type when traveling in free space
Steering Destination, to a destination.
Behavior Follow Network 'Direct To Destination' will steer an entity in a straight line to its destination.
Path If Possible 'Follow Network Path If Possible' will prefer to steer an entity along a path
following its currently assigned network, staying within the boundries of the
drawn path width. However, if no followable network path exists to the
entity's destination then the entity will be steered in a straight line. Note: In
order to use this steering behavior, make sure the entity's travel mode is set to
'Free Space Only'.
Update Expression The time interval between steering adjustments to maintain adherence to the
Interval network parth and avoid collisions.
Avoid True or False Indicates whether the steering behavior will attempt to avoid collisions with
Collisions other entities that are following the same network path.
Initial Priority Expression The initial priority value of this LiftTruck object at the beginning of the
simulation run.
Initial Node Node Instance The initial node location of this LiftTruck object at the beginning of the
( Home) Name simulation run. Also indicates the LiftTruck's initial 'Home' location if the
object is specified as 'Go To Home' when idle.
Routing Type On Demand, Specifies the routing behavior of this LiftTruck. If 'On Demand',then the
Fixed Route LiftTruck will route to locations on the network according to visit requests. An
'On Demand' LiftTruck may also be used as a moveable resource that is
seized and released for non-transport related tasks by model process logic. If
'Fixed Route', then the LiftTruck will follow a fixed route sequence to
transport riders and will only load and unload entities at locations on the
1240 / 1277
transport riders and will only load and unload entities at locations on the
specified route.
Route Sequence The sequence table that defines the route sequence that this LiftTruck will
Sequence Instance Name loop.
Idle Action Go to Home, The action of this LiftTruck object when it does not have any tasks to perform.
Remain In Place,
Roam
Off Shift Go to Home, The action of this LiftTruck object when it goes 'off shift'. Note that, if the
Action Remain In Place LiftTruck is busy or transporting when an off shift period begins, then this
action will be taken when the LiftTruck is released from (i.e., finishes) the
remaining tasks.
Capacity Type Fixed, Work The availability of this LiftTruck to perform tasks. 'Fixed' indicates that this
Schedule type of LiftTruck is always available. 'WorkSchedule' indicates that each
LiftTruck of this type follows a work schedule defining its 'On-shift', 'Off-shift'
availability over time.
Work Schedule The name of the schedule that defines the 'On-shift', 'Off-shift' availability of
Schedule Property this type of LiftTruck over time.
Work Day Repeat Group, Work Day schedule exceptions specific to this LiftTruck.
Exceptions Work Day
Exceptions
Work Period Repeat Group, Work Period schedule exceptions specific to this LiftTruck.
Exceptions Work Period
Exceptions
Ranking Rule First In First Out, The static ranking rule used to order requests waiting to seize this LiftTruck
Last In First Out, object for a process task. Note: This feature only applies to an 'On Demand'
Smallest Value routing type LiftTruck.
First, Largest
Value First
Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value First' static
Expression ranking rule for ordering requests waiting to be allocated capacity of this
object.
Dynamic None, or one of Indicates whether this LiftTruck, when it becomes available, dynamically
Selection Rule several Dynamic selects the next seize request from its statically ranked allocation queue using
Selection Rules a dynamic selection rule. Note: This feature only applies to an 'On Demand'
routing type LiftTruck.
Failure Type No Failures, Specifies whether this LiftTruck object has failures that affect the object's
Calendar Time availability, and the method used to trigger the failure occurrences.
Based, Event
Count Based
Event Name Event Instance The name of the event which determines when the next failure occurs.
Name
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
1241 / 1277
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Time To Expression The time required to repair a failure when one occurs.
Repair
Uptime Expression The uptime between failure occurrences. This property may be specified
Between using a random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using
Between a random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Parent Cost Cost Center The cost center that costs allocated to LiftTrucks of this type are rolled up
Center Name into. If a parent cost center is not explicitly specified, then costs allocated to
a LiftTruck will be automatically rolled up into the parent object that contains
the LiftTruck's current location.
Capital Cost Expression The initial one-time setup cost to add a LiftTruck of this type to the system.
Per LiftTruck
Cost Per Rider Expression The cost to load and transport an entity using a transporter of this type,
( Transport irrespective of the transportation time. This cost is allocated to an entity
Costs) when it is loaded onto the transporter.
Transport Cost Expression The cost per unit time to transport an entity using a transporter of this type.
Rate
( Transport
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of a LiftTruck of this
Rate( Resource type when it is idle.
Costs)
Cost Per Expression The one-time cost that is accrued each time a LiftTruck of this type is used for
Use( Resource a non-transport task, regardless of the usage duration. This cost will be
Costs) charged to the cost of the owner object(i.e., task) using the LiftTruck.
Usage Cost Expression The cost per unit time to use a LiftTruck of this type for a non-transport task.
Rate( Resource This cost will be charged to the cost of the owner object (i.e., task) using the
1242 / 1277
Costs) LiftTruck.
Run Initialized Process Instance Occurs when the simulation run is initialized. Note: This trigger will only occur
Add-On Name for Vehicle objects created by the Intiial Number in System setting.
Process
Triggers
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Triggers
Allocated Process Instance Occurs when this LiftTruck resource has been allocated to perform some
Add-On Name transport tasks, or when another object has seized this LiftTruck for some
Process non-transport related task.
Triggers
Released Process Instance Occurs when this LiftTruck resource has been released after completing a set
Add-On Name of tranport tasks, or when another object has released this LiftTruck from
Process some non-transport related task.
Triggers
Failed Add- Process Instance Occurs when the LiftTruck has failed.
On Process Name
Triggers
Entered Node Process Instance Occurs when this LiftTruck has entered a node.
Add-On Name
Process
Triggers
Unloaded Process Instance Occurs after an entity is unloaded from this LiftTruck.
Add-On Name
Process
Triggers
Loaded Add- Process Instance Occurs after an entity is loaded onto the LiftTruck.
On Process Name
Triggers
Exiting Node Process Instance Occurs when this LiftTruck object is about to begin exiting a node.
Add-On Name
Process
Triggers
Evaluating Process Instance Occurs when this LiftTruck is evaluating whether or not to accept the pickup
Transport Name of a rider. In the executed decision process, assigning the value less than or
Request Add- equal to 0.0 to the executing token's ReturnValue state ( Token.ReturnValue)
On Process indicates that the potential rider is rejected.
Triggers
Evaluating Process Instance Occurs when an 'On Demand' routing type LiftTruck is evaluating whether to
Seize Request Name accept or reject a seize allocation attempt by some process in the system. In
Add-On the executed decision process, assigning a value less than or equal to 0.0 to
Process the executing token's ReturnValue state ( Token.ReturnValue) indicates that the
Triggers allocation attempt is rejected. 1243 / 1277
Triggers allocation attempt is rejected.
On Shift Add- Process Instance Occurs when the object goes 'on shift' because of its specified work schedule.
On Process Name
Triggers
Off Shift Add- Process Instance Occurs when the object goes 'off shift' because of a specified work schedule.
On Process Name
Triggers
Initial Integer The initial number of LiftTruck objects of this type in the system. Vehicles are
Number in initially located in free-space at the object instance location.
System
Maximum Integer The maximum number of objects of this instance that can be simultaneously
Number in in the system. If this limit is exceeded then a runtime error is generated.
System
Log Resource True or False Indicates whether usage related events for this resource are to be
Usage automatically logged. Go to Results -> Logs to view logged data.
Display String Optional text used for hierarchically arranging resources in the Resource Plan
Category window. Use backslashes for multiple levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various windows (currently
only Gantt windows in Simio RPS ( Enterprise) Edition). If not specified, then
this property defaults to a color derived from the object's unique name.
Can Transfer True or False Indicates whether objects of this type are by default allowed to transfer into
In & Out of and out of fixed objects via those object's external input / output nodes.
Objects
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
Link Segment Smooth, The type of link movement transitions for this object. Smooth indicates the
Transition Immediate object will move smoothly between different angles of the different link
Type segments. Immediate will immediately change the angle of the object at the
next link segment.
1244 / 1277
Simio Reference Guide
Elevator
The Elevator functionality is comprised of three objects: an Elevator, ElevatorNode, and ElevatorSelectorNode. The
Elevator is a transporter that moves up and down in the vertical direction and picks up and drops off entities at its
associated ElevatorNodes. Each ElevatorNode references its associated Elevator, and each Elevator has a list of associated
ElevatorNodes that it can visit. When modeling a single elevator, only the Elevator object and its associated ElevatorNodes
are required. When an entity arrives to an ElevatorNode, it issues a pickup request to the Elevator. The movement logic for
the Elevator is to move in a single vertical direction (up or down) until all drop offs and pickups have been down while
continuing movement in that direction. Entities will only enter the Elevator if it is currently moving in its desired direction.
Once all pickups and drop-offs in the current direction have been completed the elevator then changes direction and
continues with additional pickups and drop-offs. When the Elevator becomes idle it either remains in place or returns to its
home ElevatorNode based on the specified Idle Action for the Elevator.
Bank of Elevators
When modeling a bank of two or more elevators, an ElevatorSelectorNode may be used at each elevator level (floor) to
route arriving entities to the appropriate elevator. This selection is made based on the elevator that must travel the least
distance to accomplish the pickup – given the current workload already assigned to the elevator. In the case of an
approaching elevator moving in the desired direction, this is simply the current distance from the elevator. Otherwise, this is
the travel distance for the elevator to complete its existing pickups and drop-offs and then return to this location. Note that
a separate ElevatorSelectorNode is required at each level of the elevator bank.
There are no limits to the number of floors ( ElevatorNodes) that can be assigned to an elevator, and there are no limits to
the number of Elevators that can be used in an elevator bank. Also, note that the Elevator supports acceleration and
deceleration to accurately model movement times.
Listed below are the properties of the Elevator:
Property Valid Entry Description
Initial Ride Integer The initial carrying capacity of this Elevator object.
Capacity NOTE: Refer to the user-assignable 'RideStationCurrentCapacity' state variable of
a transporter to dynamically change its ride capacity during a simulation run.
Load Time Expression The time required for this Elevator object to load an entity (i.e., the load time per
entity).
Unload Time Expression The time required for this Elevator object to unload an entity (i.e., the unload time
per entity).
Minimum Dwell Until Specifies the minimum dwell time requirement for this Elevator object when
Dwell Time Event, Dwell loading and unloading entities at a node. A 'minimum dwell time' is a minimum
Type Until Full, No amount of time the Elevator is required to wait, or 'dwell', at a node to load and
Requirement, unload entities.
Specific
Time
Event Name Event Name The name of the event that will indicate the expiration of the minimum wait time
requirement for this Elevator object when loading and unloading entities at a
node.
Minimum Expression The specific minimum amount of time that this Elevator object is required to wait,
Dwell Time or 'dwell', at a node to load and unload entities.
Dwell Only If Expression If specified, this condition will be used to indicate whether the Elevator must
respect the minimum dwell time at a node if that requirement has not yet expired,
thereby forcing the elevator to wait, or 'dwell', at the node for possible additional
loads. Example uses of this property might include allowing the elevator to exit a
node before the minimum dwell time has expired if the elevator has reached full
ride capacity, or if there is little to no chance of additional loads. Another
example condition might be to only respect the minimum dwell time requirement 1245 / 1277
example condition might be to only respect the minimum dwell time requirement
if the elevator is at a node meeting some specific criteria.
Elevator Node List The list of elevator nodes that this elevator may visit for picking up and dropping
Node List off entities.
Initial Desired Expression The initial desired speed value for this Vehicle object when traveling between
Speed locations.
Acceleration Expression The initial desired speed value for this Vehicle object when traveling between
locations.
Deceleration Expression The initial desired speed value for this Vehicle object when traveling between
locations.
Initial Network The initial network of links used by this Vehicle object to travel between node
Network Instance locations.
Name
Network Exit & Re- When traveling on a network, the default method used by objects of this type to
Turnaround enter, Rotate turn around at a node in order to move in the opposite direction on a
Method in Place, bidirectional link. The 'Turnaround Method' property of a Network element may
Reverse also be used to override this default on a network-by-network basis.
Free Space Direct To The behavior used to steer an entity of this type when traveling in free space to a
Steering Destination, destination.
Behavior Follow 'Direct To Destination' will steer an entity in a straight line to its destination.
Network 'Follow Network Path If Possible' will prefer to steer an entity along a path
Path If following its currently assigned network, staying within the boundries of the
Possible drawn path width. However, if no followable network path exists to the entity's
destination then the entity will be steered in a straight line. Note: In order to use
this steering behavior, make sure the entity's travel mode is set to 'Free Space
Only'.
Update Expression The time interval between updates checking an entity's adherence to the network
Interval path.
Avoid True or False Indicates whether the steering behavior will attempt to avoid collisions with other
Collisions entities that are following the same network path.
Initial Priority Expression The initial priority value of this Vehicle object at the beginning of the simulation
run.
Initial Node Node The initial node location of this Vehicle object at the beginning of the simulation
( Home) Instance run. Also indicates the vehicle's 'Home' location if the object's 'Idle Action' is
Name specified as 'Park At Home' or 'Go To Home'.
Routing Type On Demand, Specifies the routing behavior of this Vehicle. If 'On Demand',then the vehicle will
Fixed Route route to locations on the network according to visit requests. An 'On Demand'
vehicle may also be used as a moveable resource that is seized and released for
non-transport related tasks by model process logic. If 'Fixed Route', then the
vehicle will follow a fixed route sequence to transport riders and will only load
and unload entities at locations on the specified route.
Route Sequence The sequence table that defines the route sequence that this vehicle will loop.
Sequence Instance
Name
Idle Action Park At The action of this Vehicle object when it does not have any transportation tasks to
Node, Go to perform.
Home,
1246 / 1277
Remain In
Place, Park
At Home,
Roam
Off Shift Park At The action of this Vehicle object when it goes 'off shift'. Note that, if the vehicle is
Action Node, Go to busy or transporting when an off shift period begins, then this action will be taken
Home, when the vehicle is released from (i.e., finishes the remaining tasks.
Remain In
Place, Park
At Home
Capacity Type Fixed, Work The availability of this vehicle type to perform tasks. 'Fixed' indicates that this type
Schedule of vehicle is always available. 'WorkSchedule' indicates that each vehicle of this
type follows a work schedule defining its 'On-shift', 'Off-shift' availability over
time.
Work Schedule The name of the schedule that defines the 'On-shift', 'Off-shift' availability of this
Schedule Property type of vehicle over time.
Work Day Repeat Work Day schedule exceptions specific to this resource.
Exceptions Group, Work
Day
Exceptions
Work Period Repeat Work Period schedule exceptions specific to this resource.
Exceptions Group, Work
Period
Exceptions
Ranking Rule First In First The static ranking rule used to order requests waiting to seize this Vehicle object
Out, Last In for a process task. Note: This feature only applies to an 'On Demand' routing type
First Out, vehicle.
Smallest
Value First,
Largest
Value First
Ranking Expression The expression used with a 'Smallest Value First' or 'Largest Value First' static
Expression ranking rule for ordering requests waiting to be allocated capacity of this object.
Dynamic None, or one Indicates whether this vehicle, when it becomes available, dynamically selects the
Selection Rule of several next seize request from its statically ranked allocation queue using a dynamic
Dynamic selection rule. Note: This feature only applies to an 'On Demand' routing type
Selection vehicle.
Rules
Park While True or False Indicates whether this Vehicle object should park while busy at a node due to a
Busy seize request. Parking a vehicle can be useful to avoid blocking other travelers on
the network.
Failure Type No Failures, Specifies whether this Vehicle object has failures that affect the object's
Calendar availability, and the method used to trigger the failure occurrences.
Time Based,
Event Count
Based
Event Name Event The name of the event which determines when the next failure occurs.
Instance
Name
1247 / 1277
Uptime Expression The uptime between failure occurrences. This property may be specified using a
Between random sample from a distribution.
Failures
Count Expression The count between failure occurrences. This property may be specified using a
Between random sample from a distribution.
Failures
Time To Expression The time required to repair a failure when one occurs. This property may be
Repair specified using a random sample from a distribution.
Parent Cost Cost Center The cost center that costs allocated to vehicles of this type are rolled up into. If a
Center Name parent cost center is not explicitly specified, then costs allocated to a vehicle will
be automatically rolled up into the parent object that contains the vehicle's
current location.
Capital Cost Expression The initial one-time setup cost to add a vehicle of this type to the system.
Per Vehicle
Cost Per Rider Expression The cost to load and transport an entity using a transporter of this type,
( Transport irrespective of the transportation time. This cost is allocated to an entity when it is
Costs) loaded onto the transporter.
Transport Cost Expression The cost per unit time to transport an entity using a transporter of this type.
Rate
( Transport
Costs)
Idle Cost Expression The cost per unit time charged, or accrued, to the cost of a vehicle of this type
Rate( Resource when it is idle.
Costs)
Cost Per Expression The one-time cost that is accrued each time a vehicle of this type is used for a
Use( Resource non-transport task, regardless of the usage duration. This cost will be charged to
Costs) the cost of the owner object(i.e., task) using the vehicle.
Usage Cost Expression The cost per unit time to use a vehicle of this type for a non-transport task. This
Rate( Resource cost will be charged to the cost of the owner object (i.e., task) using the vehicle.
Costs)
Run Initialized Process Occurs when the simulation run is initialized. Note: This trigger will only occur for
Add-On Instance Vehicle objects created by the Intiial Number in System setting.
Process Name
Triggers
Allocated Process Occurs when this Vehicle resource has been allocated to perform some transport
Add-On Instance tasks, or when another object has seized this Vehicle resource for some non-
Process Name transport related task.
Triggers
Released Process Occurs when this Vehicle resource has been released after completing a set of
Add-On Instance tranport tasks, or when another object has released this Vehicle resource from
Process Name some non-transport related task.
Triggers
1248 / 1277
Failed Add- Process Occurs when the vehicle has failed.
On Process Instance
Triggers Name
Entered Node Process Occurs when this vehicle has entered a node.
Add-On Instance
Process Name
Triggers
Loaded Add- Process Occurs after an entity is loaded onto the vehicle.
On Process Instance
Triggers Name
Exiting Node Process Occurs when this vehicle object is about to begin exiting a node.
Add-On Instance
Process Name
Triggers
Evaluating Process Occurs when this vehicle is evaluating whether or not to accept the pickup of a
Transport Instance rider. In the executed decision process, assigning the value less than or equal to
Request Add- Name 0.0 to the executing token's ReturnValue state ( Token.ReturnValue) indicates that
On Process the potential rider is rejected.
Triggers
Evaluating Process Occurs when an 'On Demand' routing type Vehicle is evaluating whether to accept
Seize Request Instance or reject a seize allocation attempt by some process in the system. In the
Add-On Name executed decision process, assigning a value less than or equal to 0.0 to the
Process executing token's ReturnValue state ( Token.ReturnValue) indicates that the
Triggers allocation attempt is rejected.
On Shift Add- Process Occurs when the object goes 'on shift' because of its specified work schedule.
On Process Instance
Triggers Name
Off Shift Add- Process Occurs when the object goes 'off shift' because of a specified work schedule.
On Process Instance
Triggers Name
Initial Integer The initial number of Vehicle objects of this type in the system. Vehicles are
Number in initially located in free-space at the object instance location.
System
Maximum Integer The maximum number of objects of this instance that can be simultaneously in
Number in the system. If this limit is exceeded then a runtime error is generated.
System
Log Resource True or False Indicates whether usage related events for this resource are to be automatically
Usage logged. Go to Results -> Logs to view logged data.
1249 / 1277
Display String Optional text used for hierarchically arranging resources in the Resource Plan
Category window. Use backslashes for multiple levels (e.g., One\Two\Three).
Display Color Color A color to be used when showing this object in various windows (currently only
Gantt windows in Simio RPS ( Enterprise) Editions). If not specified, then this
property defaults to a color derived from the object's unique name.
Can Transfer True or False Indicates whether objects of this type are by default allowed to transfer into and
In & Out of out of fixed objects via those object's external input / output nodes.
Objects
Report True or False A Boolean property may be True or False and used in expressions as a numeric 1.0
Statistics ( True) or 0.0 ( False) value.
1250 / 1277
Simio Reference Guide
ElevatorNode
The Elevator functionality is comprised of three objects: an Elevator, ElevatorNode, and ElevatorSelectorNode. The
Elevator is a transporter that moves up and down in the vertical direction and picks up and drops off entities at its
associated ElevatorNodes. Each ElevatorNode references its associated Elevator, and each Elevator has a list of associated
ElevatorNodes that it can visit. When modeling a single elevator, only the Elevator object and its associated ElevatorNodes
are required. When an entity arrives to an ElevatorNode, it issues a pickup request to the Elevator. The movement logic for
the Elevator is to move in a single vertical direction (up or down) until all drop offs and pickups have been down while
continuing movement in that direction. Entities will only enter the Elevator if it is currently moving in its desired direction.
Once all pickups and drop-offs in the current direction have been completed the elevator then changes direction and
continues with additional pickups and drop-offs. There are no limits to the number of floors ( ElevatorNodes) that can be
assigned to an Elevator.
Listed below are the properties of the ElevatorNode:
Property Valid Entry Description
Initial Integer The initial maximum number of traveling entities that may simultaneously
Traveler occupy this node.
Capacity NOTE: An entity using the 'Ride On Transporter' option for this node will be
exempted from being blocked by or counted against the node's traveler
capacity limit. Also, refer to the user-assignable 'CurrentTravelerCapacity' state
variable of a node to dynamically change its traveler capacity during a
simulation run.
Entry First In First Out, The rule used to rank entry into this node among competing entities.
Ranking Rule Last In First Out,
Smallest Value
First, Largest
Value First
Entry Expression The expression used with a 'Smallest Value First' or 'Largest Value First' entry
Ranking ranking rule.
Expression
Associated Elevator Instance The elevator that is associated with this ElevatorNode.
Elevator Name
Elevator By Sequence, The method used to set a destination node for entities entering the elevator at
Destination ElevatorNode, this node. If the method is 'By Sequence', then the entity must have a sequence
Type EntityDestination table assigned. The destination node value will be set to the next destination in
the sequence.
Elevator Node Instance The elevator departure node for this entity when the Elevator Destination Type
Departure Name is specified as 'ElevatorNode'.
Node
On Entering Repeat Group, Optional state assignments when an entity is entering the ElevatorNode
( State Assignments object.
Assignments)
1251 / 1277
Condition Expression Condition required to perform the assignment when Assign If is 'Custom
( State Condition'.
Assignments)
State State Name The name of the state that will be assigned a new value.
Variable
Name ( State
Assignments)
On Entering Repeat Group, Optional tally statistics to be calculated when an entity enters the node object.
( Tally Tally Statistics
Statistics)
On Exited Repeat Group, Optional tally statistics to be calculated when an entity has exited the node
( Tally Tally Statistics object.
Statistics)
Tally If ( Tally Custom The condition required to record the tally statistic.
Statistics) Condition, Entity
Entering, No
Condition,
Transporter
Entering
Tally Statistic TallyStatistic The tally statistic for which the value is to be recorded.
Name ( Tally Element Name
Statistics)
Value Type Expression, The type of value to record. The value type 'Expression' records the value of
( Tally TimeBetween the specified expression. The value type 'TimeBetween' records the time
Statistics) between arrivals to Tally steps referencing the tally statistic.
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Entered Process Instance Occurs when an entity's leading edge has entered this node.
Add-On Name
Process
Exited Add- Process Instance Occurs when an entity's leading edge has exited this node.
On Process Name
Report True or False A Boolean property may be True or False and used in expressions as a numeric
Statistics 1.0 ( True) or 0.0 ( False) value.
1252 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1253 / 1277
Simio Reference Guide
ElevatorSelectorNode
The Elevator functionality is comprised of three objects: an Elevator, ElevatorNode, and ElevatorSelectorNode. The
Elevator is a transporter that moves up and down in the vertical direction and picks up and drops off entities at its
associated ElevatorNodes. Each ElevatorNode references its associated Elevator, and each Elevator has a list of associated
ElevatorNodes that it can visit. When modeling a single elevator, only the Elevator object and its associated ElevatorNodes
are required. When an entity arrives to an ElevatorNode, it issues a pickup request to the Elevator. The movement logic for
the Elevator is to move in a single vertical direction (up or down) until all drop offs and pickups have been down while
continuing movement in that direction. Entities will only enter the Elevator if it is currently moving in its desired direction.
Once all pickups and drop-offs in the current direction have been completed the elevator then changes direction and
continues with additional pickups and drop-offs. When the Elevator becomes idle it either remains in place or returns to its
home ElevatorNode based on the specified Idle Action for the Elevator.
When modeling a bank of two or more elevators, an ElevatorSelectorNode may be used at each elevator level (floor) to
route arriving entities to the appropriate elevator. This selection is made based on the elevator that must travel the least
distance to accomplish the pickup – given the current workload already assigned to the elevator. In the case of an
approaching elevator moving in the desired direction, this is simply the current distance from the elevator. Otherwise, this is
the travel distance for the elevator to complete its existing pickups and drop-offs and then return to this location. Note that
a separate ElevatorSelectorNode is required at each level of the elevator bank.
There are no limits to the number of Elevators that can be used in an elevator bank.
Listed below are the properties of the ElevatorSelectorNode:
Property Valid Entry Description
Initial Expression The initial maximum number of traveling entities that may simultaneously
Traveler occupy this node.
Capacity NOTE: An entity using the 'Ride On Transporter' option for this node will be
exempted from being blocked by or counted against the node's traveler
capacity limit. Also, refer to the user-assignable 'CurrentTravelerCapacity'
state variable of a node to dynamically change its traveler capacity during a
simulation run.
Entry First In First Out, The rule used to rank entry into this node among competing entities.
Ranking Rule Last In First Out,
Smallest Value
First, Largest
Value First
Entry Expression The expression used with a 'Smallest Value First' or 'Largest Value First' entry
Ranking ranking rule.
Expression
Outbound Shortest Path, The rule used by a traveler to select an outbound link from this node to its
Link Rule By Link Weight next destination. Note that if this rule is set to 'Shortest Path', and the traveler
does not have an assigned destination, then the rule will revert to 'By Link
Weight' selection.
Elevator Node List The list name for the list of ElevatorNodes associated with this bank of
Node List elevators at this level.
Name
Up Direction True, False If 'True', the entity selects an elevator in the up direction, otherwise it selects
an elevator in the down direction.
Route First In First Out, The static rule used to rank competing entities waiting to be assigned an
Request Last In First Out, available destination.
Ranking Rule Smallest Value
First, Largest
1254 / 1277
First, Largest
Value First
Route Expression The expression used with a 'Smallest Value First' or 'Largest Value First'
Request ranking rule.
Ranking
Expression
Route None, or one of The rule used to dynamically select from competing requests waiting to be
Request several Dynamic assigned an available destination.
Dynamic Selection Rules
Selection
Rule
On Entering Repeat Group, Optional state assignments when an entity is entering the
( State Assignments ElevatorSelectorNode object.
Assignments)
Condition Expression Condition required to perform the assignment when Assign If is 'Custom
( State Condition'.
Assignments)
State State Name The name of the state that will be assigned a new value.
Variable
Name ( State
Assignments)
On Entering Repeat Group, Optional tally statistics to be calculated when an entity enters the node
( Tally Tally Statistics object.
Statistics)
On Exited Repeat Group, Optional tally statistics to be calculated when an entity has exited the node
( Tally Tally Statistics object.
Statistics)
Tally If ( Tally Custom The condition required to record the tally statistic.
Statistics) Condition,
Entity Entering,
No Condition,
Transporter
Entering
Tally Statistic TallyStatistic The tally statistic for which the value is to be recorded.
Name ( Tally Element Name
Statistics)
Value Type Expression, The type of value to record. The value type 'Expression' records the value of
( Tally TimeBetween the specified expression. The value type 'TimeBetween' records the time
Statistics) between arrivals to Tally steps referencing the tally statistic.
1255 / 1277
Value ( Tally Expression The expression value to be recorded.
Statistics)
Run Ending Process Instance Occurs when the simulation run is ending.
Add-On Name
Process
Entered Process Instance Occurs when an entity's leading edge has entered this node.
Add-On Name
Process
Exited Add- Process Instance Occurs when an entity's trailing edge has exited this node.
On Process Name
Report True or False A Boolean property may be True or False and used in expressions as a
Statistics numeric 1.0 ( True) or 0.0 ( False) value.
1256 / 1277
Simio Reference Guide
Visio Interface
Simio is releasing the first phase of a Simio-Visio interface that permits Visio drawings to be imported into Simio. This
new capability can be found in the Shared Items forum of the Simio Insiders Forum at
http://www.simio.com/forums/viewforum.php?f=36..
This first phase provides two ways to input Intelligent Objects, Links, and Vertices from Visio into the Simio Facility view:
1. Use Simio-Provided Visio Stencils to add Intelligent Objects and their Links, or
2. Add Shape-Data ( Visio properties) to existing Visio drawings to identify the Shapes and Connectors destined for
Simio.
Additional features are:
A Visio license is not required by the Add-In (only a Visio .vsdx file)
No COM or .NET Interop or 3rd party software is required.
Later phases will permit the import of Visio data for Simio Processes and Tasks.
1257 / 1277
Simio Reference Guide
Appendix
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1258 / 1277
Simio Reference Guide
System Requirements
Software Requirements
Microsoft® Windows 7 with Service Pack 1 or later, Windows 8.1, or Windows 10 Anniversary Update or later.
( Windows 7 support may be discontinued in early 2020.)
Both 32 and 64 bit operating systems are fully supported.
If installing on Windows 8.1, the April 2014 update ( KB2919355) must be installed first (see
https://support.microsoft.com/en-us/kb/2919355). Update 2919442 is also required (see https://
support.microsoft.com/en-us/kb/2919442).
Simio requires .NET Framework Version 4.6.2, which is part of the default installation.
If you are using an existing system, then the above guidelines should provide acceptable performance. If the system falls
short in memory or graphics, note that memory is often fairly inexpensive. Most systems with inadequate memory can be
easily and inexpensively upgraded. Likewise graphics cards are also fairly inexpensive.
Recommended Hardware Requirements for Large Project Support
Core i7 class or faster multi-threaded quad core processor - Simio takes full advantage of multiple processors
1 TB hard drive
23” or larger WUXGA (1920x1200) display - Consider multiple displays since Simio takes full advantage of higher
resolution and multiple monitors
1 GB Discrete Graphics compatible with DirectX 11
***Not only can you use a second monitor for displaying help and documentation, but most Simio windows can be
undocked and moved to a second screen. For example, you can display the Trace or Search window on the second screen.
Or you can simply have the animation span two screens.
Oculus Rift 3D Headsets’ Requirements for Integration
Graphics Card ( GPU) - NVIDIA GTX 970 or AMD 290 equivalent or greater
Processor ( CPU) - Intel i5-4590 equivalent or greater
Memory ( RAM) - 8GB+ RAM
Video Output - HDMI 1.3 video output
USB ports - 3 x USB ports (2 of them must be USB 3.0 ports)
Operating System - Windows 7 64-bit ( Service Pack 1) or newer
Miscellaneous Notes
Apple products like Mac are not officially supported, but many customers have had good results using Parallels or similar
products.
Simio does work on a Surface Pro as long as the OS is standard Windows 8 not Windows 8 RT. Simio does offer touch
screen support.
1259 / 1277
Simio Reference Guide
64 bit Execution
When Simio is installed, there are 'Simio' and a 'Simio x64' shortcuts in the Start menu. When you start Simio, by default,
the 32 bit executable is run ( Simio.exe). The option for running the 64 bit version of Simio ( Simio64.exe) depends upon
your computer.
Can I run Simio in 64 bit mode? Yes, but only if you are using a 64 bit OS.
Do I have to use the 64 bit version? No. If you are running a 64 bit OS you can run either the 32 bit or 64 bit version of
Simio. By default you will run the 32 bit version of Simio regardless of your OS. If your OS is 32 bit, you do not have a
choice and can run only 32 bit Simio.
How can I run in 64 bit mode? In the Start menu, under Simio, there is a shortcut for Simio x64. Additionally, enter the
Simio folder (usually in C:\Program Files (x86)\Simio) and right next to it you will find Simio64.exe. You can double-click it,
run from the command line, or create a short-cut to it on your desktop.
Will it run faster? Sorry, probably not. All of the memory addressing is twice as long (i.e., 64 bits rather than 32 bits) so the
CPU is working a bit harder and models will generally execute a bit slower.
Why would I use 64 bit? In general, don't use it unless you need it. But you may need it to run very large models or lots of
concurrent replications of moderate-size models. Depending on exactly how you use it, running in 32 bit mode limits each
process to using less than 2G of memory, and sometimes much less:
Windows itself, plus Simio and every application you are running take part of that 2G.
Sharing that 2G between 8 concurrent replications leaves less than 250M per replication.
64 bit mode replaces those limits with numbers so high they are unlimited from a practical sense. You can load and run
models that are limited only by the amount of memory you have on your computer.
Memory is relatively inexpensive, so you can max out your system and Simio will take full advantage of all your memory
and processors. You can run models in Simio that could not be run in most other products. One simple example is that Simio
permits you to load tables that are so large they will not load into Excel.
1260 / 1277
Simio Reference Guide
The above automatic installation procedures work for most people, but if you have system-specific problems you may
manually install the required software by following the instructions below. Universities & Network Activations – see
important note below.
Step 1 - Install .NET 4.6.2
Simio requires the .NET Framework Version 4.6.2. If the framework is not already installed on your computer and you
want to perform a manual install, you can download it from the .NET Framework Downloads page:
(http://msdn2.microsoft.com/en-us/netframework/aa569263.aspx).
It may also be installed by doing a Windows Update, depending upon your particular system configuration.
Step 2 - Install DirectX
In order to use the 3D features, you may also need to install the DirectX End-User Runtimes from March 2009.
(http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0cf368e5-5ce1-4032-a207-
c693d210f616) First create a new directory on your desktop called DirectXInstall. When you have downloaded
directx_mar2009_redist.exe, double click to open it. When prompted, choose the DirectXInstall directory on your
desktop as the location to extract the contents of the archive. Now, go into the DirectXInstall directory, and double
click on DXSETUP.exe. This should install the proper DirectX components onto your machine.
Once DXSETUP.exe is finished, you can delete both the new directory on your desktop and
directx_mar2009_redist.exe.
Step 3
If you have not already installed Simio, you can now install the Simio software itself by starting setup.exe from the
downloaded Simio zip file.
Licensing Window
1261 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1262 / 1277
Simio Reference Guide
1263 / 1277
It is also possible to control that with the following command line arguments:
C:\Program Files\Simio\Simio.exe -force-software-mode
This forces software mode 3d rendering, meant to be used for diagnosing issues, not to run Simio normally
C:\Program Files\Simio\Simio.exe -use-opengl
This forces OpenGL rendering
Miscellaneous options - used only at direction of Simio technical support
Many of these are for very specific purposes or compatibility issues, should be used only at the direction of technical
support, and are not for routine use by modelers.
-startasevaluation - Force starting as eval/personal software
-default-network-license:VALUE - Sets the default network license to search for on startup to some VALUE, if VALUE isn't
provided, it removed the default setting
-no-splash - Disable splash screen
-avoid-loh - Possibly improves performance or memory by making pains to avoid large contiguous allocation in the .NET
runtime
-use-old-dijktras - Use the (very) old way of computing shortest paths between network nodes
-use-min-3ddevice-memory - Rendering option that may increase available memory in nonmulti-monitor setups
-dont-use-mmf-for-geometry - Don't use Memory Mapped Files to read 3d geometry from disk, instead use standard
file operations
-use-linear-fk-search - Use the old linear search for finding a table row by key value
-use-linear-table-relation-search - Use the old linear scan for computing what rows in a table point to a specific key
-load-ogre-plugins-the-old-way - Use the old way of loading our 3d subsystem
-max-expression-stack-size:VALUE - Sets the maximum size of the "expression stack" which is a stack of expression data
we utilize as we are evaluating an expression
-max-world-size:VALUE - Sets the maximum size of the visible world space (in meters). Defaults to 50,000 km
-camera-far-clip-distance:VALUE - Sets the far clip distance of the 3d camera, defaults to 10 km
-ogre-plugin:VALUE - Loads the specified Ogre 3d subsystem implementation
-showdocumentation - Shows the documentation for the project after loading the file specified on the command line
-run-and-exit - Runs the project specified on the command line then immediately exits. Returns 1 if the runs fails, -2 if the
file can't open
-update-libraries:VALUE - If VALUE is "true" then updates the libraries as part of the run-andexit
-report-warnings-as-runtime-errors:VALUE - If VALUE is "true" then makes warnings runtime errors for run-and-exit
-newwindow - Does not load any existing window settings (like size or whatnot) for the application window
1264 / 1277
-count-the-things:FILENAME - Generates a report at FILENAME of the number of Steps, Objects, Logged resources,
and Targets in the specified project
1265 / 1277
Simio Reference Guide
To make use of the multi-file feature, saving the project as a .simproj should be used. When the model is saved with this
target, each object in the model will has its information stored in a folder by the same name located in the
Model.Files\Models folder. For example, the HierarchyWithTables simbit would look as follows:
1266 / 1277
Each folder will contain an XML file with information pertaining to that object type. If multiple modelers are working on
the same project, but different objects, the updated object folder can be copied over the existing object folder. In the
above example, if a modeler wanted to make changes only to the SearchTable object, the modeler can make the edits in a
separate copy of the model, save the model as a simproj and then replace the old SearchTable folder with the updated
folder.
1267 / 1277
Simio Reference Guide
A scenario when you might consider not accepting an update, is if you've created a new object by subclassing one of our
standard objects and you do not want your custom logic to be affected. If Simio detects that there are some objects with
process overrides, the below dialog will be displayed instead:
When the above dialog has been shown, the user then has an opportunity to open the Object Updates Available window
from within the project. To open the update window after you've looked more closely at your objects, you can bring it up by
clicking on the Check for Updates icon in the Project Home ribbon. As you can see in the below example, the Standard
Library updates are suggested by a check in the update checkbox; however, it is not suggested that users automatically
update any subclassed objects that have process overrides, as it may incorporate some object logic updates, but will not
update the overridden processes. As shown below, those custom objects with process overrides do not have a check in the
update checkbox.
1268 / 1277
Copyright 2006-2020, Simio LLC. All Rights Reserved.
Send comments on this topic to Support
1269 / 1277
Simio Reference Guide
Simio - Patent No. 8,156,468 C1: A System and Method for Creating Intelligent Simulation Objects using Graphical Process
Descriptions.
Simio - Patent No. 8,682,707 B2: Simulation-Based Risk Analysis for Finite Capacity Scheduling
Certain icons provided by VisualPharm - http://www.visualpharm.com
Certain icons provided by Sprial Graphics - http://www.spiralgraphics.biz
1270 / 1277
Simio Reference Guide
1271 / 1277
Simio Reference Guide
----------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
1274 / 1277
Simio Reference Guide
RunTime Capability
Description of RunTime Capability
Runtime is the ability for people to execute a Simio model without necessarily purchasing additional copies of the
software used to create the model. Simio imposes no limits on the number of models you can distribute or the number of
people to whom you can distribute. You are free to distribute outside of your organization if you choose. There is no charge
for any such distribution. Two runtime modes are available to support non-scheduling applications:
Interactive Runtime
Simio Personal Edition is available free to anyone and may be used without activation. It provides the ability to load a
model, run it interactively to view the animation, and even change the model at will. Model changes cannot be saved nor is
the capability provided to run experiments or execute custom user-written steps and elements. Only commercial Simio
Team1 and Professional Editions and above are capable of creating models that will run in Interactive Runtime.
Full Runtime
Where the interactive runtime does not provide sufficient capability, you may use other commercial editions to get full
runtime capability. Simio Design Edition can be used as a full runtime for models created in commercial Team1 and
Professional Editions and above. It provides the ability to load and run models, save model changes, run experiments, and
execute custom user-written steps and elements.
Models that use scheduling-specific features from Simio Enterprise1 and RPS Editions cannot use the above runtime
solutions. Scheduling models can only be deployed by using the same software edition used to build the model. However
there is a “Scheduling Mode” in both of these software editions that provides a simpler and more protected interface for
use by schedulers who will be generating and deploying the schedules rather than building scheduling models. Simio Portal is
often used as a runtime solution for scheduling applications.
1 Legacy product
1275 / 1277
Simio Reference Guide
1277 / 1277