From c54888da414c0a298d7cf47e6a77d0e24784b861 Mon Sep 17 00:00:00 2001 From: jacobdenobel Date: Sat, 4 Nov 2023 18:11:02 +0100 Subject: [PATCH] fix for on-delta --- include/ioh/logger/triggers.hpp | 9 ++++----- ioh/src/logger.cpp | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/ioh/logger/triggers.hpp b/include/ioh/logger/triggers.hpp index 7bb2f202..eea0839d 100644 --- a/include/ioh/logger/triggers.hpp +++ b/include/ioh/logger/triggers.hpp @@ -289,21 +289,20 @@ namespace ioh OnDeltaImprovement(const double delta, const double best_so_far): delta(delta), best_so_far(best_so_far) { } - /** @returns true if a log event is to be triggered given the passed state. */ - virtual bool operator()(const logger::Info &log_info, const problem::MetaData &pb_info){ - if (best_so_far == std::numeric_limits::signaling_NaN()){ + bool operator()(const logger::Info &log_info, const problem::MetaData &pb_info) override { + if (std::isnan(best_so_far)){ best_so_far = log_info.y; return true; } - if (pb_info.optimization_type(best_so_far, log_info.y) && std::abs(best_so_far - log_info.y) > delta) { + if (pb_info.optimization_type(log_info.y, best_so_far) && std::abs(best_so_far - log_info.y) > delta) { best_so_far = log_info.y; return true; } return false; }; - virtual void reset() { + void reset() override { best_so_far = std::numeric_limits::signaling_NaN(); } }; diff --git a/ioh/src/logger.cpp b/ioh/src/logger.cpp index 12ef303d..0ce93d52 100644 --- a/ioh/src/logger.cpp +++ b/ioh/src/logger.cpp @@ -249,6 +249,8 @@ void define_triggers(py::module &m) "Trigger that evaluates to true when improvement of the objective function is observed of at least greater " "than delta") .def(py::init(), py::arg("delta") = 1e-10) + .def_readwrite("delta", &trigger::OnDeltaImprovement::delta) + .def_readonly("best_so_far", &trigger::OnDeltaImprovement::best_so_far) .def(py::pickle([](const trigger::OnDeltaImprovement &t) { return py::make_tuple(t.delta, t.best_so_far); }, [](py::tuple t) { return trigger::OnDeltaImprovement{t[0].cast(), t[1].cast()};