LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
pfqn_xzabalow.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012-2026, QORE Lab, Imperial College London
3 * All rights reserved.
4 */
5#ifndef LINE_API_PFQN_PFQN_XZABALOW_H
6#define LINE_API_PFQN_PFQN_XZABALOW_H
7
8/**
9 * @file
10 * @ingroup api_pfqn
11 * Asymptotic-bound-analysis lower bound on throughput.
12 *
13 * Templated port of matlab/src/api/pfqn/pfqn_xzabalow.m. Single-class model: L is the
14 * per-station demand vector, N the population, Z the think time.
15 *
16 * All operations stay in the field, so the bound is exact in rational
17 * arithmetic: a bound computed exactly is worth having, since a bound violated
18 * only by rounding is indistinguishable from a real violation.
19 */
20
21#include <algorithm>
22#include <vector>
23
24#include "line/num/number.h"
25#include "line/util/error.h"
26#include "line/util/matrix.h"
27
28namespace line {
29namespace pfqn {
30
31/** X >= N / (Z + N sum(L)), the ABA population bound. */
32template <class T>
33T pfqn_xzabalow(const std::vector<T>& L, const T& N, const T& Z) {
34 if (L.empty()) throw InputError("pfqn_xzabalow: empty demand vector");
35 T Ltot = num_traits<T>::from_int(0);
36 for (const T& d : L) Ltot += d;
37 return N / (Z + Ltot * N);
38}
39
40} // namespace pfqn
41} // namespace line
42
43#endif
InputError(const std::string &what)
Definition error.h:39
The exception types the port throws.
Dense matrix and non-owning view.
T pfqn_xzabalow(const std::vector< T > &L, const T &N, const T &Z)
X >= N / (Z + N sum(L)), the ABA population bound.
Number-type abstraction for the templated API port.