第五楊萌, 賀興時
(西安工程大學理學院,西安 710600)
花粉算法(Flower Pollination Algorithm,F(xiàn)PA)是英國劍橋大學學者Yang[1]提出的模擬花授粉的新型元啟發(fā)算法. 該算法所用參數(shù)少、易編碼,算法中的Lévy飛行機制[2]使得算法搜索路徑更優(yōu)等特點,已廣泛應用到經(jīng)濟、管理、軍事、科學和工程設(shè)計等[3-4]領(lǐng)域的優(yōu)化問題.
近年來,國內(nèi)外學者為了提高花粉算法的全局搜索能力和收斂速度,對該算法進行大量研究. 在改進收斂速度方面,高昂等[5]通過種群所有個體信息的交流協(xié)作、逐維比較和更新當前迭代產(chǎn)生的最優(yōu)解,從而加快算法收斂速度;李前等[6]改進步長因子,同時在迭代過程中加入差分進化,提高算法尋優(yōu)能力;肖輝輝等[7]提出了基于單純形法和自適應步長的花粉算法,該算法利用單純形法提高局部搜索能力,通過自適應步長提高收斂速度. 上述幾種改進雖然使算法能很快收斂,但是收斂精度較低. 在全局搜索能力改進方面,張新明等[8]將共享機制的小生境策略融合到花粉算法中,增強算法跳出局部最優(yōu)的能力;吳文斌等[9]通過在較優(yōu)位置引入遺傳算法[10]的改進交叉和變異策略,增強了全局搜索能力;喬現(xiàn)偉等[11]通過立方映射產(chǎn)生的混沌[12]序列,初始化花粉種群,增強了算法的全局搜索能力;卞京紅等[13]提出基于螢火蟲算法的自適應花粉算法,改進了花粉算法初始種群的質(zhì)量. 這4 種改進方法雖然提高了算法的尋優(yōu)精度,但是收斂速度一般.
為了同時提高花粉算法的收斂速度和收斂精度,本文提出一種基于蝙蝠算法(Bat Algorithm,BA)的改進花粉算法(BA-FPA),因為蝙蝠算法[14]通過隨機飛行在最優(yōu)解附近會產(chǎn)生局部的新解,用其初始化[15-16]花粉配子,可以改進花粉算法收斂性能,仿真實驗結(jié)果證明改進后的BA-FPA 收斂速度和收斂精度都優(yōu)于基本BA和FPA.
基礎(chǔ)的花粉算法包括自花授粉過程和交叉授粉過程.
交叉授粉即全局授粉過程,
在局部搜索中,如果蝙蝠個體選擇了一個最優(yōu)解,那么將在此最優(yōu)解附近隨機生成一個新解:
其中:α 和γ 是常數(shù),并且有:0<α <1,0<γ .蝙蝠算法步驟:
Step 1:種群初始化,即蝙蝠以隨機方式在D維空間中擴散分布一組初始解. 最大脈沖音量A0,最大脈沖率r0,搜索脈沖頻率范圍[ ]fmin,fmax,音量的衰減系數(shù)α,搜索頻率的增強系數(shù)γ,最大迭代次數(shù)iter_max.
Step 2:隨機初始化蝙蝠的位置xi,并根據(jù)適應度值的優(yōu)劣找到當前最優(yōu)解x*.
Step 3:蝙蝠的搜索脈沖頻率、速度和位置分別按照公式(3)~(5)進行更新.
Step 4:隨機生成[0,1]間的隨機數(shù)rand,如果rand>r,則對當前最優(yōu)解進行隨機擾動,按照公式(6)產(chǎn)生一個新解.
Step 5:隨機生成[0,1]間的隨機數(shù)rand,如果rand<Ai且f(xi)<f(x*),則接受Step 4產(chǎn)生的新解,然后按公式(7)進行更新.
Step 6:對所有蝙蝠的適應度值進行排序,找出當前的最優(yōu)解和最優(yōu)值.
Step 7:重復Step 2~Step 5直至滿足設(shè)定的最大迭代次數(shù).
Step 8:輸出全局最優(yōu)值和最優(yōu)解.
蝙蝠算法通過隨機飛行在最優(yōu)解附近產(chǎn)生局部的新解,能使花粉算法在初始時刻有較大的搜索范圍,加強了算法整體的局部搜索能力. 因此用蝙蝠算法優(yōu)化花粉算法的初值,來改進花粉算法初始化種群的質(zhì)量.
BA-FPA算法步驟:
Step 1:用蝙蝠算法初始化花粉配子.
Step 2:定義一個轉(zhuǎn)移概率p,最大迭代次數(shù)N.
Step 3:對于種群中所有的n個花粉配子進行授粉:隨機產(chǎn)生一個隨機數(shù)rand,若rand<p,則進行全局授粉;否則,進行局部授粉. 評價新解,若新解更好,則更新種群. 找到當前的最優(yōu)解.
Step 4:若算法停止準則滿足,則停止;否則轉(zhuǎn)入Step3.
Step 5:輸出全局最優(yōu)值,算法結(jié)束.
仿真實驗使用Matlab 2017版運行,本文從Benchmarks測試函數(shù)[17]中選取6個典型的函數(shù)進行測試. 如表1所示,其中Egg creat函數(shù)、Sphere函數(shù)和Griewank函數(shù)為多峰函數(shù),其他為單峰函數(shù).
FPA算法種群規(guī)模n=20,轉(zhuǎn)換概率p=0.8. BA算法種群規(guī)模n=10,響度A=0.25,脈沖發(fā)射率r=0.5.
表1 測試函數(shù)Tab.1 Test functions
圖1~圖6分別是BA-FPA算法、標準BA算法和FPA算法在6種測試函數(shù)上的尋優(yōu)曲線圖,可直觀看出3種算法的收斂性能. 從圖1和圖2可以看出,對于2維的Cube和Egg creat函數(shù),3種算法都能成功收斂,同樣迭代次數(shù)下,BA-FPA的收斂速度明顯快于標準BA和FPA的收斂速度;從圖3可以看出,對于3維的Rosenbrock函數(shù),迭代次數(shù)為1000次時,BA-FPA的收斂速度明顯快于標準BA和FPA的收斂速度,BA-FPA能快速收斂到最優(yōu)值,BA還不能收斂到最優(yōu)值. 從圖4~圖6看出,隨維數(shù)增加,BA-FPA 的收斂性能明顯好于標準BA和FPA的收斂性能.
為了檢驗算法尋優(yōu)的穩(wěn)定性,分別用BA-FPA算法、標準BA算法和FPA算法對每個測試函數(shù)優(yōu)化50次,統(tǒng)計結(jié)果如表2所示.
圖1 Cube函數(shù)尋優(yōu)曲線Fig.1 Optimization curves of Cube function
圖2 Eggcreat函數(shù)尋優(yōu)曲線Fig.2 Optimization curves of Eggcreat function
圖3 Rosenbrock函數(shù)尋優(yōu)曲線Fig.3 Optimization curves of Rosenbrock function
圖4 Sphere函數(shù)尋優(yōu)曲線Fig.4 Optimization curves of Sphere function
圖5 Griewank函數(shù)尋優(yōu)曲線Fig.5 Optimization curves of Griewank function
圖6 Schwefel 2.21函數(shù)收斂曲線Fig.6 Optimization curves of Schwefel 2.21 function
從表2 中仿真實驗結(jié)果可以看出,BA-FPA 算法運行得出的最小值、最大值和均值比標準BA 算法和FPA算法在收斂精度上有較大提升. 而且測試函數(shù)有不同模態(tài)(unimodal,multimodal),還有不同維數(shù)(2維、3維和10維). 因此,改進后的BA-FPA算法收斂性能(收斂速度和收斂精度)比標準BA算法和FPA算法有較大提升.
表2 BA-FPA、BA和FPA算法性能比較Tab.2 Performance comparison among BA-FPA,BA and FPA
本研究將蝙蝠算法引入花粉算法來優(yōu)化花粉配子的初始位置,建立基于蝙蝠算法的花粉改進算法. 通過任意選取6個基準測試函數(shù)對算法進行性能測試,結(jié)果表明改進后的BA-FPA算法比標準的BA和FPA具有更快的收斂速度和更高的收斂精度.