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

Classes

struct  Accum
 The running per-(station, class) integrals and tallies. More...
struct  BpTarget
 One measured target: a station set, optionally filtered to one class. More...
class  BusyPeriods
 The busy-period tracker of one run. More...
struct  CacheState
 Live state of one Cache node. More...
class  Convergence
 Convergence-based stopping: batch the four metrics and stop once EVERY active (station, class) pair has reached the requested relative precision. More...
struct  Event
 One scheduled event. More...
struct  EventLater
 Later-is-greater, so the priority queue pops the earliest event. More...
struct  Job
 A job held by a station. More...
struct  LnEntryCdf
 One entry's empirical response-time CDF: F[j] = P(R <= t[j]). More...
struct  LnEvent
 One scheduled event of the layered engine. More...
struct  LnEventLater
struct  LnJob
 One in-flight request: a reference-task job somewhere in its call tree. More...
struct  LnResult
 The layered result: per element, the mean measures. More...
struct  Observations
 The event-spaced observation series MSER-5 and the CI both read. More...
struct  PsJob
 A job being served by a sharing discipline, with the work it still owes. More...
struct  Region
 One finite capacity region, resolved to what the event loop needs. More...
struct  Rng
 The engine's randomness, in the SHAPE the Java engine uses it. More...
struct  RouteDest
 One destination NODE of a (node, class) pair, with the class it switches to. More...
struct  RouteEntry
 One routing alternative out of a (node, class) pair. More...
class  Sampler
 One variate generator, holding whatever state its family needs. More...
struct  SpnMode
 One mode of a transition, resolved to what the event loop needs. More...
struct  SpnTransition
 One Transition node. More...
struct  StationState
 One station's mutable state. More...
struct  StatTriple
 Grand mean, standard error and degrees of freedom of a batch-means estimate. More...
struct  Truncation
 Where the warmup ended, and whether a truncation was applied at all. More...
struct  WaitCmp
 The waiting-room order of a buffered discipline. More...

Enumerations

enum class  Role { Source , Queue , Delay , Synchronization }
 Station roles this engine simulates. More...
enum  EventKind {
  EV_DEPARTURE = 0 , EV_FIRING = 6 , EV_SWITCHOVER = 1 , EV_SETUP = 2 ,
  EV_RETRIAL = 3 , EV_RENEGE = 4 , EV_ARRIVAL = 5 , EV_BREAKDOWN = 7
}
 Event tags, ordered so that a service completion precedes an arrival scheduled for the same instant. More...
enum class  ThreadState { ACTIVE , DELAYOFF , OFF , SETUP }
 Power state of one task thread, mirroring Solver_ssj_ln's THREAD_* constants. More...
enum class  LnColumn {
  QLen , Util , RespT , ResidT ,
  Tput
}
 A column of the shared layered average table, as line-cli prints it. More...

Functions

bool cache_refreshes (lang::ReplacementStrategy p)
 True for the policies that refresh recency on a hit.
void cache_hit (CacheState &cs, std::size_t item, std::size_t at, double u_random)
 Serve a HIT in list at.
void cache_miss (CacheState &cs, std::size_t item, double u_admit, double u_random)
 Serve a MISS: insert into the entry list, evicting if it is full.
template<class T>
void ldes_engine_reject (const qn::NetworkStruct< T > &sn, const LdesOptions &o)
 Refuse, by name, every model outside this engine's scope.
std::vector< LnEntryCdfldes_ln_cdf_respt (const LnResult &r, std::size_t nentries)
 The empirical response time CDF of every ENTRY, the getCdfRespTLN of the other codebases: one [F(t), t] table per entry in the LOCAL index space, empty where the run observed nothing.
template<class T>
bool ln_defined (const lqn::LqnStruct< T > &lsn, const LnResult &r, std::size_t i, LnColumn c)
 Does the element at i HAVE the quantity in column c?
double uniform01 (Rng &g)
 Uniform on (0,1) off the MRG stream; next_double never returns 0.
bool spn_enabled (const SpnMode &m, const std::vector< double > &tok)
 True when m is enabled by the marking tok, which is indexed the same way as the mode's own vectors – (place slot, class), flattened.
double spn_rate (const SpnMode &m, const std::vector< double > &tok)
 The rate of a timed mode under the current marking.
void spn_fire (const SpnMode &m, std::vector< double > &tok)
 Move the tokens of one firing: consume the enabling counts, deposit the firing ones.
int spn_pick_immediate (const std::vector< SpnMode > &modes, const std::vector< double > &tok, double u)
 Pick among the enabled IMMEDIATE modes: the highest priority first (lowest value), then weighted at random among the ties.
bool is_preemptive (lang::SchedStrategy s)
 True for the disciplines that interrupt a job already in service.
bool is_preemptive_resume (lang::SchedStrategy s)
 PREEMPTIVE RESUME, as against preemptive restart.
bool is_size_based (lang::SchedStrategy s)
 True for the orders whose key is the job's size, residual or attained work.
bool is_ps_family (lang::SchedStrategy s)
 True for the disciplines that share the server instead of ordering a queue.
std::vector< double > ps_shares (lang::SchedStrategy sched, const std::vector< PsJob > &jobs, double c, const std::vector< double > &weight, std::size_t nclasses)
 The per-job shares of a sharing discipline, in units of one server.
double fsp_virtual_finish (const std::vector< double > &residuals, double target_work, double c, double now)
 FSP's virtual finish time: when target would finish if the station ran processor sharing from now on.
std::size_t preemption_victim (lang::SchedStrategy sched, const std::vector< Job > &in_service, const Job &arriving, double c, double now)
 Which job in service arriving displaces, or in_service.size() for none.
int mser5_truncation (const std::vector< double > &obs, int batch_size)
 MSER-5 truncation point over a series of observations, in BATCHES.
double overlap_adjustment (double overlap)
 The variance inflation of OVERLAPPING batch means.
StatTriple bm_statistics (const std::vector< double > &obs, int batch_size)
 Non-overlapping batch means.
StatTriple obm_statistics (const std::vector< double > &obs, int batch_size, double overlap)
 Overlapping batch means.
double t_critical (double level, int df)
 The two-sided t critical value, from the REFERENCE'S TABLE.
StatTriple spectral_statistics (const std::vector< double > &obs, int batch_size, double low_freq_frac)
 Heidelberger-Welch spectral estimate of the variance of the sample mean.
StatTriple ci_statistics (const std::vector< double > &obs, int batch_size, const LdesOptions &o)
 Dispatch on cimethod.
void batch_means_ci (const Observations &obs, const Truncation &tr, const LdesOptions &o, LdesResult &res)
 Fill the half-width matrices of res from the post-warmup observation series.

Variables

static const std::size_t NOTHR = static_cast<std::size_t>(-1)
 Thread index meaning "no thread held", also used for an infinite-thread task.
static const std::size_t NOTDRAWN = static_cast<std::size_t>(-1)
 LnJob::calls_left before the repetition count of a call has been drawn.

Enumeration Type Documentation

◆ EventKind

Event tags, ordered so that a service completion precedes an arrival scheduled for the same instant.

The order matters on any model whose rates produce exact ties (a Det service, a closed class placed at t=0), and it is the completions-then- arrivals phase order of the Java engine's slotPhase. Ties inside one tag break on the insertion sequence, so the event list is a total order and the path is reproducible from the seed.

Enumerator
EV_DEPARTURE 
EV_FIRING 
EV_SWITCHOVER 
EV_SETUP 
EV_RETRIAL 
EV_RENEGE 
EV_ARRIVAL 
EV_BREAKDOWN 

Definition at line 141 of file ldes_engine.h.

◆ LnColumn

enum class line::ldes::engine::LnColumn
strong

A column of the shared layered average table, as line-cli prints it.

Enumerator
QLen 
Util 
RespT 
ResidT 
Tput 

Definition at line 215 of file ldes_ln_engine.h.

◆ Role

enum class line::ldes::engine::Role
strong

Station roles this engine simulates.

Station roles this engine simulates.

A Fork and a Join appear in sn.stations because the refresh registers them, but they SERVE NOTHING: they are handled by the routing layer, which replicates at one and synchronizes at the other. Giving them a role of their own keeps them out of the service-station setup, which would otherwise demand a service law they do not have.

Enumerator
Source 
Queue 
Delay 
Synchronization 

Definition at line 129 of file ldes_engine.h.

◆ ThreadState

Power state of one task thread, mirroring Solver_ssj_ln's THREAD_* constants.

Enumerator
ACTIVE 
DELAYOFF 
OFF 
SETUP 

Definition at line 152 of file ldes_ln_engine.h.

Function Documentation

◆ batch_means_ci()

void line::ldes::engine::batch_means_ci ( const Observations & obs,
const Truncation & tr,
const LdesOptions & o,
LdesResult & res )
inline

Fill the half-width matrices of res from the post-warmup observation series.

Transcribes computeOBMConfidenceIntervals.

The three series are not treated alike, and that is the reference's design:

  • QUEUE LENGTH has one observation per interval already, so it batches directly;
  • THROUGHPUT is stored CUMULATIVE, so it is differenced into per-interval rates first – batching the cumulative counts would estimate the variance of a random walk;
  • UTILIZATION is not measured separately at all. Its interval is the throughput's, carried through the utilization law U = T/(mu*c), which is exact for the mean and is what keeps the two intervals consistent.

A series shorter than ciminobs yields NO interval rather than a wide one: a half-width computed from a handful of batches is not conservative, it is arbitrary.

Definition at line 646 of file ldes_stats.h.

References batch_means_ci(), ci_statistics(), line::ldes::LdesOptions::cimethod, line::ldes::LdesOptions::ciminbatch, line::ldes::LdesOptions::ciminobs, line::ldes::engine::Observations::cmp, line::ldes::LdesOptions::confint, line::ldes::engine::StatTriple::df, line::ldes::LdesOptions::events, line::ldes::LdesResult::has_run_length_plan, line::ldes::engine::Observations::nclasses, line::ldes::engine::Observations::nstations, line::ldes::engine::StatTriple::ok, line::ldes::engine::Observations::qlen, line::ldes::LdesResult::QN, line::ldes::LdesResult::QNCI, line::ldes::LdesResult::RN, line::ldes::LdesResult::RNCI, line::Matrix< T >::rows(), line::ldes::LdesResult::run_length_plan, line::ldes::LdesOptions::run_length_plan_precision, line::ldes::LdesOptions::samples, line::sim::sim_runlength_plan(), line::ldes::engine::StatTriple::stderr_, t_critical(), line::ldes::engine::Observations::time, line::ldes::LdesResult::TN, line::ldes::LdesResult::TNCI, line::ldes::LdesResult::total_simulated_events, line::ldes::LdesResult::UN, and line::ldes::LdesResult::UNCI.

Referenced by batch_means_ci().

◆ bm_statistics()

StatTriple line::ldes::engine::bm_statistics ( const std::vector< double > & obs,
int batch_size )
inline

Non-overlapping batch means.

Transcribes computeBMStatisticsInternal.

Definition at line 304 of file ldes_stats.h.

References bm_statistics(), line::ldes::engine::StatTriple::df, line::ldes::engine::StatTriple::mean, line::ldes::engine::StatTriple::ok, and line::ldes::engine::StatTriple::stderr_.

Referenced by bm_statistics(), ci_statistics(), and spectral_statistics().

◆ cache_hit()

void line::ldes::engine::cache_hit ( CacheState & cs,
std::size_t item,
std::size_t at,
double u_random )
inline

Serve a HIT in list at.

CLIMB promotes one list per hit; the flat policies keep the item where it is and only refresh its recency. A promotion into a full list swaps: the item goes to the head of the higher list and the displaced occupant returns to the lower one.

Definition at line 137 of file ldes_cache.h.

References cache_hit(), cache_refreshes(), line::ldes::engine::CacheState::cap_of(), line::ldes::engine::CacheState::capacity, line::ldes::engine::CacheState::capped(), line::lang::CLIMB, line::ldes::engine::CacheState::list_cost(), line::ldes::engine::CacheState::lists, line::ldes::engine::CacheState::policy, line::lang::RR, line::lang::SFIFO, and line::ldes::engine::CacheState::size_of().

Referenced by cache_hit().

◆ cache_miss()

◆ cache_refreshes()

bool line::ldes::engine::cache_refreshes ( lang::ReplacementStrategy p)
inline

True for the policies that refresh recency on a hit.

Definition at line 124 of file ldes_cache.h.

References cache_refreshes(), line::lang::HLRU, line::lang::LRU, and line::lang::QLRU.

Referenced by cache_hit(), and cache_refreshes().

◆ ci_statistics()

StatTriple line::ldes::engine::ci_statistics ( const std::vector< double > & obs,
int batch_size,
const LdesOptions & o )
inline

◆ fsp_virtual_finish()

double line::ldes::engine::fsp_virtual_finish ( const std::vector< double > & residuals,
double target_work,
double c,
double now )
inline

FSP's virtual finish time: when target would finish if the station ran processor sharing from now on.

Sort every residual work at the station, then walk it: while n jobs remain each advances at min(1, c/n), so the wall time to clear the k-th smallest residual is the sum of (w_k - w_{k-1}) / rate over the ranks below it. FSP then serves in that order, which is what makes it dominate PS job by job. Transcribes computeFSPVirtualFinishTime.

Definition at line 411 of file ldes_station.h.

References fsp_virtual_finish().

Referenced by fsp_virtual_finish(), and preemption_victim().

◆ is_preemptive()

◆ is_preemptive_resume()

bool line::ldes::engine::is_preemptive_resume ( lang::SchedStrategy s)
inline

PREEMPTIVE RESUME, as against preemptive restart.

A resumed job continues from its residual work; a restarted one draws a FRESH requirement and discards what it had done. That distinction is the whole of the PR/PI split and it is not cosmetic: under exponential service the two agree in distribution (memorylessness) and under any other law they do not, so a model that uses PI to represent lost work is silently served as PR on a Coxian. Every size-based policy is RESUME – restarting a job would make its own scheduling key meaningless.

Definition at line 149 of file ldes_station.h.

References line::lang::FCFSPI, line::lang::FCFSPIPRIO, is_preemptive(), is_preemptive_resume(), line::lang::LCFSPI, and line::lang::LCFSPIPRIO.

Referenced by is_preemptive_resume().

◆ is_ps_family()

bool line::ldes::engine::is_ps_family ( lang::SchedStrategy s)
inline

True for the disciplines that share the server instead of ordering a queue.

Definition at line 178 of file ldes_station.h.

References line::lang::DPS, line::lang::DPSPRIO, line::lang::GPS, line::lang::GPSPRIO, is_ps_family(), line::lang::LPS, line::lang::PS, and line::lang::PSPRIO.

Referenced by is_ps_family(), and ldes_engine_reject().

◆ is_size_based()

bool line::ldes::engine::is_size_based ( lang::SchedStrategy s)
inline

True for the orders whose key is the job's size, residual or attained work.

Definition at line 162 of file ldes_station.h.

References line::lang::FB, line::lang::FSP, is_size_based(), line::lang::LRPT, line::lang::PSJF, line::lang::SETF, line::lang::SRPT, and line::lang::SRPTPRIO.

Referenced by is_size_based().

◆ ldes_engine_reject()

template<class T>
void line::ldes::engine::ldes_engine_reject ( const qn::NetworkStruct< T > & sn,
const LdesOptions & o )

Refuse, by name, every model outside this engine's scope.

The refusal is the point. A PS station served FCFS, a preemptive-resume station served non-preemptively, or a blocking model run without blocking all finish and report plausible numbers; nothing downstream can tell them from correct ones, so the check has to happen here, before the run.

Definition at line 220 of file ldes_engine.h.

References line::lang::BAS, line::lang::BBS, line::lang::DROP, is_ps_family(), ldes_engine_reject(), line::lang::NHPP, line::lang::node_type_to_text(), line::lang::NORMAL, line::lang::sched_to_text(), line::ldes::LdesOptions::slotted, line::UnsupportedError::UnsupportedError(), and line::lang::WAITQ.

Referenced by ldes_engine_reject().

◆ ldes_ln_cdf_respt()

std::vector< LnEntryCdf > line::ldes::engine::ldes_ln_cdf_respt ( const LnResult & r,
std::size_t nentries )
inline

The empirical response time CDF of every ENTRY, the getCdfRespTLN of the other codebases: one [F(t), t] table per entry in the LOCAL index space, empty where the run observed nothing.

The ecdf of each entry's observations: sort, step by 1/n, and collapse ties keeping the LARGEST value at each distinct time, so an interpolating reader cannot land on a multivalued point.

Definition at line 197 of file ldes_ln_engine.h.

References line::ldes::engine::LnResult::entry_resp_samples, and ldes_ln_cdf_respt().

Referenced by ldes_ln_cdf_respt().

◆ ln_defined()

template<class T>
bool line::ldes::engine::ln_defined ( const lqn::LqnStruct< T > & lsn,
const LnResult & r,
std::size_t i,
LnColumn c )
inline

Does the element at i HAVE the quantity in column c?

THE MASK BELONGS TO THE TABLE, not to whichever engine filled it. A NaN there is not a failed computation: it says the quantity is not defined for that element kind, and SolverLN and LQNS report the same one –

Processor QLen no, Util yes, RespT no, ResidT no, Tput no Task QLen yes, Util yes, RespT no, ResidT yes, Tput yes Entry QLen yes, Util yes, RespT yes, ResidT no, Tput yes Activity all five

– so a reader can diff the arms row by row. This engine MEASURES more than that: a processor's completion rate is sitting in TLN and an entry's occupancy in QLN, both perfectly well defined as sample-path quantities. Reporting them where every other solver says NaN would make one column mean different things depending on who filled it, which is the divergence the JAR removed from getLNAvgTable on 2026-08-21. Nothing is discarded: the caller still has the whole LnResult; only the SHARED TABLE is masked.

ResidT needs no rule of its own here because the engine already applies it: WLN starts at NaN and only activities and their tasks are written, so a task with no activity at all keeps its NaN rather than claiming a residence of zero (which would say something is held there for no time, not that nothing is held).

Twin of the mask jline.solvers.ldes.SolverLDES.getLNAvgTable applies and of the defined_* flags of ln::LnSolution; the three are pinned against each other by cpp/tests/test_lqn_nan_mask_parity.cpp.

Definition at line 248 of file ldes_ln_engine.h.

References line::lang::ACTIVITY, line::lang::ENTRY, line::lang::HOST, ln_defined(), line::ldes::engine::LnResult::nidx, QLen, ResidT, RespT, Tput, Util, and line::ldes::engine::LnResult::WLN.

Referenced by ln_defined().

◆ mser5_truncation()

int line::ldes::engine::mser5_truncation ( const std::vector< double > & obs,
int batch_size )
inline

MSER-5 truncation point over a series of observations, in BATCHES.

Returns the batch index d minimising var(Z_{d..N-1}) / (N-d)^2 over the batch means Z, and 0 when there are fewer than four batches – below that the criterion is estimated from too few terms to be a truncation rule. Transcribes computeMSER5TruncationPoint.

Definition at line 137 of file ldes_stats.h.

References mser5_truncation().

Referenced by mser5_truncation(), and line::ldes::engine::Observations::truncate().

◆ obm_statistics()

StatTriple line::ldes::engine::obm_statistics ( const std::vector< double > & obs,
int batch_size,
double overlap )
inline

◆ overlap_adjustment()

double line::ldes::engine::overlap_adjustment ( double overlap)
inline

The variance inflation of OVERLAPPING batch means.

Overlapping batches are positively correlated, so the naive sample variance of their means underestimates the true one; 4/3 is the standard asymptotic correction at 50% overlap, interpolated linearly below it and reducing to 1 at zero overlap, where the batches are disjoint and no correction is due. Transcribes computeOverlapAdjustmentFactor.

Definition at line 297 of file ldes_stats.h.

References overlap_adjustment().

Referenced by obm_statistics(), and overlap_adjustment().

◆ preemption_victim()

std::size_t line::ldes::engine::preemption_victim ( lang::SchedStrategy sched,
const std::vector< Job > & in_service,
const Job & arriving,
double c,
double now )
inline

Which job in service arriving displaces, or in_service.size() for none.

ONE RULE PER FAMILY, transcribed from shouldPreemptForLCFS, shouldPreemptForFCFS and shouldPreemptForSizeBasedPolicy together with their findJobToPreempt* counterparts. The two halves are fused here because they ask the same question twice in the reference – once to decide and once to choose – and answering it once cannot disagree with itself.

THE PRIORITY VARIANTS PREEMPT ONLY STRICTLY LOWER PRIORITY. LCFSPR without the PRIO suffix preempts unconditionally (it is last-come-first-served with no class ordering at all), while LCFSPRPRIO preempts a job whose priority value is at least the arrival's, and the FCFS family only one strictly greater. Collapsing those three tests into one turns a priority station into a thrashing one, or into a non-preemptive one, depending which way it falls.

Definition at line 443 of file ldes_station.h.

References line::ldes::engine::Job::elapsed, line::lang::FB, line::lang::FCFSPI, line::lang::FCFSPIPRIO, line::lang::FCFSPR, line::lang::FCFSPRPRIO, line::lang::FSP, fsp_virtual_finish(), line::lang::LCFSPI, line::lang::LCFSPIPRIO, line::lang::LCFSPR, line::lang::LCFSPRPRIO, line::lang::LRPT, preemption_victim(), line::ldes::engine::Job::priority, line::lang::PSJF, line::ldes::engine::Job::remaining, line::ldes::engine::Job::service, line::lang::SETF, line::lang::SRPT, and line::lang::SRPTPRIO.

Referenced by preemption_victim().

◆ ps_shares()

std::vector< double > line::ldes::engine::ps_shares ( lang::SchedStrategy sched,
const std::vector< PsJob > & jobs,
double c,
const std::vector< double > & weight,
std::size_t nclasses )
inline

The per-job shares of a sharing discipline, in units of one server.

c is the station's effective server count: with n <= c every job runs at rate 1 and the station is an infinite server; above that the capacity is split. Each rule is capped at 1 because ONE job cannot consume more than ONE server however the weights fall – dropping that cap is what makes a two-class DPS station report a utilization above one.

Transcribed from calculatePSRates and the five rules under it.

Definition at line 315 of file ldes_station.h.

References line::ldes::engine::Job::cls, line::lang::DPS, line::lang::DPSPRIO, line::lang::GPS, line::lang::GPSPRIO, line::ldes::engine::Job::priority, ps_shares(), and line::lang::PSPRIO.

Referenced by ps_shares().

◆ spectral_statistics()

StatTriple line::ldes::engine::spectral_statistics ( const std::vector< double > & obs,
int batch_size,
double low_freq_frac )
inline

Heidelberger-Welch spectral estimate of the variance of the sample mean.

The variance of a mean over a correlated series is 2*pi*S(0)/m, with S(0) the spectral density at frequency zero. S(0) cannot be read off the periodogram directly – the ordinate at f=0 is exactly the quantity being estimated and carries all the bias – so the LOG-periodogram over the lowest frequencies is fitted with a quadratic and the intercept extrapolated back to zero. That is what makes this estimator different from batch means rather than a re-spelling of it: it models the correlation instead of trying to batch it away.

FALLS BACK TO PLAIN BATCH MEANS, not to an error, whenever the fit cannot be trusted: too few batches, too few regression points, a zero periodogram ordinate (log undefined) or a non-positive intercept. A spectral estimate from a singular fit is not conservative, it is arbitrary. Transcribes computeSpectralStatisticsInternal.

Definition at line 415 of file ldes_stats.h.

References bm_statistics(), line::ldes::engine::StatTriple::df, line::ldes::engine::StatTriple::mean, line::ldes::engine::StatTriple::ok, spectral_statistics(), and line::ldes::engine::StatTriple::stderr_.

Referenced by ci_statistics(), and spectral_statistics().

◆ spn_enabled()

bool line::ldes::engine::spn_enabled ( const SpnMode & m,
const std::vector< double > & tok )
inline

True when m is enabled by the marking tok, which is indexed the same way as the mode's own vectors – (place slot, class), flattened.

An INHIBITING arc is a bound, not a requirement: the mode is blocked once the place reaches the count IN THAT CLASS, and an infinite count never blocks.

Definition at line 78 of file ldes_spn.h.

References line::ldes::engine::SpnMode::enabling, line::ldes::engine::SpnMode::inhibiting, and spn_enabled().

Referenced by spn_enabled(), and spn_pick_immediate().

◆ spn_fire()

void line::ldes::engine::spn_fire ( const SpnMode & m,
std::vector< double > & tok )
inline

Move the tokens of one firing: consume the enabling counts, deposit the firing ones.

Definition at line 98 of file ldes_spn.h.

References line::ldes::engine::SpnMode::enabling, line::ldes::engine::SpnMode::firing, and spn_fire().

Referenced by spn_fire().

◆ spn_pick_immediate()

int line::ldes::engine::spn_pick_immediate ( const std::vector< SpnMode > & modes,
const std::vector< double > & tok,
double u )
inline

Pick among the enabled IMMEDIATE modes: the highest priority first (lowest value), then weighted at random among the ties.

Returns -1 when none is enabled.

Definition at line 109 of file ldes_spn.h.

References spn_enabled(), and spn_pick_immediate().

Referenced by spn_pick_immediate().

◆ spn_rate()

double line::ldes::engine::spn_rate ( const SpnMode & m,
const std::vector< double > & tok )
inline

The rate of a timed mode under the current marking.

Definition at line 88 of file ldes_spn.h.

References line::ldes::engine::SpnMode::dep, line::ldes::engine::SpnMode::rate, and spn_rate().

Referenced by spn_rate().

◆ t_critical()

double line::ldes::engine::t_critical ( double level,
int df )
inline

The two-sided t critical value, from the REFERENCE'S TABLE.

Deliberately the table and not an exact quantile: this port must report the same interval WIDTH as the Java engine on the same series, and the reference rounds its own critical values to three decimals and saturates at df = 30. Substituting an exact sim_tinv here would move every half-width by a few parts in a thousand and make a cross-engine comparison of CI widths fail for a reason that has nothing to do with the simulation.

Definition at line 376 of file ldes_stats.h.

References t_critical().

Referenced by batch_means_ci(), and t_critical().

◆ uniform01()

double line::ldes::engine::uniform01 ( Rng & g)
inline

Uniform on (0,1) off the MRG stream; next_double never returns 0.

Definition at line 106 of file ldes_sampler.h.

References line::rng::Mrg32k3a::next_double(), line::ldes::engine::Rng::stream, and uniform01().

Referenced by line::ldes::engine::Sampler::next(), and uniform01().

Variable Documentation

◆ NOTDRAWN

const std::size_t line::ldes::engine::NOTDRAWN = static_cast<std::size_t>(-1)
static

LnJob::calls_left before the repetition count of a call has been drawn.

Definition at line 149 of file ldes_ln_engine.h.

◆ NOTHR

const std::size_t line::ldes::engine::NOTHR = static_cast<std::size_t>(-1)
static

Thread index meaning "no thread held", also used for an infinite-thread task.

Definition at line 146 of file ldes_ln_engine.h.