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

Distinct-load Normalizing Constant (DNC) at a nonintegral population. More...

#include <algorithm>
#include <cmath>
#include <cstddef>
#include <limits>
#include <vector>
#include "line/api/pfqn/pfqn_asympt_common.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/lu.h"
#include "line/util/matrix.h"
Include dependency graph for pfqn_dnc.h:

Go to the source code of this file.

Classes

struct  line::pfqn::DncResult< T >
 Normalizing constant and throughput at a real-valued population. More...

Namespaces

namespace  line
namespace  line::pfqn

Functions

template<class T>
DncResult< T > line::pfqn::pfqn_dnc (const std::vector< T > &L, const T &N)
 Distinct-load Normalizing Constant (DNC) at a nonintegral population.

Detailed Description

Distinct-load Normalizing Constant (DNC) at a nonintegral population.

Templated port of matlab/src/api/pfqn/pfqn_dnc.m.

Normalizing constant and throughput of a single-class closed product-form network at a REAL-VALUED population, by partial-fraction inversion of the network generating function (Dowdy and Gordon 1984). With distinct loads x_1..x_G of multiplicities m_1..m_G the generating function prod_g (1 - x_g u)^{-m_g} expands as

G(n) = sum_g sum_{j = 1..m_g} A_gj C(n+j-1, j-1) x_g^n,

every term of which is an analytic function of n. Evaluating it at a real n therefore interpolates the integral normalizing constants exactly (it reproduces them at every integer) and gives a smooth throughput curve X(N) = G(N-1)/G(N) through the integral points, rather than the rounding or linear interpolation the paper compares against. For all-distinct loads the coefficients have the closed form A_g = prod_{l != g} x_g / (x_g - x_l), used directly; with repeated loads they are recovered from the M integral constants G(0..M-1), which determine them uniquely.

Only the queueing part admits this continuation: the delay sequence Z^n / n! is entire and has no partial-fraction expansion, so a think time is rejected here. Use pfqn_nintmva for nonintegral populations with a delay.

Reference: L. W. Dowdy, K. D. Gordon, "Algorithms for Nonintegral Degrees of Multiprogramming in Closed Queuing Networks", Performance Evaluation 4(1):19-28, 1984.

Arithmetic: TRANSCENDENTAL. The partial-fraction series is evaluated in the log domain through gamma functions, so the exact backend is refused at compile time.

Definition in file pfqn_dnc.h.