![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Product-form state-dependent routing. More...
#include <algorithm>#include <cstddef>#include <string>#include <vector>#include "line/api/mc/dtmc_solve.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/lu.h"#include "line/util/matrix.h"Go to the source code of this file.
Classes | |
| struct | line::pfqn::SdrStruct |
| Topology and coefficients of a state-dependent routing subnetwork. More... | |
| struct | line::pfqn::SdrCoeff |
| Derived coefficients of an SDR structure, eqs. More... | |
| struct | line::pfqn::SdrResult< T > |
| Mean performance measures returned by pfqn_sdr. More... | |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| SdrCoeff | line::pfqn::pfqn_sdrcoeff (const SdrStruct &sdr) |
| Validates an SDR structure and returns its derived coefficients. | |
| std::vector< double > | line::pfqn::pfqn_sdrprob (const SdrCoeff &c, const std::vector< double > &n) |
| SDR routing probabilities of eq. | |
| double | line::pfqn::pfqn_sdrped (const std::vector< double > &P) |
| Probability of being denied entry and routed straight to the departure centre. | |
| template<class T> | |
| SdrResult< T > | line::pfqn::pfqn_sdr (const Matrix< T > &S, const Matrix< T > &xi, const std::vector< std::size_t > &N, const SdrStruct &sdr, const Matrix< T > &alpha=Matrix< T >()) |
| Exact product form of eq. | |
| template<class T> | |
| SdrResult< T > | line::pfqn::pfqn_sdrmva (const Matrix< T > &S, const Matrix< T > &xi, const std::vector< std::size_t > &N, const SdrStruct &sdr, const Matrix< T > &alpha=Matrix< T >()) |
| Section 4 mean value analysis and convolution. | |
| template<class T> | |
| Matrix< T > | line::pfqn::pfqn_sdrvisits (const SdrStruct &sdr, const std::vector< Matrix< T > > &P) |
| Coefficients xi of Section 3.2. | |
Product-form state-dependent routing.
Templated port of matlab/src/api/pfqn/pfqn_sdr*.m, from A. E. Krzesinski, "Multiclass Queueing Networks with State-Dependent Routing", Performance Evaluation 7(2):125-143, 1987, the multiclass generalization of D. Towsley, "Queuing Network Models with State-Dependent Routing", J. ACM 27(2):323-337, 1980.
A network is split into a subnetwork Q(V,V) under SDR and its complement M-V. Q(V,V) has one entry centre e and one departure centre d, both outside it, and is partitioned into disjoint branches arranged in a hierarchy of nested subnetworks V_1 > ... > V_T. Each branch has one entry centre, one departure centre, and may hold several centres between them.
Branch index 1 denotes the complement M-V and is unused, in the paper and in every codebase. The SDR branches are numbered 2..B, that is indices 1..B-1 of the zero-based arrays here. Keeping the paper's numbering is what lets d(t,b) be transcribed straight from the text.
UNLIKE the MATLAB, JAR and Python twins this routine carries no logarithms. The unnormalized weight of eq. (16) is a product of field operations on the inputs, so the whole evaluation stays inside T and an exact rational backend returns an exact normalizing constant. The price is that a double backend can overflow where the log-domain twins would not; that bites only at populations far beyond what state enumeration can reach anyway.
Definition in file pfqn_sdr.h.