![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Port of solver_ncld.m: the LOAD-DEPENDENT normalizing-constant analyzer. More...
#include <algorithm>#include <cmath>#include <limits>#include <string>#include <vector>#include "line/api/npfqn/npfqn_nonexp_approx.h"#include "line/api/pfqn/pfqn_fnc.h"#include "line/api/pfqn/pfqn_mushift.h"#include "line/api/pfqn/pfqn_mvams.h"#include "line/api/pfqn/pfqn_ncld.h"#include "line/api/pfqn/pfqn_ncldmx.h"#include "line/lang/qn/network_struct.h"#include "line/solvers/nc/solver_nc_conv.h"#include "line/solvers/mva/mva_types.h"#include "line/solvers/mva/sn_chain.h"#include "line/solvers/nc/nc_types.h"#include "line/solvers/nc/solver_nc.h"#include "line/util/error.h"#include "line/util/matrix.h"Go to the source code of this file.
Namespaces | |
| namespace | line |
| namespace | line::nc |
Functions | |
| template<class T> | |
| NcSolution< T > | line::nc::solver_ncld (const qn::NetworkStruct< T > &sn_in, const NcSolverOptions &opt) |
| Port of solver_ncld.m. | |
Port of solver_ncld.m: the LOAD-DEPENDENT normalizing-constant analyzer.
WHAT MAKES IT A DIFFERENT SOLVER. solver_nc.h assumes every station serves at a constant rate, so its constants come from pfqn_nc. Here each station carries a rate lattice mu_i(n) and the constants come from pfqn_ncld. That is not a refinement of the same formula: the arrival-theorem shortcut used there does not hold, and the queue length is recovered instead from the CONDITIONAL MVA identity
Q_ic = exp(log L_ic + lG(mu^i, N-1_c) - log mu_i(1) - lG(N-1_c)) X_c (1 + CQ_i)
where mu^i is the lattice shifted at station i (pfqn_mushift) and CQ_i is assembled from the flow-equivalent complement (pfqn_fnc). Four constants per (station, chain) rather than one, which is the price of load dependence.
WHY MULTISERVER ARRIVES HERE. @@SolverNC/runAnalyzer rewrites a genuine c-server station as mu(n) = min(n, c) whenever the model is product-form, and that lattice is EXACT where Seidmann's approximation in solver_nc.h is not. The server count is deliberately kept alongside the lattice: utilization is the fraction of the c servers busy, and c cannot be read back from min(1:Nt, c) once the population falls below it.
MIXED MODELS take a different route entirely – the Bruell-Balbo-Ashfari effective-capacity MVA (pfqn_mvaldmx) – because an open chain has no finite population for the constant to be evaluated at.
ARITHMETIC. As in solver_nc.h, every measure is a difference of logarithms of normalizing constants; a non-transcendental backend is refused by name.
Definition in file solver_ncld.h.