LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
m3afit_auto.m
1function [MMAP]=m3afit_auto(mtrace, varargin)
2% [MMAP] = m3afit_auto(T,'option1',val1,'option2',val2,...)
3%
4% DESCRIPTION
5% Automatic fitting of trace T into a Marked Markovian Arrival Process
6% based on the M3A toolbox.
7%
8% INPUT
9% T - data structure returned by m3afit_init
10%
11% OUTPUT
12% MMAP - fitted marked MAP
13%
14% EXAMPLE
15% T = m3afit_init(S,C)
16% MMAP = m3afit_auto(T,'NumStates',2)
17%
18% OPTION LIST
19% 'Method' - 0 for inter-arrival fitting, 1 for counting process fitting.
20% 'NumStates' - integer, mandatory parameter
21%
22% REFERENCES
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
27% Research, 2016.
28%
29
30%% options
31OptionNames = [
32 'Method ';
33 'NumStates ';
34 ];
35
36OptionTypes = [
37 'numeric';
38 'numeric'];
39
40OptionValues = [];
41for i = 1:size(OptionNames,1)
42 options.(deblank(OptionNames(i,:)))=[];
43end
44
45% Default settings
46options.NumStates = [];
47options.Method = 1;
48
49% Parse Optional Parameters
50options=ParseOptPara(options,OptionNames,OptionTypes,OptionValues,varargin);
51%% fitting algorithm run parameterization
52
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);
56end
57
58%% fitting
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]);
74else
75 fprintf(1,'Output: M3A algorithm could *not* obtain a valid MMAP.\n');
76 MMAP={};
77 return
78end
79
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);
83else
84 fprintf(1,'Output: M3A algorithm could *not* obtain a valid MMAP.\n');
85end
86
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]);
90
91end