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

Port of solver_mam.m, the dec.mmap method: the per-class departure-process decomposition. More...

Include dependency graph for solver_mam_decmmap.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
mva::MvaSolution< T > line::mam::solver_mam_decmmap (const qn::NetworkStruct< T > &L, const MamOptions &opt)
 Port of solver_mam.m.

Detailed Description

Port of solver_mam.m, the dec.mmap method: the per-class departure-process decomposition.

IT IS THE MMAP DECOMPOSITION WITHOUT THE FORK-JOIN MACHINERY. The sweep is the same one solver_mam_basic_mmap_inner runs – rebuild every arrival stream from the departure table through the traffic equations, solve each station in isolation, and replace each departure process by the ETAQA truncation of that station's own QBD – with three differences, all of them the reference's:

  • the traffic step is solver_mam_traffic, the plain one, so DEP is STATION-indexed and a Fork or a Join in the model is refused by the traffic step itself rather than synchronized;
  • there is no Join post-processing, because there is no Join;
  • the increment norm is max(|xn-xr|./xr), WITHOUT the FineTol offset the fork-join variant adds, so the first sweep's norm is NaN by construction (Q starts at zero) and config.da_miniter = 3 is what carries the loop past it.

WHAT THE REFERENCE REFUSES, AND HOW THIS PORT REFUSES IT. Two model classes get NO ANSWER from solver_mam.m, and neither refusal is an error there:

  • a station whose discipline is not EXT, FCFS, HOL, FCFSPRPRIO or PS makes it return [] for all six metrics with method = '', after a warning. Note that INF is NOT in that list: a model with a Delay is refused;
  • a model that is not purely open returns the ZERO matrices it initialised, again after a warning. Returning empty or all-zero metrics under a method name is exactly the silently-wrong answer this port refuses to produce, so both are thrown BY NAME here, with the reference's own reason in the message.

THE TRAILING SURROGATE-DELAY BLOCK IS OUTSIDE THE NODE SWITCH in the reference, so it runs at EVERY station and not only at the queues – including the Source, whose PH is its own ARRIVAL process (the EXT branch never assigns one) and whose utilization therefore comes out as lambda * (1/lambda) = 1. Reproduced as written: it is what the reference reports, the surrogate term is zero at the Source because it has one server, and getAvg's metric filter is what decides whether a Source utilization is shown.

ARITHMETIC. Double (or real) only, for the reasons solver_mam_basic.h lists.

Definition in file solver_mam_decmmap.h.