![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Maximum-entropy algorithm for closed multiclass queueing networks. More...
#include <algorithm>#include <cstddef>#include <vector>#include "line/api/me/me_types.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| namespace | line::me |
Functions | |
| template<class T> | |
| MeResult< T > | line::me::me_cqn (std::size_t M, std::size_t R, const std::vector< long > &N, const Matrix< T > &mu, const Matrix< T > &Cs, const std::vector< Matrix< T > > &P, const std::vector< long > &c, const std::vector< long > &refstat_in, const std::vector< char > &insens, const MeOptions &opt=MeOptions()) |
| Maximum-entropy algorithm for closed multiclass queueing networks. | |
Maximum-entropy algorithm for closed multiclass queueing networks.
Templated port of matlab/src/api/me/me_cqn.m, cross-checked against jar/src/main/java/jline/api/nc/Me_cqn.java. Implements the two-stage algorithm of Kouvatsos (1994) Section 3.3 for networks of G/G/1 and G/G/inf queues:
Stage 1 solves a PSEUDO-OPEN network at trial class throughputs X, using the GE-type fixed point of Section 3.2 on the class-composed streams, and moves X until sum_i L(i,r) = N(r). The update is damped and step-clamped, and X is capped below the saturation point of every single-server station, so the iteration cannot walk into an unstable pseudo-open network. Stage 2 builds the ME product form (3.8) from the Stage 1 Lagrangian coefficients, normalizes it by a multiclass convolution over the population lattice, and iterates the work-rate (flow) equations until the throughputs implied by the closed solution agree with those used to parametrize the building blocks.
The coefficient functions f_i are evaluated in the log domain and rescaled by their maximum before the convolution, because they are products of up to sum(N) factors; the per-station scaling cancels in the marginals.
ARITHMETIC: log, exp and a damped tolerance-stopped fixed point. static_assert(num_traits<T>::has_transcendental) This is the algorithm in the port that most repays extra precision: the convolution of the rescaled coefficients cancels heavily at high population, and the population constraint sum_i L(i,r) = N(r) is the observable that degrades first when it does.
Definition in file me_cqn.h.