![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The flat-Network path of @@SolverLQNS: its qns methods, served by qnsolver of the RADS/LQNS distribution, the way SolverJMT reaches JMVA. More...
#include "line/util/line_console.h"#include <algorithm>#include <cctype>#include <cmath>#include <cstdlib>#include <fstream>#include <limits>#include <sstream>#include <string>#include <vector>#include "line/io/jmva_writer.h"#include "line/io/qn2lqn.h"#include "line/lang/qn/feature_set.h"#include "line/lang/qn/network_struct.h"#include "line/solvers/mva/sn_chain.h"#include "line/solvers/mva/solver_mva_runner.h"#include "line/solvers/wrappers/lqns/solver_lqns.h"#include "line/util/error.h"#include "line/util/subprocess.h"#include "line/util/tempdir.h"Go to the source code of this file.
Classes | |
| struct | line::lqns::QnsOptions |
| SolverLQNS.defaultOptions on a flat Network plus the knobs the JMVA document carries. More... | |
Namespaces | |
| namespace | line |
| Conservation laws of a layered queueing network, enumerated from its structure. | |
| namespace | line::lqns |
Functions | |
| std::vector< std::string > | line::lqns::qns_methods () |
| Port of SolverLQNS.listValidMethods on a flat Network. | |
| bool | line::lqns::is_qns_method (const std::string &method) |
| True for qns and every qns.NAME. | |
| std::string | line::lqns::qns_multiserver (const std::string &method) |
| The multiserver approximation a Network method selects: the part after qns.
| |
| bool | line::lqns::is_qnsolver_multiserver (const std::string &m) |
| The approximations qnsolver -m accepts; the rest reach it only via LQNS. | |
| template<class T> | |
| std::string | line::lqns::qns_method_refusal (const qn::NetworkStruct< T > &L, const std::string &method) |
| SolverLQNS.supportsModelMethod's structural rules on a Network, as the REASON they refuse, empty when the pair is served. | |
| bool | line::lqns::qnsolver_is_available () |
| Port of SolverLQNS.hasQnsolver: a native qnsolver binary on the PATH. | |
| void | line::lqns::check_qns_method (const std::string &method) |
| Port of runAnalyzerNetwork's method gate. | |
| std::string | line::lqns::resolve_multiserver (const QnsOptions &opt) |
| Port of the method -> options.config.multiserver map of runAnalyzerNetwork.m. | |
| template<class T> | |
| void | line::lqns::check_qnsolver_supported (const qn::NetworkStruct< T > &L) |
| The gate runAnalyzer.m reaches through runAnalyzerChecks, narrowed to what the JMVA document can actually carry. | |
| template<class T> | |
| mva::AvgResult< T > | line::lqns::solve_network_run_analyzer (const qn::NetworkStruct< T > &L, const QnsOptions &opt) |
| Port of @@SolverLQNS/runAnalyzerNetwork.m and solver_qns.m: SolverLQNS on a flat Network. | |
The flat-Network path of @@SolverLQNS: its qns methods, served by qnsolver of the RADS/LQNS distribution, the way SolverJMT reaches JMVA.
MATLAB keeps it in @@SolverLQNS/runAnalyzerNetwork.m and solver_qns.m.
lqns::SolverLQNS<T> remains the LqnModel solver; a flat Network reaches the same solver name through the free functions here (solve_network_run_analyzer, qns_methods, qns_method_refusal).
WHY A WRAPPER IS PORTED AT ALL. Every other solver in cpp/ computes its own answer; this one marshals the model to an external binary and reads the numbers back. It earns its place for the same reason it does in the other three codebases: qnsolver is an INDEPENDENT implementation of the multiserver AMVA lineage that solver_mva also implements, so it is the cross-check that catches an error common to the port and its reference. It is the only external tool in cpp/: LINE ships no copy of it, and every path here refuses by name when the binary is absent rather than answering natively under the LQNS label.
WHAT THE PORT COVERS. The reference dispatches two ways (runAnalyzerNetwork.m):
METHODS. On a Network the method names are default and qns (the default approximation, rolia) and qns.NAME, which selects approximation NAME; the engine below speaks the bare NAME. conway, reiser, rolia and zhou are what qnsolver -m accepts, and they only take effect on a model that HAS a multiserver station – the reference passes no -m otherwise, and so does this. suri and schmidt reach the tool through the LQNS branch on a non-product-form closed model.
REFERENCES, per method:
Definition in file lqns_qnsolver.h.