![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
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> | |
| 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> | |
| 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 std::vector<std::vector<bool> > line::mdd::MddMask |
| 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.
| 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.
| mu | per-station exponential service rates, length M |
| P | M x M Markovian routing matrix (row-stochastic, irreducible) |
| servers | servers per station; infinite for a delay/IS station |
| N | closed population |
| reuse | an 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().
| 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.
| mu | station service rates, 1/E[S]; entry i is ignored when station i is given a phase-type law through proc |
| P | station-to-station routing matrix, row-stochastic |
| servers | servers per station, infinite for delay/IS |
| N | closed population |
| proc | per-station service law; an absent or present == false entry is an exponential station |
| sched | per-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().
| 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().
| MddMcdResult< T > line::mdd::mdd_mcd | ( | const MddStruct & | mdds, |
| const MddDescriptor< T > & | desc, | ||
| const MddMcdOptions & | options = MddMcdOptions() ) |
Approximate stationary measures by decision-diagram-guided aggregation.
| mdds | the reachable set, in MDD orientation |
| desc | the Kronecker rate descriptor |
| options | level-iteration knobs |
Definition at line 384 of file mdd_mcd.h.
References line::mdd::MddStruct::domain, line::mdd::MddDescriptor< T >::events, line::mdd::MddLocalMatrix< T >::identity(), line::InputError::InputError(), line::mdd::MddDescriptor< T >::invariant_value, line::mdd::MddDescriptor< T >::invariant_weights, line::mdd::MddMcdResult< T >::iters, line::mdd::MddStruct::K, line::mdd::MddEvent< T >::lev, line::mdd::MddMcdResult< T >::level_sizes, mdd_mcd(), line::mdd::MddMcdResult< T >::Mrows, line::mdd::MddDescriptor< T >::mu, line::mdd::MddDescriptor< T >::N, line::mdd::MddStruct::nnodes, line::mdd::MddMcdResult< T >::no_aggregation, line::mdd::MddStruct::node, line::NumericError::NumericError(), line::mdd::MddMcdResult< T >::paths_per_level, line::mdd::MddMcdResult< T >::pik, line::mdd::MddMcdResult< T >::QLen, line::mdd::MddDescriptor< T >::servers, TERM_TRUE, line::mdd::MddMcdResult< T >::U, line::mdd::MddDescriptor< T >::valuemap, line::mdd::MddEvent< T >::W, and line::mdd::MddMcdResult< T >::X.
Referenced by mdd_mcd(), and line::ctmc::solver_ctmc_mdd_analyzer().
| 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.
| mu | station service rates, ignored where proc gives a law |
| P | station-to-station routing matrix, row-stochastic |
| servers | servers per station, 1 (PS) or infinite (IS); no other value has a per-phase-count encoding here |
| N | closed population |
| proc | per-station service law; an absent or present == false entry is an exponential station |
Definition at line 242 of file mdd_ps.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_entry_law(), mdd_ps(), 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_ps(), and line::ctmc::solver_ctmc_mdd_analyzer().
|
inline |
Generate and store the reachability set into a quasi-reduced ordered MDD.
| domain | per-level local-state counts, values 0..domain[k]-1 |
| init | the initial global state, 0-based local values |
| nextfun | the next-state function |
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().
| 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().
| 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().
| 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).
| mdds | the reachable set, in MDD orientation (level 0 is the root) |
| g | g[l][v] is g_l(v), the per-level factor of the product form |
| mask | per-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().
|
inline |
Human-readable storage summary, the twin of MDD.toString.
Definition at line 377 of file mdd.h.
References line::mdd::MddStats::explicit_ints, line::mdd::MDD::K(), line::mdd::MddStats::mdd_ints, mdd_to_string(), line::mdd::MddStats::num_nodes, line::mdd::MddStats::num_states, line::mdd::MDD::stats(), and line::mdd::MddStats::table_nodes.
Referenced by mdd_to_string().
| 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().
| 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().