1. 算法簡介
(以下描述,均不是學(xué)術(shù)用語,僅供大家快樂的閱讀)
鴿群算法是根據(jù)鴿子依據(jù)磁場而擁有高超識途技巧提出的優(yōu)化算法。算法提出于2014年(到底是08年還是14年凑术?引用顯示08),也算有些年頭了所意。這也是一個由中國研究者提出的優(yōu)化算法淮逊,可喜可賀。
鴿群算法中的個體和粒子群算法中的粒子結(jié)構(gòu)類似扶踊,都由位置和速度組成泄鹏。在鴿群算法中,鴿子的飛行行為根據(jù)迭代次數(shù)分為了兩個階段秧耗。簡單來說备籽,階段一向著當(dāng)前最優(yōu)位置飛行,階段二向著自身周圍飛行分井。下面將詳細描述其飛行步驟
2. 算法流程
本次的主角就是鴿子了尺锚。
鴿群中鴿子數(shù)量為N,每只鴿子的位置為珠闰,速度為,該位置的優(yōu)劣由其適應(yīng)度函數(shù)計算得出缩麸。
在鴿群算法中铸磅,鴿子的行為依照迭代次數(shù)劃分為兩個階段赡矢,階段1占整個迭代次數(shù)的比例為NcRate杭朱,一般的NcRate取值為0.75阅仔。
2.1 階段1
迭代次數(shù)在代內(nèi)為階段1。
在階段1中弧械,需要根據(jù)鴿子的位置與目標(biāo)八酒,計算出鴿子的速度。當(dāng)前位置加上速度就得到了新的位置刃唐。
其具體實現(xiàn)與粒子群相似羞迷,先計算出新的速度,在通過速度和位置得到新位置画饥。公式(1)中R為一個常量衔瓮,一般取值為0.2,iter為當(dāng)前迭代次數(shù)抖甘,rand為[0,1]內(nèi)的均勻隨機數(shù)热鞍。可以看出衔彻,階段1中的速度隨著迭代次數(shù)增加會越來越依賴于和最優(yōu)位置的距離薇宠。然而式(1)中e的指數(shù)部分是一個絕對數(shù)值而不是比值,當(dāng)最大迭代次數(shù)不同時艰额,該公式的效果會有較大的差異澄港。故公式(1)中e的指數(shù)應(yīng)改為iter與的比值,當(dāng)然需要找到適應(yīng)的系數(shù)來進行調(diào)優(yōu)柄沮。
2.2階段2
階段2為迭代次數(shù)大于的部分回梧。
階段2相對復(fù)雜,首先需要對群體進行排序祖搓,將群體均分為兩組狱意,較優(yōu)的那組保持位置不變,同時提供其位置棕硫、適應(yīng)度值作為參數(shù)髓涯,供較差的那組確定它們的新位置所在。
公式(3)求出了較優(yōu)的那部分鴿子的重心所在哈扮,公式(4)則是讓較差的部分鴿子向著較優(yōu)部分鴿子的重心隨機飛行了一段距離纬纪。
2.3流程圖
文章沒有說明鴿群算法是否需要使用貪心算法,下面會各自進行一次實驗看看效果滑肉。
3. 實驗
適應(yīng)度函數(shù)包各。
實驗一: 無貪心步驟
問題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
最大迭代次數(shù) | 50 |
取值范圍 | (-100,100) |
實驗次數(shù) | 10 |
NcRate | 0.75 |
R | 0.2 |
從圖像可以看出靶庙,算法的收斂速度和精度都不錯问畅。但是可以明顯注意到在40代左右,聚集于右下最優(yōu)位置附近的個體會有一個向中心聚集的過程,數(shù)了一下护姆,剛好是10個個體矾端。這應(yīng)該是階段2中較差的部分個體更新位置導(dǎo)致的。
本次試驗階段2時卵皂,可以認為其適應(yīng)度函數(shù)幾乎等于0秩铆,個體位置幾乎到達90。則Nc計算公式如下:
可知個體會向著9處前進灯变,并最終收斂到此處殴玛。可以看出階段2中公式(3)設(shè)計欠妥(當(dāng)然添祸,當(dāng)最優(yōu)解在0處時滚粟,精度會有很大的提升)。公式(3)應(yīng)去除分母中求和前的N/2刃泌。
值 | |
---|---|
最優(yōu)值 | 1.0852653759188143E-16 |
最差值 | 0.004604311219220796 |
平均值 | 9.028977620358627E-4 |
從結(jié)果來看凡壤,鴿群算法還不錯,但是性能好像不太穩(wěn)定蔬咬,畢竟只用了階段1就計算出了結(jié)果鲤遥,情有可原。
下面看看添加了貪心算法的實驗林艘。
實驗二: 有貪心步驟
圖像好像比實驗一好了一些盖奈,但是并不能說明問題。實驗一中存在的問題在實驗二中仍然存在狐援,只是由于貪心步驟的緣故钢坦,鴿群無法飛到差于自己的位置,階段2仍然沒有任何作用啥酱。
值 | |
---|---|
最優(yōu)值 | 4.457111736304401E-16 |
最差值 | 4.637206866491525E-4 |
平均值 | 5.506734307008853E-5 |
實驗結(jié)果好像好了一丟丟爹凹,但幾乎可以認為沒有變化。
4. 總結(jié)
鴿群算法是受鴿子依據(jù)磁場識途的特性啟發(fā)而提出的優(yōu)化算法镶殷。算法的結(jié)構(gòu)簡單禾酱,主要分為兩個階段,其中階段1為向著最優(yōu)位置前進绘趋,階段2則是較差個體向著較優(yōu)群體中心前進(bushi)颤陶。
從實驗中可以看出,原算法的公式設(shè)計有些許缺陷陷遮,進行修改后應(yīng)該能夠得到非常不錯的結(jié)果滓走。
參考文獻
Haibin, Duan, Peixin, et al. Pigeon-inspired optimization: a new swarm intelligence optimizer for air robot path planning[J]. International Journal of Intelligent Computing & Cybernetics, 2008. 提取碼:wjok
以下指標(biāo)純屬個人yy,僅供參考
指標(biāo) | 星數(shù) |
---|---|
復(fù)雜度 | ★☆☆☆☆☆☆☆☆☆ |
收斂速度 | ★★★☆☆☆☆☆☆☆ |
全局搜索 | ★★★☆☆☆☆☆☆☆ |
局部搜索 | ★★★★☆☆☆☆☆☆ |
優(yōu)化性能 | ★★★★☆☆☆☆☆☆ |
跳出局部最優(yōu) | ★☆☆☆☆☆☆☆☆☆ |
改進點 | ★★★★☆☆☆☆☆☆ |