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

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

Detailed Description

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.