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

Exact mean value analysis of the two-station multiclass LCFS network of Casale, QUESTA 2026 (station 1 LCFS, station 2 LCFS-PR). More...

#include <cstddef>
#include <vector>
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
#include "line/util/population.h"
Include dependency graph for pfqn_lcfsqn_mva.h:

Go to the source code of this file.

Classes

struct  line::pfqn::LcfsMvaResult< T >

Namespaces

namespace  line
namespace  line::pfqn

Functions

template<class T>
LcfsMvaResult< T > line::pfqn::pfqn_lcfsqn_mva (const std::vector< T > &alpha, const std::vector< T > &beta, const std::vector< int > &N)
 Exact mean value analysis of the two-station multiclass LCFS network of Casale, QUESTA 2026 (station 1 LCFS, station 2 LCFS-PR).

Detailed Description

Exact mean value analysis of the two-station multiclass LCFS network of Casale, QUESTA 2026 (station 1 LCFS, station 2 LCFS-PR).

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

The recursion over the population lattice carries, besides the queue lengths Q and the throughputs T, the BACK PROBABILITIES B(s,r) that a class-r job sits at the back of the queue at station s. Writing |n| for the total population, n_k for the class-k population and A = prod_r alpha_r^{n_r},

Wnp = A [ 1 + Q_{n-e_k}(1,k)

  • sum_{r != k} (alpha_k/alpha_r) B_{n-e_k}(1,r)/B_{n-e_r}(1,k) Q_{n-e_r}(1,k) ] Wpr = alpha_k^{|n|-1} beta_k [ 1 + Q_{n-e_k}(2,k)
  • sum_{r != k} (alpha_r/alpha_k) B_{n-e_k}(2,r)/B_{n-e_r}(2,k) Q_{n-e_r}(2,k) ] B_n(1,k) = A n_k / (Wnp + Wpr), B_n(2,k) = alpha_k^{|n|-1} beta_k n_k / (Wnp + Wpr) Q_n(s,k) = B_n(s,k) + sum_r B_n(s,r) Q_{n-e_r}(s,k) T_n(k) = sum_r B_n(1,r) T_{n-e_r}(k) + (1/alpha_k) B_n(1,k) (1 - sum_r alpha_r T_{n-e_k}(r))

with everything zero at n = 0. The reference special-cases |n| = 1; it is not necessary, since the general step reduces to it (the r != k sum is empty and every n - e_k term is zero), and the port therefore uses one uniform recursion.

Arithmetic: EXACT-CAPABLE. The reference is written entirely in a scaled-log representation – B is stored as a mantissa plus a log scale, and every sum goes through a log-sum-exp helper – and its own comments state that this is a range device and "mathematically EXACT, no approximations are made". That representation is dropped here: the recursion is evaluated directly in T, which needs no scaling in an exact field and none in the high-precision floats either.

ONE SEMANTIC CONSEQUENCE of dropping it. The log-sum-exp helper cannot represent a negative term, so the reference silently skips the throughput contribution whenever (1 - sum_r alpha_r T_{n-e_k}(r)) is negative, and skips any term whose factors are not strictly positive. Those guards are artifacts of the representation, not of the model: the bracket is a probability complement and is nonnegative on a consistent state. This port includes every term unconditionally, which is what the recursion says.

Definition in file pfqn_lcfsqn_mva.h.