LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_fluid_initsol.m
1function [init_sol, state] = solver_fluid_initsol(sn, options) %#ok<INUSD>
2% [INIT_SOL, STATE] = SOLVER_FLUID_INITSOL(QN, OPTIONS) %#OK<INUSD>
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7if nargin<2 %~exist('options','var')
8 options = Solver.defaultOptions; %#ok<NASGU>
9end
10
11init_sol = [];
12for ind=1:sn.nnodes
13 if sn.isstateful(ind)
14 isf = sn.nodeToStateful(ind);
15 ist = sn.nodeToStation(ind);
16 % Skip non-station stateful nodes like Router
17 if isnan(ist)
18 continue
19 end
20 state_i = [];
21 init_sol_i = []; % compared to state_i, this does not track disabled classes and removes Inf entries in the Sources
22 [~, nir, ~, kir_i] = State.toMarginal(sn, ind, sn.state{isf});
23 switch sn.sched(ist)
24 case {SchedStrategy.EXT}
25 state_i(:,1) = Inf; % fluid does not model infinite buffer?
26 for r=1:size(kir_i,2)
27 for k=1:length(sn.mu{ist}{r})
28 state_i(:,end+1) = kir_i(:,r,k);
29 if ~isnan(sn.rates(ist,r))
30 init_sol_i(:,end+1) = kir_i(:,r,k);
31 end
32 end
33 end
34 case {SchedStrategy.FCFS, SchedStrategy.SIRO, SchedStrategy.PS, SchedStrategy.INF, SchedStrategy.DPS, SchedStrategy.HOL}
35 for r=1:size(kir_i,2)
36 for k=1:length(sn.mu{ist}{r})
37 if k==1
38 state_i(:,end+1) = nir(:,r) - sum(kir_i(:,r,2:end),3); % jobs in waiting buffer are re-started phase 1
39 if ~isnan(sn.rates(ist,r))
40 init_sol_i(:,end+1) = nir(:,r) - sum(kir_i(:,r,2:end),3); % jobs in waiting buffer are re-started phase 1
41 end
42 else
43 state_i(:,end+1) = kir_i(:,r,k);
44 if ~isnan(sn.rates(ist,r))
45 init_sol_i(:,end+1) = kir_i(:,r,k);
46 end
47 end
48 end
49 end
50 otherwise
51 line_error(mfilename,sprintf('Unsupported scheduling policy at station %d',ist));
52 return
53 end
54 init_sol = [init_sol, init_sol_i];
55 state{isf} = state_i;
56 end
57end
58end
Definition mmt.m:92