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

Port of solver_mam_ldqbd_transient.m: transient queue length, utilization and throughput of a single-class OPEN queue, and the fast path behind getTranAvg. More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <string>
#include <vector>
#include "line/api/mam/libqbd_taylor.h"
#include "line/api/mam/map_moment.h"
#include "line/lang/distribution.h"
#include "line/lang/qn/network_struct.h"
#include "line/solvers/mam/mam_types.h"
#include "line/util/error.h"
#include "line/util/expm.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for solver_mam_ldqbd_transient.h:

Go to the source code of this file.

Classes

struct  line::mam::TranCurve< T >
 One station-class transient curve, the reference's [metric, time] pair. More...
struct  line::mam::TranResult< T >
 What getTranAvg returns: queue length, utilization and throughput curves. More...

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
bool line::mam::mam_transient_qbd_applicable (const qn::NetworkStruct< T > &L)
 Port of mam_transient_qbd_applicable.m: true when the Laplace-domain transient QBD should run instead of this fast path.
template<class T>
TranResult< T > line::mam::solver_mam_ldqbd_transient (const qn::NetworkStruct< T > &L, const MamOptions &opt)
 Port of solver_mam_ldqbd_transient.m.

Detailed Description

Port of solver_mam_ldqbd_transient.m: transient queue length, utilization and throughput of a single-class OPEN queue, and the fast path behind getTranAvg.

TWO ENGINES, chosen by the buffer, and the split is forced rather than stylistic:

  • FINITE capacity: the generator is a finite matrix, so the law is pi(t) = pi(0) exp(Qt), stepped on a uniform grid by ONE matrix exponential expm(Q dt) reused at every point. That is the reference's construction and it is exact up to expm.
  • INFINITE capacity: there is no finite generator to exponentiate, so the reference calls libQBD's adaptive Taylor series, which grows the represented level depth as mass reaches it (api/mam/libqbd_taylor.h). The reference grid is libQBD's own, one point per 1/|min diagonal|.

WHAT THE PORT DOES NOT DO. The reference's time grid in the finite branch is min(101, max(11, round(10 T))) points, which is reproduced exactly, because a transient result read off a different grid cannot be compared point for point with the reference at all.

PH SERVICE IS SINGLE-SERVER ONLY, in both branches, and the reference says so (Transient QBD with PH service supports single-server only): the level phase would have to carry the multiset of in-service phases. Refused by name.

Definition in file solver_mam_ldqbd_transient.h.