![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
#include <line/solvers/ln/solver_ln.h>
Public Attributes | |
| int | iter_max = 200 |
| double | iter_tol = 5e-3 |
| double | tol = 1e-4 |
| bool | interlocking = true |
| std::string | interlock_method = "ilrate" |
| options.config.interlock_method: how the interlock is TRACKED once interlocking is on. | |
| double | interlock_maxpaths = 32.0 |
| options.config.interlock_maxpaths: refpath refuses a layer carrying more routes into it. | |
| std::string | interlock_refpath_scope = "merging" |
| options.config.interlock_refpath_scope: merging transforms only the layers where two or more callers descend from one reference task; all also those with a lone caller below a reference task. | |
| std::string | relax = "fixed" |
| double | relax_factor = 0.5 |
| mva::MvaOptions | layer |
| Options handed to each layer solver; SolverMVA defaults. | |
| std::string | layer_solver = "mva" |
| Which solver runs each layer: mva, nc, fluid, ssa, mam, ctmc, ldes (the native in-process LDES engine) or jmt (JSIM, as a subprocess). | |
| fluid::FluidOptions | layer_fluid |
| Options handed to each layer when layer_solver is fluid. | |
| nc::NcSolverOptions | layer_nc |
| Options handed to each layer when layer_solver is nc. | |
| ssa::SsaOptions | layer_ssa |
| Options handed to each layer when layer_solver is ssa. | |
| mam::MamOptions | layer_mam |
| Options handed to each layer when layer_solver is mam (SolverMAM's own default method). | |
| ctmc::CtmcOptions | layer_ctmc |
| Options handed to each layer when layer_solver is ctmc, and to a Region layer, which goes to CTMC whatever the layer solver is. | |
| ldes::LdesOptions | layer_ldes |
| Options handed to each layer when layer_solver is ldes. | |
| jmt::JmtOptions | layer_jmt |
| Options handed to each layer when layer_solver is jmt (JSIM); seed as for layer_ldes. | |
| std::string | method = "default" |
| options.method, which selects WHAT is reported and not merely how: | |
| std::string | ln_transient = "coupled" |
| options.config.ln_transient: how the per-layer transients are coupled. | |
| long | ln_transient_iter_max = 20 |
| options.config.ln_transient_iter_max and ..._tol of the relaxation. | |
| double | ln_transient_tol = 1e-2 |
| std::string | ln_transient_channels = "both" |
| options.config.ln_transient_channels: which inter-layer coupling is injected, both, thinkt (client delay only) or callservt (synchronous-call service only). | |
| double | timespan_end = std::numeric_limits<double>::infinity() |
| options.timespan(2): the transient horizon; infinite means none is set. | |
| std::size_t | tran_points = 101 |
| Output points per layer trajectory, and the relaxation's own grid size. | |
| std::vector< double > | tran_grid |
| An EXPLICIT output grid for the layered transient, replacing the uniform tran_points one when it is not empty. | |
| std::map< std::string, ::line::lqn::NlpLld > | lld |
| options.config.lld: a smooth queue-dependent rate multiplier per station, {processor or task name: expression in n}, read by method='nlp' and by warmstart='nlp' only. | |
| double | nlp_alpha = 20.0 |
| options.config.nlp_alpha: sharpness of the softmin standing in for min(n, m). | |
| int | nlp_warm = 0 |
| options.config.nlp_warm: the warm-start sweeps the program's Newton ladder begins from. | |
| int | nlp_maxiter = 3000 |
| options.config.nlp_maxiter: budget of the descent the root-find falls back to. | |
| std::string | nlp_fork = "refuse" |
| options.config.nlp_fork: 'refuse' an AND-fork block, or price it at E[max] of exponentials ('exp'). | |
| std::string | warmstart |
| options.config.warmstart: empty for a cold start, or 'nlp' / 'mol' to seed a LAYERED method's fixed point with the QD-AMVA program's solution or the Method of Layers'. | |
| std::size_t | mol_iter_max = 200 |
| options.config.mol_iter_max, mol_iter_tol, mol_relax_factor: lqn_mol's own settings for warmstart='mol'. | |
| double | mol_iter_tol = 1e-6 |
| double | mol_relax_factor = 0.5 |
| double line::ln::LnOptions::interlock_maxpaths = 32.0 |
options.config.interlock_maxpaths: refpath refuses a layer carrying more routes into it.
Definition at line 291 of file solver_ln.h.
| std::string line::ln::LnOptions::interlock_method = "ilrate" |
options.config.interlock_method: how the interlock is TRACKED once interlocking is on.
ilrate is the post-hoc rate discount of update_populations (the default and the historical method); refpath merges the callers that are the same reference customers into ONE client chain running down the reference path, replacing the discount; none applies no correction. A request refpath cannot carry DOWNGRADES to ilrate, see ln_interlock_method.
Definition at line 289 of file solver_ln.h.
| std::string line::ln::LnOptions::interlock_refpath_scope = "merging" |
options.config.interlock_refpath_scope: merging transforms only the layers where two or more callers descend from one reference task; all also those with a lone caller below a reference task.
Definition at line 297 of file solver_ln.h.
| bool line::ln::LnOptions::interlocking = true |
Definition at line 279 of file solver_ln.h.
| int line::ln::LnOptions::iter_max = 200 |
Definition at line 276 of file solver_ln.h.
| double line::ln::LnOptions::iter_tol = 5e-3 |
Definition at line 277 of file solver_ln.h.
| mva::MvaOptions line::ln::LnOptions::layer |
Options handed to each layer solver; SolverMVA defaults.
Definition at line 301 of file solver_ln.h.
| ctmc::CtmcOptions line::ln::LnOptions::layer_ctmc |
Options handed to each layer when layer_solver is ctmc, and to a Region layer, which goes to CTMC whatever the layer solver is.
Definition at line 331 of file solver_ln.h.
| fluid::FluidOptions line::ln::LnOptions::layer_fluid |
Options handed to each layer when layer_solver is fluid.
Definition at line 320 of file solver_ln.h.
| jmt::JmtOptions line::ln::LnOptions::layer_jmt |
Options handed to each layer when layer_solver is jmt (JSIM); seed as for layer_ldes.
Definition at line 339 of file solver_ln.h.
| ldes::LdesOptions line::ln::LnOptions::layer_ldes |
Options handed to each layer when layer_solver is ldes.
seed is the BASE of the reference's Robbins-Monro schedule: layer e (1-based) of iteration it runs at seed + (it-1)*nlayers + e, as SolverLN.pre does for every stochastic layer.
Definition at line 337 of file solver_ln.h.
| mam::MamOptions line::ln::LnOptions::layer_mam |
Options handed to each layer when layer_solver is mam (SolverMAM's own default method).
Definition at line 326 of file solver_ln.h.
| nc::NcSolverOptions line::ln::LnOptions::layer_nc |
Options handed to each layer when layer_solver is nc.
Definition at line 322 of file solver_ln.h.
| std::string line::ln::LnOptions::layer_solver = "mva" |
Which solver runs each layer: mva, nc, fluid, ssa, mam, ctmc, ldes (the native in-process LDES engine) or jmt (JSIM, as a subprocess).
The reference names this by passing a solver FACTORY, LN(model, @(m) Fluid(m, opt)), so the choice is per-ensemble and not per-layer; this field is the same choice under a name, because a C++ template cannot take a MATLAB function handle.
THEY DO NOT CONVERGE TO THE SAME PLACE. Each engine feeds different service demands back into the next outer iteration, so the ensembles reach different fixed points rather than the same one by different routes. ssa in particular is a NOISY layer solver: the deterministic convergence test cannot terminate against its standard error, so it is driven with LnStochController (lqn_analyzers.h) instead.
Definition at line 318 of file solver_ln.h.
Referenced by line::env::env_default_lqn_options().
| ssa::SsaOptions line::ln::LnOptions::layer_ssa |
Options handed to each layer when layer_solver is ssa.
Definition at line 324 of file solver_ln.h.
| std::map<std::string, ::line::lqn::NlpLld> line::ln::LnOptions::lld |
options.config.lld: a smooth queue-dependent rate multiplier per station, {processor or task name: expression in n}, read by method='nlp' and by warmstart='nlp' only.
See lqn_export_nlp.h.
Definition at line 391 of file solver_ln.h.
| std::string line::ln::LnOptions::ln_transient = "coupled" |
options.config.ln_transient: how the per-layer transients are coupled.
decoupled freezes the inter-layer demands at the converged fixed point; coupled reconciles them by waveform relaxation. Iteration 0 of the coupled relaxation IS the decoupled answer.
Definition at line 358 of file solver_ln.h.
| std::string line::ln::LnOptions::ln_transient_channels = "both" |
options.config.ln_transient_channels: which inter-layer coupling is injected, both, thinkt (client delay only) or callservt (synchronous-call service only).
Used to isolate each channel's share of the coupled transient.
Definition at line 368 of file solver_ln.h.
| long line::ln::LnOptions::ln_transient_iter_max = 20 |
options.config.ln_transient_iter_max and ..._tol of the relaxation.
Definition at line 360 of file solver_ln.h.
| double line::ln::LnOptions::ln_transient_tol = 1e-2 |
Definition at line 361 of file solver_ln.h.
| std::string line::ln::LnOptions::method = "default" |
options.method, which selects WHAT is reported and not merely how:
default the mean-based update (updateMetricsDefault) moment3 the APH moment-based update (updateMetricsMomentBased), which additionally produces a per-entry response-time distribution, get_cdf_respt() mw.upper Majumdar-Woodside robust box bounds INSTEAD of a fixed mw.lower point: no layer is ever solved, and every metric the bound does not define is reported as undefined
Definition at line 351 of file solver_ln.h.
| std::size_t line::ln::LnOptions::mol_iter_max = 200 |
options.config.mol_iter_max, mol_iter_tol, mol_relax_factor: lqn_mol's own settings for warmstart='mol'.
Definition at line 407 of file solver_ln.h.
| double line::ln::LnOptions::mol_iter_tol = 1e-6 |
Definition at line 408 of file solver_ln.h.
| double line::ln::LnOptions::mol_relax_factor = 0.5 |
Definition at line 409 of file solver_ln.h.
| double line::ln::LnOptions::nlp_alpha = 20.0 |
options.config.nlp_alpha: sharpness of the softmin standing in for min(n, m).
Definition at line 393 of file solver_ln.h.
| std::string line::ln::LnOptions::nlp_fork = "refuse" |
options.config.nlp_fork: 'refuse' an AND-fork block, or price it at E[max] of exponentials ('exp').
Definition at line 399 of file solver_ln.h.
| int line::ln::LnOptions::nlp_maxiter = 3000 |
options.config.nlp_maxiter: budget of the descent the root-find falls back to.
Definition at line 397 of file solver_ln.h.
| int line::ln::LnOptions::nlp_warm = 0 |
options.config.nlp_warm: the warm-start sweeps the program's Newton ladder begins from.
Definition at line 395 of file solver_ln.h.
| std::string line::ln::LnOptions::relax = "fixed" |
Definition at line 298 of file solver_ln.h.
| double line::ln::LnOptions::relax_factor = 0.5 |
Definition at line 299 of file solver_ln.h.
| double line::ln::LnOptions::timespan_end = std::numeric_limits<double>::infinity() |
options.timespan(2): the transient horizon; infinite means none is set.
Definition at line 370 of file solver_ln.h.
| double line::ln::LnOptions::tol = 1e-4 |
Definition at line 278 of file solver_ln.h.
| std::vector<double> line::ln::LnOptions::tran_grid |
An EXPLICIT output grid for the layered transient, replacing the uniform tran_points one when it is not empty.
SolverENV is what asks for it: a layered stage's exit metric is a Riemann-Stieltjes sum against the environment's holding-time CDF, and a uniform grid over the horizon resolves the horizon rather than the sojourn. Interpolating afterwards cannot recover resolution the trajectory never had, so the points are asked for instead – SolverEnv::stage_grid builds them and set_tran_grid installs them. The grid must be increasing and start at zero; LSODA takes it as given.
Definition at line 385 of file solver_ln.h.
| std::size_t line::ln::LnOptions::tran_points = 101 |
Output points per layer trajectory, and the relaxation's own grid size.
Definition at line 372 of file solver_ln.h.
| std::string line::ln::LnOptions::warmstart |
options.config.warmstart: empty for a cold start, or 'nlp' / 'mol' to seed a LAYERED method's fixed point with the QD-AMVA program's solution or the Method of Layers'.
Refused with method='nlp', which runs no iteration.
Definition at line 405 of file solver_ln.h.