本文簡要介紹 python 語言中 scipy.optimize.dual_annealing
的用法。
用法:
scipy.optimize.dual_annealing(func, bounds, args=(), maxiter=1000, minimizer_kwargs=None, initial_temp=5230.0, restart_temp_ratio=2e-05, visit=2.62, accept=-5.0, maxfun=10000000.0, seed=None, no_local_search=False, callback=None, x0=None)#
使用雙重退火求函數的全局最小值。
- func: 可調用的
要最小化的目標函數。必須采用
f(x, *args)
的形式,其中x
是一維數組形式的參數,而args
是完全指定函數所需的任何其他固定參數的元組。- bounds: 序列或
Bounds
變量的界限。有兩種方法可以指定邊界:
Bounds
類的實例。序列
(min, max)
中每個元素的對x.
- args: 元組,可選
完全指定目標函數所需的任何其他固定參數。
- maxiter: 整數,可選
全局搜索迭代的最大次數。默認值為 1000。
- minimizer_kwargs: 字典,可選
要傳遞給本地最小化器(
minimize
)的額外關鍵字參數。一些重要的選項可能是:method
用於使用最小化方法,args
用於目標函數附加參數。- initial_temp: 浮點數,可選
初始溫度,使用較高的值有助於更廣泛地搜索能量景觀,允許 dual_annealing 逃離它所困的局部最小值。默認值為 5230。範圍為 (0.01, 5.e4]。
- restart_temp_ratio: 浮點數,可選
在退火過程中,溫度在下降,當達到
initial_temp * restart_temp_ratio
時,觸發重新退火過程。比率的默認值為 2e-5。範圍是 (0, 1)。- visit: 浮點數,可選
訪問分布參數。默認值為 2.62。值越高,訪問分布的尾部就越重,這使得算法跳到更遠的區域。取值範圍為 (1, 3]。
- accept: 浮點數,可選
驗收分布參數。它用於控製接受的概率。接受參數越低,接受的概率越小。默認值為 -5.0,範圍為 (-1e4, -5]。
- maxfun: 整數,可選
目標函數調用次數的軟限製。如果算法處於局部搜索的中間,將超過這個數字,算法將在局部搜索完成後停止。默認值為 1e7。
- seed: {無,int,
numpy.random.Generator
,numpy.random.RandomState
},可選 如果種子是無(或np.random), 這
numpy.random.RandomState
使用單例。如果種子是一個 int,一個新的RandomState
使用實例,播種種子.如果種子已經是一個Generator
或者RandomState
實例然後使用該實例。指定種子用於可重複的最小化。用這個種子生成的隨機數隻影響訪問分布函數和新坐標的生成。- no_local_search: 布爾型,可選
如果 no_local_search 設置為 True,則將執行傳統的廣義模擬退火,而不應用局部搜索策略。
- callback: 可調用的,可選的
帶有簽名
callback(x, f, context)
的回調函數,將為找到的所有最小值調用該函數。x
和f
是最近找到的最小值的坐標和函數值,context
的值在[0,1,2],含義如下:0: minimum detected in the annealing process.
1: detection occurred in the local search process.
2: detection done in the dual annealing process.
如果回調實現返回 True,則算法將停止。
- x0: ndarray,形狀(n,),可選
單個 N-D 起點的坐標。
- res: OptimizeResult
優化結果表示為
OptimizeResult
對象。重要的屬性是:x
解決方案數組,fun
解決方案處的函數值,以及說明終止原因的message
。有關其他屬性的說明,請參見OptimizeResult
。
參數 ::
返回 ::
注意:
該函數實現了雙重退火優化。這種源自 [3] 的隨機方法結合了 CSA(經典模擬退火)和 FSA(快速模擬退火)[1] [2] 的推廣,以及在已接受位置上應用局部搜索的策略 [4]。 [5] 中說明了相同算法的替代實現,[6] 中提供了基準。這種方法引入了一種先進的方法來改進廣義退火過程找到的解決方案。該算法使用扭曲的Cauchy-Lorentz訪問分布,其形狀由參數 控製
其中 是人工時間。該訪問分布用於生成變量 在人工溫度 下的試跳距離 。
從起點出發,調用訪問分布函數後,接受概率計算如下:
其中 是接受參數。對於 ,將零接受概率分配給以下情況
人工溫度 根據
其中 是訪問參數。
參考:
[1]Tsallis C. Boltzmann-Gibbs 統計數據的可能概括。統計物理學雜誌, 52, 479-487 (1998)。
[2]Tsallis C,Stariolo DA。廣義模擬退火。物理學 A, 233, 395-406 (1996)。
[3]向Y,孫DY,範W,龔XG。廣義模擬退火算法及其在湯姆遜模型中的應用。物理快報 A, 233, 216-220 (1997)。
[4]向Y,龔XG.廣義模擬退火的效率。物理評論 E, 62, 4473 (2000)。
[5]向 Y、Gubian S、Suomela B、Hoeng J. 用於高效全局優化的廣義模擬退火:R 的GenSA 包。R 雜誌,第 5/1 卷(2013 年)。
[6]Mullen, K. R. 統計軟件雜誌中的連續全局優化,60(6), 1 - 45, (2014)。 DOI:10.18637/jss.v060.i06
例子:
以下示例是一個 10 維問題,具有許多局部最小值。涉及的函數稱為 Rastrigin (https://en.wikipedia.org/wiki/Rastrigin_function)
>>> import numpy as np >>> from scipy.optimize import dual_annealing >>> func = lambda x: np.sum(x*x - 10*np.cos(2*np.pi*x)) + 10*np.size(x) >>> lw = [-5.12] * 10 >>> up = [5.12] * 10 >>> ret = dual_annealing(func, bounds=list(zip(lw, up))) >>> ret.x array([-4.26437714e-09, -3.91699361e-09, -1.86149218e-09, -3.97165720e-09, -6.29151648e-09, -6.53145322e-09, -3.93616815e-09, -6.55623025e-09, -6.05775280e-09, -5.00668935e-09]) # random >>> ret.fun 0.000000
相關用法
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.differential_evolution用法及代碼示例
- Python SciPy optimize.direct用法及代碼示例
- 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.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.milp用法及代碼示例
- 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用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.dual_annealing。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。