LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
line::ldes::engine::Sampler Class Reference

One variate generator, holding whatever state its family needs. More...

#include <line/solvers/ldes/ldes_sampler.h>

Public Member Functions

 Sampler ()
template<class T>
 Sampler (const lang::Distrib< T > &d, const std::string &where)
 Build the generator of d; the (station, class) names are for diagnostics.
bool disabled () const
lang::ProcessType type () const
double mean () const
double next_at (Rng &g, double from)
 One variate from a TIME-INHOMOGENEOUS process, given the instant it starts at.
bool time_varying () const
double next (Rng &g)
 One variate.
double resolve_zero_atom (double v) const
 The reference's resolveZeroAtom: the discrete laws supported on {0,1,...} can return a zero-length interval, and a zero-length service is an infinite rate no estimator carries.
int phase () const
 The phase the process is in, for a caller that must carry it across a preemption or across successive executions of an LQN entry.
int last_mark () const
 The 1-based mark of the interval last returned by next/next_at, or 0 when this process carries none.
int last_batch () const
 How many jobs the epoch last returned by next/next_at releases, or 1 when this process carries no batch axis.
bool marked () const
bool batched () const
 True when the process carries its OWN batch sizes: a BMAP or a BMMAPt.
void set_phase (int p)

Detailed Description

One variate generator, holding whatever state its family needs.

Deliberately a tagged struct rather than a class hierarchy: the sampler is called once per event on the engine's hot path, and a virtual dispatch there costs more than the switch. The tag IS ProcessType, so a family added to the language shows up here as a missing case rather than as silence.

Definition at line 116 of file ldes_sampler.h.

Constructor & Destructor Documentation

◆ Sampler() [1/2]

line::ldes::engine::Sampler::Sampler ( )
inline

Definition at line 118 of file ldes_sampler.h.

◆ Sampler() [2/2]

Member Function Documentation

◆ batched()

bool line::ldes::engine::Sampler::batched ( ) const
inline

True when the process carries its OWN batch sizes: a BMAP or a BMMAPt.

Definition at line 411 of file ldes_sampler.h.

◆ disabled()

bool line::ldes::engine::Sampler::disabled ( ) const
inline

Definition at line 269 of file ldes_sampler.h.

References line::lang::DISABLED.

◆ last_batch()

int line::ldes::engine::Sampler::last_batch ( ) const
inline

How many jobs the epoch last returned by next/next_at releases, or 1 when this process carries no batch axis.

At a Source the engine reads it to release that many jobs at one instant, exactly as Solver_ssj consumes arrivalBatchSize; at a bulk server it is how many completions the firing clears.

Definition at line 408 of file ldes_sampler.h.

◆ last_mark()

int line::ldes::engine::Sampler::last_mark ( ) const
inline

The 1-based mark of the interval last returned by next/next_at, or 0 when this process carries none.

At a Source the engine reads it to pick the class of the arriving job, exactly as Solver_ssj consumes arrivalPendingMark.

Definition at line 400 of file ldes_sampler.h.

◆ marked()

bool line::ldes::engine::Sampler::marked ( ) const
inline

Definition at line 409 of file ldes_sampler.h.

◆ mean()

double line::ldes::engine::Sampler::mean ( ) const
inline

Definition at line 271 of file ldes_sampler.h.

◆ next()

double line::ldes::engine::Sampler::next ( Rng & g)
inline

One variate.

Advances whatever phase the family carries.

EVERY RENEWAL FAMILY BUT THE ERLANG COSTS EXACTLY ONE UNIFORM off the MRG stream, which is not an optimization but the reference's behaviour: SSJ's instance generators invert, and a family that drew twice would shift every later event in the run. The quantiles live in ldes_ssj_variates.h and are pinned there against SSJ's own output. The Erlang is the exception, and deliberately so: it costs k uniforms in both engines because the Gamma inversion SSJ used is not reproducible across JVM releases.

Definition at line 301 of file ldes_sampler.h.

References resolve_zero_atom().

Referenced by next_at().

◆ next_at()

double line::ldes::engine::Sampler::next_at ( Rng & g,
double from )
inline

One variate from a TIME-INHOMOGENEOUS process, given the instant it starts at.

The families whose parameters depend on absolute time cannot be sampled from a duration alone, so this overload takes from and every other family ignores it. The engine calls it wherever a duration is drawn; a homogeneous process is unaffected.

Definition at line 282 of file ldes_sampler.h.

References next().

◆ phase()

int line::ldes::engine::Sampler::phase ( ) const
inline

The phase the process is in, for a caller that must carry it across a preemption or across successive executions of an LQN entry.

-1 when the family has no phase.

Definition at line 394 of file ldes_sampler.h.

◆ resolve_zero_atom()

double line::ldes::engine::Sampler::resolve_zero_atom ( double v) const
inline

The reference's resolveZeroAtom: the discrete laws supported on {0,1,...} can return a zero-length interval, and a zero-length service is an infinite rate no estimator carries.

Immediate is exactly what a zero-length interval denotes elsewhere in the engine, so the atom is served at that scale. Under SLOTTED mode 1/Immediate is not a lattice point, so slot_snap refuses the sample rather than inventing one, which is the refusal the reference raises in its own words.

Definition at line 312 of file ldes_sampler.h.

References line::lang::BERNOULLI, line::lang::BINOMIAL, line::lang::DUNIFORM, line::lang::GlobalConstants::Immediate, and line::lang::POISSON.

Referenced by next().

◆ set_phase()

void line::ldes::engine::Sampler::set_phase ( int p)
inline

Definition at line 412 of file ldes_sampler.h.

◆ time_varying()

bool line::ldes::engine::Sampler::time_varying ( ) const
inline

Definition at line 287 of file ldes_sampler.h.

◆ type()

lang::ProcessType line::ldes::engine::Sampler::type ( ) const
inline

Definition at line 270 of file ldes_sampler.h.


The documentation for this class was generated from the following file: