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

Conway's multiserver Linearizer for chain-dependent FCFS queues (Conway 1989, "Fast Approximate Solution of Queueing Networks with Multi-Server Chain-Dependent FCFS Queues"). More...

#include <cstddef>
#include <vector>
#include "line/api/pfqn/pfqn_amva_common.h"
#include "line/api/pfqn/pfqn_egflinearizer.h"
#include "line/api/pfqn/pfqn_linearizerms.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for pfqn_conwayms.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::pfqn

Functions

template<class T>
LinearizerResult< T > line::pfqn::pfqn_conwayms (const Matrix< T > &L, const std::vector< int > &N, const Matrix< T > &Z, const std::vector< int > &nservers, const std::vector< SchedStrategy > &type, double tol, int maxiter, const Matrix< T > &QN0)
 Conway's multiserver Linearizer for chain-dependent FCFS queues (Conway 1989, "Fast Approximate Solution of Queueing Networks with Multi-Server Chain-Dependent FCFS Queues").
template<class T>
LinearizerResult< T > line::pfqn::pfqn_conwayms (const Matrix< T > &L, const std::vector< int > &N, const Matrix< T > &Z, const std::vector< int > &nservers)
 MATLAB defaults: all stations FCFS, tol = 1e-8, maxiter = 1000.

Detailed Description

Conway's multiserver Linearizer for chain-dependent FCFS queues (Conway 1989, "Fast Approximate Solution of Queueing Networks with Multi-Server Chain-Dependent FCFS Queues").

Templated port of matlab/src/api/pfqn/pfqn_conwayms.m, cross-checked against jar/src/main/java/jline/api/pfqn/mva/Pfqn_conwayms.java.

The distinguishing feature over pfqn_linearizerms is the pair of conditional service rates at a c-server station, obtained by averaging over the compositions n of the c busy servers among the R chains,

A_i(n) = multinomial(n) prod_c F_r(i,c)^{n_c}, F_r(i,c) = T_1(c|r) L(i,c) / sum_c' ... XR(i,r) = sum_{n in B_r} A_i(n) / (sum_c n_c / L(i,c)) / sum_{n in B_r} A_i(n) XE(i,r,c) = the same restricted to n_c >= 1

with B_r = { n : sum(n) = c, n <= N - e_r }, which enter the residence time as W = L + PB XR + sum_c XE (Q_1 - L T_1).

Arithmetic: TRANSCENDENTAL-GATED, on the fixed-point tolerance alone. The inner Core loop stops on norm(Q_{k+1} - Q_k) < tol, so the returned value depends on the stopping rule. The reference forms A_i(n) as exp(multinomialln(n) + n log F), but that is a convenience: the value is a finite rational in F, and this port computes it as multinomial(n) times an integer power product, which is both exact and free of the 0 * (-Inf) = NaN the reference produces whenever some F_r(i,c) vanishes at n_c == 0.

Convergence norm and the FCFS selection follow pfqn_linearizerms: Frobenius rather than spectral (dominating, same fixed point), and the FCFS arm of the single-server residence time is taken only when every station is FCFS, which is what MATLAB's if type == SchedStrategy.FCFS on a vector means. The JAR inverts this test; MATLAB is the reference.

Definition in file pfqn_conwayms.h.