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

Exact convolution analysis of a closed network with class-dependent service rates. More...

#include <cmath>
#include <vector>
#include "line/api/pfqn/pfqn_conv.h"
#include "line/lang/qn/network_struct.h"
#include "line/solvers/mva/sn_chain.h"
#include "line/solvers/nc/nc_types.h"
#include "line/util/error.h"
Include dependency graph for solver_nc_conv.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::nc

Functions

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

Detailed Description

Exact convolution analysis of a closed network with class-dependent service rates.

Port of solver_nc_conv.m.

A class-dependent station scales its nominal demand by beta_{i,r}(n), a function of the per-class population AT THAT STATION. None of the normalizing-constant algorithms in solver_ncld can apply it – they read a rate lattice mu(n) and nothing else – so a cdscaling model is routed here UNCONDITIONALLY on the method, not only on 'exact'. The multichain convolution of Sauer (1983), Sect. 5.2, eq. (40) is the exact algorithm for beta, and it is what pfqn_conv implements.

QUEUE LENGTHS COME FROM THE MARGINAL, NOT FROM MVA. The station factor X_m(n) is built by the chain-dependent recurrence, and the marginal P_m(n | N) = X_m(n) G_{-m}(N-n) / G(N) is summed against n_k. G_{-m} is a fresh convolution over every station but m, so the cost is one convolution per lattice point per class-dependent station: this analyzer is exact and slow, which is the trade the reference makes.

UTILIZATION IS NORMALIZED BY THE DECLARED PEAK. T*ST measures capacity used in units of the NOMINAL rate and reaches max_n beta, not 1, at saturation, so a beta emulating two servers would report U = 2 * (true utilization). Dividing by sn.cdscalingpeak restores the T*S/c convention of an ordinary multiserver station. No cap is needed: sum_r U(i,r) is a convex combination of the beta_r(n) over max_n beta, hence at most one by construction.

Arithmetic: the convolution itself is field arithmetic, but lG is a log and the analyzer is guarded on has_transcendental for it.

Definition in file solver_nc_conv.h.