陳桂霞
(江蘇聯(lián)合職業(yè)技術(shù)學(xué)院揚(yáng)州分院 信息工程系,江蘇 揚(yáng)州 225000)
標(biāo)準(zhǔn)人工魚群算法(Standard Artificial Fish Swarm Algorithm,AFSA)具有快速性收斂性,在運(yùn)行過(guò)程中,魚群在初期會(huì)呈現(xiàn)出較快的聚集現(xiàn)象,迅速向最優(yōu)個(gè)體靠攏。但是,當(dāng)人工魚群運(yùn)行到后期的時(shí)候,由于采用的步長(zhǎng)、視野等參數(shù)缺少變化,其收斂速度會(huì)明顯變慢,而且容易使算法跳過(guò)最優(yōu),導(dǎo)致算法的解精度降低。本文研究一個(gè)能有效提高人工魚群算法解精度的方法—參數(shù)自適應(yīng)變化機(jī)制,該方法令人工魚群算法的兩個(gè)主要參數(shù)visual和step,在一定范圍內(nèi)自適應(yīng)動(dòng)態(tài)變化[1]。
根據(jù)相關(guān)研究可知,參數(shù)visual決定了個(gè)體魚的搜索范圍,如果visual較大,則魚個(gè)體的搜索范圍比較廣,能夠發(fā)現(xiàn)更多的最佳個(gè)體,可保證較強(qiáng)的全局搜索;如果參數(shù)visual較小,則魚個(gè)體的搜索范圍較小,會(huì)局限于該個(gè)體的周圍,以保證精細(xì)的局部搜索。
根據(jù)群體智能算法的空間搜索機(jī)制可知,群體智能算法在運(yùn)算早期應(yīng)該著重于全局搜索,以保證較快的收斂速度和廣闊的搜索范圍[2]。在運(yùn)算后期則應(yīng)該著重于精細(xì)的局部搜索,針對(duì)最佳個(gè)體周圍鄰域進(jìn)行搜索,以提高算法的求解精度。故visual的變化采用動(dòng)態(tài)機(jī)制處理要優(yōu)于固定機(jī)制,考慮到logistic模型的動(dòng)態(tài)變化性,故采用logistic模型對(duì)visual進(jìn)行調(diào)整。設(shè)visual的變化范圍是[visualmin,visualmax],則參數(shù)visual的變化設(shè)定為公式1。
根據(jù)該模型,可得到visual的縮放變化公式2。
公式中,t為算法的迭代次數(shù),a為初始衰減率,用于調(diào)整visual的下降速度。a的初始值越大,visual的下降速度越快;反之,visual的下降速度越慢。從公式1可以知道,當(dāng)t=0時(shí),visual(t)=visualmax,隨著t不斷迭代增加,visual逐漸收斂于visualmin。
由人工魚群算法的計(jì)算原理可知,步長(zhǎng)step亦會(huì)影響算法中個(gè)體的搜索范圍。step越大,個(gè)體魚向最優(yōu)位置靠近的速度越快,如果算法處于早期,采用較大的step,將會(huì)使算法的收斂速度較快,且跳出局部極值的能力也更強(qiáng);反之,如果在算法運(yùn)行早期采用較小的step,則會(huì)使算法的收斂速度變慢,且跳出局部極值約束的能力變差。
在算法的后期,因?yàn)橐呀?jīng)基本確定了最優(yōu)解的搜索范圍,則應(yīng)選擇較小的step,以提高算法的最終求解精度,避免由于過(guò)大的步長(zhǎng)使算法跳過(guò)了優(yōu)質(zhì)解,所以這種動(dòng)態(tài)措施要優(yōu)于固定step的機(jī)制[3]。經(jīng)過(guò)上述分析,可以知道,在魚群算法的早期應(yīng)采用較大的step值,而在后期應(yīng)逐漸收斂到較小的step值。設(shè)step的取值范圍為[stepmin,stepmax],設(shè)定其變化規(guī)律為公式3。根據(jù)該模型,可得步長(zhǎng)step的調(diào)整公式4。
根據(jù)經(jīng)驗(yàn)可設(shè)置visual和step兩個(gè)值的取值范圍。通常visual的取值在1~10;step的取值在0.5~8;a設(shè)為100。
動(dòng)態(tài)自適應(yīng)人工魚群算法(Dynamic Adaptive Artificial Fish Swarm Algorithm,DLAFSA)
輸入:規(guī)模為N的種群。
輸出:最佳個(gè)體Xgbest(t)。
步驟1:初始化算法參數(shù),包括種群規(guī)模、視野最大值及最小值、步長(zhǎng)最大及最小初始值、嘗試次數(shù)。迭代次數(shù)設(shè)置t=0。
步驟2:在解空間內(nèi)對(duì)魚群采用隨機(jī)機(jī)制進(jìn)行初始化。
步驟3:掃描種群,取出當(dāng)前最優(yōu)解Xgbest(t),寫入公告板。
步驟4:魚群中全部個(gè)體執(zhí)行隨機(jī)自由游動(dòng),并更新各自的自身狀態(tài)Xi(t)。
步驟5:魚群內(nèi)個(gè)體在各自的視野visual內(nèi)執(zhí)行覓食行為。
步驟6:魚群內(nèi)的個(gè)體執(zhí)行聚群操作。
步驟7:魚群內(nèi)的個(gè)體執(zhí)行追尾操作。
步驟8:對(duì)visual和step分別按照公式2和4進(jìn)行修正調(diào)整。
步驟9:更新公告板,迭代計(jì)數(shù)器t=t+1。
步驟10:若算法滿足終止條件,則輸出公告板上的最優(yōu)解Xgbest(t),算法結(jié)束。否則,如果算法進(jìn)入后期,則隨機(jī)淘汰種群內(nèi)的10%的個(gè)體,然后在解空間上,再以Xgbest(t)為中心,以2×visual為半徑的范圍內(nèi),隨機(jī)生成10%的個(gè)體,并跳轉(zhuǎn)到步驟4。
將DLAFSA算法與標(biāo)準(zhǔn)人工魚群算法應(yīng)用C語(yǔ)言進(jìn)行編碼實(shí)現(xiàn),并對(duì)兩個(gè)算法進(jìn)行實(shí)驗(yàn)對(duì)比。采用8個(gè)經(jīng)典Benchmark函數(shù)進(jìn)行測(cè)試,8個(gè)函數(shù)分別是:Sphere函數(shù)f1(x)、Griewank函數(shù)f2(x)、Rastrigin函數(shù)f3(x)、Ackley函數(shù)f4(x)、Rosenbrock函數(shù)f5(x)、Schwefel函數(shù)1f6(x)、Quartic函數(shù)f7(x)、Schwefel函數(shù)2f8(x)。
從測(cè)試數(shù)據(jù)可以看出,對(duì)于所有測(cè)試函數(shù)來(lái)講,在f1和f6兩個(gè)函數(shù)上,兩種算法均能獲得最佳解,在其他6個(gè)函數(shù)上,兩個(gè)函數(shù)均沒(méi)有獲得最佳解,但是對(duì)比兩個(gè)算法所獲得的解平均值和解方差來(lái)看,改進(jìn)之后的算法明顯優(yōu)于標(biāo)準(zhǔn)人工魚群算法。表1列出了兩個(gè)算法在8個(gè)測(cè)試函數(shù)上的收斂成功次數(shù)和收斂成功時(shí)所需的平均迭代次數(shù),從表1數(shù)據(jù)可以看出,改進(jìn)后的自適應(yīng)人工魚群算法在8個(gè)函數(shù)上的收斂成功次數(shù)要明顯大于標(biāo)準(zhǔn)人工魚群算法,其所需迭代次數(shù)也明顯小于標(biāo)準(zhǔn)人工魚群算法。基于以上數(shù)據(jù)的對(duì)比可以得出結(jié)論,改進(jìn)之后的DLAFSA較AFSA能更好地保證全局搜索和局部搜索的平衡。
表1 DLAFSA與AFSA在Benchmark函數(shù)上的成功次數(shù)迭代次數(shù)比較
本文通過(guò)引入Logistic模型,使人工魚群算法的兩個(gè)重要參數(shù)—步長(zhǎng)和視野實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)調(diào)整,使魚群中的個(gè)體在早期具有較大的步長(zhǎng)和較寬闊的視野,以保證算法具有較快的收斂速度和較廣闊的搜索范圍,而在后期逐漸轉(zhuǎn)入精細(xì)的局部搜索,使算法的解精度得以提高。最終實(shí)驗(yàn)結(jié)果表示:動(dòng)態(tài)自適應(yīng)人工魚群算法的解精度明顯優(yōu)于標(biāo)準(zhǔn)人工魚群算法。