LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
initDefaultCustom.m
1function model = initDefaultCustom(model, nodes)
2% This function sets a random initial state for a QN model
3% generated by NetworkGenerator. NOTE: This is copied directly from
4% LINE's own version, with a slight modification to generate
5% only one initial state rather than enumerate all possible states
6
7sn = model.getStruct(false);
8R = sn.nclasses;
9N = sn.njobs';
10if nargin < 2
11 nodes = 1:model.getNumberOfNodes;
12end
13for i=nodes
14 if sn.isstation(i)
15 n0 = zeros(1,length(N));
16 s0 = zeros(1,length(N));
17 s = sn.nservers(sn.nodeToStation(i)); % allocate
18 for r=find(isfinite(N))' % for all closed classes
19 if sn.nodeToStation(i) == sn.refstat(r)
20 n0(r) = N(r);
21 end
22 s0(r) = min(n0(r),s);
23 s = s - s0(r);
24 end
25 state_i = State.fromMarginalAndStarted(sn,i,n0(:)',s0(:)');
26 switch sn.nodetype(i)
27 case NodeType.Cache
28 state_i = [state_i, 1:sn.nvars(i,2*R+1)];
29 end
30 for r=1:sn.nclasses
31 switch sn.routing(i,r)
32 case {RoutingStrategy.RROBIN, RoutingStrategy.WRROBIN}
33 % start from first connected queue
34 state_i = [state_i, find(sn.rt(i,:),1)];
35 end
36 end
37 if isempty(state_i)
38 error('Default initialization failed on station %d.',i);
39 else
40 model.nodes{i}.setState(state_i);
41 prior_state_i = zeros(1,size(state_i,1)); prior_state_i(1) = 1;
42 model.nodes{i}.setStatePrior(prior_state_i);
43 end
44 elseif sn.isstateful(i) % not a station
45 switch class(model.nodes{i})
46 case 'Cache'
47 state_i = zeros(1,model.getNumberOfClasses);
48 state_i = [state_i, 1:sum(model.nodes{i}.itemLevelCap)];
49 model.nodes{i}.setState(state_i);
50 case 'Router'
51 model.nodes{i}.setState([1]);
52 otherwise
53 model.nodes{i}.setState([]);
54 end
55 %error('Default initialization not available on stateful node %d.',i);
56 end
57end
58end
59
Definition mmt.m:92