LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
line::mva::AvgResult< T > Struct Template Reference

The metrics getAvg returns, after filtering. More...

#include <line/solvers/mva/solver_mva_runner.h>

Collaboration diagram for line::mva::AvgResult< T >:

Public Attributes

Matrix< T > QN
 queue length
Matrix< T > UN
 utilization
Matrix< T > RN
 response time, per visit
Matrix< T > TN
 throughput
Matrix< T > AN
 arrival rate
Matrix< T > WN
 residence time, per job
std::vector< T > CN
 system response time per class
std::vector< T > XN
 system throughput per class
std::string method
 the method asked for
std::string actualmethod
 the algorithm that ran
std::string warning
 The reference's own warning text, verbatim, empty when it did not warn.
std::vector< T > listcost
 (h) mean storage cost held by each cache list, K_j = sum_i sigma_i pi_ij, filled only by the NC cache branch on a model with item sizes; EMPTY otherwise.
int iter = 0
std::optional< bool > converged
 Whether the fixed point met its tolerance, empty when the handler reports none.
std::optional< double > lognormconst
 @@SolverNC/getProbNormConstAggr, i.e.
solvers::CacheMetrics< T > cache
 What the cache branches observed, EMPTY on a model with no Cache node and on every solver that does not analyze one.
std::shared_ptr< qn::NetworkStruct< T > > refreshed_struct
 The struct whose cache self-switch carries the CONVERGED hit/miss split, filled by the cacheqn branches and NULL for every other model.

Detailed Description

template<class T>
struct line::mva::AvgResult< T >

The metrics getAvg returns, after filtering.

Definition at line 56 of file solver_mva_runner.h.

Member Data Documentation

◆ actualmethod

◆ AN

◆ cache

template<class T>
solvers::CacheMetrics<T> line::mva::AvgResult< T >::cache

What the cache branches observed, EMPTY on a model with no Cache node and on every solver that does not analyze one.

getAvgCacheTable and getAvgItemTable are built from it; see solvers::CacheMetrics.

Definition at line 112 of file solver_mva_runner.h.

Referenced by line::solvers::node_metrics(), line::ctmc::solver_ctmc_avg_table(), line::mva::solver_mva_run_analyzer(), and line::nc::solver_nc_run_analyzer().

◆ CN

◆ converged

template<class T>
std::optional<bool> line::mva::AvgResult< T >::converged

Whether the fixed point met its tolerance, empty when the handler reports none.

Carried beside iter because the count alone cannot decide it on the AMVA route, where it aggregates the nested inner sweeps and reaches the cap on solves whose outer residual is exactly zero. A caller that reads the count as a convergence test raises false warnings; that is why the flag exists and why it has to reach the CLI envelope.

Definition at line 94 of file solver_mva_runner.h.

Referenced by line::mva::solver_mva_run_analyzer().

◆ iter

◆ listcost

template<class T>
std::vector<T> line::mva::AvgResult< T >::listcost

(h) mean storage cost held by each cache list, K_j = sum_i sigma_i pi_ij, filled only by the NC cache branch on a model with item sizes; EMPTY otherwise.

See ton21cache Sec. IX and [[09-ldes-and-cache]].

Definition at line 84 of file solver_mva_runner.h.

Referenced by line::nc::solver_nc_run_analyzer().

◆ lognormconst

template<class T>
std::optional<double> line::mva::AvgResult< T >::lognormconst

@@SolverNC/getProbNormConstAggr, i.e.

the reference's result.Prob.logNormConstAggr, filled by the NC runner alone and EMPTY for every other solver.

It sits here for listcost's reason: it is a statement about the solve that only one solver can make, and the alternative – calling solver_nc_solve a second time to recover it – would solve the model twice for one number. Absent is not zero: log G = 0 is the constant of an empty network, so a caller must test the option rather than the value.

Definition at line 106 of file solver_mva_runner.h.

Referenced by line::nc::solver_nc_run_analyzer().

◆ method

◆ QN

◆ refreshed_struct

template<class T>
std::shared_ptr<qn::NetworkStruct<T> > line::mva::AvgResult< T >::refreshed_struct

The struct whose cache self-switch carries the CONVERGED hit/miss split, filled by the cacheqn branches and NULL for every other model.

It has to travel with the result because the split is a SOLVER OUTPUT, not model structure: link() leaves the self-switch at the offered 1/2-1/2, and every quantity derived from a visit ratio – ArvR, ResidT, and the node-level hit and miss throughputs – is wrong by that ratio until the solve replaces it. The runner already uses this struct for the STATION table (see refL below); handing the caller the base struct instead makes -a avg and -a node disagree on one column of one model, which is the divergence node_metrics exists to avoid. Measured on cache_replc_routing: Cache/Router/Sink hit and miss read 1/1 off the base struct against 0.8/1.2.

Definition at line 127 of file solver_mva_runner.h.

Referenced by line::solvers::node_metrics(), and line::mva::solver_mva_run_analyzer().

◆ RN

◆ TN

◆ UN

◆ warning

template<class T>
std::string line::mva::AvgResult< T >::warning

The reference's own warning text, verbatim, empty when it did not warn.

It belongs beside actualmethod because it is the same kind of thing: a statement about HOW the numbers were produced rather than a metric. It is carried, not thrown, because the answer is usable – the SJN starvation cap leaves the population law exact and only the ACCURACY unwarranted, which is solver_nc_cdf.h:83's precedent, not solver_mam_retrial.h:437's. Dropping it silently is worse than a wrong number: the answer then looks authoritative exactly where the reference declines to stand behind it.

Definition at line 78 of file solver_mva_runner.h.

Referenced by line::mva::solver_mva_run_analyzer(), and line::nc::solver_nc_run_analyzer().

◆ WN

◆ XN


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