LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
matlab
src
lang
+State
spaceGeneratorNodes.m
1
function [nodeStateSpace, sn, capacityc] = spaceGeneratorNodes(sn, cutoff, options)
2
if
nargin<3
3
options = Solver.defaultOptions;
4
end
5
N = sn.njobs
';
6
sn.space = {};
7
capacityc = zeros(sn.nnodes, sn.nclasses);
8
% Draft SPN support
9
% for n=1:sn.nnodes
10
% if isfield(sn.varsparam{n}, "capacityc")
11
% capacityc(n) = sn.varsparam{n}.capacityc;
12
% end
13
% end
14
for ind=1:sn.nnodes
15
if sn.isstation(ind) % place jobs across stations
16
ist = sn.nodeToStation(ind);
17
isf = sn.nodeToStateful(ind);
18
for r=1:sn.nclasses %cut-off open classes to finite capacity
19
c = find(sn.chains(:,r));
20
if ~isempty(sn.visits{c}) && sn.visits{c}(ist,r) == 0
21
capacityc(ind,r) = 0;
22
% Draft SPN support
23
%elseif isfield(sn.varsparam{ind}, '
capacityc
')
24
% capacityc(ind,r) = min(cutoff(ist,r), sn.classcap(ist,r));
25
elseif ~isempty(sn.proc) && ~isempty(sn.proc{ist}{r}) && any(any(isnan(sn.proc{ist}{r}{1}))) % disabled
26
capacityc(ind,r) = 0;
27
else
28
if isinf(N(r))
29
capacityc(ind,r) = min(cutoff(ist,r), sn.classcap(ist,r));
30
else
31
capacityc(ind,r) = sum(sn.njobs(sn.chains(c,:)));
32
end
33
end
34
end
35
if sn.isstation(ind)
36
% in this case, the local variables are produced within
37
% fromMarginalBounds, e.g., for RROBIN routing
38
sn.space{isf} = State.fromMarginalBounds(sn, ind, [], capacityc(ind,:), sn.cap(ist), options);
39
else
40
% this is the case for example of cache nodes
41
state_bufsrv = State.fromMarginalBounds(sn, ind, [], capacityc(ind,:), sn.cap(ist), options);
42
state_var = State.spaceLocalVars(sn, ind);
43
sn.space{isf} = State.cartesian(state_bufsrv,state_var); % generate all possible states for local variables
44
end
45
if isinf(sn.nservers(ist))
46
sn.nservers(ist) = sum(capacityc(ind,:));
47
end
48
elseif sn.isstateful(ind) % generate state space of other stateful nodes that are not stations
49
%ist = sn.nodeToStation(ind);
50
isf = sn.nodeToStateful(ind);
51
switch sn.nodetype(ind)
52
case NodeType.Cache
53
for r=1:sn.nclasses % restrict state space generation to immediate events
54
if isnan(sn.nodeparam{ind}.pread{r})
55
capacityc(ind,r) = 1; %
56
else
57
capacityc(ind,r) = 1; %
58
end
59
end
60
otherwise
61
capacityc(ind,:) = 1; %
62
end
63
state_bufsrv = State.fromMarginalBounds(sn, ind, [], capacityc(ind,:), 1, options);
64
state_var = State.spaceLocalVars(sn, ind);
65
sn.space{isf} = State.cartesian(state_bufsrv,state_var); % generate all possible states for local variables
66
end
67
end
68
nodeStateSpace = sn.space;
69
end
Generated by
1.9.8