![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Reducibility of a network's ROUTING, and the repair that makes it ergodic. More...
#include <algorithm>#include <cstddef>#include <map>#include <string>#include <utility>#include <vector>#include "line/api/mc/stronglyconncomp.h"#include "line/lang/qn/network_struct.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Classes | |
| struct | line::sn::RoutingErgodicityInfo |
| The reducibility structure of a routing matrix, the MATLAB info struct. More... | |
Namespaces | |
| namespace | line |
| namespace | line::sn |
Functions | |
| template<class T> | |
| RoutingErgodicityInfo | line::sn::sn_is_routing_ergodic (const qn::NetworkStruct< T > &sn) |
| Ergodicity of the routing, with the structure behind the verdict. | |
| template<class T> | |
| RoutingErgodicityInfo | line::sn::sn_reducibility_info (const qn::NetworkStruct< T > &sn) |
| The reducibility structure plus a suggested repair per absorbing station. | |
| template<class T> | |
| std::vector< std::size_t > | line::sn::sn_absorbing_stations (const qn::NetworkStruct< T > &sn) |
| NODE indices, 1-based, of the absorbing stations. | |
| template<class T> | |
| std::map< std::pair< std::size_t, std::size_t >, Matrix< T > > | line::sn::sn_make_ergodic (const qn::NetworkStruct< T > &sn, const std::string &targetName=std::string()) |
| A routing map that makes the network ergodic, by redirecting every absorbing station to TARGETNAME (empty for the default: the first Delay, else the first non-absorbing station). | |
Reducibility of a network's ROUTING, and the repair that makes it ergodic.
Port of the MATLAB @MNetwork methods isRoutingErgodic, getReducibilityInfo, getAbsorbingStations and makeErgodic, and twin of the JAR jline.lang.RoutingErgodicity and the native Python Network.get_reducibility_info / make_ergodic.
This inspects the ROUTING STRUCTURE ONLY, not the state space. Ergodic routing is NECESSARY but not sufficient for the chain to be ergodic: state-dependent routing, finite buffers and blocking can still make the CTMC reducible. The converse is the useful direction – reducible routing is a defect the modeller can see and fix before any solver runs, and it is what otherwise surfaces as "the generator has no recurrent state" inside ctmc_solve.
The adjacency is built over the NODE-level blocks sn.P[(r,s)], folding every class pair into one graph: a job that leaves node i as another class has still left i. A station is ABSORBING when it has routing defined and no edge to any other node; the Sink is removed from that list, being legitimately absorbing in an open network.
ARITHMETIC: comparisons against zero only, so this is exact in every instantiation and needs no transcendental gate.
Definition in file sn_routing_ergodic.h.