SHGO算法
SHGO,即simplicial homology global optimize,來自2018年的文章,是一種基于組合拓?fù)鋵W(xué)的優(yōu)化方法,是一個(gè)非常新的算法。
這種算法適用于CDFO(constrained deriviate free optimisation)問題,所謂無導(dǎo)數(shù)優(yōu)化,就是把目標(biāo)函數(shù)當(dāng)作黑箱子處理,而無法獲取其一階導(dǎo)數(shù),自然也不能通過導(dǎo)數(shù)來判斷優(yōu)化方向。而約束則是框定了優(yōu)化參數(shù)的選擇范圍,可以有等式約束和不等式約束。
SHGO算法建立在同調(diào)群的理論之上,關(guān)鍵概念是同調(diào)群增長,這玩意太數(shù)學(xué)了,屬于連插圖都很難看懂的程度
所以就不詳細(xì)介紹了,總之其函數(shù)定義如下
scipy.optimize.shgo(func, bounds, args=(), constraints=None, n=100, iters=1, callback=None, minimizer_kwargs=None, options=None, sampling_method='simplicial', *, workers=1)
參數(shù)說明
在shgo函數(shù)中,func, bounds, args
是我們的老朋友了,func(x, *args)
是待優(yōu)化函數(shù),args
即為shgo中輸入的args
,bounds
表示變量范圍。
其他參數(shù)含義如下
- constraints 約束條件,以字典或者字典列表的形式被調(diào)用。
- n 抽樣點(diǎn)數(shù),一般是維度的二倍加1
- iters 迭代次數(shù)
- callback 每次迭代之后的回調(diào)函數(shù),可以用來存儲(chǔ)或打印單次迭代結(jié)果
- minimizer_kwargs 傳遞給minimize函數(shù)的額外的參數(shù)
- options是一個(gè)參數(shù)字典,包括一些常用的參數(shù)設(shè)置
- sampling_method 抽樣方法
- workers 線程數(shù)
測試
拋開理論不談,算法具體行不行,還是得跑個(gè)分才知道,下面仍以形如 y = ∑ i ( i + 1 ) cos ? i x i 5 y=\sum_i(i+1)\cos\frac{ix_i}{5} y=∑i?(i+1)cos5ixi??的非線性函數(shù)做測試
import numpy as np
from scipy.optimize import shgo
def test(xs):
_sum = 0.0
for i in range(len(xs)):
_sum = _sum + np.cos((xs[i]*i)/5)*(i+1)
return _sum
bounds = [[0,15] for _ in range(5)]
ret = shgo(test, bounds)
msg = f"全局最小值" + ", ".join([f"{x:.4f}" for x in ret.x])
msg += f"\nf(x)={ret.fun:.4f}"
print(msg)
優(yōu)化結(jié)果為
全局最小值7.5000, 15.0000, 7.8540, 5.2360, 3.9270
f(x)=-12.9800文章來源:http://www.zghlxwxcb.cn/news/detail-634646.html
這個(gè)結(jié)論與其他優(yōu)化算法得到的結(jié)果相當(dāng),但shgo算法在優(yōu)化時(shí)有個(gè)問題,即bound的下界必須大于0,否則無法得到正常的優(yōu)化結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-634646.html
到了這里,關(guān)于scipy求解約束無導(dǎo)數(shù)優(yōu)化問題:SHGO算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!