1function nvars = refreshLocalVars(self)
2% NVARS = REFRESHLOCALVARS()
4R = self.getNumberOfClasses;
5nvars = zeros(self.getNumberOfNodes, 2*R+1);
6nodeparam = cell(self.getNumberOfNodes, 1);
7rtnodes = self.sn.rtnodes;
11% nodeToPlace = zeros(1, self.getNumberOfNodes);
12% nodeToTransition = zeros(1, self.getNumberOfNodes);
13% for ind=1:self.getNumberOfNodes
14% node = self.getNodeByIndex(ind);
18% nodeToPlace(ind) = length(isp);
21% nodeToTransition(ind) = length(ist);
26for ind=1:self.getNumberOfNodes
27 node = self.getNodeByIndex(ind);
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));
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;
45 nodeparam{ind}.pread{r} = node.popularity{r}.evalPMF(1:nodeparam{ind}.nitems);
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);
59 nodeparam{ind}.fanOut = node.output.tasksPerLink;
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};
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;
77 for r=1:self.getNumberOfClasses
78 if ~iscell(node.arrivalProcess) || length(node.arrivalProcess) < r || isempty(node.arrivalProcess{r})
81 switch class(node.arrivalProcess{r})
83 nvars(ind,r) = nvars(ind,r) + 1;
84 case {
'Replayer',
'Trace'}
85 if isempty(nodeparam{ind})
86 nodeparam{ind} = cell(1,self.getNumberOfClasses);
88 if isempty(nodeparam{ind}{r})
89 nodeparam{ind}{r} =
struct();
91 nodeparam{ind}{r}.(node.arrivalProcess{r}.params{1}.paramName) = node.arrivalProcess{r}.params{1}.paramValue;
94 case {
'Queue',
'QueueingStation',
'Delay',
'DelayStation',
'Transition'}
95 for r=1:self.getNumberOfClasses
96 switch class(node.server.serviceProcess{r}{3})
98 nvars(ind,r) = nvars(ind,r) + 1;
99 case {
'Replayer',
'Trace'}
100 if isempty(nodeparam{ind})
101 nodeparam{ind} = cell(1,self.getNumberOfClasses);
103 if isempty(nodeparam{ind}{r})
104 nodeparam{ind}{r} =
struct();
106 nodeparam{ind}{r}.(node.server.serviceProcess{r}{3}.params{1}.paramName) = node.server.serviceProcess{r}{3}.params{1}.paramValue;
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);
112 if isempty(nodeparam{ind}{r})
113 nodeparam{ind}{r} =
struct();
115 nodeparam{ind}{r}.setupTime = node.setupTime{r}.getProcess();
116 nodeparam{ind}{r}.delayoffTime = node.delayoffTime{r}.getProcess();
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();
125 if ~isempty(node.pollingType) && ~isempty(node.pollingType{r})
126 nodeparam{ind}{r}.pollingType = node.pollingType{r};
127 nodeparam{ind}{r}.pollingPar = node.pollingPar;
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})));
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})));
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();
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;
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();
168 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
173if ~isempty(self.sn) %&& isprop(self.sn,
'nvars')
174 self.sn.nvars = nvars;
175 self.sn.nodeparam = nodeparam;