LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getProbSysAggr.m
1function [Pnir,logPn] = getProbSysAggr(self)
2% [PNIR,LOGPN] = GETPROBSYSSTATEAGGR()
3
4if isempty(self.result)
5 self.run;
6end
7Q = self.result.Avg.Q;
8sn = self.getStruct;
9N = sn.njobs;
10if all(isfinite(N))
11 switch self.options.method
12 case 'exact'
13 line_error(mfilename,'Exact joint state probabilities not available yet in SolverMVA.');
14 otherwise
15 state = sn.state;
16 % Binomial approximation with mean fitted to queue-lengths.
17 % Rainer Schmidt, "An approximate MVA ...", PEVA 29:245-254, 1997.
18 logPn = sum(factln(N));
19 for ist=1:sn.nstations
20 [~, nir, ~, ~] = State.toMarginal(sn, ist, state{ist});
21 % logPn = logPn - log(sum(nir));
22 for r=1:sn.nclasses
23 logPn = logPn - factln(nir(r));
24 if Q(ist,r)>0
25 logPn = logPn + nir(r)*log(Q(ist,r)/N(r));
26 end
27 end
28 end
29 Pnir = real(exp(logPn));
30 end
31else
32 % Mixed or open model: product of per-station probabilities
33 U = self.result.Avg.U;
34 openClasses = find(isinf(N));
35 closedClasses = find(isfinite(N));
36 state = sn.state;
37 logPn = 0;
38
39 % Add closed-class multinomial normalization
40 if ~isempty(closedClasses)
41 logPn = sum(factln(N(closedClasses)));
42 end
43
44 for ist=1:sn.nstations
45 [~, nir, ~, ~] = State.toMarginal(sn, ist, state{sn.stationToStateful(ist)});
46
47 % Open classes: product-form contribution
48 if ~isempty(openClasses)
49 if sn.sched(ist) == SchedStrategy.INF
50 % Delay: independent Poisson per class
51 for r = openClasses
52 if Q(ist,r) > 0
53 logPn = logPn + nir(r)*log(Q(ist,r)) - Q(ist,r) - gammaln(nir(r)+1);
54 elseif nir(r) > 0
55 logPn = -Inf;
56 end
57 end
58 elseif sn.sched(ist) ~= SchedStrategy.EXT
59 % Queue: multinomial-geometric product form
60 rho_total = sum(U(ist, openClasses));
61 n_total = sum(nir(openClasses));
62 if rho_total < 1
63 logPn = logPn + log(1 - rho_total) + gammaln(n_total + 1);
64 for r = openClasses
65 rho_r = U(ist, r);
66 if nir(r) > 0
67 if rho_r > 0
68 logPn = logPn + nir(r)*log(rho_r) - gammaln(nir(r)+1);
69 else
70 logPn = -Inf;
71 end
72 end
73 end
74 else
75 logPn = -Inf;
76 end
77 end
78 end
79
80 % Closed classes: binomial approximation
81 for r = closedClasses
82 logPn = logPn - factln(nir(r));
83 if Q(ist,r) > 0
84 logPn = logPn + nir(r)*log(Q(ist,r)/N(r));
85 end
86 end
87 end
88 Pnir = real(exp(logPn));
89end
90end