In queueing theory, the **Engset formula** is used to determine the blocking probability of an M/M/c/c/N queue (in Kendall's notation).

The formula is named after its developer, T. O. Engset.

##
Formula

Let

- $c>0$ be the (integer) number of servers.
- $N>c$ be the (integer) number of sources of traffic;
- $\lambda >0$ be the idle source arrival rate (i.e., the rate at which a free source initiates requests);
- $h>0$ be the average holding time (i.e., the average time it takes for a server to handle a request);

Then, the probability of blocking is given by^{[1]}

- $P={\frac ((\binom {N-1}{c))\left(\lambda h\right)^{c)){\sum _{i=0}^{c}{\binom {N-1}{i))\left(\lambda h\right)^{i))}.$

By rearranging terms, one can rewrite the above formula as^{[2]}

- $P={\frac {1}((}_{2}F_{1}(1,-c;N-c;-1/(\lambda h))))$

where ${}_{2}F_{1))$ is the Gaussian Hypergeometric function.

###
Computation

There are several recursions^{[3]} that can be used to compute $P$ in a numerically stable manner.

Alternatively, any numerical package that supports the hypergeometric function can be used. Some examples are given below.

**Python with SciPy**

from scipy.special import hyp2f1
P = 1.0 / hyp2f1(1, -c, N - c, -1.0 / (Lambda * h))

**MATLAB with the Symbolic Math Toolbox**

P = 1 / hypergeom([1, -c], N - c, -1 / (Lambda * h))

##
Unknown source arrival rate

In practice, it is often the case that the source arrival rate $\lambda$ is unknown (or hard to estimate) while $\alpha >0$, the offered traffic per-source, is known.
In this case, one can substitute the relationship

- $\lambda h={\frac {\alpha }{1-\alpha (1-P)))$

between the source arrival rate and blocking probability into the Engset formula to arrive at the fixed point equation

- $P=f(P)$

where

- $f(P)={\frac {1}((}_{2}F_{1}(1,-c;N-c;1-P-1/\alpha ))).$

###
Computation

While the above removes the unknown $\lambda$ from the formula, it introduces an additional point of complexity: we can no longer compute the blocking probability directly, and must use an iterative method instead. While a fixed-point iteration is tempting, it has been shown that such an iteration is sometimes divergent when applied to $f$.^{[2]} Alternatively, it is possible to use one of bisection or Newton's method, for which an open source implementation is available.