“?本期采用PYTHON代碼實現(xiàn)14種常見的和不常見的混沌映射用于優(yōu)化群智能算法,作者寫好了一個Chaos類,方便調(diào)用,代碼可一鍵切換,可用于所有智能算法優(yōu)化,本篇文章以鯨魚和蜣螂算法為例進行介紹”
本文涉及14種混沌映射算法,用于在初始化智能算法粒子時使用,14種混沌映射算法包括:Tent映射、Fuch映射、Henon映射、SPM映射、Logistic映射、Cubic映射、chebyshev映射、Piecewise映射、sinusoidal映射、Sine映射,ICMIC映射, Circle映射,Bernoulli映射,Singer映射。關(guān)于每個方法映射的原理,本文就不再一一介紹。
?
01
—
選擇混沌映射有什么用
經(jīng)實驗證明,采用混沌映射產(chǎn)生隨機數(shù)的適應(yīng)度函數(shù)值有明顯提高,用混沌映射取代常規(guī)的均勻分布的隨機數(shù)發(fā)生器可以得到更好的結(jié)果,特別是搜索空間中有許多局部解時,更容易搜索到全局最優(yōu)解。一句話來講就是:混沌映射可以增強粒子的隨機性和多樣性。
02
—
混沌映射可視化圖片
采用python代碼,實現(xiàn)對混沌映射的繪圖。以SPM映射和Fuch映射為例,展示一下結(jié)果圖。當(dāng)然這個用肉眼也確實看不出太大區(qū)別,其他12種混沌映射畫出來的結(jié)果都和這個差不多,就不一一展示了。
繪圖代碼如下:
from?chaos?import?Chaos #作者自己寫的一個class
import?numpy?as?np
import?math
from?matplotlib?import?pyplot?as?plt
dim?=?1000
lb?=?np.zeros([dim,1])
ub?=?np.ones([dim,1])
chaos_?=?Chaos(1,?dim,?lb,?ub)??#?生成一個Chaos類
'''
????????可選函數(shù)有:tent_initial,fuch_initial,sine_initial,singer_initial,henon_initial,cubic_initial,
????????????????icmic_initial,bernoulli_initial,chebyshev_initial,circle_initial,logistic_initial,
????????????????piecewise_initial,sinusoidal_initial?SPM_initial
????????分別對應(yīng)相應(yīng)的混沌映射!
????'''
poss_sols?=?Chaos.fuch_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
'''?
????繪制混沌映射圖
'''
x?=?np.array(range(0,dim)).reshape(1,-1)
plt.scatter(x,poss_sols,s=2)
plt.title('Fuch?Chaos?Map')
plt.xlabel('Sample?points')
plt.ylabel('Chaos?value')
plt.grid()
plt.show()
可以看到,在代碼中調(diào)用了作者自己寫的一個Chaos類,有了這個類,大家就可以像調(diào)用python庫一樣,調(diào)用不同的混沌映射方法。
03
—
14種混沌映射優(yōu)化鯨魚算法
以SPM、Fuch、Tent混沌映射為例,在CEC2005,F(xiàn)2函數(shù)dim=50。上進行測試。采用不同混沌映射優(yōu)化鯨魚算法結(jié)果如下:
SPM混沌映射的WOA算法:
修改代碼為下即可。
poss_sols?=?Chaos.SPM_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
Fuch混沌映射的WOA算法:
修改代碼為下即可。
poss_sols?=?Chaos.fuch_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
Tent映射
修改代碼為下即可。
poss_sols?=?Chaos.tent_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
14種混沌映射優(yōu)化蜣螂算法
以Icmic、Fuch、Sinusoida混沌映射為例,在CEC2022,F(xiàn)1函數(shù)dim=20。上進行測試。采用不同混沌映射優(yōu)化蜣螂算法結(jié)果如下:
Icmic混沌映射的DBO算法:修改代碼為下即可。
X=?Chaos.icmic_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
Fuch混沌映射的DBO算法:
修改代碼為下即可。
X=?Chaos.fuch_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
修改代碼為下即可。
X=?Chaos.sinusoidal_initial(chaos_)??#?把生成的chaos_帶入具體的混沌映射函數(shù)即可!
04
—
結(jié)果分析
????可以看到,加了混沌映射后的函數(shù),在算法尋優(yōu)的前期,往往能更快的找到較小的值。這說明混沌映射起到了作用!? ?
? ? 這里要特別說明一下,混沌映射優(yōu)化智能算法,從理論上來講,只是將初始化的粒子變得更隨機更多樣了,這樣確實是可以加速算法的收斂速度,但是,一旦循環(huán)開始,剩下的就沒有混沌優(yōu)化什么事情了。
????換句話說,就是如果我直接用rand函數(shù)生成一堆粒子,也是有一定概率比混沌優(yōu)化生成的粒子更好的,雖然這個概率不大,但確確實實是有的,所以如果偶爾出現(xiàn)混沌優(yōu)化的效果不好使,那也不要氣餒,畢竟混沌優(yōu)化只是優(yōu)化智能算法的一種手段,大家可以結(jié)合別的手段一起優(yōu)化。
05
—
代碼目錄
其中,chaos.py是作者寫好的14種混沌映射的類。在主函數(shù)“14種混沌映射DBO.py”方便調(diào)用,也可方便用于別的算法改進中。plotchaos.py文件是用來繪制混沌映射圖的。chaos的英文名是混亂,感覺這么命名還是挺有道理的哈哈,這樣大家就可以一鍵更換了,而且很容易擴展到其他代碼上。
友情提示:如果說,大家在用混沌映射優(yōu)化時效果不好,可以手動修改chaos.m中的每個混沌映射方法的混沌系數(shù)。
本期代碼獲取鏈接:https://mbd.pub/o/bread/ZZuXkp1u文章來源:http://www.zghlxwxcb.cn/news/detail-850199.html
或點擊下方卡片獲取文章來源地址http://www.zghlxwxcb.cn/news/detail-850199.html
到了這里,關(guān)于14種混沌映射,python代碼,可自由切換,以鯨魚和蜣螂算法為例,方便應(yīng)用于所有算法...的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!