1classdef EvaluationResult < handle
2 % EvaluationResult Metrics from evaluating a LINE model via SolverAuto.
3 % Mirrors native-Python line_solver.opt.results.EvaluationResult. Per-
4 % (station,
class) metrics use a containers.Map keyed by
'station||class';
5 % utilizations by station; system metrics by chain/
class name.
9 responseTimes % Map
'station||class' -> value
12 utilizations % Map
'station' -> value
13 systemResponseTimes % Map chain/
class -> value
17 sensitivities = []; % opt.SensitivityData or []
21 function obj = EvaluationResult()
22 obj.responseTimes = containers.Map('KeyType', '
char', 'ValueType', '
double');
23 obj.throughputs = containers.Map('KeyType', '
char', 'ValueType', '
double');
24 obj.queueLengths = containers.Map('KeyType', '
char', 'ValueType', '
double');
25 obj.utilizations = containers.Map('KeyType', '
char', 'ValueType', '
double');
26 obj.systemResponseTimes = containers.Map('KeyType', '
char', 'ValueType', '
double');
27 obj.systemThroughputs = containers.Map('KeyType', '
char', 'ValueType', '
double');
30 function k = key(~, station,
jobclass)
34 function setResponseTime(obj, station,
jobclass, v)
35 obj.responseTimes(obj.key(station,
jobclass)) = v;
37 function setThroughput(obj, station,
jobclass, v)
38 obj.throughputs(obj.key(station,
jobclass)) = v;
40 function setQueueLength(obj, station,
jobclass, v)
41 obj.queueLengths(obj.key(station,
jobclass)) = v;
44 function v = getResponseTime(obj, station,
jobclass)
47 if isKey(obj.responseTimes, k), v = obj.responseTimes(k); else, v = inf; end
49 v = obj.aggregate(obj.responseTimes, station, true, inf);
52 function v = getThroughput(obj, station,
jobclass)
55 if isKey(obj.throughputs, k), v = obj.throughputs(k); else, v = 0.0; end
57 v = obj.aggregate(obj.throughputs, station, false, 0.0);
60 function v = getQueueLength(obj, station,
jobclass)
63 if isKey(obj.queueLengths, k), v = obj.queueLengths(k); else, v = 0.0; end
65 v = obj.aggregate(obj.queueLengths, station, false, 0.0);
68 function v = getUtilization(obj, station)
69 if isKey(obj.utilizations, station), v = obj.utilizations(station); else, v = 0.0; end
72 function v = aggregate(~, m, station, doMean, defaultVal)
74 total = 0.0;
count = 0;
75 prefix = [station '||'];
77 if strncmp(ks{i}, prefix, numel(prefix))
78 total = total + m(ks{i});
91 function v = getSystemResponseTime(obj,
jobclass)
93 if isKey(obj.systemResponseTimes,
jobclass), v = obj.systemResponseTimes(
jobclass);
else, v = inf; end
96 ks = keys(obj.systemResponseTimes);
97 if isempty(ks), v = inf;
return; end
98 totalTput = 0.0; weighted = 0.0;
100 rt = obj.systemResponseTimes(ks{i});
101 if isKey(obj.systemThroughputs, ks{i}), tp = obj.systemThroughputs(ks{i});
else, tp = 0.0; end
102 weighted = weighted + rt * tp; totalTput = totalTput + tp;
105 v = weighted / totalTput;
107 vals = cell2mat(values(obj.systemResponseTimes));
108 v = sum(vals) / numel(vals);
112 function v = getSystemThroughput(obj,
jobclass)
113 if nargin >= 2 && ~isempty(
jobclass)
114 if isKey(obj.systemThroughputs,
jobclass), v = obj.systemThroughputs(
jobclass);
else, v = 0.0; end
117 if obj.systemThroughputs.Count == 0, v = 0.0;
else, v = sum(cell2mat(values(obj.systemThroughputs))); end