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

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

Detailed Description

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.