Queue Simulation
This package simulates a routing/assignment dynamic policy known as Fastest-Server-First (FSF) or Closest-Facility-First and Closest Driver routing policy for the Multi-Class Multi-Server Queueing (MCMS) queueing systems.
Minimizing queue waiting time in MCMS systems, where the service time depends both on the job type and the server type, has wide applications in transportation systems such as emergency networks and taxi networks, service systems such as call centers, and distributed computing platforms. However, the optimal dynamic policy for this problem is not characterized. In the absence of an optimal dynamic routing policy, FSF policy is widely used in practice and queueing literature.
In our multi-class multi-server queuing system, jobs (here contacts) of types $k \in K$ arrive according to independent Poisson processes with rates $dk$. The FSF router does not block any job. Also, there is no abandonment or retrial following the arrival stage. Each job must be routed to a server group $i \in F_k$, where $F_k$ is the set of server groups that are eligible to serve jobs of type $k$. For completeness, we will denote $I$ as the full set of server groups (henceforth known simply as groups) and $F_i$ as the set of job types that can be served by group $i$. In the contact center literature, the terms job type and server group are referred to as call/contact type and agent group, respectively. At each server group $i$, there are $k_i$ identical servers. Service times are independent, each exponentially distributed with mean service time $\tau{ki}$.
When a job (or call in call centers) of type $i$ arrives, a job-to-group priority list for that job type determines the order in which the groups are checked for a free server (or agent in call centers). The priority list is an ordered list of all groups that can serve job $i$, i.e., $j \in Fi$, sorted from smallest to largest service times $\tau{ij}$. The policy is called FSF because the fastest server has the highest priority in the list. There is one queue for each job type $i \in I$. If job $i$ finds all groups in $Fi$ busy, it will stay in queue $i$, where it will be served in first-come, first-served order. Similarly, when a server in group $j$ becomes free, a group-to-job list for that server group determines the order by which the server picks the next job to serve. The group-to-job list for group $j$ is a list of all job types that server group $j$ can serve, i.e., $i \in F_j$, sorted in increasing order by $\tau{ij}$’s. If all queues in the list are empty, then the server stays free.
Before running this script, please install/import the following “ContactCenters” java simulation libraries in Java:
To learn how to import these Java packages, check their websites.
To run the program, go to ‘mcms/main’ and run the following Java code.
Main.java
By default, the program runs a test problem. You can feed your own instance as well.
There are test examples under the /resource/test folder. You can also simulate your own instances.
To run a model, you would need to define the required data files:
For a detailed instruction please read ‘resoureces/test/input/GUIDE.txt’
The current version is 2.0.
Vahid Nourbakhsh: vahidnATuciDOTedu
Apache license 2.0
Check the license files for the installed packages, as well.
The following paper studies routing policies for MCMS systems:
Routing Heterogeneous Jobs to Heterogeneous Servers: A Global Optimization-Based Approach
https://ssrn.com/abstract=2967811