Лытдыбр про метаэвристики

Sep 05, 2024 21:29

Пришлось тут закопаться в алгоритмы поиска экстремума для black box optimization.

Есть некоторые исходные данные с прибора (после импортозамещения некоторых реактивов, хе-хе). Некоторая проприетарная программа очень замороченным образом их обрабатывает и выдаёт другие данные, по которым мы считаем всякое научное. Результат обработки нас не устраивает, поскольку программа про импортозамещение не знает, а небольшая разница физико-химических свойств реактивов даёт на выходе всякое. Есть выход -- внести поправки на свойства реактивов в данные с прибора. Какие поправки -- непонятно, но на то и существуют метаэвристические алгоритмы оптимизации.

К счастью, почти* все нужные поправки можно свести к матрице 4*4 из чисел от -1 до 1. Ещё мы примерно знаем, как отличить хороший результат от плохого, можем написать функцию для его оценки, скормить алгоритму и так далее. К несчастью, жуткая проприетарная программа делает своё дело за СОТНИ МИЛЛИсекунд. Поэтому время сходимости алгоритма становится критичным.

Естественно, первым делом я попробовал симуляцию (или имитацию, хз, как это правильно по-русски) отжига. Обычно этот алгоритм отрабатывает хорошо и быстро, но в этот раз получилось какое-то болтание в проруби.
Посидел, подумал, вспомнил про генетические алгоритмы -- мы же генетики, всё логично. Закодил, запустил -- трое суток оно что-то считало, результат получился приемлемым. Ещё недельку поигрался с параметрами, подобрал близкие к оптимальным. Но всё равно что-то не нравится.

Нагуглил библиотеку pymoo, там куча алгоритмов поддерживается. Перебрал все подходящие. Сильно надеялся на Нелдера-Мида и подобные -- нифига, то же болтание в проруби.

Но! Старый добрый рой частиц (PSO, particle swarm optimization), про который и думать забыл, оказался лучшим. После подбора параметров почти идеальная матрица получается за 2-3 часа на среднем лабораторном компе уровня i5-12400.

Вот такой фигнёй и наполнена повседневная жизнь обычного провинциального молекулярщика :-)

* -- для полного учёта поправок надо подбирать уже три разные матрицы сильно покрупнее. Чем я и буду заниматься в свободное время.
Previous post Next post
Up