Я пытаюсь оптимизировать скалярную функцию с 10 переменными, используя scipy.optimize.differential_evolution .
Скалярное значение фактически вычисляется программным обеспечением моделирования, которое занимает около 7 секундза итерацию.Проблема состоит в том, что даже если я установлю размер всплывающего окна равным 10, алгоритму потребуется> 1000 итераций, что приведет к очень большому времени вычислений.
10 переменных - это 5 углов и 5 длин:
phi_1 to phi_5 (0 to 360 degress)
l_1 to l_5 (0 to 20 micrometer)
На каждой итерации значения (X_1, X_2, X_3, X_4, X_5, Y_1, Y_2, Y_3, Y_4, Y_5) рассчитываются по
X = l*sin(phi) and Y = l*cos(phi)
Программное обеспечение для моделирования вычисляет скаляр на основе этих входных данных.
Я пытался уменьшить всплывающее окно до 3-5, но тогда результат не является глобальным оптимумом.Ранее я также пробовал разные стратегии, такие как «rand1exp» и «best1exp», а также алгоритмы на основе градиента (SLSQP), но проблема в том, что из-за функций синуса и косинуса критически важна отправная точка, которая приводит ко многим различным (локальным) результатам.Я считаю, что DE - лучший алгоритм для этой проблемы, но я не могу себе представить, что для решения проблемы с «всего лишь» 10 переменными требуется> 1000 итераций.
Я называю DE следующим образом:
sol = differential_evolution(objective, popsize=10, strategy="best1bin", bounds=boundList)
Кто-нибудь имеет некоторый опыт работы с DE и может дать мне несколько советов для правильных параметров?