![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The stage solvers map_env_approx injects, one per runner that can be a caller. More...
#include "line/lang/qn/network_struct.h"#include "line/solvers/cache_metrics.h"#include "line/solvers/env/solver_env_limit.h"#include "line/solvers/fluid/fluid_runner.h"#include "line/solvers/mva/solver_mva_runner.h"#include "line/solvers/nc/solver_nc_runner.h"#include "line/util/matrix.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| Conservation laws of a layered queueing network, enumerated from its structure. | |
| namespace | line::solvers |
Functions | |
| env::EnvStageAvgFn< double > | line::solvers::mva_stage_fn (const mva::MvaOptions &opt) |
| MVA stages, bound to the caller's own MvaOptions. | |
| env::EnvStageAvgFn< double > | line::solvers::nc_stage_fn (const nc::NcSolverOptions &opt) |
| NC stages, bound to the caller's own NcSolverOptions. | |
| env::EnvStageAvgFn< double > | line::solvers::fluid_stage_fn (const fluid::FluidOptions &opt) |
| Fluid stages, bound to the caller's own FluidOptions. | |
The stage solvers map_env_approx injects, one per runner that can be a caller.
WHAT THEY ARE. The C++ spelling of feval(class(self), stageModel, self.options) in mapEnvApprox.m: the environment image is solved with the solver that was asked for, at the settings it was asked for. Binding the caller's own options into the callable is the whole point – a hard-coded backend silently discards the method, the tolerances and the iteration caps the user set, which is the defect the injection exists to close.
WHY A SHARED HEADER RATHER THAN THREE LAMBDAS PER CALLER. Two translation units enter the fallback, solver_facade.cpp (avg_table) and line_cli.cpp (run_avg_engine plus the per-solver -a avg arms), and they must agree on what a stage solve reports or the same model answers differently through the facade and through the CLI. That is the divergence the Knobs struct exists to prevent one layer up, and it applies here for the same reason.
They are double-only because the driver is: map_env_approx and SolverEnvLimit::init both refuse T != double, so a multiprecision caller keeps the plain refusal rather than falling back.
Definition in file map_env_stages.h.