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 case 'Fork'
54 nodeparam{ind}.fanOut = node.output.tasksPerLink;
55 case 'Join'
56 nodeparam{ind}.joinStrategy = node.input.joinStrategy;
57 nodeparam{ind}.fanIn = cell(1,self.getNumberOfClasses);
58 for r=1:self.getNumberOfClasses
59 nodeparam{ind}.fanIn{r} = node.input.joinRequired{r};
60 end
61 case 'Logger'
62 nodeparam{ind}.fileName = node.fileName;
63 nodeparam{ind}.filePath = node.filePath;
64 nodeparam{ind}.startTime = node.getStartTime;
65 nodeparam{ind}.loggerName = node.getLoggerName;
66 nodeparam{ind}.timestamp = node.getTimestamp;
67 nodeparam{ind}.jobID = node.getJobID;
68 nodeparam{ind}.jobClass = node.getJobClass;
69 nodeparam{ind}.timeSameClass = node.getTimeSameClass;
70 nodeparam{ind}.timeAnyClass = node.getTimeAnyClass;
71 case {'Source'}
72 for r=1:self.getNumberOfClasses
73 switch class(node.arrivalProcess{r})
74 case 'MAP'
75 nvars(ind,r) = nvars(ind,r) + 1;
76 case {'Replayer', 'Trace'}
77 if isempty(nodeparam{ind})
78 nodeparam{ind} = cell(1,self.getNumberOfClasses);
79 end
80 if isempty(nodeparam{ind}{r})
81 nodeparam{ind}{r} = struct();
82 end
83 nodeparam{ind}{r}.(node.arrivalProcess{r}.params{1}.paramName) = node.arrivalProcess{r}.params{1}.paramValue;
84 end
85 end
86 case {'Queue','QueueingStation','Delay','DelayStation','Transition'}
87 for r=1:self.getNumberOfClasses
88 switch class(node.server.serviceProcess{r}{3})
89 case 'MAP'
90 nvars(ind,r) = nvars(ind,r) + 1;
91 case {'Replayer', 'Trace'}
92 if isempty(nodeparam{ind})
93 nodeparam{ind} = cell(1,self.getNumberOfClasses);
94 end
95 if isempty(nodeparam{ind}{r})
96 nodeparam{ind}{r} = struct();
97 end
98 nodeparam{ind}{r}.(node.server.serviceProcess{r}{3}.params{1}.paramName) = node.server.serviceProcess{r}{3}.params{1}.paramValue;
99 end
100 if ~isa(node,'Delay') && ~isa(node,'Transition') && ~isempty(node.setupTime) && ~isempty(node.setupTime{r})
101 if isempty(nodeparam{ind})
102 nodeparam{ind} = cell(1,self.getNumberOfClasses);
103 end
104 if isempty(nodeparam{ind}{r})
105 nodeparam{ind}{r} = struct();
106 end
107 nodeparam{ind}{r}.setupTime = node.setupTime{r}.getProcess();
108 nodeparam{ind}{r}.delayoffTime = node.delayoffTime{r}.getProcess();
109 end
110 if (isa(node,'Queue') || isa(node,'QueueingStation'))
111 if isempty(nodeparam{ind}) && (~isempty(node.pollingType) || ~isempty(node.switchoverTime))
112 nodeparam{ind} = cell(1,self.getNumberOfClasses);
113 for s=1:self.getNumberOfClasses
114 nodeparam{ind}{s} = struct();
115 end
116 end
117 if ~isempty(node.pollingType) && ~isempty(node.pollingType{r})
118 nodeparam{ind}{r}.pollingType = node.pollingType{r};
119 nodeparam{ind}{r}.pollingPar = node.pollingPar;
120 end
121 if ~isempty(node.switchoverTime) && ~isempty(node.switchoverTime{r})
122 if min(size(node.switchoverTime))==1
123 nodeparam{ind}{r}.switchoverTime = node.switchoverTime{r}.getProcess();
124 nodeparam{ind}{r}.switchoverProcId = ProcessType.toId(ProcessType.fromText(class(node.switchoverTime{r})));
125 else
126 for t=1:length(node.switchoverTime)
127 nodeparam{ind}{r}.switchoverTime{t} = node.switchoverTime{r,t}.getProcess();
128 nodeparam{ind}{r}.switchoverProcId(t) = ProcessType.toId(ProcessType.fromText(class(node.switchoverTime{r,t})));
129 end
130 end
131 end
132 end
133 end
134 end
135
136 for r=1:R
137 switch sn.routing(ind,r)
138 case RoutingStrategy.KCHOICES
139 nodeparam{ind}{r}.k = node.output.outputStrategy{r}{3}{1};
140 nodeparam{ind}{r}.withMemory = node.output.outputStrategy{r}{3}{2};
141 case RoutingStrategy.WRROBIN
142 nvars(ind,R+r) = nvars(ind,R+r) + 1;
143 % save indexes of outgoing links
144 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate if not a cache
145 nodeparam{ind}{r} = struct();
146 end
147 nodeparam{ind}{r}.weights = zeros(1,self.sn.nnodes);
148 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
149 for c=1:size(node.output.outputStrategy{1, r}{3},2)
150 destination = node.output.outputStrategy{1, r}{3}{c}{1};
151 weight = node.output.outputStrategy{1, r}{3}{c}{2};
152 nodeparam{ind}{r}.weights(destination.index) = weight;
153 end
154 case RoutingStrategy.RROBIN
155 nvars(ind,R+r) = nvars(ind,R+r) + 1;
156 % save indexes of outgoing links
157 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate if not a cache
158 nodeparam{ind}{r} = struct();
159 end
160 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
161 end
162 end
163end
164
165if ~isempty(self.sn) %&& isprop(self.sn,'nvars')
166 self.sn.nvars = nvars;
167 self.sn.nodeparam = nodeparam;
168end
169end