LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_mvald.m
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)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7% aggregate chains
8
9if nargin < 2
10 options = SolverMVA.defaultOptions;
11end
12
13[Lchain,STchain,Vchain,alpha,Nchain,~,~] = sn_get_demands_chain(sn);
14ST = 1 ./ sn.rates;
15ST(isnan(ST))=0;
16
17M = size(STchain,1);
18C = sn.nchains;
19S = sn.nservers;
20N = sn.njobs;
21
22mu_chain = ones(M,sum(Nchain(isfinite(Nchain))));
23for ist=1:M
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))));
28 else
29 mu_chain(ist,1:sum(Nchain)) = ones(1,sum(Nchain(isfinite(Nchain))));
30 end
31end
32
33lambda = zeros(1,C);
34for c=1:sn.nchains
35 ocl = find(isinf(N) & sn.chains(c,:)); % open classes in this chain
36 if ~isempty(ocl)
37 Nchain(c) = Inf;
38 end
39 for r=ocl
40 lambda(c) = lambda(c) + 1 ./ ST(refstat(r),r);
41 end
42end
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);
46lG = NaN;
47
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);
50iter = 1;
51end