![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Normalizing constant of a closed network of LIMITED JOINT-DEPENDENT (LJD) stations plus one aggregated delay, by numerical inversion of the multichain generating function (Choudhury-Leung-Whitt, J. More...
#include <algorithm>#include <cmath>#include <cstddef>#include <limits>#include <vector>#include "line/api/pfqn/pfqn_clw.h"#include "line/api/pfqn/pfqn_ncoi.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| ClwResult< T > | line::pfqn::pfqn_clwjd (const std::vector< T > &Z, const std::vector< int > &N, const std::vector< OiRate< T > > &mu, const Matrix< T > &visits, const Matrix< int > &lcut, const ClwOptions &opt) |
| Normalizing constant of a closed network of LIMITED JOINT-DEPENDENT (LJD) stations plus one aggregated delay, by numerical inversion of the multichain generating function (Choudhury-Leung-Whitt, J. | |
| template<class T> | |
| ClwResult< T > | line::pfqn::pfqn_clwjd (const std::vector< T > &Z, const std::vector< int > &N, const std::vector< OiRate< T > > &mu, const Matrix< T > &visits, const Matrix< int > &lcut) |
| Overload with the CLW default parameters. | |
| template<class T> | |
| ClwResult< T > | line::pfqn::pfqn_clwjd (const std::vector< T > &Z, const std::vector< int > &N, const std::vector< OiRate< T > > &mu, const Matrix< T > &visits) |
| Overload with the all-N cutoff, i.e. | |
| template<class T> | |
| ClwResult< T > | line::pfqn::pfqn_clwjd (const std::vector< T > &Z, const std::vector< int > &N, const std::vector< OiRate< T > > &mu) |
| Overload with unit visits and the all-N cutoff. | |
Normalizing constant of a closed network of LIMITED JOINT-DEPENDENT (LJD) stations plus one aggregated delay, by numerical inversion of the multichain generating function (Choudhury-Leung-Whitt, J.
ACM 42(5):935-970, 1995).
Templated port of matlab/src/api/pfqn/pfqn_clwjd.m. This stands to pfqn_clwoi as pfqn_clw_lld stands to pfqn_clw: a per-station cutoff beyond which the rate stops changing turns an infinite series into a rational function of the same denominators.
Station i has a rate mu_i(n) that reads the whole per-class occupancy but saturates coordinatewise: with a cutoff vector l_i,
mu_i(n) = c_{i,t}, t = ( min(n_1,l_{i,1}), ..., min(n_R,l_{i,R}) ),
so past l_{i,r} further class-r jobs no longer change the rate. Order independence is l_i = 1 (t is the support indicator); a multiserver station with c servers is l_i = c, min(sum n, c) being a function of the clipped vector once every l_{i,r} >= c.
Splitting the count lattice by clipped region, on which mu_i is constant, and writing F_{i,t} for the part of F_i carried by the states with t_i(n) = t,
( mu_{i,t} - sum_{r: t_r = l_{i,r}} v_{i,r} z_r ) F_{i,t}(z) = sum_{r: t_r >= 1} v_{i,r} z_r F_{i,t-e_r}(z), F_{i,0} = 1, F_i(z) = sum_t F_{i,t}(z),
the two sides differing because removing a class-r job leaves the region only on an UNsaturated coordinate: for t_r < l_{i,r} the region pins n_r = t_r so n - e_r lands in t - e_r, while for t_r = l_{i,r} the region is n_r >= l and n - e_r lands in t or in t - e_r. The singularities are therefore the hyperplanes sum_{r in S} v_{i,r} z_r = mu_{i,t} over the SATURATED sets S = {r : t_r = l_{i,r}}: at most 2^R per station, however large the cutoffs are. Setting l_i = 1 reduces this to the support recursion of pfqn_clwoi and R = 1 reduces it to Bertozzi-McKenna eq. 2.19.
The restrictive static scaling of eqs. 5.41-5.46 runs on one row per (station, saturated set), carrying v_{i,r}/min{mu_{i,t} : saturated set of t is S}, the smallest rate over regions sharing a saturated set being the binding one; rows dominated by a superset of no larger rate are dropped.
SCOPE. The rate must be constant on each clipped region, which is checked on probe states. Any rate is admissible with an all-N cutoff (the default), the clipping being vacuous on the reachable lattice.
Arithmetic: TRANSCENDENTAL, double and Real only, as for the rest of the CLW family.
COST. prod_r 2 l_r N_r contour points, each costing O(M R prod_r (l_{i,r}+1)), against O(M prod_r (N_r+1)(N_r+2)/2) for pfqn_ncjd: the inversion is linear rather than quadratic in each population, but the per-point region box grows with the cutoff, so it pays off exactly when the joint dependence saturates early and loses outright at cutoff N.
Definition in file pfqn_clwjd.h.