Jump to content
Simio Forum

Welcome to the Simio Forum

Welcome to the Simio Forum! Experience the full experience of the forum by becoming a Simio Insider! You must be an Insider to post on any forum!


New Software Release

Our latest release, Simio 11, is here!


  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About ptkolodziejczyk


    Delft, NL

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I am afraid you need to go around and create a state variable within the entity to hold the row number when you set the table row. Then, for a new entity you need just to use it for the SetRow step.
  2. First, in your project navigate to ModelEntity or any other entity class. Right top corner. Then, in the definitions tab the third group is states, where you can define variables. These are then specific to the entity class.
  3. You can create a worker reference in an entity and point it to the table value upon patient creation. Then call it anytime when needed. Alternatively you can search through the table anytime you use it. However, I would like to advise against it, and really advise against re-creating historical situation in a simulation. There is little validity in a model, which is fed historical data and then the results are compared yet again with this data. Time between creation and completion of an order should be a stochastic distribution, and the chosen PT a causal effect of the model rules. As for a limitation for patients seen a day, just create an integer state variable and a monitor, which fires a process after a threshold is breached. Tallies are used for a different purpose, which is comparison between different measurement of the same value (but typically a different entity, like time between Point A and Point B)
  4. In my opinion you should use a custom node with a station element. Additional storage elements might be required depending on how sophisticated are your rules for job allotment. You can even add extra storage elements to the servers if pre-selection per machine is desired. Mind that a station represents a physical location and an entity can only be in a single one at a time, while a storage element is a custom queue, and an entity can be in multiple of these queues (but not twice in one queue). In a simple situation an entity (job), having left server n, automatically enters the buffer station at the node and is ranked, based e.g. on priority. Then, when a server m finishes a job, the first entity in line goes to it.
  5. Unfortunately I cannot open Academic licenses but from what you wrote you are comparing your list reference rpSynchroStation to a name and thus get a mismatch comparing reference to a string. To solve it you need to search through your list to actually get the name. I do not know how the model is set up, but if you need to do a multi-level search (for every output node search through the list), you need two searches after each other. Mind that if there are a lot of elements in these searches, and if you execute it often, you might get performance issues.
  6. To acess a state variable of an entity that is being processed at a server (let's call it Server1) you should type the following into the label, assuming there is only a single entity at the server: Server1.Processing.Contents.FirstItem.ModelEntity.Name Mind that you will get a warning if you run with such expression in a label, because you will be at times trying to reference an entity at an empty station. Then, you should expand the expression to: Math.if(Server1.Processing.Contents.NumberWaiting != 0, Server1.Processing.Contents.FirstItem.ModelEntity.Name, "")
  7. You can create a list state with 2 values: occupied or empty. Then every time an entity enters you set to occupied and when it leaves you check if it is the last entity and if so then set it to empty. The rest is taken for you and you can access percentage or total times easily. Otherwise, you need to have 3 global variables, call them Sum, Aux (both Real) and and Occupied (Boolean) to keep track if occupied. Then: OnEntered: If not Occupied then Aux = TimeNow, Occupied = True. OnExited: If Node.NumberTravelers == 0, then Sum = Sum + Aux - TimeNow, Occupied = False.
  8. To know the exact times for individual entities you need to define state variables within you entity and compare the time between OnEntered and OnExited events. If you want to know general statistics of all you entities you should use a Tally Statistics. Then you also measure waiting time OnExited as: TimeNow - ModelEntity.TimeEnteredNode
  9. The first expression you wrote is not a selection condition but a logic statement, that can evaluate to 1 or 0. For selection you need to use the Candidate construct as in the second expression. E.g. ((Candidate.Server.AttributeA == 1) && (Candidate.Server.AttributeB == 2)) Mind that there is a difference between using .Is and ==, the first of which checks if the candidate belongs to a particular class, and the latter checks for a value. Finally, AssociatedObject to a node might not be assigned. Make sure it is and that it is of the right class.
  10. You cannot delete elements from a list during runtime. However, you can create a custom queue (Storage element) and using the Insert and Remove steps control the elements that are there. Searching through a queue is almost the same as searching through a list.
  11. Add a floor label with the chosen state variables. Then you can zoom in to the object and see. Also, in Simio nomenclature object properties are constant through the run. Alternatively you can see chosen values via the Watch window (right-click --> Watch), though it is rather inconvenient.
  12. A SimBit is a small sample model, explaining a concept. You can find them in the Support tab, first from the left "Sample SimBit Solutions" and then search there.
  13. Ah, so you want to create 10 different entity types at the same simulation time? Why? What is the fundamental difference between them? Typically, you have 10 initializations of the same type, that you distinguish by giving them various values of state variables, especially in a small model like yours. My suggestion from above will not work. The error happens because you have not set a row in the table. Make your own add-on process that handles it if you really want to do it like that, I do not think the standard library source supports what you are trying to do. I would seriously rethink your approach though, it does not seem right. As for states, if you want your entities to have different processing times, the easiest way is to create a state for your ModelEntity that you use as a processing time. It won't automatically read the values from a table without setting the appropriate row, and the entity does not 'remember' it. Well, it can but that would be a bit more difficult.
  14. I cannot open files with academic license but can help with the problem: First of all, do not set the interarrival time to 0, that is dangerous, use entities per arrival to have more than one at the same time. If you set a row on Before Creating Entities, you will get the same row for all entities per arrival. Instead, you should assign jobs On Created Entity, once you already have them. Then you can assign the values to entity states and go forward with processing. For the target, make a queue (storage element) minimizing the processing time and always take the first element.
  15. Defining table relations with primary and foreign keys is the easiest way to do that. Once a table row is set to one of the tables, Simio automatically uses related rows from other tables and you can reference them just by tablename.columnname. Have a look at SimBit: Using Relational Tables. As for creating entities, you need to set a row in a table before creating an entity, and then use associated fields from that table. For a property associated individually with each entity it is easiest to define a state for the entity and assign in after creation. Why don't you have a look at Appointment Arrivals SimBit, add the property column and go from there?
  • Create New...