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
Assumption:
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
‘[Link](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 ‘[Link](1,2,3)’.
Change the Processing Time of Server2 to ‘[Link](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 [Link], 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 ‘[Link]’ to
the New Value ‘[Link]’. 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 ‘[Link]’ as the Object Name. This will then use each entity’s
object reference that was 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 ‘[Link]’.
** Note: If the Object Reference state on the entity was a ‘Transporter’ object reference, the Transporter Name
would be specified as ‘[Link]’; 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.