fmin_cg#
- scipy.optimize.fmin_cg(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, c1=0.0001, c2=0.4)[источник]#
Минимизировать функцию с использованием алгоритма нелинейного сопряжённого градиента.
- Параметры:
- fвызываемый,
f(x, *args) Целевая функция для минимизации. Здесь x должен быть одномерным массивом переменных, которые будут изменяться при поиске минимума, и args являются другими (фиксированными) параметрами f.
- x0ndarray
Пользовательская начальная оценка xopt, оптимальное значение x. Это должен быть одномерный массив значений.
- fprimeвызываемый,
fprime(x, *args), опционально Функция, возвращающая градиент f в x. Здесь x и args описаны выше для f. Возвращаемое значение должно быть одномерным массивом. По умолчанию None, в этом случае градиент аппроксимируется численно (см. эпсилон, ниже).
- argsкортеж, необязательный
Значения параметров, передаваемые в f и fprime. Должен быть указан всякий раз, когда требуются дополнительные фиксированные параметры для полного определения функций f и fprime.
- gtolfloat, опционально
Остановка, когда норма градиента меньше чем gtol.
- normfloat, опционально
Порядок для нормы градиента (
-np.infявляется минимумом,np.infявляется максимальным).- эпсилонfloat или ndarray, опционально
Шаг(и) для использования при fprime аппроксимируется численно. Может быть скаляром или одномерным массивом. По умолчанию
sqrt(eps), где eps - машинная точность с плавающей запятой. Обычноsqrt(eps)составляет около 1.5e-8.- maxiterint, необязательный
Максимальное количество итераций для выполнения. По умолчанию
200 * len(x0).- full_outputbool, необязательно
Если True, возвращает fopt, func_calls, grad_calls, и warnflag в дополнение к xopt. См. раздел Returns ниже для дополнительной информации о необязательных возвращаемых значениях.
- dispbool, необязательно
Если True, возвращает сообщение о сходимости, за которым следует xopt.
- retallbool, необязательно
Если True, добавляет к возвращаемым значениям результаты каждой итерации.
- callbackвызываемый объект, необязательный
Необязательная пользовательская функция, вызываемая после каждой итерации. Вызывается как
callback(xk), гдеxkявляется текущим значением x0.- c1float, по умолчанию: 1e-4
Параметр для правила условия Армихо.
- c2float, по умолчанию: 0.4
Параметр для правила условия кривизны.
- fвызываемый,
- Возвращает:
- xoptndarray
Параметры, минимизирующие f, т.е.,
f(xopt) == fopt.- foptfloat, опционально
Найденное минимальное значение, f(xopt). Возвращается только если full_output равно True.
- func_callsint, необязательный
Количество вызовов функции. Возвращается только если full_output равно True.
- grad_callsint, необязательный
Количество вызовов градиента. Возвращается только если full_output равно True.
- warnflagint, необязательный
Целочисленное значение со статусом предупреждения, возвращается только если full_output равно True.
0 : Успех.
1 : Превышено максимальное количество итераций.
- 2Градиент и/или вызовы функций не изменялись. Может указывать
что точность была потеряна, т.е. процедура не сошлась.
3 : встречен результат NaN.
- allvecsсписок ndarray, опционально
Список массивов, содержащих результаты на каждой итерации. Возвращается только если retall равно True.
Смотрите также
minimizeобщий интерфейс ко всем
scipy.optimizeалгоритмы для безусловной и условной минимизации многомерных функций. Он предоставляет альтернативный способ вызоваfmin_cg, указавmethod='CG'.
Примечания
Этот алгоритм сопряжённых градиентов основан на алгоритме Поляка и Рибьера [1].
Методы сопряженных градиентов обычно работают лучше, когда:
f имеет единственную глобальную точку минимума и не имеет локальных минимумов или других стационарных точек,
f является, по крайней мере локально, достаточно хорошо аппроксимируемой квадратичной функцией переменных,
f является непрерывной и имеет непрерывный градиент,
fprime не слишком велика, например, имеет норму менее 1000,
Начальное приближение, x0, достаточно близко к f глобальная точка минимума xopt.
Параметры c1 и c2 должно удовлетворять
0 < c1 < c2 < 1.Ссылки
[1]Райт и Ноцедал, «Численная оптимизация», 1999, стр. 120-122.
Примеры
Пример 1: поиск минимального значения выражения
a*u**2 + b*u*v + c*v**2 + d*u + e*v + fдля заданных значений параметров и начального приближения(u, v) = (0, 0).>>> import numpy as np >>> args = (2, 3, 7, 8, 9, 10) # parameter values >>> def f(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... return a*u**2 + b*u*v + c*v**2 + d*u + e*v + f >>> def gradf(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... gu = 2*a*u + b*v + d # u-component of the gradient ... gv = b*u + 2*c*v + e # v-component of the gradient ... return np.asarray((gu, gv)) >>> x0 = np.asarray((0, 0)) # Initial guess. >>> from scipy import optimize >>> res1 = optimize.fmin_cg(f, x0, fprime=gradf, args=args) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res1 array([-1.80851064, -0.25531915])
Пример 2: решить ту же задачу с использованием
minimizeфункция. (Это myopts словарь показывает все доступные опции, хотя на практике потребуются только нестандартные значения. Возвращаемое значение будет словарём.)>>> opts = {'maxiter' : None, # default value. ... 'disp' : True, # non-default value. ... 'gtol' : 1e-5, # default value. ... 'norm' : np.inf, # default value. ... 'eps' : 1.4901161193847656e-08} # default value. >>> res2 = optimize.minimize(f, x0, jac=gradf, args=args, ... method='CG', options=opts) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res2.x # minimum found array([-1.80851064, -0.25531915])