LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
refreshLocalVars.m
1function nvars = refreshLocalVars(self)
2% NVARS = REFRESHLOCALVARS()
3
4R = self.getNumberOfClasses;
5nvars = zeros(self.getNumberOfNodes, 2*R+1);
6nodeparam = cell(self.getNumberOfNodes, 1);
7rtnodes = self.sn.rtnodes;
8% Draft SPN code:
9% isp = [];
10% ist = [];
11% nodeToPlace = zeros(1, self.getNumberOfNodes);
12% nodeToTransition = zeros(1, self.getNumberOfNodes);
13% for ind=1:self.getNumberOfNodes
14% node = self.getNodeByIndex(ind);
15% switch class(node)
16% case 'Place'
17% isp = [isp, ind];
18% nodeToPlace(ind) = length(isp);
19% case 'Transition'
20% ist = [ist, ind];
21% nodeToTransition(ind) = length(ist);
22% end
23% end
24sn = self.sn;
25
26for ind=1:self.getNumberOfNodes
27 node = self.getNodeByIndex(ind);
28 switch class(node)
29 case 'Cache'
30 nvars(ind,2*R+1) = sum(node.itemLevelCap);
31 nodeparam{ind} = struct();
32 nodeparam{ind}.nitems = 0;
33 nodeparam{ind}.accost = node.accessProb;
34 for r=1:self.getNumberOfClasses
35 if length(node.popularity) >= r && isa(node.popularity{r}, 'Distribution') && ~node.popularity{r}.isDisabled
36 nodeparam{ind}.nitems = max(nodeparam{ind}.nitems,node.popularity{r}.support(2));
37 end
38 end
39 nodeparam{ind}.itemcap = node.itemLevelCap;
40 nodeparam{ind}.pread = cell(1,self.getNumberOfClasses);
41 for r=1:self.getNumberOfClasses
42 if length(node.popularity) < r || ~isa(node.popularity{r}, 'Distribution') || node.popularity{r}.isDisabled
43 nodeparam{ind}.pread{r} = NaN;
44 else
45 nodeparam{ind}.pread{r} = node.popularity{r}.evalPMF(1:nodeparam{ind}.nitems);
46 end
47 end
48 nodeparam{ind}.replacestrat = node.replacestrategy;
49 nodeparam{ind}.hitclass = zeros(1,self.getNumberOfClasses);
50 nodeparam{ind}.hitclass(1:length(node.server.hitClass)) = round(node.server.hitClass);
51 nodeparam{ind}.missclass = zeros(1,self.getNumberOfClasses);
52 nodeparam{ind}.missclass(1:length(node.server.missClass)) = round(node.server.missClass);
53 % Store actual hit/miss probabilities from solver results (if available)
54 if isprop(node.server, 'actualHitProb') && ~isempty(node.server.actualHitProb)
55 nodeparam{ind}.actualhitprob = full(node.server.actualHitProb);
56 nodeparam{ind}.actualmissprob = full(node.server.actualMissProb);
57 end
58 case 'Fork'
59 nodeparam{ind}.fanOut = node.output.tasksPerLink;
60 case 'Join'
61 nodeparam{ind}.joinStrategy = node.input.joinStrategy;
62 nodeparam{ind}.fanIn = cell(1,self.getNumberOfClasses);
63 for r=1:self.getNumberOfClasses
64 nodeparam{ind}.fanIn{r} = node.input.joinRequired{r};
65 end
66 case 'Logger'
67 nodeparam{ind}.fileName = node.fileName;
68 nodeparam{ind}.filePath = node.filePath;
69 nodeparam{ind}.startTime = node.getStartTime;
70 nodeparam{ind}.loggerName = node.getLoggerName;
71 nodeparam{ind}.timestamp = node.getTimestamp;
72 nodeparam{ind}.jobID = node.getJobID;
73 nodeparam{ind}.jobClass = node.getJobClass;
74 nodeparam{ind}.timeSameClass = node.getTimeSameClass;
75 nodeparam{ind}.timeAnyClass = node.getTimeAnyClass;
76 case {'Source'}
77 for r=1:self.getNumberOfClasses
78 if ~iscell(node.arrivalProcess) || length(node.arrivalProcess) < r || isempty(node.arrivalProcess{r})
79 continue;
80 end
81 switch class(node.arrivalProcess{r})
82 case 'MAP'
83 nvars(ind,r) = nvars(ind,r) + 1;
84 case {'Replayer', 'Trace'}
85 if isempty(nodeparam{ind})
86 nodeparam{ind} = cell(1,self.getNumberOfClasses);
87 end
88 if isempty(nodeparam{ind}{r})
89 nodeparam{ind}{r} = struct();
90 end
91 nodeparam{ind}{r}.(node.arrivalProcess{r}.params{1}.paramName) = node.arrivalProcess{r}.params{1}.paramValue;
92 end
93 end
94 case {'Queue','QueueingStation','Delay','DelayStation','Transition'}
95 for r=1:self.getNumberOfClasses
96 switch class(node.server.serviceProcess{r}{3})
97 case 'MAP'
98 nvars(ind,r) = nvars(ind,r) + 1;
99 case {'Replayer', 'Trace'}
100 if isempty(nodeparam{ind})
101 nodeparam{ind} = cell(1,self.getNumberOfClasses);
102 end
103 if isempty(nodeparam{ind}{r})
104 nodeparam{ind}{r} = struct();
105 end
106 nodeparam{ind}{r}.(node.server.serviceProcess{r}{3}.params{1}.paramName) = node.server.serviceProcess{r}{3}.params{1}.paramValue;
107 end
108 if ~isa(node,'Delay') && ~isa(node,'Transition') && ~isempty(node.setupTime) && ~isempty(node.setupTime{r})
109 if isempty(nodeparam{ind})
110 nodeparam{ind} = cell(1,self.getNumberOfClasses);
111 end
112 if isempty(nodeparam{ind}{r})
113 nodeparam{ind}{r} = struct();
114 end
115 nodeparam{ind}{r}.setupTime = node.setupTime{r}.getProcess();
116 nodeparam{ind}{r}.delayoffTime = node.delayoffTime{r}.getProcess();
117 end
118 if (isa(node,'Queue') || isa(node,'QueueingStation'))
119 if isempty(nodeparam{ind}) && (~isempty(node.pollingType) || ~isempty(node.switchoverTime))
120 nodeparam{ind} = cell(1,self.getNumberOfClasses);
121 for s=1:self.getNumberOfClasses
122 nodeparam{ind}{s} = struct();
123 end
124 end
125 if ~isempty(node.pollingType) && ~isempty(node.pollingType{r})
126 nodeparam{ind}{r}.pollingType = node.pollingType{r};
127 nodeparam{ind}{r}.pollingPar = node.pollingPar;
128 end
129 if ~isempty(node.switchoverTime) && ~isempty(node.switchoverTime{r})
130 if min(size(node.switchoverTime))==1
131 nodeparam{ind}{r}.switchoverTime = node.switchoverTime{r}.getProcess();
132 nodeparam{ind}{r}.switchoverProcId = ProcessType.toId(ProcessType.fromText(class(node.switchoverTime{r})));
133 else
134 for t=1:length(node.switchoverTime)
135 nodeparam{ind}{r}.switchoverTime{t} = node.switchoverTime{r,t}.getProcess();
136 nodeparam{ind}{r}.switchoverProcId(t) = ProcessType.toId(ProcessType.fromText(class(node.switchoverTime{r,t})));
137 end
138 end
139 end
140 end
141 end
142 end
143
144 for r=1:R
145 switch sn.routing(ind,r)
146 case RoutingStrategy.KCHOICES
147 nodeparam{ind}{r}.k = node.output.outputStrategy{r}{3}{1};
148 nodeparam{ind}{r}.withMemory = node.output.outputStrategy{r}{3}{2};
149 case RoutingStrategy.WRROBIN
150 nvars(ind,R+r) = nvars(ind,R+r) + 1;
151 % save indexes of outgoing links
152 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate if not a cache
153 nodeparam{ind}{r} = struct();
154 end
155 nodeparam{ind}{r}.weights = zeros(1,self.sn.nnodes);
156 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
157 for c=1:size(node.output.outputStrategy{1, r}{3},2)
158 destination = node.output.outputStrategy{1, r}{3}{c}{1};
159 weight = node.output.outputStrategy{1, r}{3}{c}{2};
160 nodeparam{ind}{r}.weights(destination.index) = weight;
161 end
162 case RoutingStrategy.RROBIN
163 nvars(ind,R+r) = nvars(ind,R+r) + 1;
164 % save indexes of outgoing links
165 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate if not a cache
166 nodeparam{ind}{r} = struct();
167 end
168 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
169 end
170 end
171end
172
173if ~isempty(self.sn) %&& isprop(self.sn,'nvars')
174 self.sn.nvars = nvars;
175 self.sn.nodeparam = nodeparam;
176end
177end