1function initFromMarginalAndRunning(self, n, s, options) % n(i,r) : number of jobs of class r in node i
2% INITFROMMARGINALANDRUNNING(N, S, OPTIONS) % N(I,R) : NUMBER OF JOBS OF CLASS R IN NODE I
4if nargin<3 %~exist(
'options',
'var')
5 options = Solver.defaultOptions;
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,:);
24 elseif size(n,1)==self.getNumberOfNodes()
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.');
31[isvalidn] = State.isValid(sn, n, s);
33 line_error(mfilename,
'Initial state is not valid.');
35for ind=1:self.getNumberOfNodes
36 if self.nodes{ind}.isStateful
37 ist = sn.nodeToStation(ind);
38 state_i = State.fromMarginalAndRunning(sn,ind,n(ist,:),s(ist,:));
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,:));
49 self.nodes{ind}.setStateSpace([]);
50 self.nodes{ind}.setStatePrior([]);
51 self.nodes{ind}.setState([]);
53 if isempty(self.nodes{ind}.getState)
54 line_error(mfilename,sprintf('Invalid state assignment for station %d\n',ind));