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

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"
Include dependency graph for solver_mva_runner.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.

Detailed Description

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.