https://github.com/areenberg/phph
A Python package for PH/PH/c queueing systems
https://github.com/areenberg/phph
phase-type-distributions probability queueing queueing-theory service waiting-time
Last synced: 6 days ago
JSON representation
A Python package for PH/PH/c queueing systems
- Host: GitHub
- URL: https://github.com/areenberg/phph
- Owner: areenberg
- License: mit
- Created: 2022-02-18T22:27:03.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-12-27T22:58:32.000Z (30 days ago)
- Last Synced: 2025-12-30T00:48:51.668Z (28 days ago)
- Topics: phase-type-distributions, probability, queueing, queueing-theory, service, waiting-time
- Language: Python
- Homepage:
- Size: 61.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PhPh: A Python package for PH/PH/c queueing systems
PhPh is a Python package for evaluating PH/PH/c queueing systems.
## Features
* Available on PyPI.
* Allows for evaluation of multiserver models containing any Phase-type (PH) inter-arrival and service-time distribution.
* Returns fundamental performance metrics such as the expected waiting time, expected occupancy, and the probability of waiting longer than *t* units of time.
* Users can choose to view the metrics observed by *actual* arriving customers or *virtual* Poisson arrivals.
# Quick start guide
The following shows how to get quickly started with PhPh.
## Installation
Download and install PhPh directly from PyPI.
```
pip install phph
```
## Usage
Start by specifying the inter-arrival and service-time distributions.
```python
#Import packages
import phph
import numpy as np
#Set the server capacity
servers = 5
#ARRIVAL PARAMETERS - Example of Erlang distribution
#Initial distribution
arrivalInitDistribution = np.matrix([[1,0]])
#Phase-type generator
arrivalGenerator = np.matrix([[-12,12],
[0,-12]])
#SERVICE PARAMETERS - Example of hyper-exponential distribution
#Initial distribution
serviceInitDistribution = np.matrix([[(1/3),(1/2),(1/6)]])
#Phase-type generator
serviceGenerator = np.matrix([[-2,0,0],
[0,-1,0],
[0,0,-6]])
```
Now, create the model object.
```python
mdl = phph.model(arrivalInitDistribution,arrivalGenerator,
serviceInitDistribution,serviceGenerator,
servers)
```
We can now use the object `mdl` to return various performance metrics. In the following, we calculate the expected waiting time, the expected occupancy, and the probability of waiting.
```python
#Expected waiting time
print(mdl.meanWaitingTime())
#0.455024
#Expected occupancy
print(mdl.meanOccupancy())
#6.896811
#Probability of waiting
print(mdl.probWait())
#0.562802
```
# Classes and methods
The following shows how to create the model and provides a list of all available performance metrics.
## Model class
Create the model object with:
```python
mdl = phph.model(arrivalInitDistribution,arrivalGenerator,
serviceInitDistribution,serviceGenerator,
servers)
```
* `arrivalInitDistribution` is a NumPy row vector defining the initial distribution of the PH distribution associated with **arrivals**.
* `arrivalGenerator` is a NumPy matrix defining the PH generator of the distribution associated with **arrivals**.
* `serviceInitDistribution` is a NumPy row vector defining the initial distribution of the PH distribution associated with **services**.
* `serviceGenerator` is a NumPy matrix defining the PH generator of the distribution associated with **services**.
* `servers` is a non-zero positive integer and defines the number of servers in the queueing system.
## Performance metrics
* `mdl.meanWaitingTime()`. Returns the *actual* (i.e. observed by arriving customers) expected waiting time.
* `mdl.meanResponse()`. Returns the *actual* expected total time in the system.
* `mdl.probWait(type="actual")`. Returns the probability of waiting. Choose between `"actual"` (default) and `"virtual"` using the argument `type`.
* `mdl.probEmpty(type="actual")`. Returns the probability that the system is empty. Choose between `"actual"` (default) and `"virtual"` using the argument `type`.
* `mdl.probK(k,type="actual")`. Returns the probability of observing `k` customers in the system on arrival. Choose between `"actual"` (default) and `"virtual"` using the argument `type`.
* `mdl.waitDist(t,type="actual")`. Returns the probability of waiting more than `t` time units. Choose between `"actual"` (default) and `"virtual"` using the argument `type`.
* `mdl.meanQueueLength()`. Returns the expected length of the queue.
* `mdl.meanOccupancy()`. Returns the expected occupancy.
## Other output
* `mdl.localStateDist(k)`. Returns the local state distribution of level `k`.
* `mdl.localState(k)`. Returns the definition of the local state space of level `k`.