линейный поиск#
- scipy.optimize.линейный поиск(f, myfprime, xk, pk, gfk=None, old_fval=None, old_old_fval=None, args=(), c1=0.0001, c2=0.9, amax=None, extra_condition=None, maxiter=10)[источник]#
Найти альфа, удовлетворяющую строгим условиям Вульфа.
- Параметры:
- fвызываемая функция f(x,*args)
Целевая функция.
- myfprimecallable f’(x,*args)
Градиент целевой функции.
- xkndarray
Начальная точка.
- pkndarray
Направление поиска. Направление поиска должно быть направлением спуска для сходимости алгоритма.
- gfkndarray, необязательно
Значение градиента для x=xk (где xk — текущая оценка параметра). Будет пересчитано, если опущено.
- old_fvalfloat, опционально
Значение функции для x=xk. Будет пересчитано, если опущено.
- old_old_fvalfloat, опционально
Значение функции для точки, предшествующей x=xk.
- argsкортеж, необязательный
Дополнительные аргументы, передаваемые в целевую функцию.
- c1float, опционально
Параметр для правила условия Армихо.
- c2float, опционально
Параметр для правила условия кривизны.
- amaxfloat, опционально
Максимальный размер шага
- extra_conditionвызываемый объект, необязательный
Вызываемый объект вида
extra_condition(alpha, x, f, g)возвращая булево значение. Аргументы — предлагаемый шагalphaи соответствующийx,fиgзначения. Поиск по линии принимает значениеalphaтолько если этот вызываемый объект возвращаетTrue. Если вызываемый объект возвращаетFalseДля длины шага алгоритм продолжит работу с новыми итерациями. Вызываемый объект вызывается только для итераций, удовлетворяющих строгим условиям Вольфа.- maxiterint, необязательный
Максимальное количество итераций для выполнения.
- Возвращает:
- alphafloat или None
Alpha, для которого
x_new = x0 + alpha * pk, или None, если алгоритм поиска по линии не сошелся.- fcint
Количество выполненных оценок функции.
- gcint
Количество выполненных оценок градиента.
- new_fvalfloat или None
Новое значение функции
f(x_new)=f(x0+alpha*pk), или None, если алгоритм поиска по линии не сошелся.- old_fvalfloat
Старое значение функции
f(x0).- новый_наклонfloat или None
Локальный наклон вдоль направления поиска при новом значении
, или None, если алгоритм поиска по линии не сошелся.pk>
Примечания
Использует алгоритм линейного поиска для обеспечения строгих условий Вольфа. См. Wright и Nocedal, 'Численная оптимизация', 1999, стр. 59-61.
Направление поиска pk должно быть направлением спуска (например,
-myfprime(xk)) для нахождения длины шага, удовлетворяющей строгим условиям Вулфа. Если направление поиска не является направлением спуска (например,myfprime(xk)), тогда alpha, new_fval, и новый_наклон будет None.Примеры
>>> import numpy as np >>> from scipy.optimize import line_search
Определены целевая функция и её градиент.
>>> def obj_func(x): ... return (x[0])**2+(x[1])**2 >>> def obj_grad(x): ... return [2*x[0], 2*x[1]]
Мы можем найти альфа, удовлетворяющую строгим условиям Вулфа.
>>> start_point = np.array([1.8, 1.7]) >>> search_gradient = np.array([-1.0, -1.0]) >>> line_search(obj_func, obj_grad, start_point, search_gradient) (1.0, 2, 1, 1.1300000000000001, 6.13, [1.6, 1.4])