![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Convolution algorithm for the exact normalizing constant of a closed product-form network (Buzen 1973, Reiser-Kobayashi 1975). More...
#include <cmath>#include <type_traits>#include <vector>#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"#include "line/util/population.h"Go to the source code of this file.
Classes | |
| struct | line::pfqn::NcResult< T > |
| Return value of the normalizing-constant family, mirroring Ret.pfqnNc. More... | |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| NcResult< T > | line::pfqn::pfqn_ca (const Matrix< T > &L, const std::vector< int > &N, const Matrix< T > &Z) |
| Convolution algorithm for the exact normalizing constant of a closed product-form network (Buzen 1973, Reiser-Kobayashi 1975). | |
| template<class T> | |
| NcResult< T > | line::pfqn::pfqn_ca (const Matrix< T > &L, const std::vector< int > &N) |
| Overload without think times. | |
Convolution algorithm for the exact normalizing constant of a closed product-form network (Buzen 1973, Reiser-Kobayashi 1975).
Templated port of matlab/src/api/pfqn/pfqn_ca.m and jar/src/main/java/jline/api/pfqn/nc/Pfqn_ca.java, cross-checked against mp_pfqn's ca/convolution_multi_exact.c for the exact path.
G_m(n) = G_{m-1}(n) + sum_r L(m,r) G_m(n - e_r), with G_0(n) the delay balance function prod_r Z_r^{n_r}/n_r!.
Scaling: in IEEE double the recursion overflows as soon as G(N) leaves the double range, so the Lam (1982) dynamic scaling of the MATLAB implementation is applied there. No other number type needs it: exact rationals have no exponent range at all, and the high-precision binary floats have an exponent range wide enough that G never leaves it in practice. The scaling is exact either way, since dividing every demand by a power of two divides G(N) by exactly that power raised to sum(N).
Definition in file pfqn_ca.h.