1function [G, lG] = pfqn_is(L, N, Z, options)
2% [G, LG] = PFQN_IS(L, N, Z, OPTIONS)
4% Importance-sampling (IS) estimate of
the normalizing constant of a closed
5% LOAD-INDEPENDENT product-form queueing network with M single-server queues of
6% per-
class demand L and an aggregated delay of think time Z.
8% This
is the load-independent
case of PFQN_LD_IS (capacities mu_i(k) = 1), and
9%
the ordinary-network counterpart of
the order-independent PFQN_OI_IS and
the
10% pass-and-swap PFQN_PAS_IS: all four are
the same sample-an-ordering estimator,
11% differing only in
the per-position
factor of each station
's balance function.
12% For a single-server queue that factor is the demand of the class at that
13% position, L(i,q_p); for the delay it is Z(q_p)/p; for an OI/P&S station it is
14% the reciprocal rank rate 1/mu_i(supp(q_1..q_p)).
16% Writing ell = sum(N), an ordering c of all ell jobs is drawn by placing a
17% uniformly random present class at each step (probability p(c) = product of the
18% reciprocal branching factors), and the sum over ALL ways of cutting c into
19% contiguous per-station segments is computed exactly by dynamic programming:
20% G(N) = E_{C~p}[ S(C)/p(C) ],
21% S(c) = sum_{cuts} prod_m prod_{p} L(m, seg_m(p)),
22% which is unbiased for the exact constant of PFQN_NC.
25% L - (M x R) per-class service demands at the M single-server queues.
26% N - (1 x R) closed population vector, finite.
27% Z - (1 x R) aggregated think time (delay) demand; [] or zeros if none.
28% options - solver options (optional). Fields used:
29% .samples number of IS samples (default 1e4);
30% .seed RNG seed for reproducibility (optional).
33% G - IS estimate of the normalizing constant G(N).
36% Example (2 queues + delay):
37% L = [0.5 0.3; 0.2 0.4]; N = [3 2]; Z = [1 1];
38% [G,lG] = pfqn_is(L, N, Z, struct('samples
',1e5));
40% See also PFQN_LD_IS, PFQN_OI_IS, PFQN_PAS_IS, PFQN_NC.
42% Copyright (c) 2012-2026, Imperial College London
45if nargin < 4, options = struct(); end
46if nargin < 3, Z = []; end
48[G, lG] = pfqn_ld_is(L, N, Z, [], options);