Как исправить проблему с функцией Розенброка в Scipy? - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь найти локальный минимум функции, используя метод scipy BFGS

Но мне нужно добавить еще одну функцию rosen и изменить функцию rosen_der, но я не понимаю, что мне нужноизменить, чтобы заставить его работать, когда я переключаюсь на свою новую функцию, я смотрю некоторую проблему с => Warning: Desired error not necessarily achieved due to precision loss, и не имею итераций

import numpy as np

from scipy.optimize import minimize


def rosen(x):

    """The Rosenbrock function"""

    # x = x[:-1]
    # y = y[1:]
    return np.sum(100.0 * (x[1:] - x[:-1] ** 2.0) ** 2.0 + (1 - x[:-1]) ** 2.0, axis=0)

    # need use this function => return np.sum((10 ** -6) / ((x[:-1] ** 2 - 0.001 ** 2) ** 2 + ((x[:-1] / x[1:]) * 0.001) ** 2) ** 0.5, axis=0) 


def rosen_der(x):

    # also need change this all to work with new function

    xm = x[1: -1] # also dont understand what that var is mean (1)

    xm_m1 = x[:-2] # also dont understand what that var is mean (2)

    xm_p1 = x[2:] # also dont understand what that var is mean (3)

    der = np.zeros_like(x)

    der[1: -1] = 200 * (xm - xm_m1 ** 2) - 400 * (xm_p1 - xm ** 2) * xm - 2 * (1 - xm)

    der[0] = -400 * x[0] * (x[1] - x[0] ** 2) - 2 * (1 - x[0])

    der[-1] = 200 * (x[-1] - x[-2] ** 2)

    return der



x0 = np.array([1.3, 0.7, 0.8])

res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})

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