![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Port of ldqbd_mphc.m and ph_multisets.m: the exact level-dependent QBD blocks of an M/PH/c queue. More...
#include <algorithm>#include <cmath>#include <cstddef>#include <map>#include <string>#include <vector>#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Classes | |
| struct | line::mam::LdqbdMphcBlocks< T > |
| The three block lists of a level-dependent QBD, as ldqbd takes them. More... | |
Namespaces | |
| namespace | line |
| namespace | line::mam |
Functions | |
| std::vector< std::vector< int > > | line::mam::ph_multisets (std::size_t p, std::size_t k) |
| Configurations of k identical servers over p service phases. | |
| template<class T> | |
| LdqbdMphcBlocks< T > | line::mam::ldqbd_mphc (const Matrix< T > &D0, const Matrix< T > &D1, const std::vector< T > &alpha, double c, const std::vector< T > &arrRate, const std::vector< T > &sf) |
| Block-tridiagonal generator of an M/PH/c queue with level-dependent arrivals. | |
Variables | |
| constexpr std::size_t | line::mam::LDQBD_MPHC_MAX_CONFIGS = 2000 |
| The widest level is the repeating one, and the LD-QBD recursion inverts one matrix of that order per level, so that is the size worth guarding. | |
Port of ldqbd_mphc.m and ph_multisets.m: the exact level-dependent QBD blocks of an M/PH/c queue.
THE POINT OF THE MULTISET. The level is the number of jobs at the station, and the coordinate INSIDE a level is the multiset of the phases the min(n,c) busy servers sit in. The collapsed alternative – one PH process run at min(n,c) times its speed – gets the aggregate service rate right but forgets which phase each busy server is in, which turns c servers into one fast server whose remaining work is a single phase-type variable. Counting rather than ordering the phases costs nchoosek(min(n,c)+p-1, p-1) states per level instead of p^min(n,c), because identical servers are exchangeable.
LEVEL SIZES GROW over the boundary levels 0..c and repeat above them, so the blocks joining differently sized neighbours are rectangular. ldqbd, its rate matrices and its stationary vector all accept that heterogeneity; level 0 is the single empty configuration.
References: S. Asmussen and J.R. Moller, "Calculation of the steady state waiting time distribution in GI/PH/c and MAP/PH/c queues", Queueing Systems 37(1):9-29, 2001; M. F. Neuts, "Matrix-geometric solutions in stochastic models", Johns Hopkins University Press, 1981.
Definition in file ldqbd_mphc.h.