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

Kronecker rate descriptor for shared-server stations with phase-type service. More...

#include <cmath>
#include <cstddef>
#include <map>
#include <string>
#include <vector>
#include "line/api/mdd/mdd_types.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for mdd_ps.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mdd

Functions

template<class T>
MddDescriptor< T > line::mdd::mdd_ps (const std::vector< T > &mu, const Matrix< T > &P, const std::vector< double > &servers, int N, const std::vector< MddServiceLaw< T > > &proc=std::vector< MddServiceLaw< T > >())
 Build the descriptor.

Detailed Description

Kronecker rate descriptor for shared-server stations with phase-type service.

Port of matlab/src/api/mdd/mdd_ps.m, jline.api.mdd.Mdd_ps and python/line_solver/api/mdd/ps.py.

Under processor sharing every job at a station is in service at once, each holding its own phase, so naming a single in-service phase (what mdd_descriptor does, which is non-preemptive semantics) cannot represent the state. The local state here is instead the PER-PHASE COUNT vector v = (v_1,...,v_h), v_a jobs in phase a, with n = sum(v) jobs present. That is still a per-station quantity, so every event stays a product of per-level terms and the Kronecker form of Eq. 1 survives.

With one server shared by n jobs each job advances at rate 1/n, so from local state v with n = sum(v):

internal v -> v - e_a + e_b at v_a * D0[a][b] / n (a != b) departure v -> v - e_a at v_a * t[a] / n * P[i][j] arrival v -> v + e_b at pie[b]

An infinite-server (delay) station is the same without the 1/n scaling. For h = 1 the departure rate collapses to n*mu/n = mu at PS and to n*mu at IS, reproducing the usual single-server and delay rate laws.

The local domain is the number of compositions of 0..N over h phases, C(N+h,h), against 1+N*h for the non-preemptive encoding: the price of tracking every job's phase rather than one.

Definition in file mdd_ps.h.