LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
sampleSysAggr.m
1function tranSysState = sampleSysAggr(self, numSamples)
2% TRANSYSSTATE = SAMPLESYSAGGR(NUMSAMPLES)
3options = self.getOptions;
4options.force = true;
5if isempty(self.result) || ~isfield(self.result,'infGen')
6 runAnalyzer(self);
7end
8[infGen, eventFilt] = getGenerator(self);
9stateSpace = getStateSpace(self);
10stateSpaceAggr = getStateSpaceAggr(self);
11
12sn = self.getStruct;
13initState = sn.state;
14nst = cumsum([1,cellfun(@length,initState)']);
15s0 = cell2mat(initState(:)');
16
17% set initial state
18pi0 = zeros(1,size(stateSpace,1));
19pi0(matchrow(stateSpace,s0))=1;
20
21% filter all CTMC events as a marked Markovian arrival process
22D1 = cellsum(eventFilt);
23D0 = infGen-D1;
24MMAP = mmap_normalize([{D0},{D1},eventFilt(:)']);
25
26% now sampel the MMAP
27[sjt,event,~,~,sts] = mmap_sample(MMAP,numSamples, pi0);
28
29sn = self.getStruct;
30tranSysState = struct();
31tranSysState.handle = self.model.getStatefulNodes';
32tranSysState.t = cumsum([0,sjt(1:end-1)']');
33for isf=1:length(initState)
34 tranSysState.state{isf} = stateSpace(sts,(nst(isf):nst(isf+1)-1));
35 [~,tranSysState.state{isf}] = State.toMarginal(sn,sn.statefulToNode(isf),tranSysState.state{isf});
36end
37
38tranSysState.event = {};
39for e = 1:length(event)
40 for a=1:length(sn.sync{event(e)}.active)
41 tranSysState.event{end+1} = sn.sync{event(e)}.active{a};
42 tranSysState.event{end}.t = tranSysState.t(e);
43 end
44 for p=1:length(sn.sync{event(e)}.passive)
45 tranSysState.event{end+1} = sn.sync{event(e)}.passive{p};
46 tranSysState.event{end}.t = tranSysState.t(e);
47 end
48end
49tranSysState.isaggregate = true;
50end