LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
line::mdd Namespace Reference

Classes

class  MDD
 The diagram: insert / member / index / enumerate / cardinality. More...
struct  MddClosedQnResult
 Result of the MDD-stored exact closed-network solve. More...
struct  MddDescriptor
 Kronecker rate descriptor of a structured model, the input of mdd_mcd. More...
struct  MddEvent
 One event of the Kronecker rate descriptor. More...
struct  MddLocalMatrix
 A local rate matrix W_k^e of the Kronecker descriptor, held row-compressed. More...
struct  MddMcdOptions
 Knobs of the level iteration in mdd_mcd. More...
struct  MddMcdResult
 Result of the Miner-Ciardo-Donatelli level aggregation. More...
struct  MddServiceLaw
 Phase-type service law of one station, as a Markovian (D0,D1) pair. More...
struct  MddStats
 Storage description of the set held in an MDD. More...
struct  MddStruct
 Plain-array export of an MDD, the input contract of mdd_mcd. More...

Typedefs

typedef std::vector< std::vector< bool > > MddMask
 Per-level admissible local values, the restriction of Sec.
typedef std::function< std::vector< std::vector< int > >(const std::vector< int > &)> MddNextState
 Successor function over local indices, for mdd_reachset.

Functions

std::string mdd_to_string (const MDD &m)
 Human-readable storage summary, the twin of MDD.toString.
template<class T>
MddClosedQnResult< T > mdd_closedqn (const std::vector< T > &mu, const Matrix< T > &P, const std::vector< double > &servers, int N, const MDD *reuse=nullptr)
 Exact solve of a single-class closed exponential queueing network whose CTMC state space (reachable occupancy vectors) is stored in a Multi-valued Decision Diagram instead of an explicit state list.
template<class T>
MddDescriptor< T > mdd_descriptor (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 > >(), const std::vector< std::string > &sched=std::vector< std::string >())
 Build the descriptor.
template<class T>
MddMcdResult< T > mdd_mcd (const MddStruct &mdds, const MddDescriptor< T > &desc, const MddMcdOptions &options=MddMcdOptions())
 Approximate stationary measures by decision-diagram-guided aggregation.
template<class T>
MddDescriptor< T > 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.
MDD mdd_reachset (const std::vector< int > &domain, const std::vector< int > &init, const MddNextState &nextfun)
 Generate and store the reachability set into a quasi-reduced ordered MDD.
template<class T>
mdd_rec_masked (const MddStruct &mdds, const std::vector< std::vector< T > > &g, const MddMask &mask)
 Unnormalised mass of the masked subset of the reachable set (Algorithm 1).
template<class T>
mdd_rec (const MddStruct &mdds, const std::vector< std::vector< T > > &g)
 The normalising constant G = sum_{s in S} prod_l g_l(s_l).
template<class T>
std::vector< T > mdd_rec_marginal (const MddStruct &mdds, const std::vector< std::vector< T > > &g, std::size_t l)
 Unnormalised masses of {s in S : s_l = k}, one per local value k of level l.
template<class T>
std::vector< T > mdd_entry_law (const std::vector< T > &given, const Matrix< T > &D1, std::size_t h, std::size_t i, const std::string &caller)
 Entry law of a phase-type station, taken as given or derived from D1.

Variables

const int TERM_TRUE = -1
 Terminal node "1": a completed path is accepted.
const int TERM_FALSE = 0
 Terminal node "0": empty subgraph.

Typedef Documentation

◆ MddMask

typedef std::vector<std::vector<bool> > line::mdd::MddMask

Per-level admissible local values, the restriction of Sec.

5.3.

mask[l][v] false drops local value v of level l from the sum. An EMPTY mask admits everything, which is the plain MDD-rec of Algorithm 1.

Definition at line 65 of file mdd_rec.h.

◆ MddNextState

typedef std::function<std::vector<std::vector<int> >(const std::vector<int>&)> line::mdd::MddNextState

Successor function over local indices, for mdd_reachset.

Definition at line 155 of file mdd_types.h.

Function Documentation

◆ mdd_closedqn()

template<class T>
MddClosedQnResult< T > line::mdd::mdd_closedqn ( const std::vector< T > & mu,
const Matrix< T > & P,
const std::vector< double > & servers,
int N,
const MDD * reuse = nullptr )

Exact solve of a single-class closed exponential queueing network whose CTMC state space (reachable occupancy vectors) is stored in a Multi-valued Decision Diagram instead of an explicit state list.

Parameters
muper-station exponential service rates, length M
PM x M Markovian routing matrix (row-stochastic, irreducible)
serversservers per station; infinite for a delay/IS station
Nclosed population
reusean already-built reachable set (the mdd of a previous result on the same mu/P/servers/N) to skip regeneration, or nullptr

Definition at line 84 of file mdd_closedqn.h.

References line::mdd::MDD::cardinality(), line::Matrix< T >::cols(), line::mc::ctmc_makeinfgen(), line::mc::ctmc_solve(), line::mdd::MDD::enumerate(), line::mdd::MDD::index(), line::InputError::InputError(), line::Matrix< T >::Matrix(), line::mdd::MddClosedQnResult< T >::mdd, mdd_closedqn(), mdd_reachset(), line::mdd::MddClosedQnResult< T >::pi, line::mdd::MddClosedQnResult< T >::Q, line::mdd::MddClosedQnResult< T >::QLen, line::Matrix< T >::rows(), line::mdd::MddClosedQnResult< T >::states, line::mdd::MDD::stats(), line::mdd::MddClosedQnResult< T >::stats, line::mdd::MddClosedQnResult< T >::time_gen, line::mdd::MddClosedQnResult< T >::time_metrics, line::mdd::MddClosedQnResult< T >::time_reach, line::mdd::MddClosedQnResult< T >::time_solve, line::mdd::MddClosedQnResult< T >::U, and line::mdd::MddClosedQnResult< T >::X.

Referenced by mdd_closedqn().

◆ mdd_descriptor()

template<class T>
MddDescriptor< T > line::mdd::mdd_descriptor ( 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>>(),
const std::vector< std::string > & sched = std::vector<std::string>() )

Build the descriptor.

Parameters
mustation service rates, 1/E[S]; entry i is ignored when station i is given a phase-type law through proc
Pstation-to-station routing matrix, row-stochastic
serversservers per station, infinite for delay/IS
Nclosed population
procper-station service law; an absent or present == false entry is an exponential station
schedper-station discipline names, consulted only to REJECT a phase-type law at a preemptive-resume or shared-server station; may be empty when every station is non-preemptive

Definition at line 269 of file mdd_descriptor.h.

References line::mdd::MddEvent< T >::a, line::mdd::MddEvent< T >::b, line::Matrix< T >::cols(), line::mdd::MddDescriptor< T >::domain, line::mdd::MddDescriptor< T >::events, line::mdd::MddDescriptor< T >::init, line::InputError::InputError(), line::mdd::MddDescriptor< T >::K, line::mdd::MddEvent< T >::lev, line::Matrix< T >::Matrix(), mdd_descriptor(), mdd_entry_law(), line::mdd::MddDescriptor< T >::mu, line::mdd::MddDescriptor< T >::N, line::mdd::MddDescriptor< T >::nextfun, line::mdd::MddLocalMatrix< T >::nnz, line::mdd::MddDescriptor< T >::nphases, line::mdd::MddDescriptor< T >::P, line::Matrix< T >::rows(), line::mdd::MddDescriptor< T >::servers, line::mdd::MddDescriptor< T >::valuemap, and line::mdd::MddEvent< T >::W.

Referenced by mdd_descriptor(), and line::ctmc::solver_ctmc_mdd_analyzer().

◆ mdd_entry_law()

template<class T>
std::vector< T > line::mdd::mdd_entry_law ( const std::vector< T > & given,
const Matrix< T > & D1,
std::size_t h,
std::size_t i,
const std::string & caller )

Entry law of a phase-type station, taken as given or derived from D1.

A {D0,D1} pair carries its own restart law: for a renewal process D1 = t0*pie, so every row with a positive exit rate is proportional to pie. Deriving it is not optional – defaulting to e_1 instead silently replaces a hyperexponential (whose D0 is diagonal, so a job entering phase 1 can never leave it) by an exponential at the phase-1 rate.

Definition at line 268 of file mdd_types.h.

References line::InputError::InputError(), and mdd_entry_law().

Referenced by mdd_descriptor(), mdd_entry_law(), mdd_ps(), and line::spn::spn_mdd().

◆ mdd_mcd()

◆ mdd_ps()

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>>() )

◆ mdd_reachset()

MDD line::mdd::mdd_reachset ( const std::vector< int > & domain,
const std::vector< int > & init,
const MddNextState & nextfun )
inline

Generate and store the reachability set into a quasi-reduced ordered MDD.

Parameters
domainper-level local-state counts, values 0..domain[k]-1
initthe initial global state, 0-based local values
nextfunthe next-state function
Returns
an MDD holding every state reachable from init

Definition at line 44 of file mdd_reachset.h.

References line::mdd::MDD::compact(), line::mdd::MDD::insert(), mdd_reachset(), and line::mdd::MDD::member().

Referenced by mdd_closedqn(), mdd_reachset(), and line::ctmc::solver_ctmc_mdd_analyzer().

◆ mdd_rec()

template<class T>
T line::mdd::mdd_rec ( const MddStruct & mdds,
const std::vector< std::vector< T > > & g )

The normalising constant G = sum_{s in S} prod_l g_l(s_l).

Definition at line 139 of file mdd_rec.h.

References mdd_rec(), and mdd_rec_masked().

Referenced by mdd_rec(), and line::spn::spn_metrics().

◆ mdd_rec_marginal()

template<class T>
std::vector< T > line::mdd::mdd_rec_marginal ( const MddStruct & mdds,
const std::vector< std::vector< T > > & g,
std::size_t l )

Unnormalised masses of {s in S : s_l = k}, one per local value k of level l.

Divided by G these are P(m_l = k) of Sec. 5.3: the mean occupancy of a level is sum_k k * P(m_l = k), and its utilization 1 - P(m_l = 0).

Definition at line 150 of file mdd_rec.h.

References line::mdd::MddStruct::domain, line::InputError::InputError(), line::mdd::MddStruct::K, mdd_rec_marginal(), and mdd_rec_masked().

Referenced by line::lossn::lossn_rec(), mdd_rec_marginal(), and line::spn::spn_metrics().

◆ mdd_rec_masked()

template<class T>
T line::mdd::mdd_rec_masked ( const MddStruct & mdds,
const std::vector< std::vector< T > > & g,
const MddMask & mask )

Unnormalised mass of the masked subset of the reachable set (Algorithm 1).

Parameters
mddsthe reachable set, in MDD orientation (level 0 is the root)
gg[l][v] is g_l(v), the per-level factor of the product form
maskper-level admissible values; empty admits everything and returns G

Definition at line 123 of file mdd_rec.h.

References line::mdd::MddStruct::K, mdd_rec_masked(), line::mdd::MddStruct::nnodes, line::mdd::MddStruct::root, and TERM_FALSE.

Referenced by mdd_rec(), mdd_rec_marginal(), mdd_rec_masked(), and line::spn::spn_rec_enabled().

◆ mdd_to_string()

std::string line::mdd::mdd_to_string ( const MDD & m)
inline

Variable Documentation

◆ TERM_FALSE

const int line::mdd::TERM_FALSE = 0

Terminal node "0": empty subgraph.

Definition at line 50 of file mdd.h.

Referenced by line::mdd::MDD::compact(), line::mdd::MDD::enumerate(), line::mdd::MDD::index(), line::mdd::MDD::MDD(), mdd_rec_masked(), and line::mdd::MDD::member().

◆ TERM_TRUE

const int line::mdd::TERM_TRUE = -1

Terminal node "1": a completed path is accepted.

Definition at line 48 of file mdd.h.

Referenced by line::mdd::MDD::index(), mdd_mcd(), and line::mdd::MDD::member().