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

The map_env decision, as a predicate over a feature set. More...

#include <string>
#include <vector>
#include "line/lang/qn/feature_set.h"
Include dependency graph for map_env_gate.h:

Go to the source code of this file.

Classes

struct  line::solvers::MapEnvConfig
 The caller-facing map_env knobs, options.config.map_env and friends. More...
struct  line::solvers::MapEnvDecision
 What the gate decided, and what it decided it about. More...

Namespaces

namespace  line
 Conservation laws of a layered queueing network, enumerated from its structure.
namespace  line::solvers

Functions

const std::vector< qn::Feature > & line::solvers::map_env_tokens ()
 The four process names an environment image can represent; the order is the registry's.
bool line::solvers::is_map_env_token (qn::Feature f)
 True when f is one of the four.
template<class T>
MapEnvDecision line::solvers::needs_map_env (const qn::FeatureSet &declared, const qn::NetworkStruct< T > &sn, const MapEnvConfig &cfg=MapEnvConfig())
 needsMapEnv: does this model need the environment image, and would the image make it solvable?
std::string line::solvers::map_env_stage_backend (const std::string &solver)
 Which ENV stage backend a solver's name maps to, or empty when it has none.
bool line::solvers::supports_transient_analysis (const std::string &solver)
 supportsTransientAnalysis: does this solver produce transient averages?

Detailed Description

The map_env decision, as a predicate over a feature set.

WHAT IT DECIDES. @NetworkSolver/needsMapEnv.m asks one question: are the ONLY features this solver cannot consume non-renewal arrival or service processes? If so the model becomes supported the moment each modulated process is frozen into an exponential environment stage, and map2renv plus SolverENV can answer it. If anything else is unsupported the environment image would not make the model solvable, so the original refusal stands and is raised by the runner in its own words.

WHY IT IS ITS OWN HEADER, and a small one. Two callers need it and they sit at opposite ends of the include graph: the driver in map_env.h, which pulls in env/ and therefore everything below it, and the AUTO / find_solver reporting layer, which only wants to know whether a solver would answer. This header depends on lang/qn/feature_set.h alone, so the reporting layer can ask the question without linking a single solver.

THE FOUR NAMES ARE THE REFERENCE'S OWN mapTokens and are a closed list: MAP, MMPP2, MMAP and MPH. DMAP, BMAP, MAPt, PHt, MMAPt, MPHt and BMMAPt are deliberately NOT here. map2renv freezes a stationary, continuous-time, single-arrival modulating chain into one exponential stage per phase; a discrete-time chain has no such stage, a batch process releases more than one job per epoch and so is not described by a rate, and a time-inhomogeneous one has no stationary phase to freeze at all. Adding a name here without adding the transform would send a model into an image that does not represent it.

Definition in file map_env_gate.h.