![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The SolverNC class surface: @@SolverNC/runAnalyzer.m and the gates around it. More...
#include "line/util/line_console.h"#include <algorithm>#include <cctype>#include <cmath>#include <limits>#include <string>#include <vector>#include "line/lang/qn/network_struct.h"#include "line/lang/qn/solver_feature_sets.h"#include "line/solvers/cache_metrics.h"#include "line/solvers/mva/fj_driver.h"#include "line/solvers/mva/fj_ht.h"#include "line/solvers/mva/fj_mmt.h"#include "line/solvers/mva/sn_chain.h"#include "line/solvers/mva/solver_mva_runner.h"#include "line/solvers/nc/nc_dispatch.h"#include "line/solvers/nc/solver_nc_cache.h"#include "line/solvers/nc/solver_nc_cacheqn.h"#include "line/solvers/nc/solver_nc_cacheqn_retrieval.h"#include "line/solvers/nc/solver_nc_lossn.h"#include "line/solvers/nc/solver_nc_spn.h"#include "line/solvers/nc/solver_nc_mem.h"#include "line/solvers/nc/solver_nc_oi.h"#include "line/solvers/nc/solver_nc_dps.h"#include "line/solvers/nc/solver_nc_retrieval.h"#include "line/solvers/nc/nc_types.h"#include "line/util/error.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. | |
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.