![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The generator, the state space it is indexed by, and the event rates. More...
#include <line/solvers/ctmc/solver_ctmc.h>
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. | |
The generator, the state space it is indexed by, and the event rates.
Definition at line 57 of file solver_ctmc.h.
| 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().
| 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().
| std::vector<std::vector<std::vector<T> > > line::ctmc::CtmcResult< T >::dep_rates |
Definition at line 67 of file solver_ctmc.h.
Referenced by line::ctmc::ctmc_eliminate_vanishing(), line::ctmc::solver_ctmc(), and line::ctmc::solver_ctmc_avg_from_pi().
| 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().
| 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().
| 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().
| 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().
| 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().
| std::vector<NetState<T> > line::ctmc::CtmcResult< T >::space |
row i of Q is space[i]
Definition at line 59 of file solver_ctmc.h.
Referenced by line::ctmc::ctmc_eliminate_vanishing(), line::ctmc::ctmc_signal_busy(), line::ctmc::ctmc_signal_lossy(), line::ctmc::solve_struct(), line::ctmc::solver_ctmc(), and line::ctmc::solver_ctmc_avg_from_pi().
| 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().
| 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().