1function estVal = estimator_ubr(self,
nodes)
3% UBRO Utilization-based regression
5% Copyright (c) 2012-2024, Imperial College London
7% This code
is released under the 3-Clause BSD License.
9% rescale utilization to be mean number of busy servers
11sn = self.model.getStruct;
13if isfinite(node.getNumberOfServers())
14 U = self.getAggrUtil(node);
16 avgAggrUtil = U.data * node.getNumberOfServers();
20% obtain per class metrics
21isUtilKnown = false(1,sn.nclasses);
23 Ur=self.getUtil(node, self.model.
classes{r});
27 avgUtil{r} = Ur.data * node.getNumberOfServers();
28 isUtilKnown(r) =
true;
30 avgArvR{r} = self.getArvR(node, self.model.classes{r}).data;
33% convert cell arrays to scalar
35 avgA = cell2mat(avgArvR);
36 sumUr = sum(cell2mat(avgUtil),2);
42 case 'MATLAB:catenate:dimensionMismatch'
43 error(
'Sampled metrics have different number of samples, use interpolate() before starting this estimation algorithm.');
47estVal = zeros(1,sn.nclasses);
48%
for known pairs arrival rate - per-
class utilization
49%
do separate inference of the demand
50for r = find(isUtilKnown)
51 estVal(r) = lsqnonneg(avgA(:,r), avgUtil{r});
54%
for the other aggregate
classes,
do a non-negative
56estVal(~isUtilKnown) = lsqnonneg(avgA(:,~isUtilKnown), avgAggrUtil - sumUr);