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

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

Detailed Description

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.