Solving Queue Problems with ErlangC
This example estimates how many agents a call center needs to handle incoming calls. Read the previous article first if you want the background behind the Erlang C formulation.
In this scenario, resources are agent stations and transactions are calls.
Let’s assume that in a time interval of 30 minutes, there is an average of 100 incoming calls, the AHT is 3 minutes, and the expected shrinkage is 30%.
As call center administrators, we want the average queue wait time to be 20 seconds
and the service level to be at least 80%.
We also want to ensure that the maximum occupancy of the agents is not greater than 85%.
The max_occupancy value must be greater than 0 and less than or equal to 1.
To solve this with pyworkforce, import ErlangC, initialize it with the queue parameters,
and call required_positions. All time variables must be expressed in minutes:
from pyworkforce.queuing import ErlangC
erlang = ErlangC(transactions=100, asa=20/60, aht=3, interval=30, shrinkage=0.3)
requirements = erlang.required_positions(service_level=0.8, max_occupancy=0.85)
print(requirements)
The output of this code should look like this:
{'raw_positions': 14,
'positions': 20,
'service_level': 0.888,
'occupancy': 0.714,
'waiting_probability': 0.174}
The returned dictionary contains:
raw_positions: Number of positions required before applying shrinkage
positions: Number of positions required after applying shrinkage
service_level: Expected percentage of transactions handled before the target ASA
occupancy: Expected occupancy of the system
waiting_probability: The probability that a transaction waits in the queue