LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_mva_sum.m
1function [Q,U,R,T,C,X,lG,iter] = solver_mva_sum(sn, options)
2% [Q,U,R,T,C,X,LG,ITER] = SOLVER_MVA_SUM(SN, OPTIONS)
3%
4% Summation method (SUM/ESUM) analyzer. Closed models are solved with
5% sum_closed; open and mixed models with sum_closing (closing method,
6% Kclosed=5000). FCFS and SIRO stations use their service SCVs (ESUM
7% corrections for scv~=1); PS, LCFS-PR and infinite-server stations are
8% insensitive and are passed scv=1. See api/sum and Bolch et al., Secs.
9% 9.2, 10.1.4.4 and 10.1.5.
10
11% Copyright (c) 2012-2026, Imperial College London
12% All rights reserved.
13
14[Lchain,STchain,Vchain,alpha,Nchain,SCVchain,refstatchain] = sn_get_demands_chain(sn); %#ok<ASGLU>
15
16M = sn.nstations;
17K = sn.nchains;
18sched = sn.sched;
19nservers = sn.nservers;
20
21% station rows passed to the summation method (all but the source)
22rows = [];
23mi = [];
24for ist=1:M
25 switch sched(ist)
26 case SchedStrategy.EXT
27 % no-op, external world handled by lambda/sum_closing
28 case SchedStrategy.INF
29 rows(1,end+1) = ist;
30 mi(end+1,1) = Inf;
31 case {SchedStrategy.PS, SchedStrategy.LCFSPR, SchedStrategy.FCFS, SchedStrategy.SIRO}
32 rows(1,end+1) = ist;
33 mi(end+1,1) = nservers(ist);
34 otherwise
35 line_error(mfilename, sprintf('The summation method does not support %s scheduling.', SchedStrategy.toText(sched(ist))));
36 end
37end
38
39L = STchain(rows,:).*Vchain(rows,:);
40scv = ones(length(rows),K);
41for j=1:length(rows)
42 ist = rows(j);
43 if any(sched(ist) == [SchedStrategy.FCFS, SchedStrategy.SIRO])
44 for r=1:K
45 if isfinite(SCVchain(ist,r)) && SCVchain(ist,r) > 0
46 scv(j,r) = SCVchain(ist,r);
47 end
48 end
49 end
50end
51
52Z = zeros(1,K);
53ocl = find(isinf(Nchain));
54if isempty(ocl)
55 [Xchain,Qrows,Urows,~,iter] = sum_closed(L,Nchain,Z,mi,scv,options.iter_tol,options.iter_max);
56else
57 lambda = zeros(1,K);
58 scva = ones(1,K);
59 for r=ocl(:)'
60 lambda(r) = 1 ./ STchain(refstatchain(r),r);
61 if isfinite(SCVchain(refstatchain(r),r)) && SCVchain(refstatchain(r),r) > 0
62 scva(r) = SCVchain(refstatchain(r),r); % interarrival SCV at the source
63 end
64 end
65 [Xchain,Qrows,Urows,~,~,iter] = sum_closing(lambda,scva,L,mi,scv,Nchain,Z,5000,options.iter_tol,options.iter_max);
66end
67
68Qchain = zeros(M,K);
69Uchain = zeros(M,K);
70Tchain = zeros(M,K);
71Qchain(rows,:) = Qrows;
72Uchain(rows,:) = Urows;
73for k=1:M
74 for r=1:K
75 Tchain(k,r) = Xchain(r) * Vchain(k,r);
76 end
77end
78Rchain = Qchain./Tchain;
79
80Xchain(~isfinite(Xchain))=0;
81Uchain(~isfinite(Uchain))=0;
82Qchain(~isfinite(Qchain))=0;
83Rchain(~isfinite(Rchain))=0;
84
85Xchain(Nchain==0)=0;
86Uchain(:,Nchain==0)=0;
87Qchain(:,Nchain==0)=0;
88Rchain(:,Nchain==0)=0;
89Tchain(:,Nchain==0)=0;
90
91lG = NaN;
92[Q,U,R,T,C,X] = sn_deaggregate_chain_results(sn, Lchain, [], STchain, Vchain, alpha, [], [], Rchain, Tchain, [], Xchain);
93end
Definition Station.m:245