![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Port of solver_nc_analyzer.m, solver_ncld_analyzer.m and @@SolverNC/ncDispatch.m: one inner solve, choosing the analyzer that fits. More...
#include "line/util/line_console.h"#include <cmath>#include <string>#include <vector>#include "line/lang/qn/network_struct.h"#include "line/solvers/nc/nc_types.h"#include "line/solvers/nc/solver_nc.h"#include "line/solvers/nc/solver_nc_mem.h"#include "line/solvers/nc/solver_nc_dt.h"#include "line/solvers/nc/solver_nc_oi.h"#include "line/solvers/nc/solver_nc_dps.h"#include "line/solvers/nc/solver_ncld.h"#include "line/util/error.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| namespace | line::nc |
Functions | |
| template<class T> | |
| NcSolution< T > | line::nc::solver_ncld_analyzer (const qn::NetworkStruct< T > &sn, const NcSolverOptions &opt) |
| Port of solver_ncld_analyzer.m: the load-dependent analyzer, which is solver_ncld plus the same fractional-population interpolation the load-independent one applies. | |
| template<class T> | |
| NcSolution< T > | line::nc::solver_nc_analyzer (const qn::NetworkStruct< T > &sn, const NcSolverOptions &opt) |
| Port of solver_nc_analyzer.m. | |
| template<class T> | |
| NcSolution< T > | line::nc::nc_dispatch (const qn::NetworkStruct< T > &sn, const NcSolverOptions &opt) |
| Port of @@SolverNC/ncDispatch.m: the inner solve of the fork-join fixed point, which is the load-dependence test and nothing else. | |
Port of solver_nc_analyzer.m, solver_ncld_analyzer.m and @@SolverNC/ncDispatch.m: one inner solve, choosing the analyzer that fits.
THE ORDER IS THE CONTRACT. As in mva_dispatch.h, the branches are NOT disjoint – an order-independent station is also a multiserver, a pass-and-swap tandem is also a closed network – so the first match wins and reordering silently changes which algorithm a model gets. The sequence is the reference's, top to bottom:
0 discrete-time (slotted) model, on an explicit options.slotted 1 order-independent closed network, on 'default' or 'exact' 2 pass-and-swap importance sampling, on 'default', 'is' or 'sampling' 3 'is' on an open or mixed model -> rejected by name 4 Maximum Entropy Method, on an explicit 'mem' 5 'exact' on an open or mixed multiserver model -> rejected by name 6 fractional closed populations, by interpolation 7 everything else -> solver_nc / solver_ncld
Branch 1 is the EXACT balanced-fairness analyzer and branch 2 the sampler, so a pure-OI tandem on 'default' never reaches branch 2; only a genuine swap graph, or an explicit 'is' / 'sampling', does. A station carrying a service rate function that satisfies NEITHER predicate is refused by name rather than sent down the ordinary normalizing-constant path, where its rate function would simply be ignored.
ncDispatch (the fork-join inner solve) is the load-dependence test alone: the MMT transformation returns a plain mixed queueing network, so none of the specialised routes can apply to it.
Definition in file nc_dispatch.h.