1function [
MMAP]=m3afit_auto(mtrace, varargin)
2% [
MMAP] = m3afit_auto(T,
'option1',val1,
'option2',val2,...)
5% Automatic fitting of trace T into a Marked Markovian Arrival Process
6% based on the M3A toolbox.
9% T - data structure returned by m3afit_init
12%
MMAP - fitted marked MAP
16%
MMAP = m3afit_auto(T,
'NumStates',2)
19%
'Method' - 0
for inter-arrival fitting, 1
for counting process fitting.
20%
'NumStates' - integer, mandatory parameter
23% [1] A. Sansottera, G. Casale,
P. Cremonesi. Fitting Second-Order Acyclic
24% Marked Markovian Arrival Processes. IEEE/IFIP DSN 2013.
25% [2] G. Casale, A. Sansottera,
P. Cremonesi. Compact Markov-Modulated
26% Models
for Multiclass Trace Fitting. European Journal of Operations
41for i = 1:size(OptionNames,1)
42 options.(deblank(OptionNames(i,:)))=[];
46options.NumStates = [];
49% Parse Optional Parameters
50options=ParseOptPara(options,OptionNames,OptionTypes,OptionValues,varargin);
51%% fitting algorithm run parameterization
53if options.Method==1 % counts
54 options.Timescale = 10*mean(mtrace.S);
55 options.TimescaleAsy = max(10*options.Timescale, (sum(mtrace.S)-mtrace.S(1)) / 100);
59if mtrace.NumClasses == 2 && options.NumStates == 2 && options.Method==0 % inter-arrivals
60 MMAPType=sprintf('%d-state MAMAP[%d]',options.NumStates,mtrace.NumClasses);
61 fprintf(1,'Init: M3A algorithm will search for a %s\n',MMAPType);
62 MMAP = mamap22_fit_gamma_fs_trace(mtrace.S,mtrace.C);
63elseif mtrace.NumClasses > 2 && options.NumStates >= 2 && options.Method==0 % inter-arrivals
64 MMAPType=sprintf('%d-state MAMAP[%d]',options.NumStates,mtrace.NumClasses);
65 fprintf(1,'Init: M3A algorithm will search for a %s\n',MMAPType);
66 MMAP = mamap2m_fit_trace(mtrace.S,mtrace.C);
67elseif mtrace.NumClasses >= 2 && options.NumStates == 2 && options.Method==1 % counts
68 MMAPType=sprintf('%d-state M3PP[%d]',options.NumStates,mtrace.NumClasses);
69 fprintf(1,'Init: M3A algorithm will search for a %s\n',MMAPType);
70 MMAP = m3pp2m_fitc_trace(mtrace.S,mtrace.C,'approx_ag',options.Timescale,options.TimescaleAsy);
71elseif mtrace.NumClasses >= 2 && options.NumStates > 2 && options.Method==1 % counts
72 MMAP = m3pp_superpos_fitc_trace(mtrace.S,mtrace.C,options.Timescale,options.TimescaleAsy); % superposition
73%
MMAP = m3pp_interleave_fitc_trace(T,A,options.Timescale,options.TimescaleAsy,[1 0 0; 0 1 0; 1 0 0; 0 0 1]);
75 fprintf(1,'Output: M3A algorithm could *not* obtain a valid
MMAP.\n');
80MMAPResType=sprintf(
'%d-state M3PP[%d]',length(
MMAP{1}),size(
MMAP,2)-2);
81if mmap_isfeasible(
MMAP)
82 fprintf(1,
'Output: M3A algorithm found a valid %s.\n',MMAPResType);
84 fprintf(1,
'Output: M3A algorithm could *not* obtain a valid MMAP.\n');
87% elseif strcmp(model,
'm3pp22-interleave-cov')
88% fprintf(
'Fitting model\n');
89% fit = m3pp_interleave_fitc_trace(T,A,100,1000,[1 0 0; 0 1 0; 1 0 0; 0 0 1]);