Class Pfqn_clwoi

java.lang.Object
jline.api.pfqn.nc.Pfqn_clwoi

public final class Pfqn_clwoi extends Object
Computes G(N) of a closed product-form network made of an aggregated infinite-server (delay) node and any number of order-independent (OI) / pass-and-swap stations with empty swap graph, by inverting G(z) = exp(sum_r Z_r z_r) prod_i F_i(z), F_i(z) = sum_n Phi_i(n) z^n, with Phi_i the v-weighted balanced-fairness balance function of station i, mu_i(n) Phi_i(n) = sum_{r: n_r>0} v_{i,r} Phi_i(n - e_r).

Unlike a load-dependent station, whose factor collapses to a function of the single argument sum_r rho_{ri} z_r, an OI station factor depends on the whole vector z, because mu_i(n) depends on the occupancy through its SUPPORT supp(n) = {r : n_r > 0}. It is nevertheless rational and available in closed form: splitting the count lattice by support, on which mu_i(n) = mu_{i,S} is constant, and writing F_{i,S} for the part of F_i carried by the states of support S, the balance recursion gives (mu_{i,S} - sum_{r in S} v_{i,r} z_r) F_{i,S}(z) = sum_{r in S} v_{i,r} z_r F_{i,S\{r}}(z), F_{i,{}} = 1, F_i(z) = sum_S F_{i,S}(z), since removing a class-r job from a state of support S lands on support S when n_r >= 2 and on S\{r} when n_r = 1. The singularities are the hyperplanes sum_{r in S} v_{i,r} z_r = mu_{i,S}, one per support, in place of the single pole x = c_i of the load-dependent case. A load-independent single-server queue (mu_{i,S} = 1) gives back 1/(1 - sum_r v_{i,r} z_r).

G(N) is the coefficient of prod_r z_r^{N_r}, recovered by R nested one-dimensional lattice-Poisson inversions (CLW eq. 2.3). The restrictive static scaling of eqs. 5.41-5.46 is applied to the expanded constraint matrix that lists one row per (station, nonempty support) pair with unit-pole intensities v_{i,r}/mu_{i,S}, after dropping the rows dominated by a superset of no larger rate; each surviving row is a binding singular hyperplane.

Rates must be support-only, mu_i(n) = mu_i(supp(n)); this is the defining property of an OI station and what makes the transform a finite rational function. Every rate handle is verified EXHAUSTIVELY on the count lattice 0 < n <= N before the inversion, at prod_r (N_r+1) evaluations per station (below the contour points spent afterwards), and a state whose rate differs from that of its support is rejected with that state named: a rate that varies inside a support is a general balanced-fairness station and belongs to Pfqn_ncoi. It is refused rather than warned-and-inverted because the inversion would otherwise return a plausible but wrong G(N). Cost is prod_r 2 l_r N_r contour points, each costing O(M R 2^R), against O(M prod_r (N_r+1)(N_r+2)/2) for the convolution of Pfqn_ncoi: linear rather than quadratic in each population, and so preferable on large populations with few chains.

  • Method Details

    • pfqn_clwoi

      public static Ret.pfqnNc pfqn_clwoi(double[] Z, int[] N, List<ToDoubleFunction<int[]>> mu)
    • pfqn_clwoi

      public static Ret.pfqnNc pfqn_clwoi(double[] Z, int[] N, List<ToDoubleFunction<int[]>> mu, double[][] visits)
    • pfqn_clwoi

      public static Ret.pfqnNc pfqn_clwoi(double[] Z, int[] N, List<ToDoubleFunction<int[]>> mu, double[][] visits, int[] lpar, double[] gampar)
      Parameters:
      Z - (R) think-time demand of the aggregated delay node.
      N - (R) closed population, finite.
      mu - list of OI station rate handles; mu.get(i) maps a per-class count vector n (length R) to the total service rate of station i, and must depend on n only through its support. May be null/empty for a pure delay network.
      visits - (M x R) per-station class visit ratios weighting the balance recursion; null = unit visits.
      lpar - (R) inner lattice parameters l_j; null = 1,2,2,3,3,...
      gampar - (R) aliasing parameters gamma_j; null = 11,13,13,15,15,...
      Returns:
      G(N) (Inf on overflow) and its natural logarithm.