![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The 'ispn' method of SolverMAM: steady state of a stochastic Petri net with exactly one unbounded place, solved as a quasi-birth-death process by the matrix-geometric method (Haverkort 1998, ch. More...
#include <algorithm>#include <cmath>#include <limits>#include <map>#include <string>#include <vector>#include "line/api/spn/spn_ispn.h"#include "line/lang/distribution.h"#include "line/lang/qn/network_struct.h"#include "line/solvers/mam/mam_types.h"#include "line/util/error.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| Conservation laws of a layered queueing network, enumerated from its structure. | |
| namespace | line::mam |
Functions | |
| template<class T> | |
| bool | line::mam::ispn_has_place (const qn::NetworkStruct< T > &L) |
| True when the model holds a Place node, i.e. | |
| template<class T> | |
| void | line::mam::ispn_refuse_entry (const qn::NetworkStruct< T > &L, const std::string &entry) |
| Refuses the SolverMAM entry point ENTRY on a stochastic Petri net model with LINE:unsupported:Place. | |
| template<class T> | |
| std::string | line::mam::ispn_refusal (const qn::NetworkStruct< T > &L, const std::string &method) |
| Why the iSPN route cannot take this model under METHOD, or "" when it can or when the model is not a net. | |
| template<class T> | |
| MamSolution< T > | line::mam::solver_mam_ispn (const qn::NetworkStruct< T > &L, const MamOptions &opt) |
| The analyzer. | |
The 'ispn' method of SolverMAM: steady state of a stochastic Petri net with exactly one unbounded place, solved as a quasi-birth-death process by the matrix-geometric method (Haverkort 1998, ch.
17; spn_ispn).
Port of matlab/src/solvers/MAM/solver_mam_ispn.m (Java twin jline.solvers.mam.analyzers.Solver_mam_ispn, Python twin line_solver.api.solvers.mam.ispn).
The net is flattened to (place, class) levels, place-major as in spn_mdd, so level pp*R+k (0-based) is class k in place pp. An open class arriving from a Source to a Place becomes a timed transition with no input place, firing at the arrival rate times the routing probability; tokens a mode sends to a Sink are dropped. The unbounded level is MamOptions::ispn_place when set (a place name, or 'place.class' in a multiclass net), and otherwise the one level that no non-negative S-invariant covers.
The measures are those SolverCTMC reports for a Petri net: Q(ist,k) is the mean number of class-k tokens in the place, U = Q (a Place is an INF station), Tp(ist,k) the token rate out of the place (the sum over the modes of their firing rate times the class-k input multiplicity), R = Q/Tp by Little's law. The Source row carries the arrival rate.
spn_ispn works at double; another arithmetic is converted to double on the way in and back on the way out, since the matrix-geometric solve is a floating-point iteration (the R matrix has no closed form in general).
Copyright (c) 2012-2026, Imperial College London All rights reserved.
Definition in file solver_mam_ispn.h.