scipy.optimize.

fmin_bfgs#

scipy.optimize.fmin_bfgs(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, эпсилон=np.float64(1.4901161193847656e-08), maxiter=None, full_output=0, disp=1, retall=0, callback=None, xrtol=0, c1=0.0001, c2=0.9, hess_inv0=None)[источник]#

Минимизируйте функцию с использованием алгоритма BFGS.

Параметры:
fcallable f(x,*args)

Целевая функция для минимизации.

x0ndarray

Начальное приближение, форма (n,)

fprimecallable f'(x,*args), опционально

Градиент f.

argsкортеж, необязательный

Дополнительные аргументы, передаваемые в f и fprime.

gtolfloat, опционально

Успешно завершить, если норма градиента меньше gtol

normfloat, опционально

Порядок нормы (Inf - максимум, -Inf - минимум)

эпсилонint или ndarray, опционально

Если fprime аппроксимируется, используйте это значение для размера шага.

callbackвызываемый объект, необязательный

Необязательная пользовательская функция для вызова после каждой итерации. Вызывается как callback(xk), где xk является текущим вектором параметров.

maxiterint, необязательный

Максимальное количество итераций для выполнения.

full_outputbool, необязательно

Если True, возвращает fopt, func_calls, grad_calls, и warnflag в дополнение к xopt.

dispbool, необязательно

Выводить сообщение о сходимости, если True.

retallbool, необязательно

Возвращать список результатов на каждой итерации, если True.

xrtolfloat, по умолчанию: 0

Относительная погрешность для x. Успешно завершить, если размер шага меньше, чем xk * xrtol где xk является текущим вектором параметров.

c1float, по умолчанию: 1e-4

Параметр для правила условия Армихо.

c2float, по умолчанию: 0.9

Параметр для правила условия кривизны.

hess_inv0None или ndarray, опционально``

Начальная оценка обратной матрицы Гессе, форма (n, n). Если None (по умолчанию), то используется единичная матрица.

Возвращает:
xoptndarray

Параметры, минимизирующие f, т.е., f(xopt) == fopt.

foptfloat

Минимальное значение.

goptndarray

Значение градиента в минимуме, f’(xopt), которое должно быть близко к 0.

Boptndarray

Значение 1/f’’(xopt), т.е. обратная матрица Гессе.

func_callsint

Количество выполненных вызовов функции.

grad_callsint

Количество вызовов градиента.

warnflagцелое число

1 : Превышено максимальное количество итераций. 2 : Градиент и/или вызовы функций не изменяются. 3 : Обнаружен результат NaN.

allvecslist

Значение xopt на каждой итерации. Возвращается только если retall равно True.

Смотрите также

minimize

Интерфейс к алгоритмам минимизации для многомерных функций. См. method='BFGS' в частности.

Примечания

Оптимизировать функцию, f, градиент которого задаётся fprime используя квази-ньютоновский метод Бройдена-Флетчера-Гольдфарба-Шанно (BFGS).

Параметры c1 и c2 должно удовлетворять 0 < c1 < c2 < 1.

Ссылки

Wright и Nocedal 'Численная оптимизация', 1999, стр. 198.

Примеры

>>> import numpy as np
>>> from scipy.optimize import fmin_bfgs
>>> def quadratic_cost(x, Q):
...     return x @ Q @ x
...
>>> x0 = np.array([-3, -4])
>>> cost_weight =  np.diag([1., 10.])
>>> # Note that a trailing comma is necessary for a tuple with single element
>>> fmin_bfgs(quadratic_cost, x0, args=(cost_weight,))
Optimization terminated successfully.
        Current function value: 0.000000
        Iterations: 7                   # may vary
        Function evaluations: 24        # may vary
        Gradient evaluations: 8         # may vary
array([ 2.85169950e-06, -4.61820139e-07])
>>> def quadratic_cost_grad(x, Q):
...     return 2 * Q @ x
...
>>> fmin_bfgs(quadratic_cost, x0, quadratic_cost_grad, args=(cost_weight,))
Optimization terminated successfully.
        Current function value: 0.000000
        Iterations: 7
        Function evaluations: 8
        Gradient evaluations: 8
array([ 2.85916637e-06, -4.54371951e-07])