LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_nc_jointaggr_ld.m
1function [Pr,G,lG,runtime] = solver_nc_jointaggr_ld(sn, options)
2% [PR,G,LG,RUNTIME] = SOLVER_NC_JOINTAGGR(QN, OPTIONS)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7%% initialization
8state = sn.state;
9S = sn.nservers;
10rates = sn.rates;
11% determine service times
12ST = 1./rates;
13ST(isnan(ST))=0;
14[Lchain,STchain,~,alpha,Nchain] = sn_get_demands_chain(sn);
15
16Tstart = tic;
17
18[M,K]=size(STchain);
19
20mu_chain = ones(M,sum(Nchain));
21for ist=1:M
22 if isinf(S(ist)) % infinite server
23 mu_chain(ist,1:sum(Nchain)) = 1:sum(Nchain);
24 else
25 mu_chain(ist,1:sum(Nchain)) = min(1:sum(Nchain), S(ist)*ones(1,sum(Nchain)));
26 end
27end
28
29lG = pfqn_ncld(Lchain, Nchain, 0*Nchain, mu_chain);
30lPr = 0;
31for ist=1:M
32 isf = sn.stationToStateful(ist);
33 [~,nivec] = State.toMarginal(sn, ist, state{isf});
34 nivec_chain = nivec * sn.chains';
35 lF_i = pfqn_ncld(Lchain(ist,:), nivec_chain, 0*nivec_chain, mu_chain(ist,:), options);
36 lg0_i = pfqn_ncld(ST(ist,:).*alpha(ist,:), nivec, 0*nivec, mu_chain(ist,:), options);
37 lG0_i = pfqn_ncld(STchain(ist,:),nivec_chain, 0*nivec_chain, mu_chain(ist,:), options);
38 lPr = lPr + lF_i + (lg0_i - lG0_i);
39end
40Pr = exp(lPr - lG);
41G=exp(lG);
42runtime = toc(Tstart);
43
44%if options.verbose
45% line_printf('\nNormalizing constant (NC) analysis completed. Runtime: %f seconds.\n',runtime);
46%end
47end