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!


  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Simio Public Forums
    • Welcome and How To Become a Simio Insider
    • Discussions
    • Simio News and Announcements
    • Simio Product Details
    • Simio-Related Positions Desired or Positions Available
  • Forums for Simio Insiders Only (See Public Forums Welcome topic to sign up)
    • SI Help Getting Started
    • SI General Discussions
    • SI Downloads
    • SI Shared Items
    • SI New Feature and Enhancements Submission and Voting
    • SI Ideas & Suggestions
    • SI Bugs and Issues
    • SI Performance Tips
    • SI Challenge Applications
    • SI Non-US Cultures
    • SI User Interface
    • SI Material Handling
    • SI Student Competition
    • SI Educational
    • SI Objects
    • SI Animation and Visualization
    • SI Reporting and Analysis
    • SI Agent Based Modeling
    • SI Scheduling
    • SI Emulation
    • SI Optimization
    • SI API


  • Files
    • Academic Information
    • Product Information
    • Case Studies

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



About Me












Found 32 results

  1. Hello, I have a process that seizes five units of a resource, delays for a given amount of time, and then releases all five units. Occasionally, I get the error: "Unable to release '1' capacity unit(s) of the resource because the number of capacity units owned and satisfying the specified release criteria is only '0'." I only get this error for resources where I have seized multiple units; any single-unit resource seizes release just fine. Further, if I change "Must Simultaneously Seize" on the process step to 'False', it works just fine. For my model to properly reflect reality, however, I need those resource seizes to occur simultaneously and that value to be 'True'. Any thoughts are greatly appreciated.
  2. Double check that each Resource is hooked to the correct Work Schedule, and that you have the intended Day Pattern inputs for Mon - Sun in your Work Schedule(s). It sounds like you might need a separate (two total) Work Schedule for each group of 5 Resources. I would also recommend visually verifying that the Resources go OffShift (turn white) at the intended times. Other than that just make sure that the Off Shift Rule, in the Server's Secondary Resources, is also set to 'Suspend Processing'. Another way to check that the Server has suspended processing is to put some Dynamic Label Text on the Entity like 'ModelEntity.ID' so you can see exactly which Entity is in the Processing.Contents queue of the Server before and after the shift change. It should be the same one! Happy modeling!
  3. Dear all, I have searched for quite a while in the public part of this forum, but I could not find the solution of my problem even though there were some similar issues. I have four servers and a worker who is required as secondary resource for each of them. The worker switches and is doing fine so far. However, for my optimization problem, I need to simulate the amount of workers that are necessary to ensure smooth operations. Therefore, I would like to change the capacity of each server to 2 for 2 workers or to 3 to simulate 3 workers, etc. Sadly, the capacity of the server is not changing in the simulation even though the data are entered. Is there a solution to increase the capacity of servers with a worker as secondary resource so that always several entities are processed when the simulated worker arrives? Thank you very much for your support. Greetings from Hamburg, Armin
  4. Hi Benjamin, The first thing I recommend is to select Server2 and change the Ranking Rule to 'Smallest Value First' and the Ranking Expression to 'ModelEntity.Priority'. Doing that will allow the entities that are currently arriving to Server2 to jump ahead of higher valued entities in the input queue. In order for Server 2 to process, when free, an entity with a priority value of 1 even if has not entered Server 2's input buffer at that point, you will need to use a process. This process only looks at values that have entered the paths to Server2. Create an AddOnProcessTrigger for Entered for the two paths going to Server2. -Insert a Decide Step and have the Decide Type be 'ConditionBased' and the Condition Or Probability be 'ModelEntity.Priority== 1'. -Insert a Reserve Step after the True arrow of the process. Change the Resource Name to 'Server2'. This reserves Server2 for a ModelEntity with a Priority value of 1 if such a ModelEntity has entered either of the two paths leading to Server2. This is a general idea how to begin to solve your problem. If you want to do further reading, check out the "Reserve" page in the Simio Reference Guide. All the best, Caleb
  5. I've followed your suggestion, but still cannot change the timer offset .. I attached model below.. Thank you. Resource (1).spfx
  6. I have taken a glance at your model. At first look your timer element needs to be revised and you should not change the capacity a resource via a user-defined state variable. Use resource.currentcapacity state variable. I have revised your model and it looks like working. Due to having no more time I could not deeply analysed. see attached file. Resource.spfx
  7. Change the question , capacity of a resource is zero until 2018-10-07. Until resource is available, partA is waiting in inputbuffer of server and partB is being processed. I don't know how to process the server , not waiting for secondary resource.. where I'm in stock is. .workstation is only waiting for a secondary resource because the associaed entity is in front of the queue. Does anyone know how to change the order of the entity in this situation?
  8. You can get most of what you need using a built in Dynamic Selection Rule like what is highlighted in the attached figure: If the built-in rules don't provide exactly what you want, you might try a clever Filter expression. If that doesn't work, you might consider creating your own custom dynamic selection rule -- see examples in this folder: C:\Users\Public\Documents\Simio\Examples\UserExtensions\SimioSelectionRules The problem you were having is that Simio doesn't have a specific function that says "allocate this entity". It has a Seize step, to request allocation. It has a process (EvaluatingSeizeRequest) to evaluate if a specific entity can get it. And it has an Allocate step to force a resource to reevaluate pending allocations. To use your present approach you would need to flag the entity that you want to get the resource, change the EvaluatingSeizeRequest to allow selection of only that entity, then call the Allocate step to allow allocation to the remaining entity. But I would try Dynamic allocation first, since that is a built-in way designed to do smart allocation.
  9. Hello! In my model, there are 5 machines running for production. Each machine has opportunity to be failed, the mean time between two failures is exponential(4.5) hours, and the repair time will last triangular(20,25,30) minutes. I use 5 Resource to represent these 5 machines and place them on the canvas because I want to see the state changing of each machine during the model running. Five entities will be created at the time zero simultaneously and the Source will only create 5 entities, those entities arrive at a Server which capacity be set to 5 and the Server’s processing time is exponential(4.5) hours. When one entity go out the Server, it means one machine (Resource) failed. My question is how can I find the corresponding resource related to this entity and change its state to failure and then after certain time duration of repairing to change its state to busy. Say, if entity 3 go out the Server, then I need to set the state of Resource 3 to failure and then change it back to busy. I want to use list or table to achieve my job such that the model can fit for very large amount of machine’s condition, e.g. 1000 machines. Thanks!
  10. Dear Judy, First of all thanks for your reply. Secondly, I attached to you another version of the model after I made some modifications. It can be seen in the model, I named a new server as Section 1 and added into it two tasks (Unloading and Leveling, they were servers in previous model) each has its resource (vehicle). I used only one entity for the two tasks. Section 1 will have total Quantity by 2031.25m3 (Which means the total amount of material, since a truck will unload this material and a grader will level it on the surface). The total length of this server (Section 1) is 200 meters as in real life. For the first resource "Aggregate Tipper Truck", its total number is NumAggTr = 20, its rate per hour is named as QSTTRate (has random value), its total number of trips to finish works is TTS = 113 and quantity in each trip is named as QSTT (has also random value). While for the other resource "Grader", its total number is NumGr = 2, its rate per hour is named as QSTGRate (has random value), its total number of trips to finish works is GTS = 32 and quantity in each trip is named as QSTG (has also random value). Since the previous expressions will increase with acceleration, so I inserted Level With Acceleration for each of them to be used as state variable into Finish (Sink). Finally, PPCQSTT and PPCQSTG are the productivity of each task. I have 5 inquiries and they are: 1- Why the resources did not make the appropriate distance travelling? For example, the number of "Aggregate Tipper Truck" is 20 and total number of trips are 113 so each should make about 6 trips (113/20), since the length of Section 1 is 200 meters, then each should make 1200 meters (200*6). 2- In table which named "Sub-Activity Schedule", if I change the value under "Scheduled Finish Date" column the value under Actual Finish Date will change. Why this occurred and why "Status" never be "Ahead" or "On Time"? 3- How can I calculate the values of PPCQSTT and PPCQSTG Daily or Weekly? 4- If I want to identify constraints into each task, how can I do that? 5- How can I apply the concept of Look-Ahead Planning (Daily or Weekly), to remove the added constraints? Thank you again Best regards, Ahmed Elkherbawy Model 1.spfx
  11. While you can do what you ask, we don’t recommend that approach for dynamic objects because when you destroy a worker, you lose all record that it ever existed. For example, say you have 10 workers for a while, then change to 4, then end the run, you will only see statistics on those last 4, not the first 6. One option is to use fixed objects like Resource, and you can change their quantity at will. If you need the movement or other dynamic object characteristics, I would generally recommend creating individual workers and just adjusting their schedules. For your example, you might -- create 2 workers (Worker1-2) that work 9-12, 5 workers that work 12-1, and 1 worker who works 1-3. -- Or create 1 worker who works 9-3, 1 who works 9-1, and 3 who work 12-1 In either case add all those workers to a single "Workers" list and seize from that list.
  12. Try the Keep Reserve If expression: Math.If(ResourceA.AllocationQueue.NumberWaiting>0,ModelEntity.Priority>=ResourceA.AllocationQueue.FirstItem.ModelEntity.Priority,1). This is assuming Resource A's Ranking Rule is Largest Value for Entity.Priority and the priority of the waiting Entities do not change after they enter the queue. Then the first entity in the allocation queue has the highest priority of the waiting entities. If the current entity has a higher priority than the first in queue it results in 1, but if it's lower priority then it results in 0. If no entities in allocation queue, it results in 1. 1 means the entity reserves the resource , 0 means it doesn't. This condition is checked when the Resource is released, so change the Entity's priority before that (like AfterProcessing Assign or Addon process).
  13. They are similar statistics except that the first statistic looks at the resource state as it changes over time ... successive "busy" states with no state change between them (e.g. there is no idle time) are considered to be a single busy state. For the second statistic each entity is recorded separately. For example, if you have a model that creates exactly 2 entities at time zero and has exactly one minute of processing time, then [Resource] > Resource State > TimeProcessing will have a single observation of 2 minutes and Processing > Holding Time > Time In Station will have two observations of 1 minute each.
  14. Sources don't have associated workschedules for creating entities. There is an Arrival Mode property on the Source that allows entities to be created in different ways. Please see the SimBits (Support panel / Sample SimBit Solutions) named Appointment Arrivals or Source with Rate Table. One option would be to have a Resource with a workschedule that 'controls' the number of entities created in the Source, or the Entities Per Arrival property. To do this, you would create a state variable, let's say HowManyEntities. Within your source, set the Entities Per Arrival to 'HowManyEntities'. Set up the Resource with the workschedule for when you'd like entities to be generated and when not (i.e., so that when capacity is 1, you will change HowManyEntities = 1 and when capacity is 0, you will assign HowManyEntities = 0. Within the Processes window, you can have a process, Process1, that is triggered by 'Resource1.CapacityChanged'. Within that process, have a Decide step that checks the capacity and assigns the correct value for HowManyEntities. The Source then will generate entities using the Interarrival Time specified but based on the workschedule changes of Resource1.
  15. The symbols correspond to the "Resource States" that are assigned (and used for statistics calculation) based on what the Server is actually doing. So, for example, when the entity has 'seized' the Server and is processing for the processing delay (or multiple processing tasks), the Server is in a 'Processing' state or Busy. When the entity leaves the Server, it is no longer processing (unless another entity has entered and in processing delay). Thus, the 9 resource states are also used for statistics calculation for the Server. You can change the symbol colors (or symbol itself) of those states by highlighting the Server, clicking on the Active Symbol button on the Symbols ribbon and selecting the appropriate symbol/value. If you can let us know more about what information you are trying to gather or why you wish to have the Server remain green, we can perhaps point you in the right direction.
  16. Hi farnaz, in fact, you should be checking your buffer at the beginning of the period 10-11. If all machines stop at 10, entities will stop flowing shortly after. Therefore you could check around 10:05 or somewhere around the beginning of the period. To do so, you can use a timer (Definitions>Elements>Timer) and set it to occur every 24h with an offset of 20h05m (10:05PM)). Then, have a process being triggered by that timer. In that process you would check if the input buffer was empty or not (Server.InputBuffer.Contents==0). You can do that using a Decide step. If the condition is false (there is something in the buffer) change the resource state + Capacity of the server so that it processes said entity. For it to work for another hour you could set another timer or use a paralell process with a delay of 55min. At the end of that time you would turn off the server again. Hope this helps (I haven't tested it to be sure it works)
  17. Hello, I am trying to model a doll shop and hope I can get some help. Different type of Dolls come in and need some adjustments. We have 4 workstations that need 4 resources to do the job (1 resource per station). Resources may change the station based on rule that is explained later on. Each resource has its own service time to process each doll type. What I have done so far is pretty cool but still some improvements. Dolls come in and choose randomly the first available resource to process the doll. The model is able to know the resource index and pick the right service time. What I am looking for now is to dynamically select the available resources and pick the one with the smallest service time to process the doll. What do you think guys! MyModel.spfx
  18. You can do that with the Task Sequences within our Server object. You can also find more examples of using Task Sequences using the SimBits search. First, place a Server and change the Process Type to ‘Task Sequence’ and enter the Processing Tasks repeating property editor. Y our processing steps would be similar to those you specified: Task 1 – specify the Processing Time and under Resource Requirements, indicate that you need WorkerA Task 2- specify the Processing Time and under Resource Requirements, indicate that you need WorkerB Task 3 – specify the Processing Time …. and so on These tasks will all be performed before the entity leaves the Server.
  19. If you are creating a manual schedule you have full control and can change the capacity of any resource at any time. If you are using Simio schedules you can put a property in the value field and change that via the experiment window. I am not sure, but I believe that you can use a Simio schedule and also manually change the capacity value and that manual change will stay until the next automatic change.
  20. Hi, If you want to change the maximum amount of riders you can use "Vehicle.RideStation.CurrentCapacity". Is this what you wanted to achieve? Changing the current capacity of the vehicle however effect the resource state and that is why you are getting the error. (Basically resource on/off)
  21. When does a resource change capacity when this is requested through a schedule or through an assignment of the CurrentCapacity? When studying the behavior, we deduced the following, but want to check that it is correct (the documentation did not give much information): 1. When the resource is busy (say, fully occupied with a capacity of 5), and the capacity is decreased to 1 or more, all entities that are in process finish their work as scheduled. The effective change apparently takes place after busy entities are finished. (in Arena, this was either the IGNORE or the WAIT behavior). 2. When the resource is busy (say, fully occupied with a capacity of 5), and the capacity is decreased to 0, it immediately stops processing the current entities, which will stay in the Processing queue. When capacity is increased again to 5, the entities are finished. (in Arena, this was the PREEMPT behavior). 3. When the resource is busy (say, fully occupied with a capacity of 5), and the capacity is decreased to 0, it immediately stops processing the current entities. When capacity is increased again to, e.g., 1, all entities seem to finish at the same time. This is strange, because one would expect the entities to be finished one-by-one. This could be considered a bug? Finally, is it possible to implement IGNORE (schedule change starts late if entity busy, but next schedule change remains unchanged), WAIT (schedule change starts late if entity busy, and next schedule change is shifted accordingly) and PREEMPT (schedule change starts immediately) behaviors in Simio? -- Alexander Verbraeck, TU Delft, Netherlands
  22. Dave, thanks for the explanation. This makes it (especially the paradigm) a lot more clear. If some of this can be included in the standard description of a resource and schedules in the manual and in the help files, I believe it will be very beneficial to a lot of people! A SimBit to demonstrate the capacity reducing example you outline below, would also be very helpful for many (I will for sure build that example for my classes -- it will answer a lot of questions I routinely get). Finally, you are absolutely right that being able to extend the standard objects and change their behavior is easy and helps to address many issues. I can create a 'preemptive server' that way in a matter of minutes. Thanks again! Alexander.
  23. First of all, I won’t argue with you at all – I would also like to see Simio have more intuitive behavior in our Standard Library objects. But perhaps my explanation below will make it a little bit more intuitive. But the good news is that, unlike other products that limit the behavior to one of a few predefined choices: 1) In Simio your choices are unlimited - it is not too difficult to make it behave exactly as you want. The OnCapacityChanged add-on process (or related processes like On Shift and Off Shift) can use the Interrupt, Suspend, and Resume Steps as illustrated in several SimBits. 2) If you want some behavior to be your default behavior, just create a custom object with that behavior. If you think about the built-in behavior as follows it might help… PARADIGM: A resource of capacity > 1 still represents a single resource, but just has the ability to process multiple concurrent entities. But it still only has a single state (Idle, Busy, Failed, …), e.g. if it is failed, the entire resource is failed (all capacity units), and if it is off-shift (e.g. capacity=0) all units are off-shift. REDUCING CAPACITY: When capacity available is reduced below the current number of busy units, there are many possible valid behaviors depending on your system. The default behavior of our standard library is simply to finish working on the current entity, and then take the unit off-line. But you can use the tools mentioned above to change that default. For example, you might implement some behavior that says “if I am within 10 minutes of completion, go ahead and complete it, otherwise record its remaining time, add 5 minutes of restart time, then put it at the beginning of the waiting entities”. OFF-SHIFT: When a resource is taken off-shift (capacity=0) all units are off-shift. Current Standard Library behavior causes all processes to be suspended (Suspend/Resume Steps) while it is off-shift. This essentially means that everything is “frozen” in place. The entities are not removed from the resource, but rather just suspended so no progress is made during the off-shift period. When the off-shift period is complete (e.g. capacity > 0) then all the entities resume exactly where they left off. Unfortunately that last phrase is what causes the unexpected behavior when you suspend at one capacity and then resume at another lower capacity. You are essentially combining the two above paragraphs. You suspend all activity while off-shift, then after you resume, you will behave as though you had just reduced the units in service, which under the default behavior says keep working on the entities in process until they are completed. In your case, it sounds like you would want to add content to the On Shift process so that if capacity is set to less than the number busy, that you would want to Interrupt the remaining entities and send them back to the entry queue. And then perhaps build that behavior into a custom Server object and use that object routinely.
  24. Hi all. I have not found if we can force a server to shift "off shift" with processes. Actually, depending on some events or on some other processes, I would want to "pause" some servers, even if they could continue to process. For instance, if a server, resource or whatever fails somewhere in the model, I want to shift some of the other server/workstations "off shift" (or "idle", but there is not this state for servers). I suppose so that it is not possible to impose a change of state of servers, workstations etc., but if I am wrong, how could I do? Thank you! Guillaume.
  25. I will refer you to the Simio help topics on List States and ResourceState. The short answer is that Simio automatically maintains the resource state for you and you cannot directly change these autostates (see topics above for elaboration). For example you can not just make a Busy resource become Idle by assigning it's state. But you can take actions to cause a state change. For example if you set a resource capacity to 0 you are forcing it to an Off-Shift state. Or if you execute an Allocate step this could have the result of changing it to a Busy state.
  • Create New...