Class LdqbdMphc
Port of matlab/src/api/mam/ldqbd_mphc.m and ph_multisets.m. The level of the chain is the number of jobs at the station; the coordinate INSIDE a level is the MULTISET of the phases the min(n,c) busy servers sit in, which is what makes the construction exact for phase-type service at any number of servers.
The collapsed alternative -- one PH process run at min(n,c) times its speed -- gets the aggregate service rate right but forgets which phase each busy server is in, turning the c servers into one fast server whose remaining work is a single phase-type variable.
References: S. Asmussen and J.R. Moller, "Calculation of the steady state waiting time distribution in GI/PH/c and MAP/PH/c queues", Queueing Systems 37(1):9-29, 2001; M. F. Neuts, "Matrix-geometric solutions in stochastic models", Johns Hopkins University Press, 1981.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classThe three block lists of a level-dependent QBD, in the orderLdqbdtakes them. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe repeating level is the widest one, so it is the size worth guarding: the LD-QBD recursion inverts one matrix of that order per level. -
Method Summary
Modifier and TypeMethodDescriptionstatic LdqbdMphc.Blocksldqbd_mphc(Matrix D0, Matrix D1, Matrix alpha, double c, double[] arrRate, double[] sf) Block-tridiagonal generator of an M/PH/c queue with level-dependent arrivals.static int[][]ph_multisets(int p, int k) Configurations of k identical servers over p service phases.
-
Field Details
-
MAX_CONFIGS
public static final int MAX_CONFIGSThe repeating level is the widest one, so it is the size worth guarding: the LD-QBD recursion inverts one matrix of that order per level.- See Also:
-
-
Method Details
-
ph_multisets
public static int[][] ph_multisets(int p, int k) Configurations of k identical servers over p service phases.Rows are the compositions of k into p nonnegative parts: entry (r,i) is the number of the k busy servers sitting in phase i. There are nchoosek(k+p-1, p-1) of them, the multiset count of Asmussen and Moller (2001) -- identical servers are exchangeable, so only the phase COUNTS carry information and the ordered space of size p^k collapses onto this.
The order is fixed and shared by every caller, so a configuration index means the same thing in each of them: the first part descends. k == 1 therefore yields the identity rows e_1 ... e_p in phase order, which is what makes the c == 1 case of
ldqbd_mphc(jline.util.matrix.Matrix, jline.util.matrix.Matrix, jline.util.matrix.Matrix, double, double[], double[])coincide with plain phase indexing. -
ldqbd_mphc
public static LdqbdMphc.Blocks ldqbd_mphc(Matrix D0, Matrix D1, Matrix alpha, double c, double[] arrRate, double[] sf) Block-tridiagonal generator of an M/PH/c queue with level-dependent arrivals.- Parameters:
D0- service sub-generator (p x p), phase changes without completionD1- service completion block (p x p); D1 = (-D0*1)*alpha for a PHalpha- 1 x p vector a server starts each new job inc- number of identical servers (>= 1; capped at the top level)arrRate- length Nlev+1; arrRate[n] is the arrival rate out of level nsf- optional length-Nlev multiplier on the station's TOTAL service rate at level n (load dependence); each busy server then runs at sf[n-1]/min(n,c) of nominal, so sf[n-1] == min(n,c) reproduces the unscaled queue exactly. Pass null for no scaling.Level sizes grow over the boundary levels 0..c and repeat above them, so the blocks joining differently sized neighbours are rectangular; Ldqbd, its rate matrices and its stationary vector all accept that heterogeneity.
-