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

Exact mean-value analysis for networks with order-independent stations. More...

#include <cmath>
#include <functional>
#include <vector>
#include "line/api/pfqn/pfqn_mvaoi.h"
#include "line/lang/qn/network_struct.h"
#include "line/solvers/mva/mva_types.h"
Include dependency graph for solver_mva_oi.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mva

Functions

template<class T>
std::vector< std::size_t > line::mva::find_oi_stations (const qn::NetworkStruct< T > &L)
 The OI stations of a model, 1-based station indices.
template<class T>
bool line::mva::nc_is_oi_model (const qn::NetworkStruct< T > &L)
 Port of nc_is_oi_model: whether the model as a WHOLE is order-independent, which is a strictly stronger condition than having an OI station.
template<class T>
MvaSolution< T > line::mva::solver_mva_oi_analyzer (const qn::NetworkStruct< T > &L, const MvaOptions &opt)
 Port of solver_mva_oi_analyzer.m.

Detailed Description

Exact mean-value analysis for networks with order-independent stations.

Templated port of matlab/src/solvers/MVA/solver_mva_oi_analyzer.m.

An ORDER-INDEPENDENT (OI) station is a class-dependent load-dependent server whose total service rate mu(n) is a permutation-invariant function of the per-class count vector. A closed network of delay stations, load-independent single-server queues and ANY number of OI stations is product-form, and pfqn_mvaoi – the Conditional MVA that carries one rate-shift vector per OI station – solves it exactly, with no normalizing constant and no joint marginal.

References: Reiser and Lavenberg, JACM 27(2), 1980; the load-dependent extension of Bruell, Balbo and Afshari, 1984; OI stations and CMVA in Casale 2009 and Casale, Comte and Dorsman 2026.

A MULTISERVER BCMP QUEUE IS PROMOTED TO AN OI STATION rather than approximated. pfqn_mvaoi models a load-independent queue as a SINGLE server, so a c-server station cannot take that path; but its BCMP weight satisfies the OI balance recursion exactly for the permutation-invariant rate

mu(n) = (min(|n|, c) / |n|) * sum_{r : n_r > 0} n_r / D_r,

so it goes down the OI path instead and the answer stays exact. Reporting still classifies it as a queue, so its utilization keeps the per-server offered-load convention.

DETECTION mirrors nc_is_oi_model: PAS or OI scheduling, a service-rate function, and an ALL-ZERO swap graph. A nonzero swap graph is a genuine pass-and-swap station, which is not order-independent and is not product form, so it is excluded from the list – and if that leaves no OI station at all, the analyzer refuses rather than solving a different model.

Arithmetic: whatever pfqn_mvaoi accepts; the analyzer itself is field arithmetic.

Definition in file solver_mva_oi.h.