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

Shared declarations for the maximum-entropy (Kouvatsos) queueing network algorithms. More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <vector>
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for me_types.h:

Go to the source code of this file.

Classes

struct  line::me::MeOptions
 Iteration control, mirroring the MATLAB options struct. More...
struct  line::me::MeResult< T >
 Mean-value results shared by the open, closed and mixed algorithms. More...

Namespaces

namespace  line
namespace  line::me

Detailed Description

Shared declarations for the maximum-entropy (Kouvatsos) queueing network algorithms.

Templated port of matlab/src/api/me/, cross-checked against jar/src/main/java/jline/api/nc/Me_oqn.java, Me_cqn.java and Me_mqn.java.

Reference: D.D. Kouvatsos, "Entropy Maximisation and Queueing Network Models", Annals of Operations Research 48:63-126, 1994.

CONVENTIONS

  • Stations are indexed 0..M-1, classes 0..R-1.
  • Per-station, per-class data (arrival rates, service rates, scvs) are (M x R) matrices; routing is a vector of R (M x M) matrices with P[r](j,i) the probability that a class-r job moves from j to i.
  • The server count is a vector of longs with 0 standing for an INFINITE-SERVER station. MATLAB and the JAR use Inf for this; a templated port cannot rely on T having an infinity (Rational does not), and the algorithms only ever test isinf(c(i)), never arithmetic on it.
  • insens marks stations with an insensitive discipline (PS, LCFS-PR), which are solved by the product-form mean queue length instead of the GE-type FCFS formula.

ARITHMETIC Every function in this domain is a damped fixed-point iteration stopped by a relative tolerance, and me_cqn additionally evaluates its Lagrangian coefficient functions through log-gamma and exp. They therefore all carry static_assert(num_traits<T>::has_transcendental) and are instantiated for double and Real50 only. Raising the precision is a legitimate use here: the ME coefficients of (3.8) are products of up to sum(N) factors, and the convolution that normalizes them cancels heavily at high population, which is precisely where the double solution starts to lose its population constraint sum_i L(i,r) = N(r).

Definition in file me_types.h.