LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
estimator_ubr.m
1function estVal = estimator_ubr(self, nodes)
2node = nodes{1};
3% UBRO Utilization-based regression
4%
5% Copyright (c) 2012-2024, Imperial College London
6% All rights reserved.
7% This code is released under the 3-Clause BSD License.
8
9% rescale utilization to be mean number of busy servers
10
11sn = self.model.getStruct;
12
13if isfinite(node.getNumberOfServers())
14 U = self.getAggrUtil(node);
15 if ~isempty(U)
16 avgAggrUtil = U.data * node.getNumberOfServers();
17 end
18end
19
20% obtain per class metrics
21isUtilKnown = false(1,sn.nclasses);
22for r=1:sn.nclasses
23 Ur=self.getUtil(node, self.model.classes{r});
24 if isempty(Ur)
25 avgUtil{r} = [];
26 else
27 avgUtil{r} = Ur.data * node.getNumberOfServers();
28 isUtilKnown(r) = true;
29 end
30 avgArvR{r} = self.getArvR(node, self.model.classes{r}).data;
31end
32
33% convert cell arrays to scalar
34try
35 avgA = cell2mat(avgArvR);
36 sumUr = sum(cell2mat(avgUtil),2);
37 if isempty(sumUr)
38 sumUr = 0;
39 end
40catch me
41 switch me.identifier
42 case 'MATLAB:catenate:dimensionMismatch'
43 error('Sampled metrics have different number of samples, use interpolate() before starting this estimation algorithm.');
44 end
45end
46
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});
52end
53
54% for the other aggregate classes, do a non-negative
55% least squares
56estVal(~isUtilKnown) = lsqnonneg(avgA(:,~isUtilKnown), avgAggrUtil - sumUr);
57
58estVal = estVal(:)';
59end
Definition mmt.m:124