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

Feasibility predicate for a Markov-modulated deterministic process. More...

#include <cstddef>
#include "line/num/number.h"
#include "line/util/matrix.h"
Include dependency graph for mmdp_isfeasible.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
bool line::mam::mmdp_isfeasible (const Matrix< T > &Q, const Matrix< T > &R, const T &tol)
 True when (Q, R) is a valid MMDP pair up to the given tolerance.
template<class T>
bool line::mam::mmdp_isfeasible (const Matrix< T > &Q, const Matrix< T > &R)
 mmdp_isfeasible with the MATLAB tolerance, 1e-10.

Detailed Description

Feasibility predicate for a Markov-modulated deterministic process.

Templated port of matlab/src/api/mam/mmdp_isfeasible.m. An MMDP is the pair (Q, R) with Q the generator of the modulating chain and R the diagonal matrix of the deterministic service (or inter-arrival) times attached to each modulating state. The pair is feasible when

  • Q is square, has non-positive diagonal, non-negative off-diagonal and zero row sums, i.e. it is a conservative generator;
  • R is square of the same order, diagonal, with non-negative diagonal.

ARITHMETIC. The predicate is a finite set of sign and sum comparisons, so it instantiates at every arithmetic including Rational. The tolerance is an explicit argument rather than a hard-wired 1e-10, so the exact instantiation can be given tol = 0 and then rejects any deviation however small, which is the right check for an algebraically assembled pair; the MATLAB default of 1e-10 is what the tolerant overload supplies, and it is the right check for the output of a fit.

Definition in file mmdp_isfeasible.h.