Jump to content

dsturrock

Simio Employee
  • Posts

    1,654
  • Joined

  • Last visited

  • Days Won

    53

Posts posted by dsturrock

  1. TransferNode does have statistics tracking, but you need to turn in on (General Category). The TransferNode itself doesn't really have any built-in place to wait (no station), so I sometimes recommend using a Server with a 0 processing time to provide a waiting area.

  2. Unfortunately not.

    You can adopt a naming convention and meaningful names that make them easier to understand, like:

    int_FinishedPartsCounter

    real_ElapsedTime

    bool_CompletedPhase1


    If you have just a single ModelEntity object that is fulfilling multiple purposes and thus requiring so many states, perhaps you might create multiple objects and have fewer states on each object.

    For example you might have a Parts object that has only the states necessary for parts and a Employee object that has only the states necessary for employees.

  3. I believe that when each parent arrives to a combiner, Simio evaluates the Batch Quantity expression in the context of that parent entity. So if your taxi entity has a state name Qty and your Batch Quantity expression was ModelEntity.Qty, then the first taxi might have a value of 3 and the second taxi might have a value of 1.

    You could assign the value of that state at any time and look at it from elsewhere as well.

  4. I would add a process something like this to determine which entities have waited too long and Tally them:

    Then execute that process at the point you want to record it, something like this:

    Then an expression like LongWaitEntities.NumberObservations would give you the number of observations in that Tally.

    You will also see a TallyStatistic that provides the average value of the observations:

    I was having problems uploading multiple pictures so here is a composite, but out of order:

    Capture.thumb.PNG.d5da87d6d06617732fdfeb9fcc51c6b3.PNG

  5. As I downloaded the model it had an error in the RankingRuleExpression of Cashier 1. This field requires a number and you were giving it an entity type. Instead:

    --Set priority of OTCustomer to be 1 and set priority of Prescription customers to 2.

    --Set this ranking rule as Smallest Value First with the expression "Entity.priority".

    Now, whenever both types of entities are waiting, the OTC will be selected first.


    To select from the set of cashiers,

    --Create a Node List named Cashiers (graphically or in Definitions tab) containing Input@Cashier7, 6, ...Input@Cashier1. The order matters.

    --For your WaitingArea node select:

    ----EntityDestination: SelectFromList

    ----NodeListName: Cashiers

    ----SelectionGoal: Preferred Order (or experiment with other rules)

    ----SelectionCondition: Candidate.Node.AssociatedObject.Name=="Cashier1" || Entity.Priority==2

    The first 3 properties above force all entities to individually select a cashier, starting from bottom to top (selecting Cashier1 only if no others are available). The SelectionCondition says Any entity can select Cashier1 or priority 2 entities can select any cashier.


    The BlockedDestinationRule of Select Available Only forces entities to wait at that Waiting_Area node until a Cashier is available. Unfortunately node doesn't have a way of displaying entities that are waiting. If you want to display and control entities I recommend replacing that node with a Server with 0 process time. This is an easy way to provide an output node with a station where entities can wait. Without changing it to a server, entities will wait on the incoming path. Change the AllowPassing option to False on both those paths to see the entities waiting there.


    This doesn't solve all your problems but it should give you a good start while not taking away your opportunity to learn (why I gave you instructions instead of a model :lol: )

  6. That sounds like you are doing a deterministic simulation.


    Depending on the form of your data you would need probably a single data file with columns something like:

    EntityType (you only need this if you have different types of entities)

    ArrivalTime - an exact time , either elapsed hours starting at 0 or an exact date-time

    MyServer (or Server Group) - Ideally this would be in the input node for the server (.e.g. Input@Server1) but if you have other forms you can make that work as well.

    ProcessingTime - a time (with units specified)


    --On the Source you would use Arrival Mode of Arrival Table, and specify Arrival Time Property as "MyTable.ArrivalTime".

    --If you have MyServer in the form of an input node, then in the output node of the source you would specify Specific Destination of "MyTable.MyServer". If you have it in another format, you might instead use selection weight on each path (e.g. if you just had an integer server number you might use "MyTable.MyServer==1" on the first path selection weight)

    --On the servers, set the Processing Time as "MyTable.ProcessingTime"


    That is the basics of how you might approach this problem.


    But I do have to question why you are doing a deterministic simulation. While deterministic analysis is useful for scheduling and validation, that approach is rarely appropriate in typical design models. You might reconsider if that approach is correct.

  7. I think we need some additional information.


    When you say you have "real data" do you mean that you have samples of processing time? If so, from that you would normally fit a distribution our use a table-based Input Parameter to draw from.


    You say that Servers 1-4 are identical and Servers 5-7 are identical. It might be easiest to model that as ServerA of capacity 4 and ServerB of capacity 3.


    Depending on what data you want to have in the table, it could be seven separate tables, or two tables (for the groups of servers) or most likely just one table with a row for each group of servers.


    You need to more clearly state your objectives and what you want to control, but it sounds like you will want to put some type of selection rule at the source output (to see where the entity goes next). Depending on your system and objectives you might want to have a custom routing group used at the output node of each server to determine which entity is selected next for server8.

  8. Nothing in any simulation product is truly random - it is pseudo-random, or "predictively random". I know that's an oxymoron, but you want results to appear random, but still be predictable. And the RandomRow function behaves that same way.

    Every time you run replication #1 in Simio it will generate identical results, but replications 2, 3, ..., n will each be different. The interactive view always uses replication 1. That's part of the reason its important to run experiments with a suitable number of replications.

  9. Your original problem stated:

    I have a data table with 900 total entities, comprised of 10 different types of entities.

    I am trying to randomize which entities go through the model, but I need all 900 to go through. I've tried the "entity mix" technique, but it always overloads my model with too many entities.

    It seems the best and simplest approach is illustrated in SimBit SelectEntityTypeFromTable . Your table would have 10 rows, one for each entity type. You would add a 2nd column to hold the weight or frequency of selection for each entity type. Set your MaximumArrival on the source to 900 to avoid any overload.

  10. First of all, if every driver is locked to a specific car, and vice-versa, then it seems like too much detail to model both. What not model only the cars or only the drivers?


    But if you need to do this I might suggest having the car and required driver in a table, the have a custom car that each time before it starts a move, its driver (read from the table) is seized, and then released after the move.

  11. Your user-defined Tallies were not generating accurate results because you did not specify units of time on the statistic definition.


    I did not do a thorough review, but what I checked seemed reasonable to me. The waiting time should be the sum of processing time + freespace travel time + waiting for server/resource time.


    The 2 experiments you had both illustrated constrained resources with lots of waiting time. When I added a 3rd scenario with high resource capacities (99 each) the TIS statistics were in the range I would expect.

  12. Most simulations are "push" -- as soon as a part is done, it pushes on to the next server where it waits for processing. It sounds like here you are looking for a "pull" system -- each part remains where it is at until it is pulled forward to the next server.


    There are several ways to implement a push system - detailed process logic is probably the most difficult. A better choice is generally to use a resource or event to control the timing. Exactly where parts wait can have a significant effect on the logic required. For example should the part be blocking its current server? wait in its output buffer? wait somewhere else? When you have parts waiting in multiple areas it gets a bit more complicated.


    --SimBit CONWIP is not exactly what you are looking to do, but it does illustrate how to use events to implement a pull system.

    --SimBit OverflowWIP illustrates using resources to pull appropriate parts from one of two locations to one of two locations, as needed.

    --Because you have parts waiting in multiple areas to go to multiple areas, you might want to use a slightly more advanced feature named CustomRoutingGroups. There is a SimBit of the same name. Esentially you will create a RoutingGroup (an element) to define what choices an entity can consider, ranking, and the conditions under which it moves forward. Then for each related node (like the two enfriados outputnodes, you specify EntityDestination to be that custom routing group. One key is to make sure you use the Blocked Destination Rule of Select Available Only -- this forces the entity to wait at the node until it is "pulled" forward to an available server or queue location.


    For any of these approaches I suggest you read up on it in help or a textbook, then review the SimBit.

    Happy modeling!

  13. Yes, I'd study these SimBits (in order, each builds on the previous):

    EntityFollowsSequence - Single entity type

    EntityFollowsSequenceMultiple - Multiple entity types

    EntityFollowsSequenceWithTable - Entity’s job table refers to its sequence data

    EntityFollowsSequenceWithRelationalTables - Sequences using relational data tables

  14. Yes. You probably want to consider "Cutting" as a separate resource, not the server itself.

    There are several ways to model that.


    1) Use Task Sequences and model the activity as a series of tasks:

    -Move to location

    -Cut (using resource)

    -Move to location

    -Cut (using resource)

    (repeat as necessary, possibly even specified in a data table


    2) Do something similar within process logic:

    -Delay for move

    -Seize Cut

    -Delay for cut

    -Release cut

    (repeat as necessary)

×
×
  • Create New...