Jump to content

Search the Community

Showing results for 'wait in transfer node'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Simio Public Forums
    • Welcome and How To Become a Simio Insider
    • Simio News and Announcements
    • Simio Product Details
    • Simio-Related Positions Desired or Positions Available
    • Help Getting Started with Simio
  • Forums for Simio Insiders Only (See Public Forums Welcome topic to sign up)
    • SI General Discussions
    • SI Sprint Releases
    • SI Shared Items
    • SI Ideas and Suggestions
    • SI Known Issues and Workarounds
    • SI Performance Tips
    • SI Non-US Cultures
    • SI Student Competition
    • SI Educational
    • SI Libraries and Objects
    • SI Animation and Visualization
    • SI Distributions, Functions, and Expressions
    • SI Simio Tabs
    • SI Experimentation and Optimization
    • SI Functional Approaches
    • SI Industries / Domains
    • SI Types of Simulation
    • SI Emulation
    • SI API

Categories

  • Files
    • Academic Information
    • Product Information
    • Case Studies

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


First Name


Last Name


Company/University Name


OCCUPATION


ICQ


WEBSITE


YAHOO


AOL


LOCATION


FACEBOOK


GOOGLEPLUS


SKYPE


TWITTER


YOUTUBE

  1. There is not a way to add custom selection goals. The easier way to provide the node selection in .NET code is using a custom step. I have added a custom step called 'CustomRouteStep" in the attached VS project. The step is real simple. It has an expression and a state. Based on the value of the expression, the state will be populated with the value. Then, the state can be used to select which node on a node list to use. The entity will be routed to the selected node. In this example, a state value = 1 will route the entity to Server1 and a state value = 2 will route the entity to Server2. In your implementation, you would need to build the logic to determine what node to route the entity. Then, you would return the correct node in a state. The state would then be used to find the right node to select in Simio. See attached model and VS code. ScheduleAndFireEvents.zip ScheduleFireEventsCustomRoute.spfx
  2. I've done this similar to how Christine has done it, but using the built in parking station of a node. I've taken Christine's model and modified it to use the parking station. A small trick -- to get the statistics on the node you'll need to set the 'Report Statistics' property of the node to True. It defaults to False. Another option, with significantly more overhead, would be to use a server that you turn on and off. WaitInParking.spfx
  3. Hi all, I have been struggling with this problem for a while now. I have vehicles that pick up water from a tank and then take it to a number of smaller tanks. I looked at a simbit (“Pick up and drop off flow”) where entities are used to transport flow between containers. Now I have tried to do this by creating a new transport class but I couldn’t get it working. I need vehicles to do this (and not entities) because they have to travel to drop off the flow at a certain station and then they have to park and wait until they have to travel again. So I’m probably going to assign some sort of route logic to the vehicles. I don’t know if there is a way in which you could manipulate an entity’s process logic to do exactly that. Any help will be appreciated. I attached a basic model if someone is willing to play around with it. Thanks allot! Regards Carl-Gustaf FlowTransport.spfx
  4. lhu123, Your model is working -- transport requests are rejected. However, pickup requests (at the node itself) are not, so the vehicle picks entities up. This is because you have not modified the vehicles 'OnEvaluatingRiderAtPickup' process. The standard library vehicle calls the 'Evaluating Transport Request' add on from both the OnEvaluatingTransportRequest and OnEvaluatingRiderAtPickup processes. To bring this logic into the vehicle, you will need to subclass both processes.
  5. Spot On.... If you look at some of my posts....you will see that I have requested a dynamic array of type object.... Node lists wont work and you have to use a table and set the columns to type object.... having the first column as an index column, you should be able to index the table and reference other objects in the table by using the search and find blocks....
  6. I had a similiar problem with the transporter not listening what you tell it to do.... Solution... Delete the on visiting Node process and rewrite the logic....There are setNode,s statements in the Onvisitingnode process which overwrites the user assignments as the process is the first and last process which executes during run time as a transporter moves through a node....
  7. Any 'rejected' type tasks are re-evaluated once the worker is available again (they won't just wait indefinately), FYI.
  8. Adam, Instead of having the TransferNode reference a NodeList property on the entity, could you have it reference a NodeListProperty in a Table? So, instead of having a Node Property in the Table, have a NodeListProperty instead. And populate the Table with NodeList1, NodeList2, etc. Have your TransferNode reference Table2.NodeListProperty1 and then depending on what row the incoming entity has set to that Table, they'll select the appropriate NodeList. And when you want to change which node list an entity uses, you just change their row reference into that table. I made a few small changes to you model and attached it. In this example, I have two state variables that set the row of the entity as it's leaving the Source so when you want to change which row is assigned, you just change the state variable. Its built in sprint 90. Let me know if you have questions or if this doesn't meet your needs. DynamicRoutingPriority_simio.spfx
  9. Hi, I'm getting this strange error with the traveling step. It is easier to show you a video of it. What improper use am I doing of these steps? I want the entity to go to Server3 then comeback to the node and then go to the Server3 again. But I get that wierd error... Thanks!
  10. Pedro, the model posted earlier looked to me to do exactly what you wanted. It used the 'set node' step with add-on processes, and used decisions based on entity states that tracked which servers had been visited. Did you take a look at the processes in the model? If so, did they do what you want?
  11. The basic technique is that instead of including C and D in the sequence, you include a "choice" node where the decision is made which one(s) to go to and in what order. I have attached a draft SimBit submitted by a user that illustrates the technique.FlexibleProcessingSequence.zip
  12. This is my first time using this forum so I hope I am posting this in the correct section. I am currently busy with a problem involving the dust suppression program at an open pit mine. In open pit mines water trucks are used to maintain the condition of haul roads and reduce mine dust. Water trucks load water from refilling stations and traverse the road to spray water. After the water is exhausted, the water truck travels toward one of water stations for refilling and then continues to traverse the roads to satisfy the watering patterns. The water trucks run 24 hours per day.In practice the watering frequency of each road is related to the traffic intensity of haul trucks. The period of effectiveness, after the road has been watered, can range from 30 minutes to 3 hours. Regular light watering at approximately 0.3-0.5l/m2 is much more effective than infrequent heavy watering. To simplify the problem each road will be assigned a watering frequency (e.g. every 60 minutes) and a sliding time window (e.g. 10 minutes). The water can therefore be sprayed on the road within the given time window (e.g. 50 to 70 minutes). If the trucks service the road more frequently than every 50 minutes the road will be over watered and this can cause a host of problems. If the trucks water the road less frequently than every 70 minutes dust aggregation will start becoming problematic. In order to satisfy the water demand of the roads, it is possible that a truck waters a road segment first, then travels along the next road segment without watering it, and then waters another road segment. The road segment that a water truck traverses without watering is called a dead heading. A bidirectional road has to be watered in each of the two directions Empty water trucks are refilled at the refilling stations. A refilling station can serve a limited number of trucks at the same time. Also, a limited number of trucks can wait before being refilled. Hence, every refilling station has two kinds of capacities: the capacity for refilling the trucks and the capacity for holding trucks. If a refilling station is overloaded, some trucks need to be reassigned to a different refilling station. My main problem at this stage is how to model the dust aggregation on the haul roads. I started by setting up each road as a source server sink and then only displaying the server queue. The entities can then be modeled as dust clouds. The trucks then tend to the servers as operators. This still does not give the desired outcomes. I’m struggling to schedule the trucks to move on the shortest route and then return to the nearest filling station once they have depleted their water supply. Does anyone have any other ideas on how to approach the problem? Thanks for your help! Regards Carl-Gustaf Gericke
  13. Sure. You can make tightly coupled servers by connecting them with a Connector and having Server1 output buffer capacity and Server 2 input buffer capacity set to 0. But it sounds like you want more loosely coupled servers, so for example you could set: -Server1 Output Buffer is 0 (nothing waits there) -Path2 Capacity is 1 (only 1 can wait there) -Server2 Input Buffer is 1 (only 1 waits there) -Server1 Capacity is 1 (only 1 can be there) So you can have a total of up to 3 entities in or on the way to Server 2. Beyond that Server1 will be blocked and and additional entities will wait in Server1 Input Buffer. (I would have attached a model if you had posted this in an SI folder, but attachments are limited in these public folders.)
  14. Hmmm, actually he didnt update the model, it works fine. What is the correct way to remove elements from a station? I can perhabs use transfer right? Can I destroy them?
  15. I don't think you can dynamically create nodes while model is running, or at startup. So I think you would need to have a single input node, and output node, which you could then follow up with a single node that you could put all your pathing logic in. In that node, you could tell all of entity type A to go down path1, and all of B to go down 2, etc.
  16. The Extended Flow Library discussed in this thread is now obsolete. Most of its objects are now integrated into the Simio Flow Library or included in the new Candidate Library: http://www.simio.com/forums/viewtopic.php?f=36&t=1740 The built-in Flow library includes very powerful features and capability, but is currently limited in scope to just a few basic objects. While we are enhancing that built-in library based on your feedback, we have provided an extended set of flow-related objects. This library includes objects such as Solidifier, Liquefier, Filler, Extractor and Stockpile. A Solidifier can be used to convert a specified quantity of flow into discrete entities. A Liquefier converts a discrete entity into an outbound flow. The Filler is similar to a Combiner that combines input flow of a specified volume with a discrete entity and the combined entity departs the Filler. The Extractor is the flow equivalent of the Separator. It will separate a batch member entity from the parent entity, with the flow transfer of the batch member entity then discrete transfer of the parent entity once flow is complete. The Stockpile object is similar to a Tank with different animation graphics. ExtendedFlowLibrary.zip As we receive customer feedback on both the Flow Library and the Extended Flow Library we will probably build more of this type of capability directly into the Flow Library. But in the interim, hopefully this extended library will help in your modeling. Like all Simio-provided libraries, this library is open so you can look at how it was built, learn from it, and subclass your own objects to improve them. But unlike our built-in libraries, this is not fully supported (although we can provide some help) and we may not continue enhancing it, particularly if we decide to build this capability into the base Simio products. We are anxious to receive your feedback on this library.
  17. I've created a tool which makes my life a bit easier when trying to code Design Add-Ins for Simio and I thought that I would share it with everyone else. Disclaimer: I'm an engineer that is mostly self-taught when it comes to programming so it may not work (all I know is that it works on my pc ). Also I know that it isn't the prettiest piece of software either. What the tool does is allow you to try c# code directly within Simio and evaluate the results. If you have ever used a dynamic programming language like Matlab or Mathematica then it will be familiar to you. Its like the command window in Matlab where you can enter commands without compiling. Its called a REPL (Read-Eval-Print-Loop). more info here: http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop The code uses the Microsoft Roslyn Compiler API. more info here: http://en.wikipedia.org/wiki/Microsoft_Roslyn If you want to play around with the source code then you will probably need to install the Roslyn CTP. Download here: http://msdn.microsoft.com/en-gb/roslyn. I created the solution using Visual Studio 2012 and I believe that the roslyn compiler only works with VS 2012 at the moment. How to install: 1) Copy the SimioREPL folder from the zip file into either: C:\Program Files\Simio\UserExtensions or c:\Program Files (x86)\Simio\UserExtensions 2) The folder structure should be ..\Simio\UserExtensions\SimioREPL How to get started: 1) Create a new model in simio. 2) Select SimioREPL from the Select Add-In drop Menu (Project Home Ribbon) 3) Click "Insert Initializing Code" button. This inserts some code to get the whole thing going. You may need to change the directory of the dlls loaded if you are not using a 64-bit machine (delete the x86 part from the path). 4) Press the Execute button to evaluate the code. 5) You can now start playing with the interactive coding environment The bottom textbox displays the results from each execution loop. If no return values are given then it will display just the execution count. How to use (here is an example of how to use the tool): Enter c# code just like in a normal program, for example: int x = 10; You can find out the current value of a variable by entering its name without the ending semi-colon, for example: x or x*2 + 10 -3 This will display the value in the output text box at the bottom of the window. I've added the ability to use Write() and WriteLine(), just like in a console application. for example: WriteLine(object.ObjectName); If the code is invalid then the Exception message will be displayed in the results text box, and the input code will remain. If the code is valid then the input code is cleared. The context object is already defined. Use context as you normally would. Some example code Walkthrough: Add some objects to the model IIntelligentObjects intelligentObjects = context.ActiveModel.Facility.IntelligentObjects; IFixedObject sourceObject = intelligentObjects.CreateObject("Source", new FacilityLocation(-5, 0, -5)) as IFixedObject; IFixedObject serverObject = intelligentObjects.CreateObject("Server", new FacilityLocation(0, 0, 0)) as IFixedObject; IFixedObject sinkObject = intelligentObjects.CreateObject("Sink", new FacilityLocation(5, 0, 5)) as IFixedObject; ILinkObject path1 = intelligentObjects.CreateLink("Path",sourceObject.Nodes[0],serverObject.Nodes[0],null) as ILinkObject; ILinkObject path2 = intelligentObjects.CreateLink("Path",serverObject.Nodes[1],sinkObject.Nodes[0],null) as ILinkObject; [Execute] Move the source object intelligentObjects["Source1"].Location = new FacilityLocation(-4.5, 0, -2); [Execute] List all the nodes on the server object foreach(var node in serverObject.Nodes) { WriteLine(node); } [Execute] List all the objects in the model foreach(var ob in intelligentObjects) { WriteLine(ob.ObjectName); } [Execute] ---------- Hopefully you find this useful. If you improve the tool using the Source Code given then could you please repost the source code here in this forum topic. I'm sure that there are many things that can be improved by a proper programmer. What it really needs is intellisense . SimioREPL Source.zip SimioREPL UserExtension.zip
  18. So this may be an easy answered question, but I'm at a roadblock. I want to have an entity wait in a server until a specific date and time. Once that date and time is reached within the model run, I need it to fire and move to the next server. This would be easy if it were one entity, but essentially a batch all arrives at different times and then needs to wait until that date/time to ALL move at the same time into a combiner. Any help would be greatly appreciated.
  19. Simple approach: Take advantage of the fact that each model has an OnRunInitialized process that is called at the start of each run. --Create a table that contains all your initialization data. This might optionally be bound to an external file and automatically read if it changes frequently. --Define the OnRunInitialized process to search that table, create the entity(s), initialize the entity, and transfer it to the correct location. Look at the Simio Example (not SimBit) named RPsixample for an example of this approach applied to a simple scheduling model. More comprehensive approach: Take advantage of the fact that each object has an On Initialized add-in process that is called at the start of each run. --Create a table that contains all your initialization data identified by object instance. This might optionally be bound to an external file and automatically read if it changes frequently. --Define the On Initialized process to search that table for a matching object instance, create the entity(s), initialize the entity, and transfer it to the correct location. This can also set object characteristics as well, such as status, capacity, failure data, learning curve, … While this could be used by simply specifying the add-on process in each object instance, it is even more powerful if you create a custom object that includes a custom object-specific initialization process.
  20. The attached model illustrates 2 concepts: 1st the ability to pick up Entities mid-route, 2nd how to create a 2 Task Selection Strategy when deciding who to pick up. In this model, there are high priority Entities (illustrated by the red Entities) that are created at HiPrioSource. These Entities are to be loaded first, even with low priority Entities waiting. And when the high priority Entity is loaded the vehicle takes it directly to the sink. However, when a low priority Entity is loaded, the vehicle is supposed to stop and pick up any other waiting low priority Entities that are waiting along the vehicle’s route to the sink. So, to maximize the number of Entities loaded, the vehicle wants to pick up at the farthest location (LowPrioSource1) so that it can pick up any waiting Entities as it passes through LowPrioSource2. Now the Vehicle chooses the next Entity to pick up based on its Task Selection Strategy where it can be Largest/Smallest Priority or Largest/Smallest Distance – but it can’t be both. In this example, we want to FIRST make the decision based on Priority, THEN if we know its low priority we want to base it on Largest Distance. Because we want to first base it on Priority we set the Task Selection Strategy to Highest Priority. This means that it will handle the first tier of the decision process for us. Creating the second tier requires us to customize the Standard Library Vehicle. So we subclass a Vehicle and add an Entity Reference State called ‘NextEntityToPickup’. Then we Override the OnVisitingNode Process in this new vehicle and about 2/3s of the way through the process, after Decide-IfIdel and before the Plan Visit-NewTransportationTask we place a Search step. This Search Step searches the QueueState ‘MyVehicle.CurrentNetwork.VisitRequestQueue’ (the queue of all waiting Entities) with a Search Type of ‘MaximizeReturnValue’ with a Return Value Expression of ‘MyVehicle.NetworkDistanceTo.Node(Candidate.Entity.CurrentNode)’ – meaning the Entity that is farthest away from me. This Step will find the farthest Entity out of all waiting Entities, so on the Found Branch we assign NextEntityToPickup the value of ‘Object’ – meaning the specific Entity that is farthest away. *Note, we have to reset the NextEntityToPickup State before this Search. Now, in the OnEvaluatingTranportRequest Add-on process we place a Decide Step with the following expression ‘Math.If((MyVehicle.ResourceState==0) && (MyVehicle.NextEntityToPickup != Nothing), MyVehicle.NextEntityToPickup == Entity, True)’ and a Reject Assignment on the False Branch. So, this expression says If the MyVehicle is Idle and there IS a value for NextEntityToPickup, Then “am I the next Entity to pick up?” (which gets evaluated by every Entity), if it is not idle or there is no value for NextEntityToPickup then continue on – the vehicle will pick you up. So, this combination of letting the Vehicle handle the Priority mixed with Finding > Assigning > and Checking the Farthest Entities will give you the 2 tiered Task Selection that was desired. Also, don’t forget that this Vehicle is supposed to pick up low priority Entities Mid-Route. Doing this requires further Customization of the OnVisitingNode Process. Right after the Execute-Entered Add-On Process Step we placed a Search Step that checks to see if there is any High Priority Entities in the Ride Station. If the Ride Station has a High Priority Entity OR it is completely empty, the process will continue on as normal. If the Ride Station is NOT empty and it is carrying a Low Priority Entity, that means we can try to pick up more Entities along the way. To do this, we just force the Vehicle to try to DropOff/PickUp at this node (which it would not do normally, unless it was at the dropoff node). If there are no Entities to pick up or drop off at this node, both the Pickup and Dropoff Nodes will fail and the token will eventually route itself out of the process and the Vehicle will continue on. If there are waiting Entities, the vehicle is forced to pick them up by avoiding the logic that would normally tell the Vehicle to exit the node. Custom Pickup Process.zip
  21. Thanks for the suggestion. It now takes 30 seconds runtime for 1 million ... tokens, I guess that would be. First time I try this low-level approach. I followed your instructions (begin-seize-delay-release-tally). Read the Reference PDF as well. Added a Resource1 though (so there was something to seize?). Can see utilization of Resource1 (seems correct at .8321), but no queueing stats and cannot find any results from that Tally Statistics. Will continue to try. Still, I find it slow. I have a Javasimulation of an M/M/1 that takes only 4 seconds to run 1 million customers (=tokens/entities in Simio). Each customer has to be generated, wait for a resource (seize), delay, release it and ends up in a sink (that tallies). Same computer. The javasim has none of the GUI that Simio has, but then, there's no GUI processing overhead in FastForward/experiment mode. And, the Javasim reports queue and worker statistics (mean, variance). Perhaps Simio is collecting excessive statistics (if so, can it be turned off)? Or is it that I made a mistake by adding a Resource1 (to be seized)?
  22. You can use Simio at several levels. Here are a few: • You can build simple models entirely within a Process (limited or no use of library objects). • You can use the Standard Library. This was designed to make it easy to do the more common applications, but is not intended to do everything. This library will be enhanced and supplemented with other libraries in the future. • You can enhance the Standard Library Objects via add-on processes. This functionality is still under development, but processes will be easy to define to supplement the OnEntry and OnExit behavior. For example, you may want to collect and report custom statistics or have custom exit logic. • You can enhance/replace the Standard Library Objects by inheriting from them and modifying any of the predefined behavior. For example the Server currently only allows a single failure stream. You could create a new MyServer object that reproduces the included logic to support three failure streams. • You can create entirely new objects by inheriting from base class objects (like Fixed Object, Link, Node, and Intelligent Object). With this approach you can graphically define any combination of properties and behavior that you want using Steps and Elements inside Processes.
×
×
  • Create New...