This script evaluates the
blocking probability of a queueing system using the Erlang B formula.
All new customers are blocked (and rejected) if all servers are busy at their time of arrival.
This script executes the Erlang B program implemented in the
CCOptim Java
library for call centers.

We assume the classic M/M/c queueing model with Poisson arrival process,
exponential service time and no queueing capacity.
That is, any new customer that sees all servers busy at their time of arrival
will be blocked from the system and forced to abandon.
The number of states in the system is equal to: number of servers + 1 (empty state).
With a minimum of 1 server, this queueing system is always stable, because there is no waiting queue.
All non-blocked customers are automatically served and their waiting time is 0.

Blocking probability

This program computes a single performance measure, which is the blocking probability.
This measure is defined as the probability that all servers are busy in the
queueing system when a new customer arrives. This is also equal to the proportion of time that
all servers are busy.

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.

Display graph output: Select "yes" to draw the blocking probabilities in a chart.
This option requires browser support for HTML5 and Javascript.
Use the parameter "Server range output" to control the number of points
in the chart.
Note this feature is unstable for Internet Explorer 8 and older.

Server range output: Allows to evaluate the blocking probability for multiple
number of servers. Let \(R\) be this parameter and \(S\) the given number of
servers, then the program will evaluate the blocking probability for all servers
between \((S-R)\) and \((S+R)\).
Parameter \(S\) can be given by the user (parameter #5)
or found by minimizing the number of servers
for a maximum blocking threshold (parameter #6).
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 blocking probability 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 blocking probability
using the Erlang B formula for the given number of servers. The blocking probabilities
for nearby number of servers can also be computed by setting the parameter
"Server range output". The number of servers must be integer
and 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, let's say \(Y\), required to have a blocking probability
equal or less than the maximum blocking threshold.
Let \(B(y)\) be the blocking probability as a function of the number of servers \(y\),
and \(T\) the maximum blocking threshold.
Then,
$$Y = \min \{ y : B(y) \le T, y \in \mathbb{N} \},$$
where \(\mathbb{N}\) is the set of natural numbers.
The program will evaluate the blocking probabilities at \(Y\) and around \(Y\),
like with the "Evaluate" option.
The maximum blocking probability threshold must be between 0 and 100%, exclusively.
For example, set this parameter to 5
to find the minimum number of servers needed to have a blocking probability of at most 5%.