2017-02-01 6 views
0

Мне нужно оптимизировать функцию. Для этого я использую функцию scipy.optimize.basinhopping.Оптимизатор функции python для оптимизации

Я закодирована функция, которая будет оптимизирована и функция вносить изменения и я вызвать функцию basinhopping следующим образом:

result = basinhopping(func_to_be_optimized, x0, 
        take_step=take_step, 
        niter=10, niter_success=10, 
        disp=True) 

х0 является начальным решением угадали.

Моя проблема заключается в том, что функция func_to_be_optimized вызывается много раз, а затем вызывается функция take_step. Но обычно он должен быть: один вызов take_step и один вызов func_to_be_optimized и т.д.

Кроме того, func_to_be_optimized функция имеет параметр X и изменяется при каждом вызове, но не моя функция take_step.

Почему у меня эта проблема?

+2

«это должно быть: один вызов take_step и один вызов func_to_be_optimized и т. Д.» - Зачем? Это фактическое ограничение, которое у вас есть? Это было бы очень странно. Поведение, которое вы наблюдаете, совершенно нормально для прыжка в бассейне. – user2357112

+0

Спасибо за ваш ответ! Фактически, поэтому я использовал другой оптимизатор, потому что basinhopping не был присвоен для моей проблемы – Melimelo

ответ

0

От docs:

Алгоритм является итеративным с каждым циклом, состоящим из следующих признаков

  1. случайное возмущение координат
  2. локальных минимизации
  3. принять или отклонить новые координаты на основе по минимизированному значению функции

Шаг 1. использует take_step. шаг 2. (локальная минимизация) вызовет ваш func_to_be_optimized несколько раз.

Смежные вопросы