1classdef SensitivityData < handle
2 % SensitivityData Analytic performance sensitivities
for a product-
form
3 % model, mirroring native-Python compute_model_sensitivities: metric kind
4 % (
'RespT'|
'QLen'|
'Tput'|
'Util') -> metric key -> parameter key ->
5 % d(metric)/d(parameter). Keys are canonical strings: a metric key
is
6 %
'station' (Util) or
'station||class'; a parameter key
is
7 %
'rate||station||class'. Backed by nested containers.Map.
10 data % Map kind -> (Map metricKey -> (Map paramKey -> value))
14 function obj = SensitivityData()
15 obj.data = containers.Map('KeyType', '
char', 'ValueType', 'any');
18 function add(obj, kind, metricKey, paramKey, value)
19 if ~isKey(obj.data, kind)
20 obj.data(kind) = containers.Map('KeyType', '
char', 'ValueType', 'any');
22 byMetric = obj.data(kind);
23 if ~isKey(byMetric, metricKey)
24 byMetric(metricKey) = containers.Map('KeyType', '
char', 'ValueType', '
double'); %
#ok<NASGU>
26 byParam = byMetric(metricKey);
27 if isKey(byParam, paramKey)
28 byParam(paramKey) = byParam(paramKey) + value;
30 byParam(paramKey) = value;
34 function m = forKind(obj, kind)
35 if isKey(obj.data, kind), m = obj.data(kind);
else, m = []; end
38 function tf = isempty(obj)
39 tf = (obj.data.Count == 0);
44 function k = metricKey(station,
jobclass)
47 function k = paramKey(station,
jobclass)
48 k = [
'rate||' station
'||' jobclass];