Closed YamLyubov closed 1 year ago
Пример вывода после которого алгоритм зависает
Для справки, заранее известно ли какие именно комбинации параметров невалидны? Или это можно определить только поймав исключение в рантайме? Если известны, то можно попробовать выразить их через функции-ограничения и попытаться использовать индексный метод. Но скорее всего это слишком сложный подход и так делать не надо...
Проблема с невозможностью вычислить критерий в некоторых точках нам уже встречалась в других исследования. Нами прорабатываются подходы со скрытыми ограничениями в рамках исследования методов.
Я думаю что решение будет выражено в следующем виде. При невозможность вычислить критерий нужно будет кидать исключение. Метод будет исключение отлавливать и учитывать в вычислениях (способ учета основан на индексной схеме).
Конкретную имплементацию я думаю мы с командой обсудим в ближайшее время. С точки зрения пользователя не должно быть сложных схем. Пользователи не знают наши методы.
Мы добавили прототип учета скрытых ограничений. Если вычислить значене критерия невозможно, то нужно выкидывать исключение. Модельный пример (строки 58-64) https://github.com/aimclub/iOpt/blob/main/problems/rastrigin_hidden_constraint.py
Спасибо за ответ! Хотела бы узнать, когда у вас планируется следующий релиз? Чтобы можно было стабильную версию с этими обновлениями в GOLEM включить.
Мы проводим финальные проверки версии кода с возможностью использования дискретных параметров. По использованию параметров в ближайшее время также подготовим пример и документацию. После будет выпущен релиз.
Сейчас пробую добавить оптимизатор IOpt в FEDOT и столкнулась с такой проблемой.
Для задачи поиска гиперпараметров для композитных моделей машинного обучения бывает, что комбинация гиперпараметров может быть невалидной и для нее невозможно вычислить метрику (при обучении модели возвращается ошибка). В таком случае я попробовала возвращать оптимизатору худшее возможное значение метрики (для минимизации) -
np.inf
. Однако в таком случае алгоритм попадает в бесконечный цикл при попытке добавить dataItem в очередь, на первой итерации (это то, что мне удалось понять при дебаге, но возможно я не права).Возможно, есть какой-то способ решить данную проблему? Подумала, что скорее всего поможет заменить
np.inf
наsys.maxsize
, но решила все-таки рассказать о проблеме, вoзможно получится обработать такой экстремальный случай внутри IOpt.Я использовала версию IOpt 0.1.6, но попробовала и текущую версию из main - алгоритм так же зависает.
Проблему сложно воспроизвести, если специально ничего не ломать, но вот код, который иногда ломается
Датасет: https://github.com/aimclub/FEDOT/blob/master/examples/data/ts/beer.csv Я использую FEDOT и требования для него из своей ветки: https://github.com/aimclub/FEDOT/tree/add-iopt (pr https://github.com/aimclub/FEDOT/pull/1102) FEDOT использует реализацию тюнера на основе IOpt из этой ветки GOLEM: https://github.com/aimclub/GOLEM/tree/iopt-tuner Сам код IOptTuner: https://github.com/aimclub/GOLEM/blob/iopt-tuner/golem/core/tuning/iopt_tuner.py