![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Distribution Analysis by Chain (de Souza e Silva, UCLA CSD-870023, 1987): the JOINT queue-length distribution of a closed product-form network with single-server, infinite-server and queue-dependent centers. More...
#include <cstddef>#include <vector>#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::DacResult< T > |
| Return value of pfqn_dac, mirroring [Pjoint, states, XN, QN, UN, CN, pi]. More... | |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| DacResult< T > | line::pfqn::pfqn_dac (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z, const Matrix< T > &mu) |
| Distribution Analysis by Chain (de Souza e Silva, UCLA CSD-870023, 1987): the JOINT queue-length distribution of a closed product-form network with single-server, infinite-server and queue-dependent centers. | |
| template<class T> | |
| DacResult< T > | line::pfqn::pfqn_dac (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z) |
Distribution Analysis by Chain (de Souza e Silva, UCLA CSD-870023, 1987): the JOINT queue-length distribution of a closed product-form network with single-server, infinite-server and queue-dependent centers.
Templated port of matlab/src/api/pfqn/pfqn_dac.m together with its local functions dac_lattice, dac_compositions, dac_rank and dac_step. The recursion runs over a related network in which every chain holds one customer, a transformation that leaves the aggregate queue-length distribution unchanged. Adding one customer with demands r to a network of k customers gives
c_j = sum_{n=1..k+1} (n/mu_j(n)) P_j^{k}(n-1) lambda = 1 / sum_j r_j c_j P^{k+1}(n) = lambda sum_j r_j (n_j/mu_j(n_j)) P^{k}(n - e_j)
so probability mass is conserved by construction and the recursion is numerically stable, unlike a normalizing-constant route. Per-chain throughputs and queue lengths come from re-running the tail of the recursion with each chain placed last, sharing the common prefix.
ARITHMETIC. Every step is an addition, a multiplication or a division of field elements, so the whole joint distribution is EXACT in rational arithmetic and the routine is deliberately left ungated. That is the point of the algorithm here: an exact joint distribution is what availability modelling needs, and it is the natural oracle for the marginal that MVA returns.
Definition in file pfqn_dac.h.