LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
updateLayers.m
1function updateLayers(self, it)
2lqn = self.lqn;
3ensemble = self.ensemble;
4idxhash = self.idxhash;
5thinktproc = self.thinktproc;
6servtproc = self.servtproc;
7thinkt_classes_updmap = self.thinkt_classes_updmap;
8arvproc_classes_updmap = self.arvproc_classes_updmap;
9tputproc = self.tputproc;
10call_classes_updmap = self.call_classes_updmap;
11callservtproc = self.callservtproc;
12
13% reassign service times
14for r=1:size(thinkt_classes_updmap,1)
15 if mod(it, 2)==1 % elevator
16 ri = size(thinkt_classes_updmap,1) - r + 1;
17 else
18 ri = r;
19 end
20 idx = thinkt_classes_updmap(ri,1);
21 aidx = thinkt_classes_updmap(ri,2);
22 nodeidx = thinkt_classes_updmap(ri,3);
23 classidx = thinkt_classes_updmap(ri,4);
24 class = ensemble{idxhash(thinkt_classes_updmap(ri,1))}.classes{classidx};
25 % here update the number of jobs in the task chain
26 if aidx <= lqn.tshift + lqn.ntasks
27 % aidx here is actually set to tidx in buildLayersRecursive
28 switch class.type
29 case JobClassType.CLOSED
30 if self.options.config.interlocking
31 class.population = self.njobs(aidx,idx);
32 end
33 end
34 end
35 node = ensemble{idxhash(idx)}.nodes{nodeidx};
36 if nodeidx == ensemble{idxhash(idx)}.attribute.clientIdx
37 if lqn.type(aidx) == LayeredNetworkElement.TASK
38 if lqn.sched(aidx) ~= SchedStrategy.REF
39 if ~isempty(thinktproc{aidx}) % this is empty for isolated components, which can be ignored
40 node.setService(class, thinktproc{aidx});
41 end
42 else
43 node.setService(class, servtproc{aidx});
44 end
45 else
46 node.setService(class, servtproc{aidx});
47 end
48 else % server replica (any of them)
49 node.setService(class, servtproc{aidx});
50 end
51end
52
53% reassign arrival rates
54for r=1:size(arvproc_classes_updmap,1)
55 %for r=1:0
56 if mod(it, 2)==1 % elevator
57 ri = size(arvproc_classes_updmap,1) - r + 1;
58 else
59 ri = r;
60 end
61 idx = arvproc_classes_updmap(ri,1);
62 eidx_or_cidx = arvproc_classes_updmap(ri,2);
63 nodeidx = arvproc_classes_updmap(ri,3);
64 classidx = arvproc_classes_updmap(ri,4);
65 class = ensemble{idxhash(arvproc_classes_updmap(ri,1))}.classes{classidx};
66 node = ensemble{idxhash(idx)}.nodes{nodeidx};
67
68 if eidx_or_cidx < 0 % Entry-level arrival (negative index)
69 eidx = -eidx_or_cidx;
70 node.setArrival(class, lqn.arrival{eidx});
71 else % Async call arrival (positive index)
72 cidx = eidx_or_cidx;
73 node.setArrival(class, tputproc{lqn.callpair(cidx,1)});
74 end
75end
76
77% reassign call service time / response time
78for c=1:size(call_classes_updmap,1)
79 if mod(it, 2)==1 % elevator
80 ci = size(call_classes_updmap,1) - c + 1;
81 else
82 ci = c;
83 end
84 idx = call_classes_updmap(ci,1);
85 cidx = call_classes_updmap(ci,2);
86 nodeidx = call_classes_updmap(ci,3);
87 class = ensemble{idxhash(call_classes_updmap(ci,1))}.classes{call_classes_updmap(ci,4)};
88 node = ensemble{idxhash(idx)}.nodes{nodeidx};
89 if nodeidx == ensemble{idxhash(idx)}.attribute.clientIdx % client
90 node.setService(class, callservtproc{cidx});
91 else % server replica (any of them)
92 eidx = lqn.callpair(cidx,2);
93 node.setService(class, servtproc{eidx});
94 end
95end
96
97% reassign activity think times
98actthinkt_classes_updmap = self.actthinkt_classes_updmap;
99for r=1:size(actthinkt_classes_updmap,1)
100 if mod(it, 2)==1 % elevator
101 ri = size(actthinkt_classes_updmap,1) - r + 1;
102 else
103 ri = r;
104 end
105 idx = actthinkt_classes_updmap(ri,1);
106 aidx = actthinkt_classes_updmap(ri,2);
107 nodeidx = actthinkt_classes_updmap(ri,3);
108 classidx = actthinkt_classes_updmap(ri,4);
109 class = ensemble{idxhash(actthinkt_classes_updmap(ri,1))}.classes{classidx};
110 node = ensemble{idxhash(idx)}.nodes{nodeidx};
111 % Activity think-time is at client delay node
112 if ~isempty(lqn.actthink{aidx})
113 node.setService(class, lqn.actthink{aidx});
114 end
115end
116end