Java port of mp_pfqn: multiprecision solvers for exact analysis of closed (and mixed) product-form queueing networks.
The original C implementation is maintained in the same organization at https://github.com/imperial-qore/mp_pfqn.
All arithmetic is exact: integer demands and think times use
java.math.BigInteger, and rational quantities use Apache Commons Math
BigFraction (a BigInteger numerator/denominator pair). This mirrors the C
library's GMP mpz_t/mpq_t precision, so normalizing constants are exact
rationals with no floating-point rounding.
Package jline.lib.mp_pfqn. Each solver is a class exposing a static
solve(QnModel) returning the normalizing constant G, throughputs X, and
queue lengths Q (as applicable).
| Class | Algorithm |
|---|---|
Mva |
Mean Value Analysis (closed) |
Ca |
Convolution algorithm with multi-server expansion |
Recal |
Recursion by chain (RECAL) |
Mom |
Method of Moments |
Comom |
Class-oriented Method of Moments (BTF) |
Gld |
Load-dependent normalizing constant (convolution) |
ComomLd |
CoMoM for load-dependent repairman models |
MvaMx |
MVA for mixed open/closed networks |
MvaLdMx |
Load-dependent MVA for mixed networks |
LcfsMva |
LCFS-NP / LCFS-PR MVA (two stations) |
ProComom |
Marginal queue-length probabilities |
QnModel qnm = new QnModel(
M, // number of stations
R, // number of classes
N, // int[] population per class (-1 = open)
Z, // BigInteger[] think times
L, // BigInteger[M][R] service demands
mi); // int[] station multiplicities
Ca.Result r = Ca.solve(qnm); // r.G, r.X, r.QMixed models add hasOpen/lambda; load-dependent models add isLD/mu
(see the constructors of QnModel).
mvn compile # build
mvn test # run the JUnit 5 parity suiteThe tests validate every solver against reference values produced by the
original C mp_pfqn binaries.
BSD 3-Clause. See LICENSE.