Model Desktop1 :
Event arrival : Customer arrives
arrival = "true" (boolean)
Comments:
This happens after a wait from the beginning of the simulation or from the last customer arrival
Event next arrival : Wait for customer arrival
next arrival = after(exprnd(4),"true") (boolean)
Comments:
Customers arrive ar random intervals, so time between arrivals is given by the exponential distribution. Wait starts either at start of simulation or on arrival of previous customer.
Event start : Start of simulation
start = time() (boolean)
Maximum = 0
Comments:
Provides an event at time 0, the start of the simulation.
State queue : Number of customers waiting
queue = [[arrival,prev(0)+(if full then 1 else 0)],[reset...,0],[machine/de-queue,prev(0)-1]] (int)
Where:
full = Value(s) of full
Comments:
This starts at zero, increases by 1 if a customer arrives when all machines are full, and decreases by one when a customer leaves the queue
Variable full : All machines are in use
full = all([in_use]) (boolean)
Where:
[in_use] = Value(s) of machine/in use
Submodel machine :
Submodel "machine" is a fixed_membership multi-instance submodel with dimensions [3].
Event de-queue : Customer moves from queue to machine
de-queue = queue>0 (boolean)
Where:
queue = Value(s) of ../queue
Comments:
Happens if someone finishes using a machine while people are waiting
Event finish using : Customer completes transaction
finish using = after(gaussian_var(10,1),"true") (boolean)
Comments:
A period of time sampled from a normal distribution has elapsed since the customer started using the machine. Customer either started using machine which was idle, or came out of the queue.
Event start using : Machine comes into use
start using = not unreached and not in_use (boolean)
Where:
in_use = Value(s) of in use
unreached = Value(s) of unreached
Comments:
Happens when this is the first free machine and a customer arrives and starts using it immediately
State in use : Machine is busy.
in use = [[finish using,queue>0],[start using,"true"],[reset...,"false"]] (boolean)
Where:
queue = Value(s) of ../queue
Comments:
Machine becomes busy when a customer arrives and starts using it, and remains busy until a customer finishes using it while the queue is empty.
Variable unreached : New customers do not reach this machine
unreached = in_preceding(prev(0) or not in_use) (boolean)
Where:
in_use = Value(s) of in use
Comments:
There is an unused machine earlier in the group than this one. Either the last machine is itself unreached or it is not in use.