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

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

Detailed Description

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):

  • product-form, or any model with open classes -> marshal to JMVA, run qnsolver, parse and de-aggregate. THIS IS PORTED, in full.
  • non-product-form closed -> convert with QN2LQN and delegate to SolverLQNS. This is the same layered path as MATLAB and the JAR; LINE still ships no LQNS binary, so its ordinary availability diagnostic is preserved when the external tool is absent.

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.