This script evaluates the
performance measures (service level, delay probability and average waiting time)
of a queueing system using the Erlang C formula.
This script executes the Erlang C program implemented in the
CCOptim Java
library for call centers.

Consider the classic M/M/c queueing model: Poisson arrival process,
exponential service time and no abandonment by the customers
(that is, customers have infinite patience time).
The queue capacity can be finite or infinite.
Because there are no abandonments, the number of servers must be greater than
the offered load for the queue to be stable and reach steady state.
Let \(\lambda\) be the arrival rate and \(1/\mu\) the average waiting time,
then the offered load is \(\rho = \lambda/\mu\).

Available performance measures

The performance measures returned by this program are:

Service level (SL): This measure is defined as
the expected ratio of customers that waited less or equal to the acceptable waiting time \(t\).
That is,
$$\textrm{SL}(y, t) = \mathbb{E}[X(y, t)] / \mathbb{E}[A],$$
where \(y\) is the number of servers,
\(X(y, t)\) is the number of customers that waited at most \(t\) as a function
of \(y\) and \(t\), \(A\) is the total number of customers, and \(\mathbb{E}\) is the expected value operator in statistics.

Delay probability: The probability that a new customer will have to wait in queue.
This is also equal to the proportion of customers that join the waiting queue.

The average waiting time of a customer.

Descriptions of the input parameters

The parameters for this program are:

Arrival rate: The average number of customers that arrive per time unit.
For example, 5.7 customers per minute.

Average service time: The average time duration that a server takes to serve one customer.
This is the inverse of the service rate.
For example, an average service time of 10.5 minutes per customer.

Acceptable waiting time: This is the waiting time threshold of the
service level (SL) measure.
For example, the acceptable waiting time can be 20 seconds.

Queue capacity: The maximum size of the waiting queue.
When the queue is full, all new customers are blocked.
This parameter must be integer. Set a negative value to choose an unlimited queue capacity.
For better algorithm efficiency, we recommend to set an unlimited capacity rather than
an arbitrary large number.

Average waiting time unit: Select the time unit of the average waiting time results.

Display graph outputs: Select "yes" to display the result table in graphic charts.
This option requires browser support for HTML5 and Javascript.
Use the parameter "Server range output" to control the number of points
in the charts.
Note this feature is unstable for Internet Explorer 8 and older.

Server range output: Allows to evaluate the performance measures for multiple
number of servers. Let \(R\) be this parameter and \(S\) the given number of
servers, then the program will evaluate the performance measures for all servers
between \((S-R)\) and \((S+R)\), except if the queue is unstable.
Parameter \(S\) can be given by the user (parameter #8)
or found by minimizing the number of servers
for a given service level target (parameter #9).
For example, if this range is set at 5 and the number of servers to evaluate
is set at 10, then the program will evaluate the performance measures for 5 to 15 servers.
This parameter must be a non-negative integer.

Evaluate: If this option is selected, then
pressing the "Execute" button will compute the performance measures
using the Erlang C formula for the given number of servers. Performance measures
for nearby number of servers can also be computed by setting the parameter
"Server range output". The number of servers must be integer and
greater than the traffic load \(\rho\) defined above. The minimum value is 1.

Find minimum servers: If this option is selected, then
pressing the "Execute" button will order the program to find
the minimum number of servers required to attain a service level (SL) equal or higher
than the given SL target. Let \(Y\) be this number and \(T\) the SL target.
Then,
$$Y = \min \{ y : \textrm{SL}(y,t) \ge T, y \in \mathbb{N} \},$$
where the service level function \(\textrm{SL}(y,t)\) and acceptable waiting time \(t\)
are described in the performance measures,
and \(\mathbb{N}\) is the set of natural numbers.
The program will evaluate the performance measures at \(Y\) and around \(Y\),
like with the "Evaluate" option.
The service level target parameter must be between 0 and 100%, inclusively.
For example, set this parameter to 80 and the acceptable waiting time (parameter #3)
to 20 seconds to find the minimum number of servers needed for a service level of at least
80% with a waiting time threshold of 20 seconds.