scipy bashopping вызывает функцию избыточно? - PullRequest
0 голосов
/ 09 июля 2019

scipy.optimize.basinhopping, кажется, вызывает функцию, которую хочет минимизировать несколько (четыре) раза с одинаковыми входными параметрами и получать одинаковый вывод. Хотя он работает так, что приходит к правильному ответу, я не понимаю, почему он вызывает функцию 4 раза, и для реальной проблемы я пытаюсь оптимизировать это, что существенно замедляет конвергенцию.

Я пытался использовать разные minimizer_kwargs = minimizer_kwargs, но это не имеет значения. Я не хочу закорачивать алгоритм, но выполняю какой-то тип (псевдокод):

если current_iter> 1, пропустить функцию оценки, возвращая предыдущие результаты

Ниже приводится простой пример, приведенный на сайте Сципиона. Я только добавил "print ('x is:', x, 'f is:', f)"

import numpy as np
from scipy.optimize import basinhopping

def func2d(x):
    f = np.cos(14.5 * x[0] - 0.3) + (x[1] + 0.2) * x[1] + (x[0] +0.2) * x[0]
    print('x is:', x, 'f is:', f)
    return f

x0 = [-1.0, 1.0]

ret = basinhopping(func2d, x0,niter=2)

print("global minimum: x = [%.4f, %.4f], f(x0) = %.4f" % \
      (ret.x[0],ret.x[1],ret.fun))

Вывод будет таким:

x is: [-1.  1.] f is: 1.3846475170452792
x is: [-0.99999999  1.        ] f is: 1.3846476605383349
x is: [-1.          1.00000001] f is: 1.3846475498278341
x is: [-1.  1.] f is: 1.3846475170452792
x is: [-1.98463072  0.77505036] f is: 3.6028590636594706
x is: [-1.98463072  0.77505036] f is: 3.6028590636594706
x is: [-1.98463071  0.77505036] f is: 3.6028588520736204
x is: [-1.98463072  0.77505038] f is: 3.602859089738004
x is: [-1.39207434  0.91042634] f is: 2.605736986404326
x is: [-1.39207434  0.91042634] f is: 2.605736986404326
x is: [-1.39207433  0.91042634] f is: 2.60573716351191
x is: [-1.39207434  0.91042635] f is: 2.6057370165173777

Почему он вызывает один и тот же вход 4 раза?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...