![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Refined mean-field (O(1/N)) steady state of the matrix fluid drift, method = "ddpp" (alias fld.ddpp). More...
#include <algorithm>#include <chrono>#include <cmath>#include <complex>#include <cstddef>#include <limits>#include <string>#include <vector>#include "line/lang/qn/feature_set.h"#include "line/lang/qn/network_struct.h"#include "line/solvers/fluid/fluid_moments.h"#include "line/solvers/fluid/fluid_nonhyperbolic.h"#include "line/solvers/fluid/fluid_odes.h"#include "line/solvers/fluid/solver_fluid.h"#include "line/util/eig.h"#include "line/util/error.h"#include "line/util/linalg.h"#include "line/util/lu.h"#include "line/util/matrix.h"#include "line/util/sylvester.h"Go to the source code of this file.
Classes | |
| struct | line::fluid::FluidDdppAdmits |
| The verdict of fluid_ddpp_admits: ok, or the refusal and its identifier. More... | |
| struct | line::fluid::FluidDdppReport |
| What the expansion found beside the refined table: the fluid point and V. More... | |
Namespaces | |
| namespace | line |
| Conservation laws of a layered queueing network, enumerated from its structure. | |
| namespace | line::fluid |
Functions | |
| template<class T> | |
| FluidDdppAdmits | line::fluid::fluid_ddpp_admits (const qn::NetworkStruct< T > &sn, const FluidOptions &opt) |
| Port of fluid_ddpp_admits.m: the model class of 'ddpp', decided before the fixed point is solved. | |
| template<class T> | |
| FluidSolution | line::fluid::solver_fluid_ddpp (const qn::NetworkStruct< T > &sn, const FluidOptions &opt, FluidDdppReport *report=nullptr, bool probe=false) |
| Port of solver_fluid_ddpp.m. | |
| template<class T> | |
| FluidDdppAdmits | line::fluid::fluid_ddpp_hyperbolic (const qn::NetworkStruct< T > &sn, const FluidOptions &opt) |
| Does the fluid fixed point admit the 1/N expansion? | |
Refined mean-field (O(1/N)) steady state of the matrix fluid drift, method = "ddpp" (alias fld.ddpp).
Port of solver_fluid_ddpp.m and fluid_ddpp_admits.m.
The model is read as a density-dependent population process whose size N is the total closed population: the state is the job count of every (station, class, phase) coordinate, a jump moving a job from a to b has rate theta_a(x) * W(a,b), with theta_a = x_a * min(1, c_i / X_i) (x_a at an infinite server). The family scales every population and finite server count together, so the fixed point x* and the correction V are N-independent in job counts. Gast and Van Houdt (POMACS 1(2), 2017) give E[X] = x* + V + O(1/N), with J W + W J' + Q = 0 and V = -J^{-1} (1/2) H:W, both solved on an orthonormal basis of the jump span (Allmeier and Gast, PER 49(4), 2022). The rates are refined to the same order, so the corrected throughputs satisfy flow balance exactly.
The correction is nonzero only at a saturated MULTICLASS PS/FCFS share: a single-class network gives V = 0 (piecewise-linear drift for exponential service, vanishing Hessian contraction for phase-type service, so the result is insensitive beyond the mean). The fixed point is found by the same pseudo-transient continuation as the MATLAB, JAR and native Python ports.
Definition in file fluid_ddpp.h.