本文簡要介紹 python 語言中 scipy.optimize.fmin_cobyla
的用法。
用法:
scipy.optimize.fmin_cobyla(func, x0, cons, args=(), consargs=None, rhobeg=1.0, rhoend=0.0001, maxfun=1000, disp=None, catol=0.0002, *, callback=None)#
使用線性逼近約束優化 (COBYLA) 方法最小化函數。此方法包裝了算法的 FORTRAN 實現。
- func: 可調用的
最小化的函數。以 func(x, *args) 的形式。
- x0: ndarray
初步猜測。
- cons: 序列
約束函數;必須都是
>=0
(如果隻有 1 個約束,則為單個函數)。每個函數都帶有參數x作為其第一個參數,它可以返回單個數字或數字數組或列表。- args: 元組,可選
傳遞給函數的額外參數。
- consargs: 元組,可選
傳遞給約束函數的額外參數(默認為 None 意味著使用與傳遞給 func 相同的額外參數)。使用
()
沒有額外的參數。- rhobeg: 浮點數,可選
對變量進行合理的初始更改。
- rhoend: 浮點數,可選
優化中的最終準確性(不能精確保證)。這是信任區域大小的下限。
- disp: {0, 1, 2, 3},可選
控製輸出頻率; 0 表示沒有輸出。
- maxfun: 整數,可選
函數評估的最大數量。
- catol: 浮點數,可選
對違反約束的絕對容忍度。
- callback: 可調用的,可選的
每次迭代後調用,如
callback(x)
,其中x
是當前參數向量。
- x: ndarray
最小化 f 的論證。
參數 ::
返回 ::
注意:
該算法基於對目標函數和每個約束的線性逼近。我們簡要介紹一下算法。
假設函數在 k 個變量上被最小化。在第 j 次迭代中,該算法有 k+1 個點 v_1、…、v_(k+1)、一個近似解 x_j 和一個半徑 RHO_j。 (即,線性加一個常數)對目標函數和約束函數的近似,使得它們的函數值與 k+1 點 v_1,..,v_(k+1) 的線性近似一致。這給出了一個要求解的線性程序(其中約束函數的線性近似被約束為非負)。
然而,線性逼近可能隻是當前單純形附近的良好逼近,因此線性規劃有進一步的要求,即將變為 x_(j+1) 的解必須在 x_j 的 RHO_j 內。 RHO_j 隻會減少,不會增加。最初的 RHO_j 是 rhobeg,最終的 RHO_j 是 rhoend。通過這種方式,COBYLA 的迭代就像一個信任域算法。
此外,線性程序可能不一致,或者近似值可能會帶來較差的改進。有關如何解決這些問題以及如何更新點 v_i 的詳細信息,請參閱源代碼或下麵的引用。
參考:
鮑威爾 M.J.D. (1994),“通過線性插值對目標函數和約束函數進行建模的直接搜索優化方法。”,優化和數值分析進展,編輯。 S. Gomez 和 J-P Hennart, Kluwer Academic (Dordrecht),第 51-67 頁
鮑威爾 M.J.D. (1998),“優化計算的直接搜索算法”,Acta Numerica 7, 287-336
鮑威爾 M.J.D. (2007),“無導數優化算法的觀點”,劍橋大學技術報告 DAMPP 2007/NA03
例子:
在約束 x**2 + y**2 < 1 和 y > 0 的情況下,最小化目標函數 f(x,y) = x*y:
>>> def objective(x): ... return x[0]*x[1] ... >>> def constr1(x): ... return 1 - (x[0]**2 + x[1]**2) ... >>> def constr2(x): ... return x[1] ... >>> from scipy.optimize import fmin_cobyla >>> fmin_cobyla(objective, [0.0, 0.1], [constr1, constr2], rhoend=1e-7) array([-0.70710685, 0.70710671])
確切的解決方案是 (-sqrt(2)/2, sqrt(2)/2)。
相關用法
- Python SciPy optimize.fmin_cg用法及代碼示例
- Python SciPy optimize.fmin_bfgs用法及代碼示例
- Python SciPy optimize.fmin_slsqp用法及代碼示例
- Python SciPy optimize.fmin_tnc用法及代碼示例
- Python SciPy optimize.fmin_powell用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.fminbound用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
- Python SciPy optimize.fixed_point用法及代碼示例
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.line_search用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.minimize_scalar用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- 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.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.fmin_cobyla。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。