![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
QD-LIN: the Linearizer arm of AMVA-LD, on a plain demand matrix. More...
#include <algorithm>#include <cmath>#include <cstddef>#include <limits>#include <vector>#include "line/api/pfqn/pfqn_lldfun.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Classes | |
| struct | line::pfqn::QdLinResult< T > |
| What pfqn_qdlin returns: the fixed point and how it was reached. More... | |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| QdLinResult< T > | line::pfqn::pfqn_qdlin (const Matrix< T > &L, const std::vector< T > &N, const std::vector< T > &Z, const Matrix< T > &mu, const std::vector< double > &nservers, double tol=1e-6, std::size_t maxiter=1000, double wtol=1e-4) |
| QD-LIN: the Linearizer arm of AMVA-LD, on a plain demand matrix. | |
| template<class T> | |
| QdLinResult< T > | line::pfqn::pfqn_qdlin (const Matrix< T > &L, const std::vector< T > &N, const std::vector< T > &Z, double tol=1e-6, std::size_t maxiter=1000, double wtol=1e-4) |
| Overload without a load-dependent lattice or explicit server counts. | |
QD-LIN: the Linearizer arm of AMVA-LD, on a plain demand matrix.
Array-level twin of what SolverMVA computes for method='qdlin': the Linearizer of Chandy and Neuse, Commun. ACM 25(2), 1982, run inside the queue-dependent AMVA framework of Casale, Perez and Wang (IFIP PERFORMANCE 2015), so the load-dependent term g_k is evaluated at the CORRECTED arrival-instant queue rather than at the plain one.
Port of python/line_solver/api/pfqn/qdlin.py, which is itself a transcription of solver_amvald restricted to the domain a demand matrix describes: closed classes only, one chain per class, unit visits, PS queueing stations and one optional delay carrying Z. Within that domain it reproduces the native-Python SolverMVA(model,'qdlin') to machine precision on random instances, which is what this kernel is for; it is NOT an independent re-derivation.
TWO PROPERTIES OF THE REFERENCE ARE REPRODUCED DELIBERATELY, not inherited by accident, and a caller comparing against a textbook Linearizer sees both:
MU AND NSERVERS ARE DIFFERENT MECHANISMS, unlike in pfqn_qdamva, which folds the multiserver curve into mu. Here mu is sn.lldscaling, an interpolated rate multiplier per station, and nservers is the server count feeding the softmin term. A c-server station is nservers[k] = c, NOT a mu row of min(1..smax, c); passing the latter reproduces Queue.setLoadDependence, a different station.
THE WAIT-FACTOR FLOOR IS A SEPARATE KNOB from the convergence tolerance, and is the native-Python solver's: MATLAB and the C++ solver_amvald do not clamp the wait factor at all. It is load-bearing for qdlin, whose class-aggregate correction drives the factor negative at a lightly loaded station.
Arithmetic: TRANSCENDENTAL-GATED, inherited whole from pfqn_lldfun.
Definition in file pfqn_qdlin.h.