![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
MVAC for networks with queue-length dependent (QLD) service centers, the Section V extension of Conway, de Souza e Silva and Lavenberg (1989). More...
#include <algorithm>#include <cstddef>#include <vector>#include "line/api/pfqn/pfqn_mvac.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Classes | |
| struct | line::pfqn::MvacldResult< T > |
| Return value of pfqn_mvacld, mirroring [XN, QN, UN, CN, pij]. More... | |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| MvacldResult< T > | line::pfqn::pfqn_mvacld (const Matrix< T > &L, const std::vector< int > &N, const Matrix< T > &Z, const Matrix< T > &mu) |
| MVAC for networks with queue-length dependent (QLD) service centers, the Section V extension of Conway, de Souza e Silva and Lavenberg (1989). | |
| template<class T> | |
| MvacldResult< T > | line::pfqn::pfqn_mvacld (const Matrix< T > &L, const std::vector< int > &N, const Matrix< T > &Z) |
| Overload with the fixed-rate default. | |
MVAC for networks with queue-length dependent (QLD) service centers, the Section V extension of Conway, de Souza e Silva and Lavenberg (1989).
Templated port of matlab/src/api/pfqn/pfqn_mvacld.m. pfqn_mvac implements Sections II-IV, which cover single-server fixed-rate and infinite-server centers only.
Where pfqn_mvac propagates the MEAN queue lengths through (7), the QLD extension propagates the MARGINAL DISTRIBUTIONS P^k_j(n,v). That is forced by load dependence, since the rate seen by a job depends on the whole occupancy, but it also SIMPLIFIES the recursion: (21)-(25) read level k-1 only at the shifted vectors v + 1_i, so the basic step sweeps I_k alone where pfqn_mvac must sweep I_k u ... u I_K. The marginals come out as a first-class output for free. In the reference-station-free form used here,
c_i(k,v) = sum_{n=0}^{k-1} P^{k-1}_i(n, v+1_i) mu_i(n+v_i+1)/(n+v_i+1) L^k_{jk}(v) = (a_jk/c_j) / sum_m (a_mk/c_m) lambda^k_k(v) = 1 / sum_m (a_mk/c_m) P^k_j(n,v) = L^k_{jk}(v) P^{k-1}_j(n-1, v+1_j)
with c_i = 1 identically at an IS center, which is (22). Equation (25) is self-normalizing, sum_n P^k_j(n,v) = sum_m L^k_{mk}(v) = 1, so no normalizing constant is formed and every quantity in the recursion is positive: unlike the load-dependent MVA of pfqn_mvald it CANNOT produce negative probabilities and needs no stabilization. That is the practical reason to prefer it.
OUTPUT CONVENTIONS differ from pfqn_mvac and follow the load-dependent family (pfqn_mvald, pfqn_dac): U is PER-STATION, 1 - P_j(0), because for a load-dependent center the per-class product X_r L_{jr} is not the utilization; and C is the per-class CYCLE TIME exclusive of think time, N_r/X_r - Z_r, not an (M x R) residence time.
Parts 2 and 3 are unchanged from pfqn_mvac, since (6) holds verbatim in the presence of QLD centers, and are driven from the same chain setup.
Arithmetic: EXACT-CAPABLE, field operations only.
REFERENCE DEFECTS: none found. With mu identically one the results agree with pfqn_mvac, and with a genuine load-dependent rate they agree with pfqn_mvald.
Definition in file pfqn_mvacld.h.