1#ifndef LINE_OPT_RESULTS_H
2#define LINE_OPT_RESULTS_H
32using Value = std::vector<double>;
36inline std::string
metric_key(
const std::string& station,
const std::string& jobclass) {
37 return station +
"||" + jobclass;
43 using MetricMap = std::map<std::string, ParameterMap>;
44 using Data = std::map<std::string, MetricMap>;
46 void add(
const std::string& kind,
const std::string& metric,
47 const std::string& parameter,
double value) {
48 data_[kind][metric][parameter] += value;
51 const auto found = data_.find(kind);
52 return found == data_.end() ? nullptr : &found->second;
54 bool empty()
const {
return data_.empty(); }
56 static std::string
metric_key(
const std::string& station,
57 const std::string& jobclass) {
58 return station +
"||" + jobclass;
61 const std::string& jobclass) {
62 return "rate||" + station +
"||" + jobclass;
79 static double exact(
const std::map<std::string,double>& m,
const std::string& k,
double d){
auto i=m.find(k);
return i==m.end()?d:i->second;}
80 static double aggregate(
const std::map<std::string,double>& m,
const std::string& s,
bool mean,
double d){
81 const std::string p=s+
"||";
double total=0; std::size_t n=0;
82 for(
const auto& kv:m)
if(kv.first.compare(0,p.size(),p)==0){total+=kv.second;++n;}
83 return n==0?d:(mean?total/n:total);
std::map< std::string, MetricMap > Data
const Data & data() const
void add(const std::string &kind, const std::string &metric, const std::string ¶meter, double value)
static std::string metric_key(const std::string &station, const std::string &jobclass)
std::map< std::string, ParameterMap > MetricMap
const MetricMap * for_kind(const std::string &kind) const
static std::string parameter_key(const std::string &station, const std::string &jobclass)
std::map< std::string, double > ParameterMap
double scalar_value(const Value &v)
std::string metric_key(const std::string &station, const std::string &jobclass)
std::map< std::string, Value > VariableValues
std::vector< double > Value
void set_queue_length(const std::string &s, const std::string &c, double v)
std::map< std::string, double > utilizations
static double aggregate(const std::map< std::string, double > &m, const std::string &s, bool mean, double d)
double utilization(const std::string &s) const
double response_time(const std::string &s, const std::string &c="") const
void set_response_time(const std::string &s, const std::string &c, double v)
std::shared_ptr< SensitivityData > sensitivities
std::map< std::string, double > system_throughputs
static double exact(const std::map< std::string, double > &m, const std::string &k, double d)
double queue_length(const std::string &s, const std::string &c="") const
std::map< std::string, double > system_response_times
double system_response_time(const std::string &c="") const
double system_throughput(const std::string &c="") const
std::map< std::string, double > response_times
std::map< std::string, double > throughputs
double throughput(const std::string &s, const std::string &c="") const
std::map< std::string, double > queue_lengths
void set_throughput(const std::string &s, const std::string &c, double v)
std::string terminated_by
std::size_t model_evaluations
VariableValues variable_values
double total_violation() const
std::vector< double > convergence_history
std::map< std::string, double > constraint_violations