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

The SolverNC class surface: @@SolverNC/runAnalyzer.m and the gates around it. More...

Include dependency graph for solver_nc_runner.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::nc

Functions

std::vector< std::string > line::nc::list_valid_methods ()
 Port of SolverNC.listValidMethods.
bool line::nc::is_stochastic_method (const std::string &method)
 Port of SolverNC.isStochasticMethod.
template<class T>
std::string line::nc::resolve_method (const qn::NetworkStruct< T > &L, const std::string &method)
 Port of SolverNC.resolveMethod: the feature-driven resolution of method='default'.
void line::nc::check_method (const std::string &method)
 Port of runAnalyzerChecks' method gate: an unlisted method is refused.
template<class T>
bool line::nc::nc_is_normal_usage (const qn::NetworkStruct< T > &sn)
 Is the closed model in NORMAL USAGE, the domain of the Mitra-McKenna PANACEA asymptotic expansion (J.
template<class T>
std::size_t line::nc::nc_closed_queueing_stations (const qn::NetworkStruct< T > &sn)
 How many queueing (non-infinite-server) stations carry demand from a CLOSED chain?
template<class T>
std::string line::nc::nc_method_refusal (const qn::NetworkStruct< T > &sn, const std::string &method, bool slotted=false, bool for_report=true)
 May method run on this model?
template<class T>
NcSolution< T > line::nc::solver_nc_solve (const qn::NetworkStruct< T > &L_in, const NcSolverOptions &opt_in)
 The gates, the multiserver conversion and the dispatch of @@SolverNC/runAnalyzer.m, without the metric filter.
template<class T>
mva::AvgResult< T > line::nc::solver_nc_run_analyzer (const qn::NetworkStruct< T > &L_in, const NcSolverOptions &opt_in)
 Port of @@SolverNC/runAnalyzer.m for the lang='matlab' path: solve, then apply the metric filter @@NetworkSolver/getAvg puts between the analyzer and the caller.
template<class T>
double line::nc::solver_nc_lognormconst (const qn::NetworkStruct< T > &L, const NcSolverOptions &opt)
 Port of @@SolverNC/getProbNormConstAggr.m: the log normalizing constant.

Detailed Description

The SolverNC class surface: @@SolverNC/runAnalyzer.m and the gates around it.

What sits here rather than in the dispatch is everything that happens BEFORE and AFTER one inner solve: the method whitelist, the structural gates, the MULTISERVER-TO-LOAD-DEPENDENCE conversion, the conversions from response time to residence time and from throughput to arrival rate, and the metric filter.

THE MULTISERVER CONVERSION IS THE INTERESTING PART, and it belongs here and not in an analyzer. A c-server station is rewritten as the rate lattice mu(n) = min(n, c), which routes the model to solver_ncld and is EXACT, whereas leaving it alone routes it to solver_nc and Seidmann's approximation. The reference does the rewrite on 'exact' and 'is' always, and on 'default' only for the two-station Delay-plus-multiserver shape (which is every SolverLN layer submodel), and only when the model is product-form – a non-product-form model has no exact load-dependent solution, so it is sent to 'comom' instead. The server count is deliberately KEPT: utilization is the fraction of the c servers busy, and c is not recoverable from min(1:Nt, c) once the population is below it.

The metric filter is shared with SolverMVA verbatim (filter_metric, sn_get_residt_from_respt, sn_get_arvr_from_tput in solver_mva_runner.h) because @@NetworkSolver/getAvg is solver-independent: it is the same code path for both solvers in the reference.

Definition in file solver_nc_runner.h.