-
Posts
1,654 -
Joined
-
Last visited
-
Days Won
52
dsturrock last won the day on August 28 2024
dsturrock had the most liked content!
About dsturrock

Personal Information
-
First Name
David
-
Last Name
Sturrock
-
Company/University Name
Simio LLC
Converted
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
dsturrock's Achievements
-
Jonathan JRA started following dsturrock
-
Poojan Patel started following dsturrock
-
Raza Abbas started following dsturrock
-
Can servers share their primary resources?
dsturrock replied to freebelion's topic in SI General Discussions
Perhaps I am missing something, but I don't recall Simio ever being able to work as you described. We generally recommend making the server capacity Infinite, so it becomes irrelevant, then relying on a secondary resource to be the constraint. I think this approach will work fine for the case you describe. -
WarehouseD started following dsturrock
-
Before you start adding state variables to a library object, I suggest that you first familiarize yourself with all of the existing states. One easy way to do this is to instantiate the object (e.g., Worker1) and then go to any expression field and type "Worker." and look at the list. In the case of Worker, there are over 100 states, functions, and properties built-in to the Worker object. Another way is to subclass the Worker, then go to the Definitions tab of the MyWorker object and you can see all of the built-in definitions by category: There is a pretty good chance that what you need is already there. But if not, use the same screen illustrated above and add whatever state (or property, event, ...) that you need. As far as referencing or assigning that custom state or a built-in state, it is done using ObjectName.StateName. For example if you added a state named TimeStartedMove to MyWorker, and you wanted to assign that value, you might assign MyWorker.TimeStartedMove to TimeNow. The tricky part, especially with more complex objects like Workers, is to determine exactly when/how to assign that value. Sometimes you can interact with the model itself to insert an Assign at the correct location (let's say in the Loaded Add-on Process). Or sometimes you might need to override the process logic in your custom object. The SimBits RecordDistanceTraveled and ElectricVehicle are examples to review.
-
A simple approach is to create the highest resolution image you can find using any map program or other software. Save it off in one of the import formats: Hint: some software allows export as a high-resolution pdf. Then you can convert that pdf to a png file for import into Simio. Then import that as a symbol and place that in your model (preferably to its original scale). Then lock that to the background and build your model on top of it. The main down side of this approach is that it is limited by the resolution of your image, so if you zoom in, it might appear fuzzy.
- 1 reply
-
- visualization
- simio
-
(and 1 more)
Tagged with:
-
Assigning workers to specific servers by work day
dsturrock replied to esimiouser's topic in SI General Discussions
If you haven't already done so, I'd start by reviewing the SimBit ResourceSelectionConcepts. It contains several models that explain different types of resource selection. In particular, I'd suggest a combination of the following approaches: Create a table for each Worker (and/or each Server) where columns in the table represent the constraint or exclusions. For example, you might have a server table with columns for each day, and each column might contain a list of workers who can potentially be used on that day. Use resource lists to select from. possibly with exclusion conditions (maybe referring back to a table) of which resources cannot be used on that server and that day. -
milad_omar started following dsturrock
-
You want to make the servers have a Capacity Type of Schedule and follow the default Standard Week. If you don't want to give them a lunch break, just change the definition of the Standard Day. Leave the default Off Shift Rule of Suspend Processing. The easiest approach for arrivals is to have a Source with an Interarrival time of 4.33 weeks (or 4 weeks) and an integer random distribution for the Entities Per Arrival. Doing a "first Monday" is possible, but a bit complicated because Simio time does not have the concept of Month because months are of varying size. You could probably specify the initial Time Offset to be early in a month, then maybe make the interarrival time be something like DateTime.DaysInMonth(DateTime.Month(Timenow),DateTime.Year(TimeNow)) which would make the next arrival be exactly one month later (same day of the month). When you say you have no buffers, what do you mean? If an entity arrives when all servers are busy, should it be balked (possibly disposed) or should it wait somewhere like on the server input node, on a path or in the Source output node? If the above arrival approach isn't exact enough, you can put exact arrivals in a data table. The arrival time could be specified at any exact datetime you desire and still have the Entities Per Arrival be a distribution.
- 2 replies
-
- server
- work schedules
-
(and 2 more)
Tagged with:
-
Changing Sequence table over time
dsturrock replied to antonio6vieira's topic in SI General Discussions
Without seeing the model, I might guess that it is a timing issue - perhaps the SetRow is not executed before the results are used. You might be able to discern that by stepping through the model Trace and Watch window. -
Perhaps its a little late, but attached is a possible solution to your problem. This started out pretty simple. The problem was how to specify which server is serviced by which resource. One way to do that is a table. But since its changing over time I chose to use a time-indexed table, that is a table that knows about time and returns different data at different times. In this case, each row corresponds to 12 hours and each column specifies the resource needed by the respective server. As they say, "the devil is in the detail" and in this case the "devil" is that the specified resource may change between seize and release (e.g., seize at 11:59, release at 12:05). Simio doesn't like that and all the easy options re-evaluate the resource expression on release and so may try to release the wrong resource. One option would have been to create a custom server, but that seems to be overkill. Here is a somewhat simpler approach: 1) Add an entity state named MyResource and assign it at the last possible moment before use. This value will be used only for release. The assigned value is drawn from the table using an expression like Table1.S1Resource.TimeIndexedValue.Object. Note that the .timeindexedvalue indicates to get the value associated with the current time. And the .object at the end is used to tell Simio to return that value as an object not a number. 2) Use Secondary Resources - Other Resource Seizes to seize the name specified in the table using the same expression above Table1.S1Resource.TimeIndexedValue.Object. 3) Use Secondary Resources - Other Resource Releases to release the resource saved in MyResource. TimeBasedWorkerSelection.spfx
-
there are several easy ways to do this. 1) Subclass the Resource or Worker object with the only change is to add a property or state (ex PTime) to hold the processing time specific to that resource. 2) Put your process times in a table and reference the correct table row for the doctor that is working. The SimBit WorkerPoolWithEfficiency does something somewhat similar.
-
Responses not showing in few experiments
dsturrock replied to Toon's topic in SI General Discussions
I have seen this happen sometimes when there are no observations or when one or more of the observations generates an error or a NaN result. -
Changing Sequence table over time
dsturrock replied to antonio6vieira's topic in SI General Discussions
I have attached a simple model using model states to illustrate. I think it should work in a similar fashion using entity states. First, I define the states: Then use those states as Sequence destinations: Until you provide each of those states a value, the Sequence will make no sense and the entity won't know where to go. So on the Source I use an Assign to initialize all the values. This will direct the entity sequentially through Servers 1-4, and then to the Sink: Finally, just to illustrate the technique, on the output node of Server3, I interrupt the normal sequence by Assigning it to instead go to Server5 as its 4th step: If you convert these states to Entity states instead (I was just lazy), I think it should work the same but allow you to selectively override any Sequence Step at any time. UsingStatesInSequences.spfx -
This is problematic in Simio because Simio considers only entity length (not width) and only when on a Path or Conveyor. I think the first thing to do is fix the nose to tail problem. If you happen to use Conveyors to model this, there are built-in features to manage spacing while stopped and different spacing while moving. But unfortunately Conveyors are limited to a single direction, so are perhaps not appropriate if this is a bi-directional taxiway. If you are using Paths, you can fix this by making each plane longer when you draw it. For example, if you are drawing a plane that is 50M long and you want it to stay at least 10M behind the plane in front of it, place a nearly invisible dot about 10M in front of the plane's nose, making the total plane length (including safety spacing) be 60M. Although Simio will still put the entities nose to tail, there will be a 10M safety spacing between the physical planes. The problem of conflict at merge points is a bit more tedious to fix. I'd recommend a resource-based approach, like illustrated in the SimBit in Merging Conveyors Controlled by Gate. You can use this approach even when using Paths.
-
It sounds like you are already set up to use a Source with Arrival Mode of Arrival Time and the Arrival Time Property of MyTable.TimeOffset (assuming that your table above is named MyTable). If the column named Object in your table above is the entity type you want to create, then specify the EntityType in the source to MyTable.Object. If the entity you want to create is something different, then add that new column to your table (say PassengerType) and specify EntityType as MyTable.PassengerType.