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

Maximum-entropy algorithm for open multiclass queueing networks. More...

#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"
Include dependency graph for me_oqn.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::me

Functions

template<class T>
MeResult< T > line::me::me_oqn (std::size_t M, std::size_t R, const Matrix< T > &lambda0, const Matrix< T > &Ca0, const Matrix< T > &mu, const Matrix< T > &Cs, const std::vector< Matrix< T > > &P, const std::vector< long > &c, const std::vector< char > &insens, const MeOptions &opt=MeOptions())
 Maximum-entropy algorithm for open multiclass queueing networks.

Detailed Description

Maximum-entropy algorithm for open multiclass queueing networks.

Templated port of matlab/src/api/me/me_oqn.m, cross-checked against jar/src/main/java/jline/api/nc/Me_oqn.java. Implements Kouvatsos (1994) Section 3.2 with the GE/GE/c building block of eq. (3.9) and the GE/GE/inf block, i.e. a GE-type decomposition fixed point:

  1. feedback correction: a self-loop of probability p_ii gives a geometric number of passes, so mu <- mu (1-p_ii), Cs <- p_ii + (1-p_ii) Cs and the residual routing is renormalized;
  2. job flow balance lambda = lambda0 + P' lambda on the ORIGINAL routing, so lambda counts revisits, while lambda_eff = lambda (1 - p_ii) is the rate seen by the corrected queue;
  3. mean queue lengths from the multiclass GE/GE/1/FCFS formula of Section 3.1.1, the product-form formula at insensitive stations, or eq. (3.9) on the class-aggregated stream at multiserver stations;
  4. departure scvs from eq. (3.6) with the marginal utilization of (3.3);
  5. arrival scvs by the GE merging formula (3.7) applied to the thinned departure streams; iterate 3-5 to convergence.

DIVERGENCE from the references on unstable input: MATLAB raises a warning and returns L = Inf at any finite-server station with total utilization >= 1, and continues to iterate the scvs on top of that. This port raises NumericError instead: the templated backends have no infinity (and no warning channel), and an Inf queue length propagated into me_mqn's inflation step would silently poison the open-class results.

ARITHMETIC: a tolerance-stopped fixed point. static_assert(num_traits<T>::has_transcendental)

Definition in file me_oqn.h.