LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
pfqn_mvacld.h File Reference

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"
Include dependency graph for pfqn_mvacld.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.

Detailed Description

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)

  • sum_{m != j} L^k_{mk}(v) P^{k-1}_j(n, v+1_m)

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.