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

Modulate a family of marked MAPs by an environment chain. More...

#include <cstddef>
#include <string>
#include <vector>
#include "line/api/mam/aph2_fit.h"
#include "line/api/mam/map_moment.h"
#include "line/api/trace/mtrace_cross_moment.h"
#include "line/api/trace/mtrace_sigma2.h"
#include "line/api/mam/mmap_lambda.h"
#include "line/api/mam/mmap_stats.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/matrix.h"
Include dependency graph for mmap_modulate.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
Mmap< T > line::mam::mmap_modulate (const Matrix< T > &P, const std::vector< Map< T > > &HT, const std::vector< Mmap< T > > &comps)
 Modulate a family of marked MAPs by an environment chain.
template<class T>
Mmap< T > line::mam::mmap_mixture_order2 (const std::vector< std::vector< Map< T > > > &PHs, const Matrix< T > &P2)
 Second-order mixture: the state records the previous and the current class.
template<class T>
Mmap< T > line::mam::mmap_mixture_fit (const Matrix< T > &P2, const Matrix< T > &M1, const Matrix< T > &M2, const Matrix< T > &M3)
 Second-order mixture FITTED from cross moments and a triple sigma, the reference's mmap_mixture_fit.
template<class T>
Mmap< T > line::mam::mmap_mixture_fit_trace (const std::vector< T > &Tv, const std::vector< int > &A)
 mmap_mixture_fit driven from a marked trace: the triple sigma and the cross moments are measured on the trace itself.

Detailed Description

Modulate a family of marked MAPs by an environment chain.

Templated port of matlab/lib/m3a/m3a/mmap/mmap_modulate.m and mmap_mixture_order2.m.

mmap_modulate(P, HT, MMAPs) builds the marked arrival process of a system that sits in environment j for a phase-type holding time HT[j], arriving according to MMAPs[j] while it does, and then jumps to environment i with probability P(j,i). The state is the pair (holding-time phase, arrival phase), so environment j contributes a block of order nh(j) nm(j) and the result has order sum_j nh(j) nm(j):

diagonal block j: krons(HT0[j], A0[j]), the two clocks running together; off-diagonal (j,i): P(j,i) (HT1[j] (x) I) 1 (pie(HT[i]) (x) pie(MMAP[i])), the holding time expiring and the new environment being entered in its own initial phase.

THE ENVIRONMENT SWITCH EMITS NO ARRIVAL. The off-diagonal blocks appear in D0 and in NO Dc, which is what makes the jump a hidden transition. The reference writes the per-class off-diagonal blocks explicitly as 0*P(j,i)*..., i.e. a zero of the right shape; that is reproduced by simply leaving them zero.

A PLAIN MAP IS AUTO-CONVERTED to a one-class MMAP, as the reference does, so a caller may pass either. All the components must then agree on the class count.

mmap_mixture_order2 is the second-order companion: given m^2 two-phase components PHs(i,j) and a second-order transition tensor P2, it builds the marked MAP whose state records the PREVIOUS and the current class, which is what lets a mixture reproduce a lag-1 class correlation that an order-1 mixture cannot.

ARITHMETIC: field. Kronecker products and block assembly only.

Definition in file mmap_modulate.h.