![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The fork-join fixed point that drives one inner MVA solve. More...
#include "line/util/line_console.h"#include <algorithm>#include <cmath>#include <string>#include <utility>#include <vector>#include "line/lang/qn/network_struct.h"#include "line/solvers/mva/fj_mmt.h"#include "line/solvers/mva/solver_mva.h"#include "line/util/error.h"Go to the source code of this file.
Classes | |
| struct | line::mva::Distrib< T > |
| struct | line::mva::GlobalConstants |
| The MATLAB GlobalConstants, as reported by lineStart at its defaults. More... | |
Namespaces | |
| namespace | line |
| namespace | line::mva |
Functions | |
| template<class T> | |
| T | line::mva::fj_node_time (const qn::NetworkStruct< T > &V, std::size_t nd, const std::vector< std::size_t > &merge, const Matrix< T > &QN, const Matrix< T > &TN) |
| Port of ModelAdapter.findPathsCS' per-node charge: the queue length of the merge set at this station divided by its throughput, which is the time a job of that set spends at the node. | |
| template<class T> | |
| void | line::mva::fj_find_paths (FjMmt< T > &tr, std::size_t curNode, std::size_t endNode, std::size_t curClass, const std::vector< std::size_t > &merge, const Matrix< T > &QN, const Matrix< T > &TN, const T &t0, std::vector< T > &out, std::vector< std::pair< std::size_t, std::size_t > > visited) |
| Port of ModelAdapter.findPathsCS: the response time along every path from a fork to ITS join, in the given class. | |
| template<class T> | |
| Matrix< T > | line::mva::fj_leading_cols (const Matrix< T > &A, std::size_t n) |
| The leading n columns of a class-indexed metric. | |
| template<class T> | |
| bool | line::mva::fj_converged (const Matrix< T > &A, const Matrix< T > &B, double iter_tol) |
| The mixed absolute/relative stopping test of the fork-join loop. | |
| template<class T> | |
| std::vector< T > | line::mva::fj_fork_tput (const qn::NetworkStruct< T > &L, const FjMmt< T > &tr, const Matrix< T > &TN, std::size_t fa) |
| Port of fjFixedPoint.m:130-136: the firing throughput of fork fa, per class of the BASE model. | |
| template<class T> | |
| T | line::mva::fj_finite_or_zero (const T &x) |
| A metric read out of a solve, with a non-finite entry read as zero. | |
| template<class T> | |
| void | line::mva::fj_ht_sync_delays (const qn::NetworkStruct< T > &L, FjMmt< T > &tr, const MvaSolution< T > &out) |
| Port of the heidelberger-trivedi arm of fjFixedPoint.m:212-255: the synchronisation delays of one pass, written onto the transformed model. | |
| template<class T> | |
| void | line::mva::fj_ht_merge (const qn::NetworkStruct< T > &L, const FjMmt< T > &tr, MvaSolution< T > &out) |
| Port of the heidelberger-trivedi arm of fjFixedPoint.m:263-291: fold the auxiliary columns back into the classes they stand for. | |
| template<class T, class InnerSolve> | |
| MvaSolution< T > | line::mva::fj_fixed_point (const qn::NetworkStruct< T > &L, FjMmt< T > &tr, std::vector< T > &lam, const MvaOptions &opt, InnerSolve inner) |
| Drive the fork-join fixed point of a transformed model to convergence. | |
The fork-join fixed point that drives one inner MVA solve.
Port of @NetworkSolver/fjFixedPoint.m. The transform (fj_mmt.h) turns a model with a Fork into a plain mixed queueing network carrying auxiliary open classes; this driver solves that network repeatedly, each pass re-setting the auxiliary arrival rates from the current forkLambda, recomputing the synchronisation delay at the join from the branch response times the solve reports, moving forkLambda halfway towards the join throughput, and merging the auxiliary classes back into the ones they stand for.
The inner solve is a callback so the same driver serves both entry points that need it: SolverLN, which solves a layer with solver_mva_analyzer, and SolverMVA over a general Network, which solves with mva_dispatch. The callback takes the transformed model by reference (the driver mutates its services and chains between passes) and returns an MvaSolution over the auxiliary-expanded class set; everything else here – the merge-back, the auxiliary-column drop and the non-finite guard – is codebase-independent and lives here once.
Definition in file fj_driver.h.