![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Stability (positive recurrence) of the M/M/c/c retrial queue. More...
#include <cmath>#include <cstddef>#include <limits>#include <string>#include <vector>#include "line/api/qsys/qsys_mmcc_retrial_fp.h"#include "line/api/qsys/qsys_retrial_policy.h"#include "line/num/number.h"#include "line/util/error.h"Go to the source code of this file.
Classes | |
| struct | line::qsys::RetrialStabilityResult< T > |
| Return value of qsys_retrial_isstable, mirroring the three MATLAB outputs. More... | |
Namespaces | |
| namespace | line |
| Conservation laws of a layered queueing network, enumerated from its structure. | |
| namespace | line::qsys |
| namespace | line::qsys::retrial_isstable_detail |
Functions | |
| template<class T> | |
| std::vector< T > | line::qsys::retrial_isstable_detail::expand (const std::vector< T > &v, std::size_t K, const char *name, const T &def) |
| A scalar broadcast to K entries, or a K-vector left as it is. | |
| template<class T> | |
| RetrialStabilityResult< T > | line::qsys::qsys_retrial_isstable (const std::vector< T > &lambda, const std::vector< T > &mu, unsigned c, const std::vector< T > &alpha, RetrialPolicy policy=RetrialPolicy::LINEAR, const std::vector< T > &p=std::vector< T >(), const std::vector< T > &q=std::vector< T >(), const std::vector< T > &gamma=std::vector< T >(), double maxOrbit=-1.0) |
Stability (positive recurrence) of the M/M/c/c retrial queue.
Port of matlab/src/api/qsys/qsys_retrial_isstable.m. Poisson arrivals of rate lambda_k, c exponential servers of rate mu_k, exponential retrials of rate alpha_k (per orbiting customer under LINEAR, of the whole orbit under CONSTANT), join probability p_k, persistence probability q_k, orbit abandonment rate gamma_k and orbit capacity maxOrbit (-1 = unbounded).
CONDITIONS: A finite orbit, gamma > 0, or q < 1 under LINEAR always gives a stable chain: the orbit then loses customers at a rate that grows with its size. LINEAR with q = 1 and gamma = 0: stable iff sum_k lambda_k p_k / mu_k < c (Falin and Templeton 1997, Sec. 2.1 for p = 1). CONSTANT, single class, gamma = 0: with x = B((lambda+alpha)/mu, c) the orbit drift is negative iff lambda p x < alpha (1-x) + alpha (1-q) x (Artalejo, Gomez-Corral and Neuts 2001 for p = q = 1).
A multiclass queue under CONSTANT retrial, or with some classes self- limiting and others not, has no known necessary-and-sufficient condition and is refused (LINE:unsupported:Retrial).
The margin is infinite when the orbit cannot grow without bound, so the function needs a number type that holds an infinity (double or real).
Definition in file qsys_retrial_isstable.h.