Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


dsturrock last won the day on July 31

dsturrock had the most liked content!

Community Reputation

6 Neutral


About dsturrock

  • Rank
    Vice President of Operations 
  • Birthday September 29


Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. dsturrock

    Transfer Node, Transfer time

    Either in the Load Time property or the Loaded add-on process trigger of the object (let's say Worker1) you could add an expression something like this: (Worker1[1].CurrentNode==TransferNode1)* 5 to get a delay of 5 only when at that specific node.
  2. dsturrock

    Parent entity not behaving as expected

    If you want to repeat a sequence or move to any other step in the sequence, you need to use the SetRow step to set the current row in it's table to the step you want to execute.
  3. While I think all approaches mentioned above are good depending on the situation, I'll mention one more advanced approach, perhaps just for the educational value. While most people think of balking and reneging as a Server-type of option, it is actually implemented as a feature on every Station. So another approach, particularly if you encountered this situation a lot, might be to subclass the Server and change the properties of the Processing station to implement reneging on that station.
  4. dsturrock

    Table indices & search function

    I agree that this would be much easier in simple applications. But I expect that if you had large tables, relational tables, or any complex situations, you would want the options that are available on the Search or Find steps. The attached figure shows some of those options and how you would do a simple search. But as you said, this requires you to run a process which is clearly not as easy as an in-line function.
  5. There are several ways. One very efficient way to to simply hard code the row number for each object. So if Server7 happened to be a type of machine2 (in row 2) its process time expression could be machineProperties[2].ProcessingTime. A bit more difficult is to use a custom server (call it myServer) that has a myRow state. On initialization each myServer would search the table to find its row and store that in its myRow state. Then, its process time expression would be machineProperties[myRow].ProcessingTime.
  6. dsturrock

    Extras Library

    I just reposted what was previously there.
  7. Yes, right click on the scenario row that you want and select Copy this scenario's control values to the model
  8. dsturrock

    Machine Learning and Simio

    Simio does not have a specific machine learning feature, but many people still implement a form of machine learning in one of two ways: 1) Data-driven models, and particularly data-generated models, will improve their operation with better data. As you system runs, and the data improves, the model will automatically improve. 2) Particularly in scheduling applications - a model is never static. Every time your run a model and discover the possibility of creating a better solution (better schedule) you manually improve the built-in heuristics to it generates a better solution the next time.
  9. dsturrock

    Help a Noob Create Entities

    Use the Entities Per Arrival property on the Source
  10. dsturrock

    Fixed objects

    Right click on an object and select Lock Edits:
  11. dsturrock

    Moving Worker to a-priori unknown position

    Entities don't have a facility view , so they can't contain nodes, so they cannot themselves be a destination. --One option is that when the machine fails, have it move to a node to fail, and then have the worker go to that node to work on it. --Another possible approach is to model the machine as a node or a server. As long as there are no links to the node(s), you can use the RelocateObject user defined step to move the object around at runtime. Then you could move the worker through free space to get to the machine's current location.
  12. Actually you already can access the states and properties inside an object. For example, if I have a custom object named Dave1 that has a property named Spouse, it is fine to have a response named Dave1.Spouse. And you can do that with no knowledge ahead of time about how components of Dave will be used. To put a finer point on it, I think what you are asking is to be able to change the value of a property inside an object during initialization and to expose that as a control. Since you obviously don't want EVERY property in EVERY object exposed as controls, you need to have a way of specifying which properties should be exposed. I think the only way to do that now is to defined it as a referenced property in that object, and then pass a property value into that from the model.
  13. dsturrock

    Combine several entities in to one entity

    It's not appropriate for all situations, but the easiest way to solve this problem is to represent the component parts as Materials (an element) and define a Bill of Materials (BOM) that must be Consumed to create your new assembly. The big downside to this approach is the inability to animate the movement of the component materials. But if you can work around that limitation, this approach is MUCH easier.
  14. Since you are learning, I'll give you a nudge in the right direction, rather than providing the answer. Investigate Random.Discrete distribution Use a combiner to create a batch of burgers to be cooked together. The batch size must be specified in the parent. The batch of entities moves to the grill together. The cooking time is a function of the parent entity's batch size.
  15. dsturrock


    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.