1. 群搜索算法簡(jiǎn)介
(以下描述,均不是學(xué)術(shù)用語(yǔ),僅供大家快樂(lè)的閱讀)
群搜索算法(Group Search Optimizer)是一種基于發(fā)現(xiàn)者,跟隨者,游蕩者模型而產(chǎn)生的算法。算法模型較為復(fù)雜,提出時(shí)間也不長(zhǎng),對(duì)于其的深度研究相對(duì)較少,但也有一定的應(yīng)用研究。
在群搜索算法中,每個(gè)個(gè)體的位置表示解空間內(nèi)的一個(gè)可行解。根據(jù)位置的優(yōu)劣可以將種群分為發(fā)現(xiàn)者,跟隨者,游蕩者。其中當(dāng)前的最優(yōu)個(gè)體為發(fā)現(xiàn)者,它將在它自身周?chē)褜ぃ渌麄€(gè)體按照一定的比例分為跟隨者和游蕩者,跟隨者將在跟隨發(fā)現(xiàn)者的同時(shí)進(jìn)行搜索,而游蕩者則自行隨機(jī)行動(dòng)。每個(gè)個(gè)體的頭部方向角度將決定該個(gè)體下一步的搜索方向,個(gè)體會(huì)在該搜索方向上前進(jìn)一定的步長(zhǎng)來(lái)該方位的區(qū)域進(jìn)行搜索,但是只有發(fā)現(xiàn)者可以進(jìn)行轉(zhuǎn)向來(lái)改變搜索方位,跟隨者只能更隨發(fā)現(xiàn)者,而游蕩者只能依照當(dāng)前方向,無(wú)法轉(zhuǎn)向。
2. 算法流程
群搜索算法是我的入門(mén)算法。不知為什么我每次看到群搜索算法,腦海中就會(huì)響起《動(dòng)物世界》的音樂(lè)并出現(xiàn)鬣(lie)狗的畫(huà)面,想起它們?cè)诓菰嫌问幍漠?huà)面,那這次的主角就是它了吧,雖然不知道是否合適。
看了群搜索算法的簡(jiǎn)介,我們可以發(fā)現(xiàn),這不是人工蜂群算法嗎,當(dāng)采蜜蜂數(shù)量為1時(shí),人工蜂群算法不就成了群搜索算法了嗎?確實(shí),它們的種群分類(lèi)相似,但是它們的搜索行為和搜索策略大相徑庭。其實(shí)優(yōu)化算法中有很多感覺(jué)都是兄弟姐妹關(guān)系,感覺(jué)主體流程幾乎一樣,只不過(guò)有某些改進(jìn)點(diǎn)或者新增了某種屬性就成了一個(gè)新的算法,既然人家都承認(rèn),我們也只好跟著認(rèn)了。
群搜索算法中的個(gè)體有三個(gè)屬性:位置,角度和方向。(其實(shí)也可以說(shuō)是兩個(gè)屬性,方向可以由角度計(jì)算出來(lái)。
在D維解空間內(nèi)每個(gè)鬣狗的位置為
每只鬣狗的頭部角度為
可以看出頭部的角度的維度比位置的維度少1。
其前進(jìn)方向?yàn)?img class="math-block" src="https://math.jianshu.com/math?formula=D(%5Cvarphi)%20%3D%EF%BC%88d_1%2Cd_2%2C...%2Cd_%7BD-1%7D)" alt="D(\varphi) =(d_1,d_2,...,d_{D-1})" mathimg="1">,維度與位置維度一致,比頭部角度多1維,前進(jìn)方向 將由頭部角度 計(jì)算得出,計(jì)算公式如下
舉個(gè)栗子,在3維解空間內(nèi),,
,
可以看出 即保證前進(jìn)方向是模為1的單位向量。
2.1發(fā)現(xiàn)者行為
發(fā)現(xiàn)者是當(dāng)前群體中位置最優(yōu)的個(gè)體,所以它沒(méi)有目標(biāo)去跟隨,只能根據(jù)當(dāng)前線索取繼續(xù)發(fā)現(xiàn)新目標(biāo)。發(fā)現(xiàn)者會(huì)根據(jù)當(dāng)前頭部角度搜索三個(gè)方向,前方,左邊和右邊。
如圖,前方為該鬣狗當(dāng)前的頭部方向,而左方和右方則為它向左和向右隨機(jī)轉(zhuǎn)向r度后的方向,即
向前方搜索的位置:
向左方搜索的位置:
向右方搜索的位置:
其中 為發(fā)現(xiàn)者當(dāng)前的位置,
為符合標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)(均值0,方差1),
為(0,1)內(nèi)的均勻隨機(jī)數(shù),
為最大的搜索步長(zhǎng),
為最大轉(zhuǎn)向角度。(這里和原文不一樣,我的左右和他是反的,不過(guò)沒(méi)影響)
如果這三個(gè)新位置比之前的位置好,則移動(dòng)到這三個(gè)位置中最好的位置,否則不移動(dòng),只轉(zhuǎn)變頭部方向,轉(zhuǎn)向公式如下:
如果經(jīng)過(guò)a代都沒(méi)有找到更好的位置則將頭轉(zhuǎn)會(huì)a代之前的角度即:
2.2跟隨者行為
群體中的大部分都是跟隨者,它們會(huì)向著發(fā)現(xiàn)者的位置靠近。
2.3游蕩者行為
游蕩者不跟隨任何個(gè)體,它們會(huì)在當(dāng)前角度上隨機(jī)搜索。
2.4 流程
由于算法中參數(shù)較多,作者也給出了部分標(biāo)準(zhǔn)參數(shù)
參數(shù) | 值 |
---|---|
跟隨者者比例 | 80% |
游蕩者比例 | 20% |
解空間上下界的歐式距離 | |
a | |
3. 實(shí)驗(yàn)
適應(yīng)度函數(shù)還是
實(shí)驗(yàn)一:標(biāo)準(zhǔn)群搜索算法
參數(shù) | 值 |
---|---|
問(wèn)題維度(維度) | 2 |
搜索次數(shù)(最大迭代次數(shù)) | 50 |
跟隨者比例 | 80% |
游蕩者比例 | 20% |
解空間上下界的歐式距離 | |
a | |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
看看實(shí)驗(yàn)圖像
這應(yīng)該是到目前為止的實(shí)驗(yàn)中最令人滿意的實(shí)驗(yàn)圖像了,幾乎所有的粒子隨機(jī)出現(xiàn)在解空間內(nèi)然后不斷的向著最優(yōu)個(gè)體移動(dòng),群體既沒(méi)有分散的飛舞,也沒(méi)有隨著迭代次數(shù)增加過(guò)于集中于某一個(gè)區(qū)域。看看實(shí)驗(yàn)結(jié)果。
值 | |
---|---|
最優(yōu)值 | 1.2251107571974537E-7 |
最差值 | 0.013024894028570514 |
平均值 | 0.0013084455258887948 |
結(jié)果還行,雖然沒(méi)有想象中的那么好,但也算是在較少的迭代次數(shù)下得出的不錯(cuò)的結(jié)果,如果增加迭代次數(shù),結(jié)果應(yīng)該會(huì)更好。同時(shí)結(jié)合圖像我們可以看出,由于群體沒(méi)有集中于某一個(gè)區(qū)域,使算法有了不錯(cuò)的跳出局部最優(yōu)的能力,同時(shí)也削弱了其局部搜索的能力,局部搜索僅由“發(fā)現(xiàn)者”提供。但就算法整體而言,“發(fā)現(xiàn)者”提供的局部搜索幾乎沒(méi)有起到什么作用。
實(shí)驗(yàn)二:標(biāo)準(zhǔn)群搜索算法,移除發(fā)現(xiàn)者行為
去掉了發(fā)現(xiàn)者在左中右的搜索行為,發(fā)現(xiàn)者只需要站著不動(dòng)就好了。
圖像與標(biāo)準(zhǔn)群搜索算法相比,我看不出什么差別。看看結(jié)果
值 | |
---|---|
最優(yōu)值 | 1.854714209417366E-7 |
最差值 | 0.002949841226367196 |
平均值 | 3.533115910203305E-4 |
怎么感覺(jué)移除了“發(fā)現(xiàn)者”的搜索行為后,其結(jié)果反而更好了?只能說(shuō)運(yùn)氣更好吧,一次最差值就可能拖累整個(gè)實(shí)驗(yàn)的均值。從結(jié)果可以看出,移除“發(fā)現(xiàn)者”行為對(duì)群搜索算法在這類(lèi)較為簡(jiǎn)單的問(wèn)題上的性能影響不大,也許在更加復(fù)雜的問(wèn)題中,這一算子能夠發(fā)揮決定性的作用。
實(shí)驗(yàn)三:修改種群比例
參數(shù) | 值 |
---|---|
問(wèn)題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 50 |
跟隨者比例 | 80%,60%,40%,20% |
游蕩者比例 | 20%,40%,60%,80% |
解空間上下界的歐式距離 | |
a | |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
值 | |
---|---|
最優(yōu)值 | 3.069507400059027E-5 |
最差值 | 0.02114359466660109 |
平均值 | 0.005540228815855548 |
值 | |
---|---|
最優(yōu)值 | 6.59279233735544E-4 |
最差值 | 9.738505469931752 |
平均值 | 1.4289853174442497 |
跟隨者比例20%
值 | |
---|---|
最優(yōu)值 | 0.08231541229310135 |
最差值 | 82.13212839416113 |
平均值 | 16.697520989453512 |
從圖像上可以看出,隨著跟隨者比例的下降,群體的運(yùn)動(dòng)越來(lái)越無(wú)序,僅有較少的個(gè)體向著最有個(gè)體靠近。
從結(jié)果中可以看出,跟隨者的比例越大,其結(jié)果的精度越高,而且也越穩(wěn)定。
從這個(gè)實(shí)驗(yàn)中我們可以看出,跟隨者提供了全局搜索能力,游蕩者提供了跳出局部最優(yōu)能力。發(fā)現(xiàn)者呢,應(yīng)該是提供了局部搜索能力。前面說(shuō)了群搜索的局部搜索能力較弱,那為什么不多設(shè)置一些發(fā)現(xiàn)者,來(lái)增強(qiáng)其局部搜索能力呢?
實(shí)驗(yàn)四.將10%的最優(yōu)個(gè)體作為發(fā)現(xiàn)者
參數(shù) | 值 |
---|---|
問(wèn)題維度(維度) | 2 |
總?cè)簲?shù)量(種群數(shù)) | 20 |
搜索次數(shù)(最大迭代次數(shù)) | 50 |
發(fā)現(xiàn)者比例 | 10% |
跟隨者比例 | 72% |
游蕩者比例 | 18% |
解空間上下界的歐式距離 | |
a | |
取值范圍 | (-100,100) |
實(shí)驗(yàn)次數(shù) | 10 |
值 | |
---|---|
最優(yōu)值 | 1.380210268180854E-7 |
最差值 | 0.0016625529372137474 |
平均值 | 2.5507510902798446E-4 |
圖像和結(jié)果與標(biāo)準(zhǔn)幾乎沒(méi)有太大的差別,我總感覺(jué)發(fā)現(xiàn)者其實(shí)并沒(méi)有什么太大的作用。群搜索算法的如果去掉了發(fā)現(xiàn)者的行為,其實(shí)是一個(gè)比較簡(jiǎn)單的算法,而發(fā)現(xiàn)者的搜索行為使算法的流程、理解以及實(shí)現(xiàn)都復(fù)雜了少,卻對(duì)算法的性能影響甚微,即使移除也無(wú)大礙。
4. 總結(jié)
群搜索算法的探究也到此為止,群搜索算法的流程比較復(fù)雜,作為我的入門(mén)算法,我當(dāng)年也頭疼了幾天,現(xiàn)在看來(lái),不能說(shuō)它“也不過(guò)如此”,至少流程上清晰了不上,由于是當(dāng)年的入門(mén)算法,我的側(cè)重點(diǎn)也放在了應(yīng)用上,對(duì)于改進(jìn)并沒(méi)與太多的研究,此處也只是分析了某些參數(shù)的作用以及對(duì)結(jié)果的影響。
相對(duì)標(biāo)準(zhǔn)群搜索算法,后面的實(shí)驗(yàn)主要在研究發(fā)現(xiàn)者,跟隨者,游蕩者的作用。其中可以明確的得出,游蕩者起到了跳出局部最優(yōu)的作用,跟隨者的作用是局部搜索和少量的局部搜索,而發(fā)現(xiàn)者的作用是引導(dǎo)跟隨者。目前看來(lái),發(fā)現(xiàn)者的行為對(duì)算法影響不大,如果后續(xù)有什么新的發(fā)現(xiàn)再來(lái)更新。
以下指標(biāo)純屬個(gè)人yy,僅供參考
指標(biāo) | 星數(shù) |
---|---|
復(fù)雜度 | ★★★★★★★☆☆☆ |
收斂速度 | ★★★★★☆☆☆☆☆ |
全局搜索 | ★★★★★★★★☆☆ |
局部搜索 | ★★★☆☆☆☆☆☆☆ |
優(yōu)化性能 | ★★★★★☆☆☆☆☆ |
跳出局部最優(yōu) | ★★★★★☆☆☆☆☆ |
改進(jìn)點(diǎn) | ★★★★☆☆☆☆☆☆ |