本文簡要介紹 python 語言中 scipy.optimize.line_search
的用法。
用法:
scipy.optimize.line_search(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)#
找到滿足強 Wolfe 條件的 alpha。
- f: 可調用 f(x,*args)
目標函數。
- myfprime: 可調用 f'(x,*args)
目標函數梯度。
- xk: ndarray
初始點。
- pk: ndarray
搜索方向。搜索方向必須是算法收斂的下降方向。
- gfk: ndarray,可選
x=xk 的梯度值(xk 是當前參數估計值)。如果省略,將重新計算。
- old_fval: 浮點數,可選
x=xk 的函數值。如果省略,將重新計算。
- old_old_fval: 浮點數,可選
x=xk 之前的點的函數值。
- args: 元組,可選
傳遞給目標函數的附加參數。
- c1: 浮點數,可選
Armijo 條件規則的參數。
- c2: 浮點數,可選
曲率條件規則的參數。
- amax: 浮點數,可選
最大步長
- extra_condition: 可調用的,可選的
extra_condition(alpha, x, f, g)
形式的可調用返回布爾值。參數是建議的步驟alpha
和相應的x
、f
和g
值。僅當此可調用返回True
時,行搜索才接受alpha
的值。如果可調用返回False
的步長,算法將繼續進行新的迭代。僅在滿足強 Wolfe 條件的迭代時才調用可調用對象。- maxiter: 整數,可選
要執行的最大迭代次數。
- alpha: 浮點數或無
x_new = x0 + alpha * pk
的 Alpha 或 None 如果線搜索算法沒有收斂。- fc: int
進行的函數評估次數。
- gc: int
進行的梯度評估次數。
- new_fval: 浮點數或無
新函數值
f(x_new)=f(x0+alpha*pk)
,如果線搜索算法未收斂,則為 None。- old_fval: 浮點數
舊函數值
f(x0)
。- new_slope: 浮點數或無
在新值
<myfprime(x_new), pk>
處沿搜索方向的局部斜率,如果線搜索算法未收斂,則為 None。
參數 ::
返回 ::
注意:
使用線搜索算法強製執行強 Wolfe 條件。參見 Wright 和 Nocedal,“數值優化”,1999 年,第 59-61 頁。
搜尋方向PK必須是下降方向(例如
-myfprime(xk)
)找到滿足強沃爾夫條件的步長。如果搜索方向不是下降方向(例如myfprime(xk)
), 然後α,new_fval, 和new_slope將是無。例子:
>>> 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]]
我們可以找到滿足強 Wolfe 條件的 alpha。
>>> 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])
相關用法
- Python SciPy optimize.linear_sum_assignment用法及代碼示例
- Python SciPy optimize.linprog_verbose_callback用法及代碼示例
- Python SciPy optimize.linprog用法及代碼示例
- Python SciPy optimize.least_squares用法及代碼示例
- Python SciPy optimize.leastsq用法及代碼示例
- Python SciPy optimize.lsq_linear用法及代碼示例
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.minimize_scalar用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.NonlinearConstraint用法及代碼示例
- Python SciPy optimize.KrylovJacobian用法及代碼示例
- Python SciPy optimize.toms748用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
- Python SciPy optimize.brute用法及代碼示例
- Python SciPy optimize.newton用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
- Python SciPy optimize.Bounds用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.line_search。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。