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

Level blocks of a BMAP/MAP/1 queue: batch Markovian arrivals against a single-departure MAP service process. More...

#include <cstddef>
#include <vector>
#include "line/api/mam/map_moment.h"
#include "line/api/mam/mmap_lambda.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for qbd_bmapbmap1.h:

Go to the source code of this file.

Classes

struct  line::mam::QbdBmapBmap1Blocks< T >
 The level blocks assembled by qbd_bmapbmap1. More...

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
QbdBmapBmap1Blocks< T > line::mam::qbd_bmapbmap1 (const Map< T > &arrival, const std::vector< T > &pbatch, const Map< T > &service)
 Level blocks of a BMAP/MAP/1 queue.

Detailed Description

Level blocks of a BMAP/MAP/1 queue: batch Markovian arrivals against a single-departure MAP service process.

Templated port of matlab/src/api/mam/qbd_bmapbmap1.m. The level is the number in system and the phase is the pair (arrival phase, service phase) with the arrival phase major, the same layout as qbd_mapmap1. A batch of size b raises the level by b, so the process is an M/G/1-type chain rather than a QBD, with one up-block per batch size:

A1[b] = (D1^a p_b) (x) I_ns     an arrival batch of size b, level up by b
A0    = D0^a (+) D0^s           no event
A_1   = I_na (x) D1^s           a service completion, level down by one
A0bar = D0^a (x) I_ns           level zero, no server busy
B0    = D0^a (+) I_ns           level-zero local block
B1[b] = A1[b]                   level-zero up-blocks

REFERENCE DEFECT. The MATLAB function declares NO output argument and assembles the blocks into local variables that are discarded on return; the commented-out tail of the file shows the intended Q matrix. Calling it therefore computes the blocks and throws them away, and in a context that expects a value MATLAB raises "Output argument not assigned". The port returns the blocks in a struct, which is the only content the function actually has; nothing else can be inferred from it, in particular no solution of the chain, because none is written.

Two further observations on the reference, reproduced rather than repaired:

  • despite the name, the SERVICE process is an ordinary MAP: A_1 uses D1^s with no batch-size distribution, so only the arrivals are batched.
  • B0 = krons(D0^a, I_ns) is the Kronecker SUM of D0^a with the identity, i.e. D0^a (x) I + I (x) I, which adds an unconditional unit rate on the diagonal of every phase; the analogous boundary block in qbd_mapmap1 is the Kronecker PRODUCT kron(D0^a, I_ns), which is what A0bar holds here. Both are returned under their own names so the discrepancy is visible.

ARITHMETIC. Kronecker products and sums only, so exact at Rational.

Definition in file qbd_bmapbmap1.h.