LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
sn_routing_ergodic.h File Reference

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"
Include dependency graph for sn_routing_ergodic.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).

Detailed Description

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.