1function [Pnir,logPn] = getProbSysAggr(self)
2% [PNIR,LOGPN] = GETPROBSYSSTATEAGGR()
11 switch self.options.method
13 line_error(mfilename,'Exact joint state probabilities not available yet in SolverMVA.');
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));
23 logPn = logPn - factln(nir(r));
25 logPn = logPn + nir(r)*log(Q(ist,r)/N(r));
29 Pnir = real(exp(logPn));
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));
39 % Add closed-
class multinomial normalization
40 if ~isempty(closedClasses)
41 logPn = sum(factln(N(closedClasses)));
44 for ist=1:sn.nstations
45 [~, nir, ~, ~] = State.toMarginal(sn, ist, state{sn.stationToStateful(ist)});
47 % Open
classes: product-form contribution
48 if ~isempty(openClasses)
49 if sn.sched(ist) == SchedStrategy.INF
50 % Delay: independent Poisson per
class
53 logPn = logPn + nir(r)*log(Q(ist,r)) - Q(ist,r) - gammaln(nir(r)+1);
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));
63 logPn = logPn + log(1 - rho_total) + gammaln(n_total + 1);
68 logPn = logPn + nir(r)*log(rho_r) - gammaln(nir(r)+1);
80 % Closed
classes: binomial approximation
82 logPn = logPn - factln(nir(r));
84 logPn = logPn + nir(r)*log(Q(ist,r)/N(r));
88 Pnir = real(exp(logPn));