Class Pfqn_jointmarg
Joint probability that station i holds n(i) jobs in total, all classes summed out, in a closed multiclass product-form network:
P(n_1,...,n_M) = perm(A) / ( prod_r N_r! * prod_{j in infset} n_j! * G(N) )
with A the demand matrix whose column r is repeated N_r times and whose
row i is repeated n_i times, so A is square of order sum(N). Unlike
Pfqn_joint, which takes the delay as a single aggregated row, every
infinite-server station keeps its own row here and contributes its own
1/n_j!: the queueing stations contribute the n_i! the permanent identity
supplies, the infinite servers do not.
The identity holds for load-independent single-server queues plus infinite servers. Multiserver and load-dependent stations break the n_i! factor and are the caller's responsibility to exclude.
ZERO ELEMENTS are safe under the exact engine and only under it: a station holding no jobs contributes no row, a class with no jobs contributes no column, a zero demand is an ordinary zero entry of A, and the permanent of the empty matrix is 1. The approximate engines are REFUSED on a matrix with a structural zero rather than having it floored at eps: Sinkhorn scaling needs full support, and the Bethe gap is a state-dependent lower bound that does not cancel when the estimates are normalized against each other.
Reference: H. J. Ryser, "Combinatorial Mathematics", Carus Mathematical Monographs 14, Mathematical Association of America, 1963.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classResult of a joint total-queue-length evaluation. -
Method Summary
Modifier and TypeMethodDescriptionstatic Pfqn_jointmarg.Ret_jointmargpfqn_jointmarg(Matrix n, Matrix L, Matrix N, int[] infset) static Pfqn_jointmarg.Ret_jointmargpfqn_jointmarg(Matrix n, Matrix L, Matrix N, int[] infset, Double lGN) static Pfqn_jointmarg.Ret_jointmargJoint probability of the per-station total queue lengths.
-
Method Details
-
pfqn_jointmarg
public static Pfqn_jointmarg.Ret_jointmarg pfqn_jointmarg(Matrix n, Matrix L, Matrix N, int[] infset, Double lGN, String engine) Joint probability of the per-station total queue lengths.- Parameters:
n- (1 x M) or (M x 1) per-station total job counts, infinite servers includedL- (M x R) demand matrix, infinite-server rows includedN- (1 x R) per-class populationsinfset- row indices of L that are infinite-server stations, may be null or emptylGN- log normalizing constant, or null to compute it hereengine- "exact" (default), "spm", "bethe", "heur", "huberlaw" or "adapart". "spm" is the only engine that does not expand the matrix to order sum(N): it takes the row-replicated matrix with the class populations as column multiplicities, which is the regime its saddle-point expansion is asymptotically exact in, so its cost does not grow with the population and its relative error is O((R-1)/min(N)). Measured on a 3-station 2-class model, 12.8% at N = (1,1), 4.2% at (3,3), 2.1% at (6,6); it degrades the other way round, when the class count grows at fixed population (2.7% at R = 2, 21% at R = 7, both at N_r = 3), because R-1 is the dimension being expanded in. The bias is nearly constant across the lattice, so a caller that renormalizes a full sweep keeps far less of it: total variation distance 5.0e-3 at N = (1,1), 8.4e-4 at (3,3), 4.3e-4 at (5,5), better than "bethe" and "heur" at every population measured.- Returns:
- the probability, its logarithm and the constant used
-
pfqn_jointmarg
public static Pfqn_jointmarg.Ret_jointmarg pfqn_jointmarg(Matrix n, Matrix L, Matrix N, int[] infset, Double lGN) -
pfqn_jointmarg
public static Pfqn_jointmarg.Ret_jointmarg pfqn_jointmarg(Matrix n, Matrix L, Matrix N, int[] infset)
-