LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
initFromMarginalAndStarted.m
1function initFromMarginalAndStarted(self, n, s, options) % n(i,r) : number of jobs of class r in node i
2% INITFROMMARGINALANDSTARTED(N, S, OPTIONS) % N(I,R) : NUMBER OF JOBS OF CLASS R IN NODE I
3
4if nargin<3 %~exist('options','var')
5 options = Solver.defaultOptions;
6end
7
8if ~self.hasStruct
9 self.refreshStruct;
10end
11sn = getStruct(self);
12
13if self.getNumberOfStations() < self.getNumberOfNodes()
14 if size(n,1)==self.getNumberOfStations()
15 nnodes = zeros(sn.nnodes,size(n,2));
16 snodes = zeros(sn.nnodes,size(s,2));
17 for ist=1:sn.nstations
18 ind = sn.stationToNode(ist);
19 nnodes(ind,:) = n(ist,:);
20 snodes(ind,:) = s(ist,:);
21 end
22 n = nnodes;
23 s = snodes;
24 elseif size(n,1)==self.getNumberOfNodes()
25 % no-op
26 else
27 line_error(mfilename,'The supplied matrix of marginal states does not have the correct number of rows. One either one per station or one per node.');
28 end
29end
30
31[isvalidn] = State.isValid(sn, n, s);
32if ~isvalidn
33 line_error(mfilename,'Initial state is not valid.');
34end
35for ind=1:self.getNumberOfNodes
36 if self.nodes{ind}.isStateful
37 ist = sn.nodeToStation(ind);
38 state_i = State.fromMarginalAndStarted(sn,ind,n(ist,:),s(ist,:));
39 if size(state_i,1)==1
40 self.nodes{ind}.setStateSpace(state_i);
41 self.nodes{ind}.setStatePrior(1);
42 self.nodes{ind}.setState(state_i);
43 elseif size(state_i,1)>1
44 prior_state_i = zeros(1,size(state_i,1)); prior_state_i(1) = 1;
45 self.nodes{ind}.setStateSpace(state_i);
46 self.nodes{ind}.setStatePrior(prior_state_i);
47 self.nodes{ind}.setState(state_i(1,:));
48 else
49 self.nodes{ind}.setStateSpace([]);
50 self.nodes{ind}.setStatePrior([]);
51 self.nodes{ind}.setState([]);
52 end
53 if isempty(self.nodes{ind}.getState)
54 line_error(mfilename,sprintf('Invalid state assignment for station %d\n',ind));
55 end
56 end
57end
58self.hasState = true;
59end