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!

All Activity

This stream auto-updates     

  1. Today
  2. Last week
  3. This does seem to work!! Thank you for your help!
  4. I've include my suggestion in the model attached. I assigned low priorities to each vehicle types. Then, select vehicles according to these priorities. It seems it works? SmallModel.spfx
  5. I have made a small model with the issue. You will see the green MyVehicles start at two nodes. MyVehicle[1] is further away, but will be selected first. I want MyVehicle[2], the closer of the two MyVehicles, to be selected first. I only want the blue Vehicles selected if both MyVehicles are in use. SmallModel.spfx
  6. Thanks for the reply! I think I have implemented this the way you are describing, but the closest of the two vehicle types, either MyVehicle or standard vehicle, is still being selected. If you have any other ideas, they would be greatly appreciated!! Now, I'm trying to play around with "Reserve Best" and a selection condition that might choose the closest of all possible candidate types. I've tried Candidate.Transporter.NetworkDistanceTo.Node(Output@Server) with selection goal of smallest value and this still just picks the closest of the two vehicle types.
  7. I do not know the details but if it is appropriate set "must simultaneously batch" property as true under the batching logic section. Then, add a "Release Batch Early Triggers" and set "Trigger Type" as "Event Based" and "Triggering Event Name" as Timer1.Event. Then, define Timer element and trigger it at exactly 9:00 AM.
  8. You should use data tables for creating such a large number of modelentities. You can populate your data table by binding it to an excel file or a database etc.. Then, examine the "Inventory Replenish" related simbits for how to increase and decrease inventory levels of each part. You can determine specific inventory replenishment policy accordingly as well.
  9. First rank the vehicles accoding to your preference in your node list (My vehicle first then the standard vehicles). Then, setting "reservation method" as "reserve closest" and "selection goal" as "preffered order" and "selection condition" as "Candidate.Vehicle.ResourceState!=1" will work for you.
  10. As an update to this, I think I have (at least so far) found something which provides the desired behaviour and will detail below for others. I used the SimBit 'SelectServerWithShortestLine' as a reference. I created a Node list with the inputs nodes at each Sink listed. I created an integer Property to hold the variable which represents the maximum number entities that can go to a sink (e.g. MaxContainerCapacity). On the feeding TransferNode I changed the 'Entity Destination Type' to 'Select from List' and selected the list created in Step 1. Change 'Selection Goal' to 'Smallest Value' and set the 'Selection Expression' to Candidate.Node.AssociatedStationLoad, which accounts for everything en route, in the queue and processing at a node. Therefore, the select goal is to minimise this station load. I set the selection condition to (Candidate.Node.AssociatedStationLoad + Candidate.Sink.InputBuffer.NumberExited) < MaxContainerCapacity. Which is saying only select the Node found in Step 4 if the sum of the station load and the number of entities that have 'exited' the Sink are less than the MaxContainerCapacity.
  11. The problem simplified: Right now I am trying to create an add-on process for each server to decide if any MyVehicles are not in use, and if true a MyVehicle will be seized based on smallest distance and if false seize a standard vehicle also based on smallest distance. I know how to do the seize steps, but I do not know what to write for the condition in the Decide step. Is it even possible to check if any of a vehicle type are not in use in a decide step? Thanks again!
  12. I am looking for the best way to set inventory levels for 150+ spare parts in my model. The inventory will need to decrease and increase throughout the simulation.
  13. Hello, In my model, I have two vehicle types. The first type, MyVehicle, is a subclassed vehicle similar to the vehicles in the SimBit Electric Vehicle, except they use Free Space Only. The other type of vehicles are standard vehicles. My problem is when entities seize a vehicle for transport from one server, I want them to seize the closest MyVehicle and only seize a standard vehicle if no MyVehicles are available. The output node at each server is set to select from the transport list which includes both vehicle types. If I set the reservation method to "Reserve Closest" the closest vehicle of either type is reserved and if I set the reservation method to "Reserve Best", MyVehicle[1] will be attempted to be seized even if it is not the closest MyVehicle. I assume there is a way to use an add-on process to control which vehicle is seized, but I am unsure. Just FYI, I have MyVehicles starting at two different HomeNodes, 5 per node. Any thoughts would be greatly appreciated!! Thank you! Please let me know if this description is not clear.
  14. Hi, I have a series of shipping containers that are fed by a single conveyor, and I want all the containers to fill to a specific capacity whilst minimising the total time to fill. That means that if a container downstream is busy transfering-in an entity, then subsequent entities should stop at an upstream container to mitigate any queing, whilst respecting the capacity limits. At the moment I have the containers represented by sinks, but this doesn't allow me to set capacity limits. I'm using a TransferNode to set each entity's destination with a sequence table, but this doesn't reflect that an entity's destination might change enroute if it's desitation becomes busy or full as it transits. Can anyone please offer some advice or point me towards a SimBit that does something similar? Thanks, Craig
  15. Hi, I am trying to make it so that at the end of a process all of my combiners (say 10 or 20) collect all entities (assigned to a particular combiner when they enter the system) but wait to release to the sink until the simulation reaches a certain time (say 9:00 AM) AND all entities have been processed through the system and are in their assigned combiner. I use a combiner because they turn into a different type of entity before exiting the system. I've tried a few different things but cannot seem to get the process logic down. Any help?
  16. Hello, I have been utilizing SIMIO for a couple of months, however I am relatively unfamiliarized with some of the features. I have recently encountered a difficulty while simulating an airport screening checkpoint. Take the attached picture as a reference. I have entities arriving from a single Source, processed initially at Server 1, and then following a series of separators and additional servers along the way. At Separator 1, the member (luggage) is separated from the parent (passenger). (Luggage is created by a "create" step in an add on process, rather than at its own Source). However, I would like to distinguish statistics between those travelers and luggage going twice through a server. For example in Server 10, I have a loop going from the output node to the input node for the re-scanning of passengers. I managed to provide a priority value to the passengers going though that created loop, and an add on process rule to send those with that priority value to Sink 3, while those without the priority value to Sink 1. I tried applying the same concept to the loop seen in Server 9. However, when the passenger picks up the luggage at the transfer node located at end of the conveyor belt, both the member and the parent exit through Sink 1, rather than Sink 3. It appears that only the member obtains the priority, but not the parent. Although I tried, I did not manage to match the priorities and thus have the combined entities exit the model as anticipated. Any thoughts on how I could match the priorities, or perhaps, any suggestions to make this possible? Any help is greatly appreciated!
  17. Is there also the possibility to get a time distribution of the time between two servers (for example if you run an experiment)?
  18. Hello Pascal! Thank you so much for your reply! I tried the method you proposed this weekend and it worked quite well! It fixes the issue with updating the table too! So I'd like to thank you and @GFurtado for your replies! Without your help I'm sure I wouldn't have being able to fix this! Have a great day! Best to both! George
  19. Earlier
  20. Hi George, I know the normal ways, to create an entity from a table are: 1) Use a timer with the date/time table for a trigger for a own process or 2) A source with the arrival table option. If you want to create entities, maybe you can make a loop process like GFurtado with an Read-Step/Excel-Step and then you can use the Create-Step of Simio. Then you can check with an Decide-Step "TimeNow >= value" for example and create your Entity. With this option you can use FastForward too. With an lower delay time it is near the real time. Maybe this could be a solution for your problem. Because, then you dont need a third party tool to click on import. I checked the Simio API and I dont find something about a trigger for the Simio buttons or a button click event, what we can use for the problem. It would be nice, if there is an API to "use" the button click processes. For example, to import one or all tables again. Maybe a professional Simio API developer know more and can write here. Have a nice day! Best regards Pascal
  21. My company is developing a big model that simulates the arrival of passengers to an airport. It is important to us to control the randomness of the model for two reasons: - We want to be able to replicate the outputs of an experiment if the changes had not been significant. - When running different scenarios where only part of the configuration has changed, the part of the model that has not changed should remain the same. It is possible to control the random generated number of the distributions that Simio offers, but we hadn’t been able to fix the randomness in the next cases: - When using the function RandomRow. Any change in the model that modifies the running time when the function is called changes the row selected. - When selecting a path from its weight. As well as with the RandomRow function, we have seen that only moving one meter the node that is connected to more than one path, the randomness of the path selected varies. Furthermore, because of the dimensions of the simulation, some processes take time to end. That means that in some cases when we add more data to the input tables, data that is independent to a previous part of the simulation, everything changes because the process takes a little more time to end and that changes the result of the random decisions. We would like to know if it is possible to control the randomness on this events, or what other alternative can we use. There is a mini model attached that shows the described behavior. It consist on a source that generates 100 entities, and two possible paths with the same weight. If the node that connects to both path is in the center of the facility, 45 entities go up and 55 down, like in the next picture. If the node is moved to another location, the number of entities that go up changes to 48. Finally, adding a process (with a loop that doesn’t do anything) before selecting the path, the number of entities varies again to 47. Randomness_example.spfx
  22. Hi @ATSProThiede! Thanks for the reply! I did try using both types of blocks before and they're pretty good for updating states in real time, but I wanted to create the entities based on a Date/Time column from a table and I wasn't able to do so with either of those. As "barbaric" as it sounds the clicker solution actually works fine, and allows you to up or down the simulation time with no problem while still refreshing the tables, but it doesn't allow fast-forwarding and let's be honest, it's not professional at all. Yet until I find out how to use the API it's the best I can do with my knowledge! Thanks again! George
  23. Hi jord41, Simio loads the bound tables once during the initialization in the Simio tables. Data access requires a lot of computing time. (More for writing as reading). I see that you only have 1 column of integer values. My recommendation is that you do not import the table into a Simio table. It's best to create an integer or real state of type vector. Then you use e.g. the Read-Step or the ExcelRead-Step. In conjunction with a timer or the sample example loop of GFurtado you can load the data at intervals. I think that this could be a solution. At least that's how I would do it if I had to work with real-time data. Normally, such real-time data is written to a SQL database by a PLC or something like that. Then you can use the SQL steps anytime in Simio. Best regards Pascal
  24. Hi @GFurtado ! Thank you so much for your reply! I tried using the following to make the table go in order: TableName[ Math.Ceiling(Random.Uniform(0,TableName.AvailableRowCount) , ColumnNumber ] As @willem once posted in the forums, but instead of columns I used rows. Your logic works perfectly! And yes, now I find that there's no way for the tables to update themselves, I tried messing around with logic for a while but I found nothing of use. I posted another question about that kind of update too! But I guess I need help from one of the developers now... I mean, my computer skills are not bad but I'm not a software engineer, so API use is a bit out of hand for me. I tried creating a clicker or something similar in Python with low click time (around 0.03s/click) and it actually works, but it really slows down the whole system and it's probably the most barbaric solution that problem could have! I'll keep searching for a solution, and once again, thank you so much for your time!
  25. At some point I would start looking for a SCADA system, write it in Python or anything outside Simio. A Simio Engineer would be better suited to help you, but I still believe you could build this inside Simio (maybe through an API?). I manage to build a very ugly version of this that kinda works. It's not real real-time, because I still need to click on the manual import button (I don't know how to help you with this). I set my source's Arrival Mode to On Event; Create a process with a Decide step that checks if the table received a new value: If it received a new value, trigger SourceEvent; If it didn't, check again a second later. As I said, it's not very elegant, but I hope it inspires you to find the right solution.
  26. Hi to anyone checking this post! I was wondering if it is possible in any way to automatically import data to a table from a binded file every time an entity is created/deleted or firing an event (using the API, or with a custom programme or, even better! With Simio itself) instead of at the beginning of the run. This is a follow up question about a post I made earlier: It is still related with my attempt to work with real time data (or working 'on the fly' as I've heard before in the forums) and event tho I'm really close to achieving it, I still miss a way to automatically update the tables fast enough (I can't click the import data button that fast!) that the real time data is loaded appropriately. Since that issue was fixed thanks to the help of the community, I was wondering if you could lend me a hand again to see if this can be achieved! Thanks to everyone in advance!
  27. Hi again! Ok! I must've missed it because I tried to use it as a time table (for arrival times) , but now I've tried what you told me before with it as a State and it does update both the table and the simulation! (It takes values at random, but it works! I'll try to find a way to make a time index!) So I'll update my question! Can arrival time tables be modified the same way? Because it didn't work for me using the method we both described! It changed the units and got a bit fuzzy with it, like taking values at random instead of following the order of the table! Referencing the pictures above, it would be like it started following the arrival table in order (3,3,3,4,8,9...) and after I update it it just goes full random and takes whatever value it wants(making it quite hard to check if it actually used the new ones which it usually doesn't for some reason) , is there a way to keep the arrival times following an order after I update the table? Or am I doing something terribly wrong? (Which being honest, is much more likely! haha) Thanks to everyone in advance, and so sorry for my mistake!
  28. Hi GFurtado! Thanks for your answer! I'm using Simio 11.189 as my testing ground, and even though the ribbon is not the same, I can import data trough it, the problem is, even tho the data is imported into the table, it is not updated mid run so Simio keeps using the values previous to the new import, I'll elaborate a bit. Imagine these are the original values in the binded table I created. With those original values, I start the simulation and after a while I update the binded file (the .csv where Simio is taking values from) and I click on update table with the following options enabled. (Bear in mind! I've tried all of the options in the image below to no avail!) (Options used before clicking update mid-run) (Updated mid-run table, values get updated but Simio doesn't use them!) While the values get updated, Simio doesn't use them in this run (in the example I posted, it would only use the original first 9 values instead of all of the 19 values provided). As further context, I am indeed trying to make kind of a 'wacky' simulation, my idea is to update the .csv providing the data to the table at periodic intervals with new data from a real life reading from a machine, or something similar, and use that data as the entity creation time to try and make kind of a 'parallel' simulation with the actual readings of the system. But of course, for me being able to do that I need to know if Simio can update tables with new data and USE that new data mid - run! Thank you so much for your reply and for your time! Have a great one!
  1. Load more activity
  • Create New...