本文簡要介紹 python 語言中 scipy.optimize.minimize_scalar
的用法。
用法:
scipy.optimize.minimize_scalar(fun, bracket=None, bounds=None, args=(), method=None, tol=None, options=None)#
一個變量的標量函數的局部最小化。
- fun: 可調用的
目標函數。標量函數,必須返回一個標量。
- bracket: 順序,可選
對於方法‘brent’ 和‘golden’,
bracket
定義包圍間隔並且是必需的。滿足xa < xb < xc
和func(xb) < func(xa) and func(xb) < func(xc)
的三元組(xa, xb, xc)
或一對(xa, xb)
用作下坡括號搜索的初始點(請參閱scipy.optimize.bracket
)。最小化器res.x
不一定滿足xa <= res.x <= xb
。- bounds: 順序,可選
對於方法‘bounded’,邊界是強製性的,並且必須具有與優化邊界相對應的兩個有限項。
- args: 元組,可選
傳遞給目標函數的額外參數。
- method: str 或可調用,可選
求解器的類型。應該是以下之一:
如果提供了邊界,則默認值為“Bounded”,否則為“Brent”。有關每個求解器的詳細信息,請參閱“注釋”部分。
- tol: 浮點數,可選
容忍終止。如需詳細控製,請使用solver-specific 選項。
- options: 字典,可選
求解器選項字典。
- maxiter int
Maximum number of iterations to perform.
- disp bool
Set to True to print convergence messages.
有關solver-specific 選項,請參見
show_options
。
- res: OptimizeResult
優化結果表示為
OptimizeResult
對象。重要的屬性是:x
解決方案數組,success
指示優化器是否成功退出的布爾標誌和說明終止原因的message
。有關其他屬性的說明,請參見OptimizeResult
。
參數 ::
返回 ::
注意:
本節介紹可通過 ‘method’ 參數選擇的可用求解器。默認方法是
"Bounded"
布倫特法如果界限被傳遞且無界"Brent"
否則。Brent 方法使用 Brent 算法 [1] 來尋找局部最小值。該算法在可能的情況下使用反拋物線插值來加速黃金分割法的收斂。
方法金的使用黃金分割搜索技術[1]。它使用類似二分法來減少括號內的間隔。通常最好使用布倫特方法。
Method Bounded 可以執行有界最小化 [2] [3]。它使用布倫特方法來查找區間 x1 < xopt < x2 中的局部最小值。
請注意,除非提供有效的
bracket
三元組,否則 Brent 和 Golden 方法不能保證成功。如果找不到 three-point 括號,請考慮scipy.optimize.minimize
。此外,所有方法僅用於局部最小化。當感興趣的函數具有多個局部最小值時,請考慮全局優化。自定義最小化器
傳遞自定義最小化方法可能很有用,例如在使用某些庫前端到 minimize_scalar 時。您可以簡單地將可調用對象作為
method
參數傳遞。可調用的被稱為
method(fun, args, **kwargs, **options)
其中kwargs
對應於傳遞給的任何其他參數scipy.optimize.minimize(如scipy.optimize.bracket,tol等),除了選項dict,其內容也傳遞為方法成對成對的參數。該方法應返回一個OptimizeResult
對象。提供的方法callable 必須能夠接受(並且可能忽略)任意參數;接受的參數集scipy.optimize.minimize可能會在未來的版本中擴展,然後這些參數將傳遞給該方法。您可以在 scipy.optimize 教程中找到一個示例。
參考:
[1] (1,2)Press, W.、S.A. Teukolsky、W.T. Vetterling 和 B.P.弗蘭納裏。 C. 劍橋大學出版社的數字食譜。
[2]福賽斯 (G.E.)、M.A. 馬爾科姆 (M.A. Malcolm) 和 C.B.莫勒 (C.B. Moler)。 “數學計算的計算機方法。” Prentice-Hall自動計算係列259(1977)。
[3]布倫特,理查德·P。無導數的最小化算法。快遞公司,2013 年。
例子:
考慮最小化以下函數的問題。
>>> def f(x): ... return (x - 2) * x * (x + 2)**2
使用布倫特方法,我們發現局部最小值為:
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.fun -9.9149495908
最小化為:
>>> res.x 1.28077640403
使用有界方法,我們找到具有指定邊界的局部最小值:
>>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded') >>> res.fun # minimum 3.28365179850e-13 >>> res.x # minimizer -2.0000002026
相關用法
- Python SciPy optimize.minimize用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.line_search用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.NonlinearConstraint用法及代碼示例
- Python SciPy optimize.KrylovJacobian用法及代碼示例
- Python SciPy optimize.toms748用法及代碼示例
- Python SciPy optimize.linprog_verbose_callback用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- 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用法及代碼示例
- Python SciPy optimize.fixed_point用法及代碼示例
- Python SciPy optimize.rosen_hess用法及代碼示例
- Python SciPy optimize.nnls用法及代碼示例
- Python SciPy optimize.broyden1用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.minimize_scalar。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。