# Description

A queuing network where customers proceed through successive service operations along a single path is called a tandem queue, for example a a serial production line with several different machining steps. Typically, the service time for one of the steps is a bit slower than the others; this is called the bottleneck. Work will tend to pile up at the bottleneck created by the slower server, and successive servers will become excessively idle. If there is limited waiting space between the servers (called a capacitated queuing system), blocking might also occur. A server becomes blocked when there is no space to unload a finished job. Both blocking and starving will degrade the performance of a tandem queue.

TWOQUES.MOD, TWOQUES1.MOD, TWOQUEUE.MOD and TANDQ.MOD model these types of systems.

In TWOQUEUE.MOD, there are two servers assigned to a constant time set-up operation followed by six workers assigned to a random time processing operation. This model is used in exercise 7.10.4 to determine optimal allocation of the eight workers.

# State Variables

State Variables in TWOQUEUE.MOD
Variable Name Abbreviation Variable Description Size Type
QUEUE Q[i] Number of customers waiting at station i 3 Integer
SERVERS S[i] Status of server (Idle,Busy,Blocked=1/0/-1) 3 Integer
TA TA Job release interval 1 Integer

# Vertices

Vertices in TWOQUEUE.MOD
Vertex Name Vertex Description State Changes
RUN Start of the run Q[1]=1
ARRIVE Arrival of a customer TA=5*RND
ENTR1 Customer entering Q[1]=Q[1]+1
STRT1 Start of work at station 1 Q[1]=Q[1]-1,S[1]=S[1]-1
LEAV1 Customer finishing at station 1 S[1]=S[1]+1
ENTR2 Customer waiting in queue 2 Q[2]=Q[2]+1
STRT2 Start of work at station 2 S[2]=S[2]-1,Q[2]=Q[2]-1
LEAV2 Customer finishing at station 2 S[2]=S[2]+1
CHANGE Execute to transfer a worker from 2 to 1 S[1]=S[1]+(S[2]>0),S[2]=S[2]-(S[2]>0)

# Initialization Conditions

Initialization Conditions in TWOQUEUE.MOD
Variable Description
Servers[i] Status of server (Idle,Busy,Blocked=1/0/-1)

TWOQUEUE.MOD

# English Translation

An English translation is a verbal description of a model, automatically generated by SIGMA.

```The SIGMA Model, TWOQUEUE.MOD, is a discrete event simulation.
It models EXECUTING CHANGE TO TRANSFER WORKERS.
```
```I. STATE VARIABLE DEFINITIONS.
```
```For this simulation, the following state variables are defined:
```
```Q[3]: NUMBER OF CUSTOMERS WAITING AT STATION J   (integer valued)
S[3]: STATUS OF SERVER (IDLE,BUSY,BLOCKED=1/0/-1)   (integer valued)
K[3]: NUMBER OF BLOCKED SERVERS IN FIRST QUEUE   (integer valued)
TA: JOB RELEASE INTERVAL   (integer valued)
```
```II. EVENT DEFINITIONS.
```
```Simulation state changes are represented by event vertices (nodes or balls) in a SIGMA graph.
Event vertex parameters, if any, are given in parentheses.
Logical and dynamic relationships between pairs of events are represented in a SIGMA graph
by edges (arrows) between event vertices.
Unless otherwise stated, vertex execution priorities, to break time ties, are equal to 5.
```
```1. The RUN(S[1],S[2]) event occurs when INITIATION OF A RUN.
Initial values for, S[1],S[2], are needed for each run.
This event causes the following state change(s):
Q[1]=1
After every occurrence of the RUN event:
Unconditionally, schedule the ARRIV() event to occur without delay.
```
```2. The LEAV1() event occurs when CUSTOMER FINISHING AT STATION 1.
This event causes the following state change(s):
S[1]=S[1]+1
After every occurrence of the LEAV1 event:
If 1, then THE CUSTOMER GOES TO QUEUE 2;
that is, schedule the ENTR2() event to occur without delay.
If Q[1]>0, then START SERVICING THE NEXT CUSTOMER IN QUEUE 1;
that is, schedule the STRT1() event to occur without delay.
(Time ties are broken by an execution priority of 3.)
```
```3. The LEAV2() event occurs when CUSTOMER FINISHING AT STATION 2.
This event causes the following state change(s):
S[2]=S[2]+1
After every occurrence of the LEAV2 event:
If Q[2]>0, then START SERVICING THE NEXT CUSTOMER IN QUEUE 2;
that is, schedule the STRT2() event to occur without delay.
```
```4. The ENTR2() event occurs when CUSTOMER WAITING IN QUEUE 2.
This event causes the following state change(s):
Q[2]=Q[2]+1
After every occurrence of the ENTR2 event:
If S[2]>0, then SERVER 2 IS FREE, SO START WORK;
that is, schedule the STRT2() event to occur without delay.
```
```5. The ARRIV() event occurs when ARRIVAL OF A CUSTOMER.
This event causes the following state change(s):
TA=5*RND
After every occurrence of the ARRIV event:
Unconditionally, SCHEDULE THE NEXT ARRIVAL IN ABOUT 10 MINUTES;
that is, schedule the ARRIV() event to occur in TA time units.
(Time ties are broken by an execution priority of 3.)
If 1, then THERE IS ROOM, ENTER QUEUE 1;
that is, schedule the ENTR1() event to occur without delay.
(Time ties are broken by an execution priority of 3.)
```
```6. The STRT1() event occurs when START OF WORK AT STATION 1.
This event causes the following state change(s):
Q[1]=Q[1]-1
S[1]=S[1]-1
After every occurrence of the STRT1 event:
Unconditionally, WORK FOR ABOUT 10 MINUTES AT STATION 1;
that is, schedule the LEAV1() event to occur in 5 time units...
using the parameter value(s) of 1.
(Time ties are broken by an execution priority of 4.)
If S[1]>0 and Q[1]>0 and CLK==0, then schedule the STRT1() event to occur without delay.
(Time ties are broken by an execution priority of 1.)
```
```7. The STRT2() event occurs when START OF WORK AT STATION 2.
This event causes the following state change(s):
S[2]=S[2]-1
Q[2]=Q[2]-1
After every occurrence of the STRT2 event:
Unconditionally, WORK FOR RANDOM TIME  AT STATION 2;
that is, schedule the LEAV2() event to occur in 4*ERL{1} time units.
(Time ties are broken by an execution priority of 6.)
```
```8. The ENTR1() event occurs when CUSTOMER ENTERING.
This event causes the following state change(s):
Q[1]=Q[1]+1
After every occurrence of the ENTR1 event:
If S[1]>0, then schedule the STRT1() event to occur without delay.
(Time ties are broken by an execution priority of 4.)
```
```9. The CHANGE() event occurs when EXECUTE TO TRANSFER A WORKER FROM 2 TO 1.
This event causes the following state change(s):
S[1]=S[1]+(S[2]>0)
S[2]=S[2]-(S[2]>0)
No additional events are scheduled here.
```