![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Port of @@SolverQNS, the wrapper around qnsolver of the RADS/LQNS distribution. 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::qns::QnsOptions |
| SolverQNS.defaultOptions plus the two knobs the JMVA document carries. More... | |
Namespaces | |
| namespace | line |
| namespace | line::qns |
Functions | |
| std::vector< std::string > | line::qns::list_valid_methods () |
| Port of SolverQNS.listValidMethods. | |
| bool | line::qns::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::qns::method_refusal (const qn::NetworkStruct< T > &L, const std::string &method) |
| SolverQNS.supportsModelMethod's structural rules, as the REASON they refuse, empty when the pair is served. | |
| bool | line::qns::is_available () |
| Port of SolverQNS.isAvailable: a native qnsolver binary on the PATH. | |
| void | line::qns::check_method (const std::string &method) |
| Port of runAnalyzer's method gate. | |
| std::string | line::qns::resolve_multiserver (const QnsOptions &opt) |
| Port of the method -> options.config.multiserver map of runAnalyzer.m. | |
| template<class T> | |
| void | line::qns::check_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::qns::solver_qns_run_analyzer (const qn::NetworkStruct< T > &L, const QnsOptions &opt) |
| Port of @@SolverQNS/runAnalyzer.m and solver_qns.m. | |
Port of @@SolverQNS, the wrapper around qnsolver of the RADS/LQNS distribution.
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 QNS label.
WHAT THE PORT COVERS. The reference dispatches two ways (runAnalyzer.m):
METHODS. 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 are listed by the reference's listValidMethods and reach the tool through the LQNS branch on a non-product-form closed model.
Definition in file solver_qns.h.