當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy optimize.line_search用法及代碼示例


本文簡要介紹 python 語言中 scipy.optimize.line_search 的用法。

找到滿足強 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 和相應的 xfg 值。僅當此可調用返回 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])

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.line_search。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。