1. 萬有引力算法簡介
(以下描述,均不是學(xué)術(shù)用語,僅供大家快樂的閱讀)
萬有引力算法(Gravitational Search Algorithm)是受物體之間的萬有引力啟發(fā)而提出的算法。算法提出于2008(2009)年,時間不長,不過相關(guān)的文章和應(yīng)用已經(jīng)相對較多,也有不少的優(yōu)化改進(jìn)方案。
萬有引力算法中,每一個物體的位置代表了一個可行解,而物體的質(zhì)量則反映了該位置的好壞,位置越好的物體的質(zhì)量越大,反之物體的質(zhì)量越?。ㄙ|(zhì)量由適應(yīng)度值計(jì)算出,不是直接相等)。物體在解空間中的運(yùn)動方式由其他物體的引力決定,質(zhì)量越大的物體,在同等引力作用下的加速度較小,所以單位時間內(nèi)的速度也相對較小,位移距離較短,反之加速度和速度都較大,位移距離較長。故可以簡單的認(rèn)為,位置越優(yōu)的個體的移動速度越慢,位置越差的個體的移動速度越快。
2. 算法流程
萬物之間皆有萬有引力,不過在我們談到萬有引力之時,對象大多是天體,否則萬有引力太小可以忽略不計(jì)。所有這次我們的主角就是天體了。(總不可能是蘋果吧)。
每一個天體都有個屬性:位置X,質(zhì)量M,加速度A,以及速度V,還有適應(yīng)度值F。
在D維空間內(nèi)有N個天體,其位置為
,加速度
,速度
,其適應(yīng)度值為
。
2.1計(jì)算天體的質(zhì)量
第i個天體的質(zhì)量則是根據(jù)其適應(yīng)度值計(jì)算得出:
其中M為天體的質(zhì)量在群體重質(zhì)量中的占比, 分別表示全局最差天體的適應(yīng)度值和全局最優(yōu)個體的適應(yīng)度值。
可以看出,處于最優(yōu)位置的天體的質(zhì)量m為1,最差位置的天體的質(zhì)量m為0。當(dāng)最優(yōu)天體和最差天體重合時,所有的天體的質(zhì)量m都為1。
2.2計(jì)算天體的加速度
由萬有引力計(jì)算公式和加速度公式可以計(jì)算出當(dāng)前天體收到另一個天體萬有引力而產(chǎn)生的加速度:
其中R表示第i個天體和第j個天體之間的歐式距離,aij為天體i在第d維上受到天體j的萬有引力而產(chǎn)生的加速度,ai為第i個天體受到的其他所有天體萬有引力的合力產(chǎn)生的加速度。G為萬有引力常量,可以根據(jù)一下公式計(jì)算:
其中G0為初始值,T為最大迭代次數(shù)。
2.3計(jì)算天體的速度并更新位置
計(jì)算出了天體的加速度,則可以根據(jù)當(dāng)前速度計(jì)算出下一步天體的運(yùn)行速度以及天體下一步的位置。
這一步比較簡單與粒子群、蝙蝠等有速度的算法一致。
可以看出萬有引力算法的流程異常的簡單,與經(jīng)典的粒子群差不多。萬有引力算法也可以看做是一個優(yōu)化改進(jìn)版的粒子群,不過設(shè)計(jì)比較巧妙,引入的質(zhì)量、加速度等概念,但實(shí)現(xiàn)仍然很簡單。萬有引力算法的效果如何,在下一節(jié)將會進(jìn)行實(shí)驗(yàn)測試。
3. 實(shí)驗(yàn)
適應(yīng)度函數(shù)。
實(shí)驗(yàn)一:
值 | |
---|---|
問題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 100 |
G0 | 100 |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
值 | |
---|---|
最優(yōu)值 | 2.3541929659476212E-18 |
最差值 | 0.12702092417237046 |
平均值 | 0.012796260245792387 |
從圖像中可以看出,各個天體都在不停的運(yùn)動,由于沒有貪心算法(優(yōu)于當(dāng)前值才改變位置)的加入,所以個天體有可能運(yùn)動到比原先位置更差的地方,而且其收斂速度也比較快。
從結(jié)果上看,似乎還不錯,受到最差值的影響均值也相對較大,算法結(jié)果的穩(wěn)定性不是太好。
直覺上感覺算法有點(diǎn)問題。根據(jù)物理得來的直覺告訴我,這些天體會相互靠近,所以,它們不會集中到它們所構(gòu)成的凸包之外,凸實(shí)心物體的質(zhì)心不會跑到該物體的外部。做個試驗(yàn)驗(yàn)證一下,將測試函數(shù)的最優(yōu)解設(shè)置到一個極端的位置。
實(shí)驗(yàn)二: 適應(yīng)度函數(shù)
值 | |
---|---|
問題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 100 |
G0 | 100 |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
這次最優(yōu)解位置在(90,90)處,該點(diǎn)有很大概率出現(xiàn)在初始天體所圍成的凸多邊形外。
值 | |
---|---|
最優(yōu)值 | 23.0992211557913 |
最差值 | 1267.97543843818 |
平均值 | 417.19208443999185 |
從圖像中可以看出,在天體們還沒有到達(dá)最優(yōu)位置附近(右下角的紅點(diǎn))時,它們已經(jīng)收斂于一個點(diǎn),之后則很難再次向最優(yōu)解靠經(jīng)。看結(jié)果可以發(fā)現(xiàn)幾乎每一次實(shí)驗(yàn)的結(jié)果都不太好,算法果然有點(diǎn)問題,不過問題不大。
萬有引力出現(xiàn)這種現(xiàn)象可能有兩個原因:1.算法收斂的太快,還未對全局進(jìn)行充分搜索之時就收斂到了一點(diǎn),收斂到一點(diǎn)后無法再運(yùn)到。2.算法沒有跳出局部最優(yōu)的策略,萬有引力作用下的天體慢慢聚集到奇點(diǎn),形成黑洞,無法從中逃離。
那接下來,對萬有引力算法的改進(jìn)方向也比較明確了:1.減緩其收斂速度,2增加跳出局部最優(yōu)操作,使之逃離黑洞。
看看萬有引力常量G的函數(shù)圖像
幾乎在x/Xmax=1/5時已經(jīng)收斂到接近0。
實(shí)驗(yàn)三:修改
值 | |
---|---|
問題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 100 |
G0 | 100 |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
值 | |
---|---|
最優(yōu)值 | 1.3110161211294625E-5 |
最差值 | 0.27745689480499086 |
平均值 | 0.033094478518038435 |
將萬有引力常量的值修改為隨著迭代次數(shù)線性下降,從圖像中可以看出,效果還是比較明顯的,天體在不斷的運(yùn)動,最后才收斂、聚集于一起。從實(shí)驗(yàn)結(jié)果也可以看出,算法相對穩(wěn)定。結(jié)合圖像可以知道,改進(jìn)后,算法的收斂性下降,但全局搜索能力有較大的提升,算法的結(jié)果不會很差但是精度較低。
值 | |
---|---|
最優(yōu)值 | 2.828223575285611E-9 |
最差值 | 0.11880965981395 |
平均值 | 0.013540748540427833 |
將萬有引力常量的下降趨勢放緩為原來的1/4,從圖像中可以看出,算法的收斂速度非常快,也得到了較好的結(jié)果,相比線性下降,算法有著更好的精度,不足之處則是沒有跳出局部最優(yōu)的操作,收斂過快也容易陷入局部最優(yōu)。
不知道原文為什么讓萬有引力常量G的如此快的降到0,明明降的更慢能有更好的全局搜索能力,但精度可能較差。猜測如果精度較差則在測試函數(shù)結(jié)果和曲線上比不贏對比的其他算法,論文沒法發(fā)了。其使用的測試函數(shù)的最優(yōu)解大多處于解空間的中心位置附近,即很少出現(xiàn)最優(yōu)解在天體所圍成的凸多面體之外的情況,而實(shí)際問題中我們是無法預(yù)知最優(yōu)解在個位置的。
接下來,將試著為萬有引力算法加入一點(diǎn)跳出局部最優(yōu)的操作。
實(shí)驗(yàn)四:改進(jìn),新增以下規(guī)則及操作
在實(shí)驗(yàn)二的條件下
1. 處于最優(yōu)位置的天體保持自己的位置不動.
2. 如果某一個天體的運(yùn)動后的位置優(yōu)于當(dāng)前全局最優(yōu)個體的位置則將當(dāng)前的最優(yōu)個體初始化到解空間的隨機(jī)位置.(將被自己干掉的大哥流放)。
3. 如果觸發(fā)了規(guī)則2,將所有的個體的以迭代次數(shù)重置為0,即計(jì)算G=G0*e^(-20t/T)中的t置為0,重新計(jì)算萬有引力常量,若未觸發(fā)條件2則t=t+1。
值 | |
---|---|
問題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 100 |
G0 | 100 |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
值 | |
---|---|
最優(yōu)值 | 0.002865626046584871 |
最差值 | 0.34315942017305623 |
平均值 | 0.051625935063410844 |
從圖像上看,算法的全局搜索能力有大幅的增強(qiáng),并且已經(jīng)集中到了最優(yōu)解的附近,而且由于加入了“流放”這一跳出局部最優(yōu)的操作,可以看出,不斷的有新的個體出現(xiàn)在距最優(yōu)位置較遠(yuǎn)的位置。不過收斂速度有所下降,因此局部搜索能力有一定減弱。
看結(jié)果,好像沒有實(shí)驗(yàn)三那么好,但與實(shí)驗(yàn)二相比,已經(jīng)有了很大的提升,而且有了跳出局部最優(yōu)的操作,結(jié)果也相對穩(wěn)定。
上述的實(shí)驗(yàn)僅僅是對直觀猜想的實(shí)現(xiàn),如果想以此為改進(jìn)點(diǎn),還要對其進(jìn)行大量的調(diào)優(yōu),相信會有不錯的結(jié)果。
4. 總結(jié)
萬有引力算法根據(jù)萬有引力提出,結(jié)合了牛頓第二定律,可以說其操作步驟與真實(shí)的物理規(guī)律非常的貼切。不過就像前文說過,受物理現(xiàn)象啟發(fā)而來的優(yōu)化算法其性能是未知的,因?yàn)樗鼈儾痪邆渲悄?,只有著?guī)律,有規(guī)律就會存在弱點(diǎn),就會有搜索盲區(qū)。宇宙那么大,肯定存在沒有任何天體到達(dá)過的空間。
不過由于萬有引力算法流程簡單,理解方便,其優(yōu)化方案和能改進(jìn)的地方相對較多。萬有引力算法的收斂速度過快,導(dǎo)致其全局搜索能力較弱而局部搜索能力很強(qiáng),容易陷入局部最優(yōu)。根據(jù)其特點(diǎn),我們可以降低其收斂速度或者增加跳出局部最優(yōu)操作,來平衡算法的各個性能。
參考文獻(xiàn)
Rashedi E , Nezamabadi-Pour H , Saryazdi S . GSA: A Gravitational Search Algorithm[J]. Information Sciences, 2009, 179(13):2232-2248. 提取碼:xhpa
以下指標(biāo)純屬個人yy,僅供參考
指標(biāo) | 星數(shù) |
---|---|
復(fù)雜度 | ★★☆☆☆☆☆☆☆☆ |
收斂速度 | ★★★★★★★☆☆☆ |
全局搜索 | ★★☆☆☆☆☆☆☆☆ |
局部搜索 | ★★★★★★★☆☆☆ |
優(yōu)化性能 | ★★★☆☆☆☆☆☆☆ |
跳出局部最優(yōu) | ★★☆☆☆☆☆☆☆☆ |
改進(jìn)點(diǎn) | ★★★★★★★☆☆☆ |