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

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"
Include dependency graph for pfqn_sens.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.

Detailed Description

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:

  • pfqn_sens_dmva : forward-mode differentiation of the exact Reiser-Lavenberg MVA recursion. Handles every model.
  • pfqn_sens_comom : the Class-Oriented Method of Moments specialization for the repairman model (one single-server queue plus a delay, every populated class having a strictly positive demand and think time).

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.