IEE 475: Arena Tips - Use Hold to Adjust Where Entities Queue with Multiple Serial Processes (Pull)

Поділитися
Вставка
  • Опубліковано 19 вер 2024
  • When simulating multiple queues in series, the physical constraints of the real system may make it unrealistic for the downstream queue to have a large number of entities waiting at it. To mimic that case in Arena, it is possible to use a "Hold" module in front of an upstream process that will not allow entities to pass unless appropriate conditions are met on the downstream queues.
    As an example, in a simulation of an airport, the metal detector may be a bottleneck in the system, but the queue in front of the relatively fast-working document checker will actually be the longest in the system. In a simulated airport, placing a "Hold" module just before the document checker can replicate this phenomenon. This video demonstrates how that is done.
    NOTE: There are alternative ways to accomplish "Pull" logic control flows in Arena. Those interested in a way to do this WITHOUT signals and holds should go to "File, Browse SMARTS, Control Logic, Control Logic Pull System" in Arena.
    This video was built by Theodore P. Pavlic as part of IEE 475 (Simulating Stochastic Systems) at Arizona State University.

КОМЕНТАРІ • 28

  • @light1421
    @light1421 3 роки тому +3

    THANK YOU THANK YOU THANK YOU SOOOO MUCH, sorry for caps im so very thankful i found your video i hope you have a very very nice life you are a life saver

  • @joshuaerkman1444
    @joshuaerkman1444 4 роки тому +2

    Awesome Video! So useful to add lean and pull logic to a simulation.

  • @LucaBattistini-wl7vc
    @LucaBattistini-wl7vc 4 місяці тому

    Thanks. Greetings from Brasil.

  • @ANKUSHSHARMA-jo8gn
    @ANKUSHSHARMA-jo8gn 4 роки тому

    Thank you so much, Saved my project 😄😄😄

  • @Lpfmvpsug
    @Lpfmvpsug 2 роки тому +1

    Thanks mate!

  • @mariyamashraf5199
    @mariyamashraf5199 3 роки тому +1

    Great info thanks !!

  • @mingchuanwang5912
    @mingchuanwang5912 7 місяців тому

    Hello,Thank you for your explanation and I have a problem-could you please show me how to set Process 1 and Process 2 circulate for 10 times and then comes to Dispose 1? Best wishes!

    • @TedPavlic
      @TedPavlic  Місяць тому

      You could add an "Attribute" block that increases an attribute (that is initially set to 0) on any entity that goes through it. When that attribute reaches 10, a decide block could eject the entity from the cycle. Something like this would ensure that every entity that enters the cycle will go through it 10 times. This really has very little to do with the point of this video though (the pull logic).

  • @marceloportela3889
    @marceloportela3889 3 роки тому +1

    Hi. Thanks for sharing this video. Great!
    I have a question about ARENA: is it possible to use different times in the same resource? For example, I have 3 types of trucks arriving at the same time and they have to be weighed on the same scale. Truck A is weighed in 03 minutes, truck B is weighed in 05 minutes and truck C is weighed in 7 minutes. After weighing, they are released and the process is closed. So, how to build this model in ARENA? Could you help me? Thank you in advance.

    • @TedPavlic
      @TedPavlic  3 роки тому +1

      There are a number of ways you can accomplish this. For example, you can actually store the service time for each entity in an attribute of that entity. When the entity is created, you can draw its type-specific service time. Then, when each entity reaches the single process block, the process block's "Delay" can be set to "Expression" and you can use the attribute name from the entity. I do something like this within the example in my UA-cam video explaining how to use the "Match" module:
      ua-cam.com/video/8QCKWeT-aRc/v-deo.html
      Alternatively, you can use a "Decide" block upstream of the process block to send entities of different types through different Decide blocks. Each decide block can use the same resource (which will mean that if an entity is using the resource in one process block, entities arriving to the other process blocks will queue up there). The downside of a solution like this is that it can upset the FIFO order that you probably want in your process queue. So I would recommend something more like what I suggest above.

  • @amalroy8439
    @amalroy8439 2 роки тому

    Thanks Sir

  • @BENAMORSafwen
    @BENAMORSafwen 2 місяці тому

    I have a question: If I use two hold modules in parallel, both connected to the same process with the condition WIP==0, can both hold modules release the entity at the same time? During the simulation, the number in process is equal to 2.

    • @TedPavlic
      @TedPavlic  2 місяці тому

      In principle, when the "conditional event" of the WIP hitting zero occurs, it should trigger both Hold modules simultaneously. The number within the Process block refers to how many units of the associated resource are needed for an entity passing through the process block to receive service. This is not the same as the capacity of the resource, which is set in the resource data module (under the "Data definition" panel in newer versions of Arena). If the entity needs more resources than are available, it will queue up.

    • @BENAMORSafwen
      @BENAMORSafwen 2 місяці тому

      @@TedPavlic I want to model two parallel conveyors and one forklift. In the process of transfer, when a pallet is queued, it doesn't have significant meaning.

    • @TedPavlic
      @TedPavlic  2 місяці тому

      @@BENAMORSafwen I don't know what you mean by "doesn't have significant meaning." But if you have two sources of entities going to a single process block that seizes a finite resource for every entity that goes through the process, then two entities that arrive roughly at the same time (one from each source) will have one go into the process and the other queue. The maximum, minimum, and average number of entities in that queue will reflect how often an entity is waiting for access to the service (where immediate access to the service will not have any queueing). If you don't see any queueing in the statistics (the maximum number of entities waiting in the queue is 0), then you don't have simultaneous encounters at the service. If you see a small amount of queueing, the maximum number in that queue will be 1 (and the average will be close to 0). That would occur either if near simultaneous encounters are very rare or if the time within the service is very small (and thus the service is made available again for other entities to use it soon after it is seized).

  • @hecma6969
    @hecma6969 2 роки тому

    Hello Ted, Hope you can help me out, I want to simulate 6 machines that are attended by 2 technicians, So when the machine fails or there is a model change, then 1 of these 2 technicians fixes the machine that is in the failure mode, this model intends to optimize the machine output by friend different configuration of the technicians, for this I thought to assign the technicians as a resource to the failure, by I do not know if this this possible, or it is necessary to configure a logic in the model, hope you can answer and understand my question. Thanks

    • @TedPavlic
      @TedPavlic  2 роки тому

      As you probably know, the traditional (simplest) way to implement failures in Arena is with a failure schedule. In your case, you want the duration of the failure to itself be a delay whose duration is conditioned on the state of the system. One option for doing this is to have a CREATE block generate failure instances (as their own entity types) instead of using a failure schedule to trigger the change in state. That is, on arrival of a failure, you can adjust the resource to switch into the FAILED state (there is a STATE() expression that you can use to change the state of a resource in an Arena expression). The failure instance can then go through its own seize/delay/release process block that seizes one of a "technician resource" (that has capacity 2, in your case). Once the technician resource finishes that process, you can have the failure instance entity reset the state of the machine resource out of the FAILED state. I'm not sure that's the best way to accomplish want you want, but it is the first thing I would think of trying if I were doing it.

  • @fatirunaanfasyajalil8070
    @fatirunaanfasyajalil8070 Рік тому

    hello mr. ted, can you help me.. So i have this system that have to wait until 10 parts and then release 10 of it to the next process to be assembly.. what should i input for the expression? shoul i use the holdfor condition or hold for signal? thank you so much i hope you can help me out

    • @TedPavlic
      @TedPavlic  Рік тому

      It sounds like you want to hold for the condition where the number of parts in the hold queue is 10 or greater. That said, the "Batch" module might be a better fit for you. With "Batch", you can tell it to create a permanent or temporary batch once a certain number of entities has accumulated in the Batch queue. At that point, it will create a batch of that many entities and let it move forward (and you can then separate entities out of that batch using a Separate module later).

  • @fernandouribe6737
    @fernandouribe6737 3 роки тому

    Can you decide instead if queue one of a parallel processes is too long, to send to process two? Trying to make a model that sends parts to a second machine if the first machine has 5 in queue.

    • @TedPavlic
      @TedPavlic  Місяць тому

      Yes, there are several of different ways to do this. Using constructs similar to the video above, you can use a "Decide" block that conditions the flow of entities based on how many entities are queued up in downstream queues. So, you could check to see how long a downstream queue is and, based on that, send a new entity just arriving to the decide block down a different path.

  • @ifanyulianto719
    @ifanyulianto719 Рік тому

    HI Sir, thankyou for the explanation in the Video.
    If I may ask, I want to ask about my project about queue in the elevator.
    So i Had data about time between arrivals of the people and queue time (waiting for the elevator from first floor to many floors until back again to the first floor to get peoples in the queue). How to make the queue can be done in the hold only ? or what models should i use in the project so that we can see the queue in the Hold process ? Should I use remove,release,delay,or signal about it ? the condition is the distribution of the queue time of the elevator is NORM( 74 , 24.6 ). Thankyou Sir sorry if the vocab is bad

    • @TedPavlic
      @TedPavlic  Місяць тому

      I think a proper answer to how best to simulate an elevator queueing problem would require more than a simple response to a comment. I recommend that you go through the "Browse Examples" under the "File" menu in Arena, and I think you may find several working examples that give you some ideas on how to do this. You might check under "Browse SMARTS" as well, which can provide you small examples that you can build off of.
      People will sometimes use Arena to simulate traffic intersections where only a subset of the different incoming traffic lanes can go at a time. This is similar to an elevator problem. One way to do this is to use a Create block to create a single virtual entity (it only arrives at the very start of the simulation and only 1 ever arrives, and it is never disposed) that then gets put into a separate cycle that changes the state of the traffic light so that it cycles (for example, it starts in "North/South" and stays there for a few minutes and then switches to "East/West" and stays there for a few minutes and then recycles). This virtual entity (which doesn't map to an entity in the "real world" just cycles over and over again in logic blocks that continually set and reset a global variable which reconfigures decide blocks and/or hold blocks within the main simulation that cause traffic to wait (for example, "East/West" traffic will wait when the intersection is in "North/South" mode, and vice versa). A similar scheme could be used to move an elevator around, but perhaps the schedule of floors that it visits will not be deterministic but randomly selected or determined based on which passengers are currently in the elevator.
      You may also consider some of the "batching" operators that can hold until a certain number of entities are ready (say, to wait for a full elevator), but I'm not sure that really maps to a real situation.

    • @ifanyulianto719
      @ifanyulianto719 Місяць тому

      @@TedPavlic thankyou for the answer sir. The way sir gives the answer gives me more insight to explore on arena. We were having the trouble on the distribution time for the elevator to go to each floor.
      We gathered some more data then to know the distribution, even though i think it may not correct. But we already pass the project with A score 🥳
      And for the entities, we just used the number distribution based on taking data on site and find the distribution that fit to all. But batching is a good idea too for some problem as example if its time for entities to go to class or canteen (the site is at campus) maybe ? Once again thankyou for replying sir have a good day 🙌

  • @gauthamv8280
    @gauthamv8280 2 роки тому

    How to add part removal time and set up time for machine in arena

    • @TedPavlic
      @TedPavlic  Місяць тому

      This questoin is unrelated to the main topic of this video and cannot be easily answered in a comment.

  • @mingchuanwang5912
    @mingchuanwang5912 7 місяців тому

    Hello,Thank you for your explanation and I have a problem-could you please show me how to set Process 1 and Process 2 circulate for 10 times and then comes to Dispose 1? Best wishes!

    • @TedPavlic
      @TedPavlic  Місяць тому

      You could add an "Attribute" block that increases an attribute (that is initially set to 0) on any entity that goes through it. When that attribute reaches 10, a decide block could eject the entity from the cycle. Something like this would ensure that every entity that enters the cycle will go through it 10 times. This really has very little to do with the point of this video though (the pull logic).