![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Quadratic-reduction bound on the utilization of one queue of a closed MAP queueing network with a FINITE-CAPACITY station under blocking-after-service. More...
#include <cstddef>#include <string>#include <vector>#include "line/api/mapqn/mapqn_params.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"#include "line/util/lp_highs.h"#include "line/util/simplex.h"Go to the source code of this file.
Classes | |
| struct | line::mapqn::QrBasParams< T > |
| Parameters of the BAS bound, mirroring the reference's params. More... | |
| struct | line::mapqn::QrBasResult< T > |
| Result of a BAS bound solve. More... | |
| struct | line::mapqn::QrBasIndex |
| Variable layout: p2(j,nj,kj,i,ni,hi,m) then e(i,ki). More... | |
Namespaces | |
| namespace | line |
| namespace | line::mapqn |
Functions | |
| template<class T> | |
| QrBasResult< T > | line::mapqn::mapqn_qr_bounds_bas (const QrBasParams< T > &p, int objective_queue, MapqnSense sense=MapqnSense::Min) |
| Bound the utilization of one queue over the BAS polytope. | |
Quadratic-reduction bound on the utilization of one queue of a closed MAP queueing network with a FINITE-CAPACITY station under blocking-after-service.
Templated port of matlab/lib/qrf/qrf_bas.m (ground truth), whose own origin is the AMPL model qrboundsbas_skel.mod.
WHAT BAS MEANS HERE. Station f has capacity F(f). A job completing at station j and routed to a full f cannot move, so j is BLOCKED: it holds the completed job and serves nothing until f frees a slot. The set of currently blocked stations, and the order in which they blocked, is the blocking configuration m in 0..MR-1. Every probability variable carries it, which is what separates this model from mapqn_bnd_qr_ld: the state is (pairwise occupancy, blocking configuration), not occupancy alone.
THE BLOCKING TABLES ARE SUPPLIED, NOT DERIVED. BB, MM, ZZ, ZM and MM1 are caller data here exactly as they are in the reference, where example_bas_small.m writes them out literally. Deriving them from (M, f) would be a different routine and is deliberately not attempted.
FAMILY-BY-FAMILY TRAPS, all verified against the reference and recorded in _kb/03-api-layer.md. Read them before editing any family below:
UPPER BOUNDS ARE INFINITE, unlike every other bound in this family. The reference initializes ub = inf and only the ZERO families pin anything; the variables are bounded above through ONE instead. lp::LpModel's default is exactly lb = 0 with a free upper bound, so nothing is set here beyond the ZERO pins.
COST. MR * B^2 + sum_i K(i) columns with B = (N+1) sum_i K(i), so the model is MR times the load-dependent one. The tableau here is dense, which confines the port to small instances; the reference's own paper instance is ~6e4 columns and needs a sparse revised simplex.
Definition in file mapqn_qr_bounds_bas.h.