diff --git a/eo/contrib/irace/fastga.cpp b/eo/contrib/irace/fastga.cpp index 919231eb7..e9db6baf0 100644 --- a/eo/contrib/irace/fastga.cpp +++ b/eo/contrib/irace/fastga.cpp @@ -8,6 +8,8 @@ #include #include +#include +#include #include // using Particle = eoRealParticle; @@ -156,6 +158,10 @@ int main(int argc, char* argv[]) // rng is a global rng.reseed(seed); + bool full_log = + parser.getORcreateParam(0, + "full-log", "Log the full search in CSV files (using the IOH profiler format)", + 'F').value(); auto problem_p = parser.getORcreateParam(0, "problem", "Problem ID", @@ -310,16 +316,26 @@ int main(int argc, char* argv[]) assert(0 <= problem and problem < problem_config_mapping.size()); /***** IOH logger *****/ + + auto max_target_para = problem_config_mapping[problem].max_target; IOHprofiler_RangeLinear target_range(0, max_target_para, buckets); IOHprofiler_RangeLinear budget_range(0, max_evals, buckets); - IOHprofiler_ecdf_logger logger( + IOHprofiler_ecdf_logger ecdf_logger( target_range, budget_range, /*use_known_optimum*/false); - logger.set_complete_flag(true); - logger.set_interval(0); - logger.activate_logger(); + // ecdf_logger.set_complete_flag(true); + // ecdf_logger.set_interval(0); + ecdf_logger.activate_logger(); + + IOHprofiler_observer_combine loggers(ecdf_logger); + + std::shared_ptr> csv_logger; + if(full_log) { + csv_logger = std::make_shared>(/*TODO: dir, folder, algo, desc*/); + loggers.add(*csv_logger); + } /***** IOH problem *****/ double w_model_suite_dummy_para = problem_config_mapping[problem].dummy; @@ -351,9 +367,12 @@ int main(int argc, char* argv[]) w_model_om.IOHprofiler_set_number_of_variables(dimension); /***** Bindings *****/ - logger.track_problem(w_model_om); + ecdf_logger.track_problem(w_model_om); + if(full_log) { + csv_logger->track_problem(w_model_om); + } - eoEvalIOHproblem onemax_pb(w_model_om, logger); + eoEvalIOHproblem onemax_pb(w_model_om, loggers); // eoEvalPrint eval_print(onemax_pb, std::clog, "\n"); eoEvalFuncCounter eval_count(onemax_pb); @@ -401,7 +420,7 @@ int main(int argc, char* argv[]) /***** IOH perf stats *****/ IOHprofiler_ecdf_sum ecdf_sum; // iRace expects minimization - long perf = ecdf_sum(logger.data()); + long perf = ecdf_sum(ecdf_logger.data()); // assert(0 < perf and perf <= buckets*buckets); if(perf <= 0 or buckets*buckets < perf) {