-
Posts
1,654 -
Joined
-
Last visited
-
Days Won
52
Content Type
Profiles
Forums
Events
Gallery
Downloads
Everything posted by dsturrock
-
If you would like to be automatically notified about new postings to any Simio forum you should subscribe to the Forum by clicking the Follow button. This can be found at the top of every Forum topic (indicated by the red arrow in the screen shot below). Subscribing will ensure that you are among the first to know about each new posting. You can use the same technique to subscribe to any forum of interest to you to ensure that you get the latest news and have the opportunity to participate in any discussions.
-
- 1
-
-
There are actually several different problems that must be addressed. The specific question asked was "how can I dynamically change the processing time based on the number of resources allocated?" Perhaps the easiest way to do that is to change the server from its standard "Delay"-based behavior to a "Wait"-based behavior. Instead of delaying for a predetermined "processing" time, you want to wait until the work content is completed. You could take this approach with either a custom object or a library object but let's just look how you could do it with a standard server, lets call it Server1. SETUP 1) Create a level state named Server1WorkContentRemaining with UnitType of Time. 2) Create a Monitor named Server1WorkDone that monitors Server1WorkContentRemaining for a CrossingStateChange to cross the threshold of 0 in the Negative direction. The net of the two above items is that you can set Server1WorkContentRemaining to the value that you might have used for processing time (say 1 hour) and if you set Server1WorkContentRemaining.Rate to -1, then exactly 1 hour later the monitor will detect that Server1WorkContentRemaining has decreased to 0 and trigger the event named Server1WorkDone.Event. There are many nice things about this approach: a) If you set Server1WorkContentRemaining.Rate to the (-)number of resources in use it will automatically countdown appropriately (e.g. twice as fast if 2, 3 times as fast if 3) b) Server1WorkContentRemaining is always accurate no matter how many times it is changed or to what values. For example, if you change to 0 resources allocated, then Server1WorkContentRemaining.Rate would be 0 and Server1WorkContentRemaining would stop changing and continue in process indefinitely. c) It scales to any number of resources. For example if, with 1 minute remaining, you suddenly assign 100 resources to it, the monitor will trigger Server1WorkDone.Event .01 minutes later. MODELING 1) In the Server, select the new ProcessTye of Task Sequence. 2) Inside that TaskSequence select the ProcessType of ProcessName. Then pick a process name or take the auto-created one of Server1_TaskProcessName. 3) Edit Server1_TaskProcessName and add an Assign step and a Wait Step. The Assign step will assign two things, Server1WorkContentRemaining and Server1WorkContentRemaining.Rate. The Wait step will wait on Server1WorkDone.Event. The net of these three steps is that it converts Server1 from being strictly time-based to being event-based where the event is the fact that all of the required work is done. USAGE Well I started off by indicating that there are many aspects to this problem. Those other aspects are how to adjust the resources committed to Server1 based on what is happening elsewhere in the model. I am not addressing that here, so in my simple model I'll simply provide a couple buttons so you can increase and decrease the number of workers devoted to Server1 and see that it is indeed working as described. DynamicallyChangingWorkContent.spfx
-
Urgent! Model Cleaned? Please help!
dsturrock replied to antonio6vieira's topic in SI General Discussions
That is what we suspected the problem was. While it is our intent that models will always be able to move forward (e.g. loading a 120 model into 123), it is risky to move backwards (e.g. load a 123 model into 120). We have no way to change 120 after the fact to be compatible with 123 that was released perhaps 2 months later. If you simply load the model into 120 and it doesn't work, "no harm, no foul". But if you then save that model without a backup, you have then lost both models. We actually have a task scheduled for this sprint to make it very difficult for users to do this (giving a warning and forcing a "Save As"). So in the future it will be less likely to have this occur. But for now, all we can say is "I hope you have a recent backup". If you haven't already saved more than once, you might be able to go to MyModel.backup and find the 123 version of the model there. -
Vehicles Dropping-off at Entity-defined Destination
dsturrock replied to sswann's topic in SI General Discussions
It sounds like the problem is you are not using the internal state that Simio uses to hold the current destination. You have not attached your model or included any logic, but I would say you should consider eliminating your custom state ModelEntity.DropOff and use whatever logic you used to set that to instead set the internal state using the SetNode step or the Entity Destination Type option on any Transfer Node. If you use that, then it will automatically be dropped off at the specified destination node. -
The model your time ended was the "current time" at the end of the run, or simply TimeNow. If you want to force that value into the output data just put the expression TimeNow in an OutputStatistic element.
-
Storing information in an entity referred to a table
dsturrock replied to AGarcia's topic in SI General Discussions
Although it doesn't use data tables, perhaps the SimBit "VisitAllServersInAnyOrder" might give you some ideas. -
I would try running those exact parameters interactively. The animation or trace should give you a better idea where the problem occurs. If the problem is not obvious, you might also enable runtime profiling (Run ribbon > Advanced Options).
-
There is a very good reason, but probably not one you will like. Most computer computations (and all those in Simio) are done in binary, which is simply summarized as all numbers, even fractions, are specified as powers of 2. All integers and many fractions (like 1/8th or 15/32nds) can be exactly represented in binary, but many decimal numbers cannot. The number 0.3 is one such number - it is represented in binary as something like 0.299999999999999. When you represent numbers in double precision, as Simio does in most cases and then round it off to something most humans can relate to, it usually provides what humans expect to see. For example, if you display the above number rounded to say 8 significant digits, what you see is 3.0000000. When these numbers are used in calculations, particularly when compared to integers you can get unexpected results. For example, depending on the exact circumstances, the expression "10 * 0.3 == 3" is likely to evaluate as false because it is not comparing the rounded numbers -- it may be comparing 2.999999999999999 to 3, which of course is false. This problem is not in any way unique to Simio, it is found in most programs which manipulate decimals. In fact it occurs less in Simio because of the use of double precision. A natural question may be, "How do banks deal with this?" In fact a common scam from decades ago was to collect such round off and funnel it into someone's pocket. It may sound small, but a few billion fractional cents can start to turn into real money. So they came up with a way of representing decimal numbers that does not have this representation or round off problem. Unfortunately this procedure is both big and slow and is not justified in most computationally intensive software like simulation. So we must live with it. The bottom line: don't depend on a decimal number to be exact especially when compared to an integer.
-
It sounds like you are working quite hard to bypass and workaround the behavior that is built-in to the Standard Library objects. Do you need the Server at all? Why not just use a single Node approach like in the TransferLine SimBit? You can design the node process logic to do anything you want - no more, no less.
-
If you are looking for a reason to justify attending the next Winter Simulation Conference (WSC) in Huntington Beach, CA, this could be it. It's not too late. All you need is a 2 page paper. But the deadline is soon - Monday August 17th. WSC is a great conference - time to network, learn new technologies and approaches, see all the vendors, and hang out on the beach (oops, did I say that out loud?). I hope to see you there!
-
There are many ways to do this depending on your specific model objectives/constraints. If Server 1-2-3 and sequential and servers 4-5-6 are sequential the source output node can select by link weight which series to go to. If all of these servers are on a network (randomly accessed), then you might want to use a couple Sequences (e.g. Seq1 & Seq2). You can easily specify different entity instances that follow the different sequences. Refer to the series of four SimBits named EntityFollowsSequence... If you want to do it with a single entity instance, you can go into process logic after it is created and use the SetRow step to assign the desired sequence.
-
Perhaps the attached model (a modified SimBit) will help. VehicleFixedRoute4Vehicles.spfx
-
While I'm sure you could do this using vehicles, it sounds like whet you described might be modeled easier by simply having two types of entities: Buses and Passengers. Use the Combiner to let buses pickup passengers and the separator to drop off passengers.
-
I don't see the problem that you are talking about, but in general it sounds like the problem is that the first vehicle that arrives blocks the node while it is unloading or loading. That problem is resolved by specifying Park to Load/Unload as True. This causes the vehicle to park off the network, not blocking the node, and letting the other vehicle also access the node.
-
In the attached model I have the first worker working at server1 for 5 minutes, then idle. The second worker starts working at server2 at time 1, but immediately also requests help from the first worker. As soon as he gets that help the remainder of the job goes twice as fast. This was implemented using model states for expediency, but if I did it "for real" I would probably imbed the logic in a custom server.IncrementalWorkerAllocation.spfx
-
Generating and completing specific production orders
dsturrock replied to larsee's topic in SI General Discussions
I think the 3 new SimBits introduced in 7.124 might be helpful. TaskSequenceAndWorker.spfx - This project includes two models that demonstrate use of the task sequence features to execute a series of tasks from within a Server object. The first model, TaskSequeenceAndWorker_InServer, includes the data for the processing tasks specified within the Server itself. The second model, TaskSequeenceAndWorker_InTable, includes the data for the processing tasks within a table and references to the table within the Server. KeepingWorkerReserved.spfx - This model demonstrates the concept of ‘reserving’ a worker/vehicle for multiple tasks including transport tasks. These features were added in the past two sprints. In this model, a worker is required to move entities from the Source to a Server. The same worker is then required for processing tasks at the Server and then for movement to the next Server location. The ‘Keep Reserved If’ properties are used after transport and processing to continue to use the same worker for a given entity. AnimatingQueuesWithVehiclesAndWorkers.spfx – This model demonstrates two of the latest animation features for queues described above, including the Visibility Expression property and the Match Attached Animation Speed option. One portion of the model shows different priority entities in different queue locations on a vehicle, while the other portion of the model shows an animated entity walking with an animated worker. -
Yes, its not a property in the standard library objects, but you could make a custom object that has that property. Search for renege or look at the SimBit Remove From Allocation Queue for the technique.
-
Choose Start and End data of run
dsturrock replied to antonio6vieira's topic in SI General Discussions
I don't know much about using the API, but if you search the API help (Simio API Reference Guide.chm) you will find a StartingClockTime Property. It seems like this could be used to set the value, perhaps read from a file. -
Combiner - Matching based on multiple states
dsturrock replied to antonio6vieira's topic in SI General Discussions
Both member and parent have match expressions and each expression can have as many components as you want. But they must ultimately resolve to a single value. For example, you could match on a combination of priority and color. Assuming priority has a value of 1-5 and color has a value of 1-4, you could have a match expression like "Priority*10 + Color", so a green high priority (perhaps a value of 53) would only be matched with other green high priorities. To do more sophisticated matching than that you would probably need to use process logic. Perhaps put the members in a storage and use the seach to select the "best" items from that storage. -
It depends a lot on your objectives and desired level of detail. --Simplest: Bags are members, passengers are parents, they both show up at a Combiner object. --Better: I might model the carousel as a multi-stop circular conveyor and have entities representing bags come down the conveyer and entities representing customers come to the node to wait for their bags. I would attach an example, but we can only do so in the SI forums, not the public areas (due to spam attacks).
-
I have not modeled this situation before, but the technique you are suggesting is one good approach. Another approach to consider is to have your entities travel in free space using the Travel step. Then you could use functions DirectDistanceTo.Location(x, y, z) and DirectDistanceTo.Object(object) to make decisions. You might need to Search a collection of entities or otherwise keep track of which entity you are interested in.
-
The recommended approach might vary by what you are waiting for. For example if the plane is a Vehicle that will come to pick up the passengers, then the easiest approach is probably to have a Server with 0 processing time. Entities will flow through it with no delay, but then wait in the outbound transfer node for the Ride requested. If you want to wait on something more arbitrary you could direct the entity that enters an outbound transfer node to Wait for an event. Then you would have to add some logic to Fire that event (unless it is one that is already automatically fired). You should post your questions inside the Simio Insider forum where we can post screenshots and examples to provide a more complete answer.
-
Let's say your resources are named Shift1, Shift2, and Shift3. Go to Definitions > Lists and create a list of type Object containing those 3 resources. Then on your Seize step, seize from that list. Only the available (on shift) resources will be selected from that list.
-
Make sure that your Outbound Link Preference is set to Any. And if you are using selection rules based on server availability, make sure that the Input Buffer capacity is not set to Infinite. If neither of those solves the problem then I suggest you post a model so we can see what you are doing.