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

Port of solver_nc_mem.m and solver_nc_mem_supports.m: the Maximum Entropy Method of Kouvatsos (1994). More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <string>
#include <vector>
#include "line/api/sn/sn_get_buffer_size.h"
#include "line/api/me/me_cqn.h"
#include "line/api/me/me_mqn.h"
#include "line/api/me/me_oqn.h"
#include "line/api/me/me_oqn_blk.h"
#include "line/lang/qn/network_struct.h"
#include "line/solvers/mva/mva_types.h"
#include "line/solvers/nc/solver_nc.h"
#include "line/solvers/nc/nc_types.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for solver_nc_mem.h:

Go to the source code of this file.

Classes

struct  line::nc::MemSupport
 The verdict of solver_nc_mem_supports. More...

Namespaces

namespace  line
namespace  line::nc

Functions

template<class T>
MemSupport line::nc::solver_nc_mem_supports (const qn::NetworkStruct< T > &sn)
 Port of solver_nc_mem_supports.m.
template<class T>
NcSolution< T > line::nc::solver_nc_mem (const qn::NetworkStruct< T > &sn, const NcSolverOptions &opt)
 Port of solver_nc_mem.m.

Detailed Description

Port of solver_nc_mem.m and solver_nc_mem_supports.m: the Maximum Entropy Method of Kouvatsos (1994).

WHY MEM IS IN A NORMALIZING-CONSTANT SOLVER AT ALL. It is not a normalizing-constant algorithm and shares no code with one. It is here because it answers the question the product-form path cannot: a network whose arrival or service processes are NOT exponential. The product-form analyzer silently exponentializes such a model – it reads only the mean rate – while MEM carries the second moment through GE (generalised exponential) building blocks and reports what the variability does.

THIS FILE IS A DISPATCHER, NOT AN ALGORITHM. The four algorithms live in api/me/, and three of them were already ported:

open Section 3.2, GE/GE/1, GE/GE/c and GE/GE/inf blocks -> me_oqn closed Section 3.3, two-stage pseudo-open plus convolution -> me_cqn mixed the two composed by product-form-style conditioning -> me_mqn blocking Section 4.1, censored GE/GE/c/0;N blocks -> me_oqn_blk

All four are now ported. The blocking one additionally covers TRANSFER BLOCKING (BAS) through the holding-node expansion of Tahilramani, Manjunath and Bose (1999); see api/me/me_oqn_blk.h for why that expansion is needed at all.

THE GATE IS PART OF THE METHOD. solver_nc_mem_supports is not a convenience: MEM's building blocks are defined for particular network shapes, and a model outside them has no MEM answer at all. The reference returns a REASON naming the first violated rule, and that reason is carried into the exception here so a refusal says which rule and which station.

ARITHMETIC. The GE blocks are transcendental throughout; a non-transcendental backend is refused by name.

Definition in file solver_nc_mem.h.