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

The two CLOSED-FORM environment limits: SolverENV.solveEnvLimit, reached by options.method in {avg, dec}. More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <string>
#include <type_traits>
#include <vector>
#include "line/lang/qn/environment.h"
#include "line/lang/qn/network_struct.h"
#include "line/num/number.h"
#include "line/solvers/env/solver_env.h"
#include "line/solvers/fluid/solver_fluid.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for solver_env_limit.h:

Go to the source code of this file.

Classes

struct  line::env::EnvLimitSolution
 What a limit solve reports. More...
class  line::env::SolverEnvLimit< T >
 The limit solver. More...

Namespaces

namespace  line
namespace  line::env

Functions

template<class T>
EnvLimitSolution line::env::solver_env_limit (Environment< T > &e, const EnvOptions &o)
 solveEnvLimit on the original stages.

Detailed Description

The two CLOSED-FORM environment limits: SolverENV.solveEnvLimit, reached by options.method in {avg, dec}.

Both replace the fixed point with a single reading, and each is exact at one end of the time-scale separation between the environment and the network:

avg, the FAST-environment limit. The environment switches so much faster than the network responds that the network only ever sees the AVERAGE of the modulated rates. One rate-averaged model is built – every station-class rate that varies across stages replaced by its probEnv-weighted mean, as an exponential – and solved once, in steady state. Exact as the stage-switch rate goes to infinity.

dec, the SLOW-environment limit, i.e. quasi-stationary decomposition. The environment stays in a stage long enough for the network to reach that stage's own steady state, so each stage is solved independently and the metrics are averaged with weights probEnv. Exact as the stage-switch rate goes to zero.

NEITHER CARRIES ANYTHING ACROSS A SWITCH, which is what makes them closed form and also what they give up: no entry state, no reset policy, no transient. A reset policy declared on an arc is therefore inert here, exactly as it is in the reference, whose solveEnvLimit never reads resetFun.

WHAT IS AVERAGED, AND WHAT IS LEFT ALONE (buildRateAveragedModel). Only a Source, a Queue or a Delay carries a rate to average. A station-class pair that is disabled in any stage, or whose rate does not actually vary across them, keeps its ORIGINAL distribution rather than being rewritten as an exponential of its own mean – so a non-modulated Erlang stays an Erlang, and the base model is preserved exactly outside the modulated rates.

WHAT IS REFUSED. A stage holding a Cache: the reference aggregates the hit and miss ratios over the stages (SolverENV.accumCacheMetric) and writes them back onto the stage-1 model, and this port has no cache metric to aggregate, so it would report Q, U and T while silently dropping the answer a cache model is asked for.

Definition in file solver_env_limit.h.