LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_ctmc_margaggr.m
1function [Pnir,pi,runtime,fname] = solver_ctmc_margaggr(sn, options)
2% [PNIR,PI,RUNTIME,FNAME] = SOLVER_CTMC_MARGAGGR(QN, OPTIONS)
3%
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7
8M = sn.nstations; %number of stations
9K = sn.nclasses; %number of classes
10state = sn.state;
11fname = '';
12Tstart = tic;
13
14
15[Q,SS,SSq,~,~,~,sn] = solver_ctmc(sn, options);
16
17if options.keep
18 fname = lineTempName;
19 save([fname,'.mat'],'Q','SSq')
20 line_printf('\nCTMC generator and state space saved in: ');
21 line_printf([fname, '.mat'])
22end
23pi = ctmc_solve_reducible(Q);
24pi(pi<GlobalConstants.Zero)=0;
25
26statesz = [];
27for ind=1:sn.nnodes
28 if sn.isstateful(ind)
29 isf = sn.nodeToStateful(ind);
30 statesz(isf) = size(sn.space{isf},2);
31 end
32end
33cstatesz = [0,cumsum(statesz)];
34Pnir = zeros(1,sn.nstations);
35for ind=1:sn.nnodes
36 if sn.isstateful(ind)
37 isf = sn.nodeToStateful(ind);
38 ist = sn.nodeToStation(ind);
39 state_i = [zeros(1,size(sn.space{isf},2)-length(state{isf})),state{isf}];
40 [~,nivec] = State.toMarginal(sn, ind, state{isf});
41 Pnir(ist) = 0;
42 for s=1:size(SS,1)
43 [~,sivec] = State.toMarginal(sn, ind, SS(s,(cstatesz(isf)+1):(cstatesz(isf)+length(state_i))));
44 if all(sivec == nivec)
45 Pnir(ist) = Pnir(ist) + pi(s);
46 end
47 end
48 end
49end
50
51runtime = toc(Tstart);
52
53%if options.verbose
54% line_printf('\nCTMC analysis completed. Runtime: %f seconds.\n',runtime);
55%end
56end