![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
Exact analytic derivatives of the mean performance measures {X,Q,U,R} of a closed product-form (BCMP) network with respect to the demands L(i,r) and the think times Z(r). More...
#include <cstddef>#include <map>#include <utility>#include <vector>#include "line/api/pfqn/pfqn_comomrm.h"#include "line/api/pfqn/pfqn_sens_mva.h"#include "line/num/number.h"#include "line/util/error.h"#include "line/util/matrix.h"#include "line/util/population.h"Go to the source code of this file.
Classes | |
| struct | line::pfqn::SensParam |
| One differentiation parameter. More... | |
| struct | line::pfqn::SensResult< T > |
Namespaces | |
| namespace | line |
| namespace | line::pfqn |
Functions | |
| template<class T> | |
| SensResult< T > | line::pfqn::pfqn_sens_dmva (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z, const std::vector< int > &mi) |
| Forward-mode differentiation of the exact MVA recursion. | |
| template<class T> | |
| SensResult< T > | line::pfqn::pfqn_sens_comom (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z) |
| CoMoM-backed kernel for the repairman model (M = 1). | |
| template<class T> | |
| SensResult< T > | line::pfqn::pfqn_sens (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z, const std::vector< int > &mi) |
| Exact analytic derivatives of the mean performance measures {X,Q,U,R} of a closed product-form (BCMP) network with respect to the demands L(i,r) and the think times Z(r). | |
| template<class T> | |
| SensResult< T > | line::pfqn::pfqn_sens (const Matrix< T > &L, const std::vector< int > &N, const std::vector< T > &Z) |
| pfqn_sens with unit multiplicities. | |
Exact analytic derivatives of the mean performance measures {X,Q,U,R} of a closed product-form (BCMP) network with respect to the demands L(i,r) and the think times Z(r).
Templated port of matlab/src/api/pfqn/pfqn_sens.m. Two exact kernels are dispatched transparently, exactly as the reference does:
Both return the identical layout, so the choice is invisible to callers.
Arithmetic. The derivatives are analytic, not finite differences, and every step of both kernels is a field operation, so both instantiate at line::Rational and return exact rationals. Where the reference is forced through logarithms this port is not: MATLAB's sens_comom evaluates the normalizing-constant ratios as exp(lgm(m,n-e_s) - lgm(m,n)) because pfqn_comomrm returns only a log, whereas this port takes the ratio of the ComomResult::G values directly. That is the same identity evaluated in the field instead of through a transcendental round trip, so it is exact at Rational and agrees with MATLAB to rounding at double. This is the same substitution pfqn_mva.h already makes for the normalizing constant.
Reference: Z. Liu and P. Nain, INRIA RR-1144, 1989; X.-R. Cao and D.-J. Ma, Performance Evaluation 26:181-199, 1996; G. Casale, IEEE TSE 2011.
Definition in file pfqn_sens.h.