1function [Q,U,R,T,C,X,lG,iter] = solver_mvald(sn,options)
2% [Q,U,R,T,C,X,LG,iter] = SOLVER_MVALD(SN, OPTIONS)
4% Copyright (c) 2012-2026, Imperial College London
10 options = SolverMVA.defaultOptions;
13[Lchain,STchain,Vchain,alpha,Nchain,~,~] = sn_get_demands_chain(sn);
22mu_chain = ones(M,sum(Nchain(isfinite(Nchain))));
24 if isinf(S(ist)) % infinite server
25 mu_chain(ist,1:sum(Nchain)) = 1:sum(Nchain(isfinite(Nchain)));
26 elseif ~isempty(sn.lldscaling)
27 mu_chain(ist,1:sum(Nchain)) = sn.lldscaling(ist,1:sum(Nchain(isfinite(Nchain))));
29 mu_chain(ist,1:sum(Nchain)) = ones(1,sum(Nchain(isfinite(Nchain))));
35 ocl = find(isinf(N) & sn.chains(c,:)); % open
classes in this chain
40 lambda(c) = lambda(c) + 1 ./ ST(refstat(r),r);
43[Xchain,Qchain,Uchain] = pfqn_mvaldmx(lambda,Lchain,Nchain,0*Nchain,mu_chain,S);
44Tchain = repmat(Xchain,M,1) .* Vchain;
45Rchain = Qchain ./ repmat(Xchain,M,1);
48%% This
is likely wrong as it uses Little's law for the utilization computation
49[Q,U,R,T,C,X] = sn_deaggregate_chain_results(sn, Lchain, [], STchain, Vchain, alpha, [], Uchain, Rchain, Tchain, [], Xchain);