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

Finite Capacity Regions in SolverCTMC: the DROP rule, as a filter on the enumerated state space, and the gate that refuses WAITQ. More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <vector>
#include "line/lang/qn/network_struct.h"
#include "line/lang/qn/state.h"
#include "line/solvers/ctmc/solver_ctmc.h"
#include "line/util/error.h"
Include dependency graph for solver_ctmc_fcr.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::ctmc

Enumerations

enum class  line::ctmc::DropStrategy
 Blocking and loss rules, with the values of MATLAB DropStrategy. More...

Functions

template<class T>
void line::ctmc::ctmc_check_region_rules (const NetworkStruct< T > &sn)
 Refuse the region rules this port does not implement.
template<class T>
bool line::ctmc::ctmc_region_admissible (const NetworkStruct< T > &sn, const std::vector< T > &nir)
 True when nir – the per-(station, class) counts of one state, in (ist-1)*K + k order – satisfies every region.
template<class T>
std::vector< NetState< T > > line::ctmc::ctmc_filter_regions (const NetworkStruct< T > &sn, const std::vector< NetState< T > > &space)
 The states of space a DROP region admits, in their original order.
template<class T>
std::vector< bool > line::ctmc::ctmc_in_drop_region (const NetworkStruct< T > &sn)
 True where a class sits at a station inside a DROP region, per station.

Detailed Description

Finite Capacity Regions in SolverCTMC: the DROP rule, as a filter on the enumerated state space, and the gate that refuses WAITQ.

WHY DROP IS A FILTER AND WAITQ IS NOT. Under DROP a job refused entry to a full region is LOST, so the chain simply never occupies a state violating the region's caps: removing those states and letting make_infgen re-close the rows is exactly the censored chain, and it is what the reference does (its spaceGeneratorNodes bound plus the post-generation filter). Under WAITQ the job leaves its station and PARKS in a per-region FIFO outside every station, to be released head-of-line as capacity frees; that queue is extra state the region owns, so the state vector has to be augmented with one token buffer per region and the transition relation rebuilt around it. The two are not variants of one mechanism, which is why only the first is here and the second is refused BY NAME rather than approximated by dropping.

THE REGION BOUND ALSO BELONGS IN THE ENUMERATION, not only after it. The automatic cutoff is region-blind and can far exceed any reachable population – cutoff 10 for a region capped at 4 – and filtering only after generation means enumerating an intractable space first. Filtering here is correct but not sufficient for large models; see the note on ctmc_region_class_cap.

Definition in file solver_ctmc_fcr.h.