The problem is not necessarily in the number of items
you have in your simulation. The problem is in the size of the event
list at any given time.
For example, when this model gets to steady-state, you have roughly 42,000 events on the event list.
Testing This In Your Model
First, I opened the Statistics view of your Process Flow's Sink activity so that I could see how many widgets get completely processed.
Then, when you run the model, you can see this value slowly increase as the model runs.
Now,
you can compare how many widgets per real second are being processed,
rather than comparing how many simulation minutes are being processed
per real second.
For example, on my computer with your model, the Sink's input after 30 seconds is 2,848. So 2,848 widgets got processed in 30 seconds.
Now adjust your inter-arrival
time in your ModelParameters table from 0.3 to 300. Run the model at max
speed and see how many widgets get processed in 30 seconds. On my
computer, it processed 127,739 widgets in 30 seconds.
Unless I'm
misunderstanding how your model works, the only thing that is changing
between these two runs is the amount of widgets in the system
simultaneously. Thus changing how many events are queued on the event
list at a given time. With the inter-arrival time at 300, you have
roughly 45 events on the event list at steady-state.
With less events on the event list at once, you can process about 250,000 widgets per real minute vs 6,000 widgets per real minute.
The Answer
So
the answer to your question is that you need to adjust how your model
is configured so that you have less pending events on the event list at any
given time.
Here's a general example of how you could think about solving this problem:
Imagine
you have a conveyor with 50,000 items on it at a time, with 1 item
coming onto the conveyor and 1 item leaving the conveyor every 1 second.
If
you model each item individually entering the conveyor and creating an
event to leave the conveyor after the amount of time that it takes to
convey it across the conveyor, then you will have 50,000 events pending
for those items.
If instead, you kept a label that shows how many
items are on the conveyor, and you created 1 event for the first item to
leave, then in that event, created the next event for the next item
leaving in 1 second, and so on, then you would only have 1 event on the
event list at a time that represents when the next item will leave that
conveyor.
(This example is actually quite similar to how the
Conveyor module conveyor object works; it minimizes the number of events
that are pending on the event list. You can see that in the attached model (giant-conveyor.fsm), which shows a conveyor with 13,822 items on it at once, but only 2
pending events on the event list at a time. The number of flow items
going through the system per real minute is about 1,800,000 on my
computer. FlexSim can handle simulating this system; you just need to
adjust how you think about the problem so that you can model it
efficiently.)
How To Fix This
So rather than having a
token that represents each widget, that then has a pending event for each widget in your simulation, you should think about what problems you are
actually trying to solve by running this simulation. Depending on what
questions you are trying to answer, you should restructure your
simulation's logic so that it is based on the actual process on the
system and not necessarily based on processing each widget as a unique
entity that has a pending event on the event list at all times. This is
especially true where you have constant values and rates rather than
stochastic values.
CPU Utilization
While FlexSim is
running the model, the Windows task manager will show its usage at
approximately 1 core of your processor. If you have a 1-core processor,
it will show about 99%. If you have more cores, and if Hyper-Threading is enabled, it will show a lower
percent.
Phil BoBo
Sr. Manager, Software Development