LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
line::ctmc::CtmcResult< T > Struct Template Reference

The generator, the state space it is indexed by, and the event rates. More...

#include <line/solvers/ctmc/solver_ctmc.h>

Collaboration diagram for line::ctmc::CtmcResult< T >:

Public Attributes

Matrix< T > Q
 (n x n) infinitesimal generator
std::vector< NetState< T > > space
 row i of Q is space[i]
std::vector< std::vector< std::vector< T > > > arv_rates
 arvRates / depRates, indexed [state][stateful-1][class-1]: the total rate of arrivals into, and departures out of, each stateful node in each class, from each state.
std::vector< std::vector< std::vector< T > > > dep_rates
std::vector< Matrix< T > > filt
 Dfilt, MATLAB's EVENT FILTRATION: filt[a] holds only the rates that synchronization a contributed, so sum_a filt[a] is the off-diagonal part of Q.
std::vector< std::vector< Matrix< T > > > start_filt
 The DERIVED START and PREEMPT filtrations, indexed [station-1][class-1]: the rate at which a transition starts a class-r service at station i, and the rate at which it pushes a class-r job in service back into the buffer.
std::vector< std::vector< Matrix< T > > > preempt_filt
Matrix< T > Qimm
 Qimm, the IMMEDIATE-ONLY part of Q: the arcs contributed by a Router or Fork pass-through, by a Join firing on an FJ-augmented struct, and by an SPN ENABLE or an IMMEDIATE-mode firing.
std::vector< std::vector< std::vector< T > > > arv_rates_imm
 The parts of arv_rates / dep_rates contributed by those same immediate sources.
std::vector< std::vector< std::vector< T > > > dep_rates_imm
std::vector< std::size_t > vanishing
 The rows the purge restated, i.e.

Detailed Description

template<class T>
struct line::ctmc::CtmcResult< T >

The generator, the state space it is indexed by, and the event rates.

Definition at line 57 of file solver_ctmc.h.

Member Data Documentation

◆ arv_rates

template<class T>
std::vector<std::vector<std::vector<T> > > line::ctmc::CtmcResult< T >::arv_rates

arvRates / depRates, indexed [state][stateful-1][class-1]: the total rate of arrivals into, and departures out of, each stateful node in each class, from each state.

They are accumulated per synchronization rather than read off Q, because Q has already summed the contributions of every synchronization into one entry and they cannot be separated afterwards.

Definition at line 67 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), line::ctmc::ctmc_signal_lossy(), line::ctmc::solver_ctmc(), and line::ctmc::solver_ctmc_avg_from_pi().

◆ arv_rates_imm

template<class T>
std::vector<std::vector<std::vector<T> > > line::ctmc::CtmcResult< T >::arv_rates_imm

The parts of arv_rates / dep_rates contributed by those same immediate sources.

Kept alongside the totals for two reasons, both from solver_ctmc.m: the purge has to restate a vanishing row's rates as its immediate part, and the RATE COMPLEMENT applies to the immediate part alone – an event that fires only from vanishing states would otherwise be lost when those rows are eliminated. Empty when Qimm is.

Definition at line 115 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), and line::ctmc::solver_ctmc().

◆ dep_rates

template<class T>
std::vector<std::vector<std::vector<T> > > line::ctmc::CtmcResult< T >::dep_rates

◆ dep_rates_imm

template<class T>
std::vector<std::vector<std::vector<T> > > line::ctmc::CtmcResult< T >::dep_rates_imm

Definition at line 115 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), and line::ctmc::solver_ctmc().

◆ filt

template<class T>
std::vector<Matrix<T> > line::ctmc::CtmcResult< T >::filt

Dfilt, MATLAB's EVENT FILTRATION: filt[a] holds only the rates that synchronization a contributed, so sum_a filt[a] is the off-diagonal part of Q.

IT CANNOT BE RECOVERED FROM Q, which is why it is carried rather than recomputed: Q has already summed every synchronization's contribution into one entry. The response-time CDF is built by splitting the generator on ONE event – the tagged job's arrival, then its departure – into a MAP (Q - D1, D1), and that split needs the per-event matrix.

Empty unless solver_ctmc was asked for it: it costs one n x n matrix per synchronization, which on a model with many routing pairs dwarfs Q itself.

Definition at line 82 of file solver_ctmc.h.

Referenced by line::ctmc::solver_ctmc().

◆ preempt_filt

template<class T>
std::vector<std::vector<Matrix<T> > > line::ctmc::CtmcResult< T >::preempt_filt

Definition at line 93 of file solver_ctmc.h.

Referenced by line::ctmc::solver_ctmc(), and line::ctmc::solver_ctmc_avg_from_pi().

◆ Q

template<class T>
Matrix<T> line::ctmc::CtmcResult< T >::Q

(n x n) infinitesimal generator

Definition at line 58 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), line::ctmc::solve_struct(), and line::ctmc::solver_ctmc().

◆ Qimm

template<class T>
Matrix<T> line::ctmc::CtmcResult< T >::Qimm

Qimm, the IMMEDIATE-ONLY part of Q: the arcs contributed by a Router or Fork pass-through, by a Join firing on an FJ-augmented struct, and by an SPN ENABLE or an IMMEDIATE-mode firing.

Empty when the model has no such source.

It exists for the VANISHING-ROW PURGE. A zero-sojourn state is left the instant it is entered, so a timed arc out of one describes an event that cannot occur; the purge replaces such a row by its immediate part. Q has already summed the two together, so the split cannot be recovered from it afterwards – the same reason filt is carried rather than recomputed.

Definition at line 106 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), and line::ctmc::solver_ctmc().

◆ space

◆ start_filt

template<class T>
std::vector<std::vector<Matrix<T> > > line::ctmc::CtmcResult< T >::start_filt

The DERIVED START and PREEMPT filtrations, indexed [station-1][class-1]: the rate at which a transition starts a class-r service at station i, and the rate at which it pushes a class-r job in service back into the buffer.

They are NOT part of filt, which pairs one-to-one with the synchronization list and whose sum is the off-diagonal of Q: a START rides on the SAME arc as the ARV or DEP that causes it, so adding it there would double-count the generator. Filled whenever filt is.

Definition at line 93 of file solver_ctmc.h.

Referenced by line::ctmc::solver_ctmc(), and line::ctmc::solver_ctmc_avg_from_pi().

◆ vanishing

template<class T>
std::vector<std::size_t> line::ctmc::CtmcResult< T >::vanishing

The rows the purge restated, i.e.

the vanishing states that Qimm gave an immediate exit. ctmc_eliminate_vanishing complements exactly these out; carrying them avoids re-running the predicate, which costs one event evaluation per (state, source).

Definition at line 122 of file solver_ctmc.h.

Referenced by line::ctmc::ctmc_eliminate_vanishing(), and line::ctmc::solver_ctmc().


The documentation for this struct was generated from the following file: