Jump to content

dsturrock

Administrator
  • Posts

    1,652
  • Joined

  • Last visited

  • Days Won

    51

Everything posted by dsturrock

  1. Sure. In a normal table using RandomRow or in an Arrivals table you can have a column representing the number of arrivals for that row. You could then reference that table row in the Entities Per Arrival property on Source.
  2. "RandomRow" function addresses "The entities are generated following ratio" "RegeneratingCombiner" SimBit shows you how to do "generated when the process of workstation is finished." For number 1, you can use the options in the Routing Logic section of a node. To make decisions based on selection logic you can specify the base information in the Advanced Options section of Server. You can use this information in the Server Dynamic Selection Rule > Standard Dispatching Rules, (I can't attach examples because this is in the public folder instead of the SI folders)
  3. Search help for "RandomRow" function. Perhaps also look at "RegeneratingCombiner" SimBit.
  4. I think the HourlyStatistics SimBit will provide the approach you need.
  5. I think "Worker1.RideStation.Contents.ItemAtIndex( index ).ModelEntity.Priority > 5" should work fine as long as index is a valid integer. You could use that expression in a process loop or a Math.If() expression. But as soon as you start indexing through a series of those, perhaps the Search would work better.
  6. To start with, if you place the default worker, you will see a green line between his hands - that is the ride station (e.g. the queue state animating the contents of the station where entities ride). If you click on that line in the properties window you will see it identified (in the context of the worker). You can cut and paste that, or simply retype it into the search field. It would look like Worker1.RideStation.Contents where Worker1 is the instance name of the object you placed. In Simio pull down lists, not every possible option is always listed. You can try typing something you think should be acceptable and Simio will tell you if it is not. Looking back a couple posts, I see what you actually wanted to do was decide something based on a state of the riding entity. If you only have a single entity or you are only interested in the first entity, then there is a much simpler way than using Search - just use dot notation to navigate the object hierarchy from the worker to its station to its first entity to its state. For example to decide based on priority > 5, on the condition field of a Decide you might use: Worker1.RideStation.Contents.FirstItem.ModelEntity.Priority > 5
  7. Your 1st question requires a bit of careful logic to select from a varying availability of resources. But once you get them you can use an expression like this for your processing time if its linear: NominalProcessingTime/ModelEntity.SeizedResources.NumberItems Or if its non-linear something like this: Math.If(ModelEntity.SeizedResources.NumberItems==1, 10.0, ModelEntity.SeizedResources.NumberItems==2, 6.5, ModelEntity.SeizedResources.NumberItems==3, 4.2, 2.8 ) Here's an example, but it was created in 8.145 so it may not work correctly until we post 8.145 (soon).SeizeMultipleFromAListOfWorkers.spfx For your second question this seems like a perfect application of a simple TaskSequences inside Server. You would specify 2 parallel (potentially concurrent) tasks, each selecting from the same resource list. If only 1 resource is available, the tasks will get done sequentially, but if more than 1 is available they will be done concurrently.
  8. One option is to look at the HourlyStatistics SimBit. This provides a general approach for collecting any statistic in any time periods. You can also do something somewhat similar using TallyStatistics that are specified in a Time Indexed Table. For a single replication with any use of TallyStatistics, you can also Enable Interactive Logging (on Advanced Options) to see the individual tally observations. The ultimate is to use the Write or ExcelWrite step to record any information at any time. For example each time you want to record the value of an expression or state, you might write out ReplicationNumber, TimeNow, ExpressionValue, (and anything else that might be of value).
  9. You will need to subclass the Worker object. One easy way to do this is right-click on the Worker object in the library. Select Subclass and you will see MyWorker appear in your project window. It's very easy to add a state. Its fairly easy to add extra processes. But I would be careful if you decide to insert or replace steps inside the existing processes because some of that logic is subtle and tricky. If you do make any such changes I recommend applying a color to every step changed to make it easier to maintain.
  10. We are considering adding this feature, but full relational tables add some complexity to it. One possibility is that when you copy an entity (for example using a Separator), by default it copies its states, including its table references, to the new entity. Another possible work-around is to add an integer column to the table, perhaps called something like MyRow. When you populate the table, put a monotonically increasing number in each cell (e.g. row 1 gets a 1, row 2 gets a 2, ...). Then at anytime you can reference MyTable.MyRow to get its current row number.
  11. Please note that to do exactly what you request, doesn't even require you to define a new state because there is already a predefined state named Priority that is inherited from the base Entity (expand the Inherited states in that same place illustrated below): And likewise, the default for queuing on a LVF or HVF already uses that state: If you want to assign a random value to Priority, use the State Assignments on Source (or any other object) something like this:
  12. You are describing use of a feature that is only available in Simio Enterprise Edition.
  13. At the end of the run you can open up the watch window and everything you need should be available there. You can select all objects you want to display (click, ctrl-click,...) then right-click and select Watch. TIP: If you have a large model and want to select all objects of a given type, you can open up the Properties Window (either on Project Home ribbon or right click on an object), display all the objects of that type, and hit Ctrl-A to select them all. Then right-click in facility window on any one selected and select Watch.
  14. Can you include your model (and version #) to make it easier for someone to help?
  15. Perhaps in the vehicle's unload add-on process you could have each entity check to see if it is the last entity. If so, perhaps it could Seize that vehicle (which would take effect as soon as the vehicle goes idle). Then as each entity completes the process, it could release any vehicle it has seized (of course only the last entity off would have anything to release). At that point the vehicle would again be idle and available for other work.
  16. We have just created an Elevator Library which is comprised of three objects: an Elevator, Elevator Node, and Elevator Selector Node. The Elevator is a transporter that moves up and down in the vertical direction and picks up and drops off entities at its associated Elevator Nodes. Each Elevator Node references its associated Elevator, and each Elevator has a list of associated Elevator Nodes that it can visit. When modeling a bank of two or more elevators an Elevator Selector Node may be used at each elevator level (floor) to route arriving entities to the appropriate elevator. This has been replaced by the Extras Library.
  17. If you want statistics on that, it (or something similar) is already recorded in the TimeInSystem statistic on the sink. But to get exactly what you asked, in the Entered Add-on Process on the Sink use the Write step found in the User Defined steps. You can write out anything you want about the system and the entity about to be destroyed, to a file of your choice.
  18. Assuming that your entities are already associated with that row, then you already have a way for each entity to use that identity. For example you could have an attached label using the expression TableName.TwiggPN. If you wanted to make it even more obvious, you could create a string state on the entity and assign it that same value on creation. Or, if you wanted to could create 35 different entity types and change that column to be of type entity. But in this case your string is not a valid symbol name so you would have to remove the spaces and add a leading character.
  19. People often want to model two or more vehicles or entities moving together. There are a few components to this: 1) Seizing the resource appropriately - can be done in processes, but often best done within the vehicle object to make the modeling easier. Here, a vehicle has 4 properties added to support use of an operator. 2) Animating them moving together - the picture below shows use of a second queue animated on the custom vehicle. 3) In some cases, you also need the "driver" to be shown moving. The Attached Animation Speed illustrated below, accomplishes that. I have attached a model that uses a custom vehicle object to model a wheelchair which is "driven" (pushed) by a person to pick up a patient. *********** FOR VERSION 190 AND EARLIER ************************************* VehicleWithDriver.spfx You could use the same approch, possibly with just animation changes, to model something like a truck or forklift that requires a driver. In fact, I just added a second model to that same project that illustrates use in manufacturing (e.g. a lift truck and driver).VehicleWithDriver.spfx VehicleWithDriver.spfx *********************************************************************************** ************** FOR VERSION 191 AND LATER *********************************** VehicleX3.spfx VehicleWithDriver_VehicleX3_Examples.spfx For more information on the update, see the post below. ***********************************************************************************
  20. We have never encountered that problem among our staff, but I discussed it with a developer and your guess is a good possibility. Currently the undo history is both comprehensive and unlimited. For example, if you import a data table it probably keeps a copy of the old one to support undo. Things like that could use up a lot of memory. If this is reproducible for you, you can do an easy test. Wait until you start having the problem and then do something that clears the undo buffer. I don't recall all the things that clear undo, but I think loading OptQuest is one. Closing and reopening the project (not Simio itself) is another. If this really is the cause of the problem, then we could probably add a feature to optionally limit the size of the undo buffer.
  21. Since you are a student, I am trying to guide you in the right direction to help you learn, rather than just giving you a model with the solution. I believe I have given you plenty of tips to help you solve this problem. I think you should consider carefully the advice I have provided, review appropriate help topics if necessary, and if you still don't understand something, ask specific questions.
  22. The good news is that we still have that model and it still works. The bad news is that we (Simio) did not create this model and I'm not sure if we have permission to distribute it. And unfortunately, I personally don't recall who shared that model with us.Perhaps the organization that created Opencast Mining Example will volunteer to share that model or even their latest work.
  23. Try the RelocateObject step (found under User Defined Steps). You can use this in some situations, but it doesn't work in all situations - notably if there are any links involved. So it can only be used with Free Space movement. New RelocateObject Step Within the User Defined steps, we have added a RelocateObject step. This step may be used to instantaneously change the location of an object, including fixed objects and unconnected nodes, at runtime. When relocating or moving a fixed object, such as a Server or Workstation, the Include Associated Nodes property set to 'True' will move the object location (and animation) as well as nodes that are attached to the object. Note that attempting to change the location of a Link or a Node with attached Links will result in a runtime error.
×
×
  • Create New...