Jump to content
Simio Forum


  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About gdrake

  • Rank
    Senior Application Engineer
  • Birthday February 10


Recent Profile Visitors

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

  1. This enhancement has been put in per your request. In the next sprint release, you'll see state variable assignment trace as follows: Assigning state variable 'X' the value 'Y'. Previous value was 'Z'.
  2. gdrake

    Error Releasing Resources

    This was a bug in the software that has now been fixed. The fix will be available in the posted Sprint 166 build. Once that build is available and you update your Simio software, then you will see the attached model 'AWModel v7.spfx' run to completion without any errors. Apology for any delay in your modeling efforts.
  3. gdrake

    Error Releasing Resources

    After taking a quick look at the attached model, this may be a bug in the software. Will have to investigate further and if is a bug then will make a fix. Will post again when have more information.
  4. You might try taking a look at the installed SimBit ' VehicleFleetManagement'. Although the simple problem illustrated in that example is somewhat different than your problem, it shows an alternative modeling technique whereby the destination management of vehicles is being controlled by external process logic rather than the default behavior of the vehicles themselves. So some external 'fleet management' controller logic is triggered whenever certain relevant events occur and tells a vehicle to go here, then there, then here, etc.
  5. gdrake

    Time varying appointment arrivals

    Add a 'NumberArrivals' data column to the data table that is defining the arrival schedule. For example, define your arrival schedule table like this: SomeArrivalTableName ArrivalTime NumberArrivals 8:00 am 5 8:30 am 5 9:00 am 10 9:30 am 8 etc. Then on the Source object, specify the Arrival Mode as 'Arrival Table'. Specify the Arrival Time Property as 'SomeArrivalTableName.ArrivalTime'. Specify the Arrival Events Per Time Slot as 'SomeArrivalTableName.NumberArrivals'. Note that you can also easily add columns in the data table as well for the Arrival Time Deviation and No-Show Probabilities, and then map those columns to the corresponding properties in the Source. For example, if the Arrival No-Show Probability actually differs depending on the day of week or period in the day.
  6. Note that, in Sprint 153 earlier this year, the following new work schedule functions were added: WorkSchedule.AverageValue(fromDateTime, toDateTime) WorkSchedule.MaximumValue(fromDateTime, toDateTime) WorkSchedule.MinimumValue(fromDateTime, toDateTime) Which may be useful for you getting the information that you want. For example, if a resource has a capacity of 1 or 0 following a work schedule named 'Schedule1', then the total working hours per the schedule over a specified time range would be 'Schedule1.AverageValue(fromDateTime, toDateTime)*(toDateTime-fromDateTime)'.
  7. gdrake

    Routing Logic Vehicle Initial Home

    You can dynamically assign the 'HomeNode' state variable of a vehicle or worker object (e.g., ASSIGN: Vehicle1[1].HomeNode = BasicNode1 or ASSIGN: Vehicle.HomeNode = BasicNode1 if the vehicle of interest is associated with the token executing the Assign step). The 'Initial Node (Home)' property is simply the initial value assigned to that node reference state variable of the vehicle or worker. I'll have the property description of that 'Initial Node' property updated to make sure to note the state variable that can be dynamically assigned to change the home node location.
  8. Aditya, The Vehicle has a Task Selection Strategy where you can select items using a SmallestPriority/LargestPriority/SmallestDistance/LargestDistance dynamic selection rule. We have a future feature enhancement on our backlog to expand the Vehicle dynamic selection rules so that you will have more choices (including custom user-coded dynamic selection rules if you choose to go that far) but at present those hard-coded choices are what we have. The Route/RoutingGroup constructs are more designed for entities choosing their next machine from a list of machine destination choices (as well as if entities are waiting for a destination to become available, a machine when it does become available choosing the next entity waiting in queue who can go to the machine). Those constructs are not really for a transporter dynamically selecting the next entity that they want to pick up, so I probably wouldn't recommend trying to go with that sort of approach. What you might do for now, to do your own custom searches by a Vehicle who is evaluating ride pickup requests in the system, is something roughly as follows: 1) Set the Vehicle's Transport Logic -> Task Selection Strategy to 'Largest Priority'. 2) Go to Add-On Processes -> Evaluating Transport Request for the Vehicle and add a custom process for that Add-On process that will be executed each time a Vehicle is evaluating whether it can accept a transport request. 3) Add a Global boolean variable named something like 'AssignedNextPickup'. 4) In the Evaluating Transport Request add-on process, if AssignedNextPickup == False then do a Search of the Global.VisitRequestQueue which is going to have a queue of all entities waiting for ride pickups in the system, to find the guy with the highest priority based on whatever rule that you want to use. The entity that you find/select using that Search, assign its Entity.Priority = Infinity. 5) In Evaluating Transport Request add-on process, if AssignedNextPickup == True (you've already done your search to assign the highest priority item, then you assign Token.ReturnValue = True (you accept the pickup request) if Entity.Priority==Infinity. 6) In Add-On Processes -> Loaded, add a process that assigns AssignedNextPickup = False and Entity.Priority = 1.0 (not infinity) to clear things for the next possible evaluation. Something like above I think might do the trick. Sorry for any inconvenience. As I said, we are hoping to relatively soon have more flexible dynamic selection rules so you don't have to do such extra modeling work such as above.
  9. Adam, just a note that for a task sequence, based on your feedback on the Forum we have prioritized an enhancement that will allow you to use either the sequence numbering scheme that we currently support or an 'Immediate Predecessors' field to define task precedence. For your network diagrams, seems like you will be more comfortable going with the Immediate Predecessors field approach and for each task just listing out the predecessor numbers.
  10. gdrake

    I don't understand task sequences

    Adam, just a note that for a task sequence, based on your feedback on the Forum we have prioritized an enhancement that will allow you to use either the sequence numbering scheme that we currently support or an 'Immediate Predecessors' field to define task precedence. For your network diagrams, seems like you will be more comfortable going with the Immediate Predecessors field approach and for each task just listing out the predecessor numbers.
  11. gdrake


    Go to the entity instance placed in the model and check the Population -> Initial Number In System property. Sounds like that property probably has a value of '1'. So that 1 entity is being initially created and then your Create step is creating 5 more.
  12. gdrake

    Timepath and Activity element?

    The Operation & Activity constructs are only supported for entities located inside a fixed processing location such as an object modeling a 'Workstation'. While an entity is traveling on a TimePath, you can execute some process (using an Execute step) or a task sequence (using Task Sequences and StartTasks step).
  13. gdrake

    I don't understand task sequences

    Adam, yep, the sequence numbers that Glen posted above will do that second flow diagram that you mentioned. Task1 = 10 'Task1' must be finished first before any other task may be started because its primary number of '10' is smaller than any other primary number in the sequence. Task2 = 20.1.1 Task3 = 20.1.2 Task4 = 20.2 Once 'Task1' is finished, you can start all of the tasks with primary numbers of '20' in parallel. Task5 = 30.1.1 You can start 'Task5' once 'Task2' is finished, because it is a higher operation number of '30' that is on the same exact task substream. In other words you can do a 30.1.1 after 20.1.1 is finished. Task6 = 30.1 You can start 'Task6' once 'Task2' and 'Task3' are finished. Because then you will have finished all the tasks with sequence numbers starting with '20.1' (finished all tasks with lower primary numbers that are part of the 'XX.1' substream including any nested substreams). Task7 = 40 This task has the highest primary number so can be started once all other tasks have finished. ---- As I said in my first post, the task sequencing number scheme that we provide is very flexible and should be able to handle any flow diagram that you come up with. And the approach is particularly friendly if tasks are being defined using a table data approach. Some time down the road, hopefully we'll get a chance to provide a visual flow chart editor that just auto-enters task sequence numbers in for you. Until then, once you get the hang of how the numbering scheme works with a few examples, hopefully not too difficult to pick up. I think the basic rules of the task sequence numbering scheme are also described in the help documentation.
  14. gdrake

    I don't understand task sequences

    Here is a sequence numbering scheme to do the above task flow chart that you pasted. the task sequence numbering scheme that we support is very flexible and very friendly for defining a task sequence in a data table, and you can do as many nested task substreams as you like, but I agree that it can take a moment for how the numbering scheme works to click. At some point, agree it will be nice if we can provide a visual drawing tool to draw the sequence and the sequence numbers are entered automatically. But hopefully once you understand how to number your first flow diagram above, then won't be too difficult to do any of your other task flow charts that you have. Task1 = 10 Task2 = 20.1 Task3 = 20.2 Task4 = 20.3 The above says do Task1 first, then do Task2 (task substream '1'), Task3 (task substream '2'), and Task4 (task substream '3') in parallel. Task5 = 30.1.1 Task6 = 30.1.2 That says to do Task5 and Task6 when Task2 is finished. Basically, to do a nested task substream, a task numbered 30.1.2 is saying 'nested task substream '2' of task substream '1'). Task7 = 40 (you won't do this task until all tasks are finished - is the last task)
  15. 1) Add a state variable to you model that is the switch control variable. For example, add an integer state variable named 'MySwitchControlVar'. 2) Specify the variable that you created as the Switch Control Variable on the Flow Node. 3) On each of the possible outbound links that can be chosen, in the Selection Weight expression for the link enter an expression like 'MySwitchControlVar==1' which would say for that particular outbound link, send flow to that link if the switch control variable has a value of '1'. 4) Add your own state assignment logic to assign that switch control variable a new value whenever you want to 'switch over' to sending flow to a different outbound link from the flow node. There may be a SimBit (a small example) installed with Simio that illustrates the approach. The description text of the Switch Control Variable property also provides some of the same information that I provided above.