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!

Click_Here_button.png

New Software Release

Our latest release, Simio 11, is here!

ptkolodziejczyk

Members
  • Content Count

    27
  • Joined

  • Last visited

Posts posted by ptkolodziejczyk


  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. 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)


  3. 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.


  4. 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.


  5. 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, "")


  6. 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.


  7. 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


  8. 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.


  9. 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.


  10. 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.


  11. 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.


  12. 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?


  13. I am sorry but I see 2 problems with your request:

    1. I am pretty sure that Simio would not appreciate solicitaion here

    2. Judging from your academic license you are either a student or a researcher, the latter less likely. Taking shortcuts will not help you, and there is a good chance it would be plain cheating.


    You can do it, you just need to put enough effort. I wish you good luck.


  14. By freespace (Simio concept, see help) I mean not using nodes and paths to direct the movement of your entities, but have them roam 'free', and their progress be determined by heading, speed and duration. I don't know exactly how detailed you need your problem to be modeled but if it is just one road and with limited equipment it should not be too bad.

    The map underneath does not influence the execution of your simulation in any way, so it is up to you to decide whether it provides value to your solution.


  15. I cannot open your model. Please mention that you are using academic license in the future. I do not think there is a good SimBit showing interactions among multiple vehicles. I would strongly advise against that, as you need a node every time (precisely knowing where it happens!) and animation would not look nice. However, what is the purpose of the simulation then, if you know your progress exactly?


    If you want to show nicely the progress of the works even when you make different progress on various days I suggest doing everything in freespace. This will work only if you accept straight-line movements. You can store the progress in a variable and smoothly iterate in steps. For every day the vehicle will store then e.g. starting position, progress goal, movement direction. Add a vector for a vehicle for progress/distance/whatever for each day. Add a tally for average results among multiple vehicles. With limited number of vehicles you can reference them and create custom events to move around and offset truck from excavator etc. A lot of tedious work.


    Unless you really need to carry cargo between locations or use multiple resources for a task, use entities instead of vehicles (way simpler). Interaction between entities in freespace will be a challenge though, but you should manage with absolute/relative coordinates.


  16. Simio freezing when the file size is large is a common issue. I hope you are running the 64bit version as it handles that better.

    I do not know how the number of control variables or needed replications (rather low for the number of inputs imho) is to influence your issue. It is rather heavy symbols, CAD drawings etc. In my experience closing Simio altogether, not just the model, (which cleans temporary files) and then re-opening it anew works best.


    Mind that Referenced Property (best use Expression Property in object classes) can have a default value and even if it returns an error in the class definitions, it will work well if the main model, providing of course the value is then recognized by the main model. You may want to change then the Runnable property to false in order not to be annoyed.


    To update the size of an object right-click on it and choose - "Resize to Graphic size" option.(To select all objects of this class is best to first open properties spreadsheet and ctrl+a). I advise against removing objects from the model and placing them again. Too prone to mistakes in typing.

×
×
  • Create New...