![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The SolverMVA class surface: @@SolverMVA/runAnalyzer.m and the gates around it. More...
#include <algorithm>#include <cmath>#include <limits>#include <memory>#include <optional>#include <string>#include <vector>#include "line/lang/qn/network_struct.h"#include "line/lang/qn/solver_feature_sets.h"#include "line/solvers/mva/mva_types.h"#include "line/solvers/mva/sn_chain.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/solver_mva_sjn.h"#include "line/api/sn/sn_has_bursty_arrival.h"#include "line/api/sn/sn_patience_handles.h"#include "line/solvers/cache_metrics.h"#include "line/solvers/mva/mva_dispatch.h"Go to the source code of this file.
Classes | |
| struct | line::mva::AvgResult< T > |
| The metrics getAvg returns, after filtering. More... | |
Namespaces | |
| namespace | line |
| namespace | line::mva |
Enumerations | |
| enum class | line::mva::MetricKind { line::mva::QLen , line::mva::Util , line::mva::RespT , line::mva::ResidT , line::mva::Tput , line::mva::ArvR } |
| Which metric is being filtered. More... | |
Functions | |
| template<class T> | |
| std::vector< std::string > | line::mva::list_valid_methods (const qn::NetworkStruct< T > &L) |
| Port of SolverMVA.listValidMethods. | |
| template<class T> | |
| void | line::mva::check_method (const qn::NetworkStruct< T > &L, const std::string &method) |
| Port of runAnalyzerChecks' method gate: a method the solver does not list is refused before any analyzer sees it. | |
| template<class T> | |
| std::string | line::mva::resolve_method (const qn::NetworkStruct< T > &L, const std::string &method) |
| Port of SolverMVA.resolveMethod: the feature-driven default -> rqna upgrade for a bursty single-class open network. | |
| template<class T> | |
| Matrix< T > | line::mva::sn_get_residt_from_respt (const qn::NetworkStruct< T > &L, const Matrix< T > &RN) |
| Port of sn_get_residt_from_respt: the per-JOB residence time. | |
| template<class T> | |
| void | line::mva::sn_apply_join_respt (const qn::NetworkStruct< T > &L, const Matrix< T > &QN, const Matrix< T > &AN, Matrix< T > &RN) |
| Port of sn_get_arvr_from_tput: the arrival rate each station sees, from the throughputs and the class-expanded routing sn.rt. | |
| template<class T> | |
| Matrix< T > | line::mva::sn_get_arvr_from_tput (const qn::NetworkStruct< T > &L, const Matrix< T > &TN) |
| template<class T> | |
| Matrix< T > | line::mva::filter_metric (const qn::NetworkStruct< T > &L, const Matrix< T > &metric, MetricKind kind, const std::vector< std::vector< bool > > *zero_mask) |
| Port of filterMetric: what @@NetworkSolver/getAvg does between the analyzer and the caller. | |
| template<class T> | |
| void | line::mva::mva_check_finite_capacity (const qn::NetworkStruct< T > &L, const std::string &method) |
| Port of SolverMVA.supportsFiniteCapacity (SolverMVA.m:158-186), the structural capacity gate SolverMVA.supportsModelMethod (SolverMVA.m:143-153) lays on top of the universal feature gate. | |
| template<class T> | |
| AvgResult< T > | line::mva::solver_mva_run_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt_in, const Matrix< T > &init_sol) |
| Port of @@SolverMVA/runAnalyzer.m for the lang='matlab' path: gate, solve, convert, filter. | |
The SolverMVA class surface: @@SolverMVA/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 conversions from response time to residence time and from throughput to arrival rate, and the metric filter. mvaDispatch is the callback; on a model without forks it runs exactly once.
THE FILTER IS LOAD BEARING, not cosmetic. @@NetworkSolver/getAvg is not a getter: between the analyzer and the caller it zeroes a metric wherever the class has no visit, snaps anything below FineTol to zero, and masks the queue length and the utilization where the response time is below 10 FineTol. In a layered model every entry, task and call class is served by an Immediate distribution somewhere, whose response time is exactly 1e-8, so without the mask a layer reports the immediate classes' share of the population as real queue length.
Definition in file solver_mva_runner.h.