LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
mapqn_bnd_lr_mva.h File Reference

MVA-shaped linear-reduction bound for a closed network of M - 1 exponential queues and ONE MAP queue. 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/simplex.h"
Include dependency graph for mapqn_bnd_lr_mva.h:

Go to the source code of this file.

Classes

struct  line::mapqn::LrMvaParams< T >
 Parameters of the MVA-shaped LR bound, mirroring the reference's params. More...
struct  line::mapqn::MapqnBndLrMvaResult< T >
 Result of an MVA-shaped LR bound solve. More...
struct  line::mapqn::LrMvaIndex
 Variable layout: UN, then QN, then B, in the reference's declaration order. More...

Namespaces

namespace  line
namespace  line::mapqn

Enumerations

enum class  line::mapqn::MapqnObjectiveVar { line::mapqn::UN , line::mapqn::QN }
 The variable family the objective is taken over. More...

Functions

template<class T>
MapqnBndLrMvaResult< T > line::mapqn::mapqn_bnd_lr_mva (const LrMvaParams< T > &p, int objective_queue, int objective_level, MapqnSense sense=MapqnSense::Max, MapqnObjectiveVar objective_var=MapqnObjectiveVar::UN)
 Bound UN or QN at (objective_queue, objective_level) over the MVA-shaped LR polytope.

Detailed Description

MVA-shaped linear-reduction bound for a closed network of M - 1 exponential queues and ONE MAP queue.

Templated port of matlab/lib/qrf/mapqn_bnd_lr_mva.m (ground truth), cross-checked against python/line_solver/api/mapqn/bnd_lr_mva.py.

A DIFFERENT MODEL, NOT A VARIANT. mapqn_bnd_lr relaxes onto the marginal probabilities p1(j,k,i,ni,h) and reads utilizations out of them. This one never introduces a probability variable at all: it works directly on the mean-value quantities UN(i,k), QN(i,k) and the conditional length B(j,k,i), in the manner of an MVA recursion turned into a relaxation. The consequence is a model of 2 M K + M^2 K columns instead of one quadratic in (N+1) sum_i K(i), so it is by far the cheapest bound in the family and the only one that stays small as the population grows. Nothing here is shared with mapqn_p1_common.h, and it deliberately does not use MapqnParams: the network shape is different (see LrMvaParams).

NETWORK SHAPE. Queues 1..M-1 are exponential with scalar rates muM(i), and queue M is the MAP, whose K levels are the phase process. That asymmetry is carried entirely by q(i,j,k,h) below and by nothing else, which is why the families read uniformly over i even though the stations are not alike.

THE FAILURE MODE OF THIS FAMILY IS A VACUOUS BOUND, NOT A CRASH. FLOW, UBAL, QBAL, MCC and MCC2 are the families that read the rates; the rest are structural. Drop the rate-bearing ones and UN = 0 stays feasible while every subscript remains internally consistent. Each family is emitted by a function named after the reference's own numbered section, so the inventory is diffable; do not inline them.

ARITHMETIC. Assembly is +, -, * on the model data and lp::simplex_solve uses Bland's rule with no tolerance, so at T = line::Rational the returned bound is the EXACT optimum of the exact polytope. The MATLAB reference defaults to linprog's 'interior-point-legacy' here, which on these badly scaled instances is markedly more accurate than plain 'interior-point'.

Definition in file mapqn_bnd_lr_mva.h.