Почему scipy.optimize говорит, что он преуспел, когда потерпел неудачу? - PullRequest
0 голосов
/ 28 января 2020

Если я попытаюсь найти (мелкий) максимум функции Химмельблау с отправной точкой даже немного вдали от ее истинного местоположения, scipy.minimize (с его алгоритмом BFGS по умолчанию) утверждает, что он был успешным , но фактически потерял крутые стороны функции:

def f(X):
    x, y = X
    return (x**2 + y - 11)**2 + (x + y**2 - 7)**2

from scipy.optimize import minimize
minimize(lambda X: -f(X), (0.2, 0.2)) 

возвращает:

      fun: -1.317411760934999e+34
 hess_inv: array([[ 0.38662039, -0.49347889],
       [-0.49347889,  0.70730156]])
      jac: array([0., 0.])
  message: 'Optimization terminated successfully.'
     nfev: 64
      nit: 2
     njev: 16
   status: 0
  success: True
        x: array([ 2.32731520e+08, -3.18111266e+08])

Почему он не смог обнаружить сбой здесь? В этой точке градиент, безусловно, не равен нулю.

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