Jump to content

gocken

Members
  • Posts

    369
  • Joined

  • Last visited

  • Days Won

    32

Posts posted by gocken

  1. Jeff's solution is elegant and enough. Still, I liked the way you handled the problem via processes. You need not to define Stopcreatingentities event to fire. I revised your logic and attached its revised form as a png file (can not saved my changes due to having a different version of simio). 

  2. To the best of my knowledge, optquest has no capability of optimizing string or boolen type controls. In the case of automatic optimization (which you want) it does not work! (i.e., It works automatically with only numerical values.). I do not understand why it can not but this is the way it optimizes so far. If you want to optimize string type controls you have to code your optimization routines (i.e., usually via metaheuristics) and integrate them with simio. For this to happen you should be somewhat an advanced user. If not you should ask for further help. 

  3. Subclass a transfer node then define two properties: LoadTime and UnloadTime. Then use these subclassed nodes in your model and set the values of LoadTime and UnloadTime properties appropriately for each subclassed transfer nodes. Also, define two properties on modelentity: you can name them as LoadTime and UnloadTime.

    Then, define an entered add-on process for each subclassed transfer nodes where you should assign ModelEntity.LoadTime=LoadTime and ModelEntity.UnloadTime=UnloadTime. Now, by setting loadtime and unloadtime properties of crane object as ModelEntity.UnloadTime and ModelEntity.LoadTime you can get different times for load and unload times at different points.   

  4. If arrival rates at sources and processing rates at servers are all same there should not be any difference between these two systems.

    Check 1) Are the processing times of all server objects are same? 2) Are the interarrival times of source objects all same? the conveyor speeds does not affect the queue length. It does affect only finishing time of processing parts. 

  5. from exponential distribution you can get varying numbers in a very very wide range (for example, if you are using exponential distribution for generating interarrival times in one draw (random number generation) you can get 1 (say hour) and in another draw you can get 100 hours). The authors emphasizes that this situation can cause improper results in simulations due to discrete event simulation time advancement mechanism.

    Assume that you have periods each length is 20 hours. Note that, in discrete event simulation, i.e., the first event plans the next event. So, assume that in the first  period (within the first 20 hour) the first event will be created at exactly time 1 (hour) (say an arrival event). After its creation, this entity plans the next arrival (thus an interarrival time will be generated from an exponential dist), i.e., the second entity will arrive to the system at time 101 (hour, 1+100). this means that you will have only one arrival in the first period and no arrivals in 2th,3th,4th and 5th periods.
    the authors says that this is an inconvenience and arrival should be planned in each period, seperately. By this way, in each period you will have at least one arrival. For this to happen you can use rate tables.  

  6. These are extra works. Note that in the last figure we seize the worker as the secondary resource before processing. This is enough for your purposes. Thus, the processes you defined are not necessary for now. Defining a worker as a secondary resource before processing means that whenever a batching process is to be done a worker is required for this to happen (The worker will be seized before the processing for executing the batching.), i.e., if the worker is not available the batching can not begin. 

  7. 1) The model seems working as you intended. The animation seems the logic is not working but in fact the animation is delayed (in the animation the modelentity is at output node of server2 i.e., seems behind the scheule but if you examine trace window the modelentity is just at combiner memberinput buffer.) 

    2) I think the process logics are not required if you will not use them for further modeling purposes. I mean If you set appropriate parent match expression and member match expression at combiner1 object, the object itself will combine them automatically (it will perform all the operations you performed in your processes). Try not to use them?

  8. It seems that you can employ the same logic by using combiner (named picking) and seperator (name it as filling, I have forgotten) objects from standard library. This simplifies your model development efforts. Since using a different version I can not save the model I developed. But, attached some screenshots as a guidline. 

    model(1) facility view_processes.PNG

    model(1) facility view_picking_outputNode.PNG

    model(1) facility view_picking.PNG

  9. why do you use source? In Workstation 1_exited step you can just increase the currentrownumber by one using an assign step and use a create step just after this assign step, set its properties using any table (and also currentrownumber state variable). and transfer this entity to the appropriate place. you do not need to use source step?

    • Like 1
  10. 1) You can find what the save index value means by trial and error. Assign this value to a state variable and place a breakpoint onto the search step. Then, when simulation stops at that breakpoint check the state variable's value. 

    2) you can use match conditons sequential by using "&&" and "||" mathematical operators. For example,

    a) match condition with "&&": candidate.modelentity.color="red"&& candidate.modelentity.timecreated<500. The search step will found a modelentity when the expression written for match condition evaluated to "true". Fot match condition to be "true" both conditions have to be "true" (the value of candidate.modelentity.color="red" must equal to 1 and the value of candidate.modelentity.timecreated<500 must equal to 1). If not then the match condition will be "false". The search step can not found any modelentity.

    b) match condition with "||": candidate.modelentity.color="red"|| candidate.modelentity.timecreated<500. The search step will found a modelentity when the expression written for match condition evaluated to "true". Fot match condition to be "true" one of the conditions have to be "true" (the value of candidate.modelentity.color="red" must equal to 1 OR the value of candidate.modelentity.timecreated<500 must equal to 1). If not then the match condition will be "false". The search step can not found any modelentity.

    • Like 1
  11. you can use a search step in an appropriate process (you can create a new process or use an add-on process where needed). In the search step you should search the queustate of modelentity.batchmember. Here you can set a match condition if required. If you do not want to set a match condition the search step will search the first 9 entities in the batch (I assume that the batch quantity is 30. If it is a different value Math.Ceiling(Combiner.BatchQuantity*0.3) expression will be evaluated and will be round up the next integer. (You can use math.floor function as well.) Then in the assign step set the required statevariable of modelentity to the new value. 

    Assign different states to members of a batch.PNG

    • Thanks 1
×
×
  • Create New...