智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)_第1頁
智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)_第2頁
智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)_第3頁
智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)_第4頁
智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩211頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)目錄第1章粒子群優(yōu)化算法及其MATLAB實(shí)現(xiàn)

1.1粒子群優(yōu)化算法的基本原理1.1.1粒子和速度初始化1.1.2個(gè)體歷史值和全局值1.1.3粒子群的速度和位置更新1.1.4粒子群優(yōu)化算法流程1.2粒子群優(yōu)化算法的MATLAB實(shí)現(xiàn)1.2.1種群初始化1.2.2適應(yīng)度函數(shù)1.2.3邊界檢查和約束函數(shù)1.2.4粒子群優(yōu)化算法代碼1.3粒子群優(yōu)化算法的應(yīng)用案例1.3.1求解函數(shù)極值1.3.2帶約束問題求解:基于粒子群優(yōu)化算法的壓力容器設(shè)計(jì)1.4粒子群優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第2章蟻獅優(yōu)化算法及其MATLAB實(shí)現(xiàn)2.1蟻獅優(yōu)化算法的基本原理2.1.1螞蟻的隨機(jī)游走2.1.2設(shè)置陷阱2.1.3利用陷阱誘捕螞蟻2.1.4捕獲獵物并重建洞穴2.1.5蟻獅優(yōu)化算法流程2.2蟻獅優(yōu)化算法的MATLAB實(shí)現(xiàn)2.2.1種群初始化2.2.2適應(yīng)度函數(shù)2.2.3邊界檢查和約束2.2.4輪盤賭策略2.2.5蟻獅優(yōu)化算法的隨機(jī)游走2.2.6蟻獅優(yōu)化算法的MATLAB代碼2.3蟻獅優(yōu)化算法的應(yīng)用案例2.3.1求解函數(shù)極值2.3.2帶約束問題求解:基于蟻獅優(yōu)化算法的壓力容器設(shè)計(jì)2.4蟻獅優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第3章果蠅優(yōu)化算法及其MATLAB實(shí)現(xiàn)3.1果蠅優(yōu)化算法的基本原理3.1.1果蠅初始化3.1.2果蠅通過氣味尋找食物3.1.3果蠅位置更新3.1.4果蠅優(yōu)化算法流程3.2果蠅優(yōu)化算法的MATLAB實(shí)現(xiàn)3.2.1果蠅位置初始化3.2.2適應(yīng)度函數(shù)3.2.3邊界檢查和約束3.2.4果蠅優(yōu)化算法代碼3.2.5改進(jìn)果蠅優(yōu)化算法代碼3.3果蠅優(yōu)化算法的應(yīng)用案例3.3.1求解函數(shù)極值3.3.2帶約束問題求解:基于果蠅優(yōu)化算法的壓力容器設(shè)計(jì)3.4果蠅優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第4章螢火蟲優(yōu)化算法及其MATLAB實(shí)現(xiàn)4.1螢火蟲優(yōu)化算法的基本原理4.1.1螢火蟲的相對(duì)亮度計(jì)算4.1.2螢火蟲的吸引度計(jì)算4.1.3螢火蟲的位置更新4.1.4螢火蟲優(yōu)化算法流程4.2螢火蟲優(yōu)化算法的MATLAB實(shí)現(xiàn)4.2.1螢火蟲位置初始化4.2.2適應(yīng)度函數(shù)4.2.3邊界檢查和約束4.2.4螢火蟲優(yōu)化算法代碼4.3螢火蟲優(yōu)化算法的應(yīng)用案例4.3.1求解函數(shù)極值4.3.2帶約束問題求解:基于螢火蟲優(yōu)化算法的壓力容器設(shè)計(jì)4.4螢火蟲優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第5章灰狼優(yōu)化算法及其MATLAB實(shí)現(xiàn)5.1灰狼優(yōu)化算法的基本原理5.1.1包圍獵物5.1.2狩獵5.1.3攻擊獵物5.1.4搜索獵物5.1.5灰狼優(yōu)化算法流程5.2灰狼優(yōu)化算法的MATLAB實(shí)現(xiàn)5.2.1灰狼位置初始化5.2.2適應(yīng)度函數(shù)5.2.3邊界檢查和約束5.2.4灰狼優(yōu)化算法代碼5.3灰狼優(yōu)化算法的應(yīng)用案例5.3.1求解函數(shù)極值5.3.2帶約束問題求解:基于灰狼優(yōu)化算法的壓力容器設(shè)計(jì)5.4灰狼優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第6章正余弦優(yōu)化算法及其MATLAB實(shí)現(xiàn)6.1正余弦優(yōu)化算法的基本原理6.1.1正余弦機(jī)制6.1.2正余弦優(yōu)化算法流程6.2正余弦優(yōu)化算法的MATLAB實(shí)現(xiàn)6.2.1正余弦位置初始化6.2.2適應(yīng)度函數(shù)6.2.3邊界檢查和約束6.2.4正余弦優(yōu)化算法代碼6.3正余弦優(yōu)化算法的應(yīng)用案例實(shí)驗(yàn)6.3.1求解函數(shù)極值6.3.2帶約束問題求解:基于正余弦優(yōu)化算法的壓力容器設(shè)計(jì)6.4正余弦優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第7章多元宇宙優(yōu)化算法及其MATLAB實(shí)現(xiàn)7.1多元宇宙優(yōu)化算法的基本原理7.1.1宇宙的定義7.1.2傳輸機(jī)制7.1.3蟲洞系數(shù)7.1.4多元宇宙優(yōu)化算法流程7.2多元宇宙優(yōu)化算法的MATLA實(shí)現(xiàn)7.2.1種群初始化7.2.2適應(yīng)度函數(shù)7.2.3邊界檢查和約束7.2.4輪盤賭策略7.2.5多元宇宙優(yōu)化算法代碼7.3多元宇宙優(yōu)化算法的應(yīng)用案例7.3.1求解函數(shù)極值7.3.2帶約束問題求解:基于多元宇宙優(yōu)化算法的壓力容器設(shè)計(jì)7.4多元宇宙優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第8章引力搜索算法及其MATLAB實(shí)現(xiàn)8.1引力搜索算法的基本原理8.1.1萬有引力定律8.1.2個(gè)體引力計(jì)算8.1.3加速度計(jì)算8.1.4速度和位置更新8.1.5引力搜索算法流程8.2引力搜索算法的MATLAB實(shí)現(xiàn)8.2.1位置初始化8.2.2適應(yīng)度函數(shù)8.2.3邊界檢查和約束8.2.4計(jì)算質(zhì)量8.2.5計(jì)算引力常數(shù)8.2.6計(jì)算加速度8.2.7位置更新8.2.8引力搜索算法代碼8.3引力搜索算法的應(yīng)用案例8.3.1求解函數(shù)極值8.3.2帶約束問題求解:基于引力搜索算法的壓力容器設(shè)計(jì)8.4引力搜索算法的中間結(jié)果參考文獻(xiàn)第9章樹種優(yōu)化算法及其MATLAB實(shí)現(xiàn)9.1樹種優(yōu)化算法的基本原理9.1.1樹種的定義及生成9.1.2種子的繁殖9.1.3樹種優(yōu)化算法流程9.2樹種優(yōu)化算法的MATLAB實(shí)現(xiàn)9.2.1種群初始化9.2.2適應(yīng)度函數(shù)9.2.3邊界檢查和約束9.2.4樹種優(yōu)化算法9.3樹種優(yōu)化算法的應(yīng)用案例9.3.1求解函數(shù)極值9.3.2帶約束問題求解:基于樹種優(yōu)化算法的壓力容器設(shè)計(jì)9.4樹種優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第10章風(fēng)驅(qū)動(dòng)優(yōu)化算法及其MATLAB實(shí)現(xiàn)10.1風(fēng)驅(qū)動(dòng)優(yōu)化算法的基本原理10.1.1參數(shù)的定義10.1.2適應(yīng)度函數(shù)的選取10.1.3空氣單元運(yùn)動(dòng)范圍的確定10.1.4風(fēng)的抽象化及空氣單元的更新10.1.5風(fēng)驅(qū)動(dòng)優(yōu)化算法流程10.2風(fēng)驅(qū)動(dòng)優(yōu)化算法的MATLAB實(shí)現(xiàn)10.2.1種群初始化10.2.2適應(yīng)度函數(shù)10.2.3邊界檢查和約束10.2.4風(fēng)驅(qū)動(dòng)優(yōu)化算法10.3風(fēng)驅(qū)動(dòng)優(yōu)化算法的應(yīng)用案例10.3.1求解函數(shù)極值10.3.2帶約束問題求解:基于風(fēng)驅(qū)動(dòng)優(yōu)化算法的壓力容器設(shè)計(jì)10.4風(fēng)驅(qū)動(dòng)優(yōu)化算法的中間結(jié)果參考文獻(xiàn)第11章智能優(yōu)化算法基準(zhǔn)測(cè)試集11.1基準(zhǔn)測(cè)試集簡(jiǎn)介11.2基準(zhǔn)測(cè)試函數(shù)繪圖與測(cè)試函數(shù)代碼編寫11.2.1函數(shù)F111.2.2函數(shù)F211.2.3函數(shù)F311.2.4函數(shù)F411.2.5函數(shù)F511.2.6函數(shù)F611.2.7函數(shù)F711.2.8函數(shù)F811.2.9函數(shù)F911.2.10函數(shù)F1011.2.11函數(shù)F1111.2.12函數(shù)F1211.2.13函數(shù)F1311.2.14函數(shù)F1411.2.15函數(shù)F1511.2.16函數(shù)F1611.2.17函數(shù)F1711.2.18函數(shù)F1811.2.19函數(shù)F1911.2.20函數(shù)F2011.2.21函數(shù)F2111.2.22函數(shù)F2211.2.23函數(shù)F23第12章智能優(yōu)化算法性能測(cè)試12.1智能優(yōu)化算法性能測(cè)試方法12.1.1平均值12.1.2標(biāo)準(zhǔn)差12.1.3值和差值12.1.4收斂曲線12.2測(cè)試案例12.2.1測(cè)試函數(shù)信息12.2.2測(cè)試方法及參數(shù)設(shè)置12.2.3測(cè)試結(jié)果第1章其B現(xiàn)1.1粒子群優(yōu)化算法的基本原理粒子群優(yōu)(ParticleSwarmOptimizationPSO算法是1995年由美國學(xué)者Kennedy等人提出的,該算法是模擬鳥類覓食等群體智能行為的智能優(yōu)化算法。在自然界中,鳥群在覓食的時(shí)候,一般存在個(gè)體和群體協(xié)同的行為。有時(shí)鳥群分散覓食,有時(shí)鳥群也全體覓食。在每次覓食的過程中,都會(huì)存在一些搜索能力強(qiáng)的鳥,這些搜索能力強(qiáng)的鳥,會(huì)給其他鳥傳遞信息,帶領(lǐng)其他鳥到食物源位置。求。值值pbt)gbst。。。1.1.1????????在一個(gè)D維的目標(biāo)搜索空間中由N個(gè)粒子組成一個(gè)粒子群其中每個(gè)粒子都是一個(gè)D維向量,其空間位置可以表示為ix={1,i2",iD},i=,",N (1.1)粒子的空間位置是目標(biāo)優(yōu)化問題中的一個(gè)解將其代入適應(yīng)度函數(shù)可以計(jì)算出適應(yīng)度值,i根據(jù)適應(yīng)度值的大小衡量粒子的優(yōu)劣。第i個(gè)粒子的飛行速度也是一個(gè)D維向量,記為i i i iv=v1,v2,",vD},i=,",N (1.2)粒子的位置和速度均值都在給定的i i i i1.1.2?????????????第i個(gè)粒子經(jīng)歷過的具有最優(yōu)適應(yīng)度值的位置稱為個(gè)體歷史最優(yōu)位置,記為bsti={bti1,bsti2",bestiD},i=,",N (1.3)整個(gè)粒子群經(jīng)歷過的最優(yōu)位置稱為全局歷史最優(yōu)位置,記為2|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>gbti={gbst1,gbest2",gbestD},i=,",N (1.4)1.1.3???????????粒子群的位置更新操作可用速度更新和位置更新表示。速度更新為i 11 2 iijt+)=vj(t)+cr(bestijt)?ijt))+2r(gbestj?xji 11 2 i位置更新為i ixjt+)=xjt)+ijt+) (1.i i11 2其中,下標(biāo)j表示粒子的第j維,下標(biāo)i表示第i個(gè)粒子,t表示當(dāng)前迭代次數(shù),c與2均為加速常量,通常在區(qū)間(0,2)內(nèi)取值,r與r為兩個(gè)相互獨(dú)立的取值范圍在[0,1]的隨11 21上述方程可以看出,c與c2將粒子向個(gè)體學(xué)習(xí)和向群體學(xué)習(xí)聯(lián)合起來使得粒子能夠借鑒個(gè)體自身的搜索經(jīng)驗(yàn)和群體的搜索經(jīng)驗(yàn)。1圖1.1是用粒子群優(yōu)化算法求解優(yōu)化問題的示意圖,搜索空間是二維,全局最優(yōu)解在點(diǎn)v1best處,第i個(gè)粒子從位置1更新到了位置2。其中,1是全局歷史最優(yōu)解引起的第i個(gè)粒子的速度,2是第i個(gè)粒子歷史最優(yōu)解引起的第i個(gè)粒子的速度,3是第i個(gè)粒子原來具有的速度粒子最終的速度由v,2,3共同決定使得粒子到達(dá)新的位置接下來以同樣的方式繼續(xù)更新粒子的速度和位置,粒子會(huì)逐漸接近點(diǎn)best處的全局最優(yōu)解。v1圖1.1用粒子群優(yōu)化算法求解優(yōu)化問題的示意圖1.1.4?????????粒子群優(yōu)化算法的流程如下:1步驟1:初始化粒子群參數(shù)c與2,設(shè)置位置邊界范圍與速度邊界范圍,初始化粒子群種群,初始化粒子群速度。1步驟2:根據(jù)適應(yīng)度函數(shù)計(jì)算適應(yīng)度值,記錄歷史最優(yōu)值pbst與全局最優(yōu)值gbest。步驟3:利用速度更新公式(1.5)對(duì)粒子群的速度進(jìn)行更新,并對(duì)越界的速度進(jìn)行約束。步驟4:利用位置更新公式(1.6)對(duì)粒子群的位置進(jìn)行更新,并對(duì)越界的位置進(jìn)行約束。步驟5:根據(jù)適應(yīng)度函數(shù)計(jì)算適應(yīng)度值。步驟6:對(duì)于每個(gè)粒子,將其適應(yīng)度值與它的歷史最優(yōu)適應(yīng)度值相比較,若更好,則將其作為歷史最優(yōu)值bst。>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|3步驟7對(duì)于每個(gè)粒子比較其適應(yīng)度值和群體所經(jīng)歷的最優(yōu)位置的適應(yīng)度值若更好,則將其作為全局最優(yōu)值gbest。步驟8判斷是否達(dá)到結(jié)束條(達(dá)到最大迭代次數(shù)若達(dá)到則輸出最優(yōu)位置否則重復(fù)步驟3~8。粒子群優(yōu)化算法流程圖如圖1.2所示:圖1.2粒子群優(yōu)化算法流程圖1.2 粒子群優(yōu)化算法的MTLAB實(shí)現(xiàn)1.2.1?????MTLAB相關(guān)函數(shù)函數(shù)rand()是MTLAB自帶的隨機(jī)數(shù)生成函數(shù),會(huì)生成區(qū)間[0,1]內(nèi)的隨機(jī)數(shù)。>>rand()4|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>ans=0.5640若要一次性生成多個(gè)隨機(jī)數(shù)則可以這樣使用函數(shù)rand(ro,col)其中row與col分別代表行和列,如rand(3,4)表示生成3行4列的范圍在[0,1]之間的隨機(jī)數(shù)。>>rand(3,4)ans=0.16610.11300.25060.85760.28600.2406

0.49340.09040.79640.46750.55350.7057若要生成指定范圍內(nèi)的隨機(jī)數(shù),則可以利用如下表達(dá)式表示r=b+(ub?lb)′rand()其中ub表示范圍的上邊界lb表示范圍的下邊界例如在區(qū)間[0,4]內(nèi)生成以下5個(gè)隨機(jī)數(shù),相關(guān)代碼如下:>>(4-0).*rand(1,5)+0ans=0.16922.93351.80312.08171.693編寫粒子群初始化函數(shù)定義粒子群初始化函數(shù)名稱為initialization,并將其單獨(dú)編寫成一個(gè)函數(shù)存放在initialization.m文件中。利用節(jié)中的隨機(jī)數(shù)生成方式,生成初始種群。%%粒子群初始化函數(shù)functionX=initialization(pop,ub,lb,dim)%pop為種群數(shù)量%dim為每個(gè)粒子群的維度%ub為每個(gè)維度的變量上邊界,維度為[1,dim]%lb為每個(gè)維度的變量下邊界,維度為[1,dim]%X為輸出的種群,維度為[pop,dim]fori=1:popforj=1:dim)=)-)+;數(shù)endendend舉例設(shè)定種群數(shù)量為10每個(gè)粒子群維度均為5每個(gè)維度的邊界均為[?5,5]利用粒子群初始化函數(shù)初始化種群。>>pop=10;dim=5;>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|5ub=[5,5,5,5,5];lb=[-5,-5,-5,-5,-5];X=initialization(pop,ub,lb,dim)X=4.0128-4.00302.98291.39840.8161-0.55853.32922.8580-0.24582.54321.2.2?????

-4.1002-1.2295-1.4263-1.3664-0.83940.9041-2.0766-0.6887-0.30570.9329

2.2631-2.88672.94112.95711.63952.4232-1.90474.4058-4.33532.0006

0.3289-4.7501-3.04920.03722.3809-0.1881-2.36310.4283-1.4527-2.4433

-3.5791-2.3254-3.6387-2.84733.3831-4.53874.8229-0.1423-3.68624.3412適應(yīng)度函數(shù)是優(yōu)化問題的目標(biāo)函數(shù),根據(jù)不同應(yīng)用設(shè)計(jì)相應(yīng)的適應(yīng)度函數(shù)。我們可以將自己設(shè)計(jì)的適應(yīng)度函數(shù)單獨(dú)寫成一個(gè)函數(shù),方便優(yōu)化算法調(diào)用。一般將適應(yīng)度函數(shù)命名為fun(),這里我們定義一個(gè)適應(yīng)度函數(shù)并存放在fun.m文件中,這里適應(yīng)度函數(shù)定義如下:%%適應(yīng)度函數(shù)functionfitness=fun(x)%x為輸入一個(gè)粒子,維度為[1,dim]%fitness為輸出的適應(yīng)度值fitness=sum(x.^2);end這里我們的適應(yīng)度值就是x所有值的平方和,如x=[1,2],那么經(jīng)過適應(yīng)度函數(shù)計(jì)算后得到的值為5。>>x=[1,2];fitness=fun(x)fitness=51.2.3ш????????邊界檢查的作用是防止變量超過規(guī)定的范圍,一般當(dāng)變量大于上邊界時(shí),直接將其置為上邊界;當(dāng)變量小于下邊界時(shí),直接將其置為下邊界。邏輯如下:ub,ìíl=?ub,ìí

al>ubl<b定義邊界檢查函數(shù)為BoundaryCheck(),并將其保存為BoundaryCheck.m文件。%%邊界檢查函數(shù)function[X]=BoundaryCheck(x,ub,lb,dim)6|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>%dim為數(shù)據(jù)維度的大小%x為輸入數(shù)據(jù),維度為[1,dim]%ub為數(shù)據(jù)上邊界,維度為[1,dim]%lb為數(shù)據(jù)下邊界,維度為[1,dim]fori=1:dimifx(i)>ub(i)x(i)=ub(i);endifx(i)<lb(i)x(i)=lb(i);endendX=x;end舉例:例如,x=[1,?2,3,?4],定義上邊界為[1,1,1,1],下邊界為[?1,?1,?1,?1]。于是經(jīng)過邊界檢查和約束后,X應(yīng)為[1,?1,1,?1]。>>dim=4;x=[1,-2,3,-4];ub=[1,1,1,1];lb=[-1,-1,-1,-1];X=BoundaryCheck(x,ub,lb,dim)X=1-1 1-11.2.4?????????由1.1節(jié)粒子群優(yōu)化算法的基本原理可知,編寫粒子群優(yōu)化算法的全部代碼,定義粒子群優(yōu)化算法的函數(shù)名稱為pso,并將其保存為pso.m文件。%%--------------粒子群優(yōu)化函數(shù)----------------------%%%%輸入:%pop為種群數(shù)量%dim為單個(gè)粒子的維度%ub為粒子的上邊界,維度為[1,dim]%lb為粒子的下邊界,維度為[1,dim]%fobj為適應(yīng)度函數(shù)接口%vmax為速度的上邊界,維度為[1,dim]%vmin為速度的下邊界,維度為[1,dim]%maxIter為算法的最大迭代次數(shù),用于控制算法的停止%%輸出:%Best_Pos為粒子群找到的最優(yōu)位置%Best_fitness為最優(yōu)位置對(duì)應(yīng)的適應(yīng)度值%IterCurve用于記錄每次迭代的最優(yōu)適應(yīng)度值,即后續(xù)用來繪制迭代曲線function[Best_Pos,Best_fitness,IterCurve]=pso(pop,dim,ub,lb,fobj,vmax,vmin,maxIter)>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|7%%設(shè)置參數(shù)c1與c2c1=2.0;c2=2.0;%%初始化種群速度V=initialization(pop,vmax,vmin,dim);%%初始化種群位置X=initialization(pop,ub,lb,dim);%%計(jì)算適應(yīng)度值fitness=zeros(1,pop);fori=1:popfitness(i)=fobj(X(i,:));end%%將初始種群作為歷史最優(yōu)值pBest=X;pBestFitness=fitness;%%記錄初始全局最優(yōu)值,默認(rèn)優(yōu)化最小值%尋找適應(yīng)度最小的位置[~,index]=min(fitness);%記錄適應(yīng)度值和位置gBestFitness=fitness(index);gBest=X(index,:);Xnew=X;fitnessNew=fitness;

%新位置%新位置的適應(yīng)度值IterCurve=zeros(1,maxIter);%%開始迭代fort=1:maxIter%對(duì)每個(gè)粒子進(jìn)行更新fori=1:pop%速度更新r1=rand(1,dim);r2=rand(1,dim);)=)+)-)+t-X(i,:));%速度邊界檢查及約束V(i,:)=BoundaryCheck(V(i,:),vmax,vmin,dim);%位置更新Xnew(i,:)=X(i,:)+V(i,:);%位置邊界檢查及約束Xnew(i,:)=BoundaryCheck(Xnew(i,:),ub,lb,dim);%計(jì)算新位置的適應(yīng)度值fitnessNew(i)=fobj(Xnew(i,:));%更新歷史最優(yōu)值iffitnessNew(i)<pBestFitness(i)pBest(i,:)=Xnew(i,:);8|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>pBestFitness(i)=fitnessNew(i);end%更新全局最優(yōu)值iffitnessNew(i)<gBestFitnessgBestFitness=fitnessNew(i);gBest=Xnew(i,:);endendX=Xnew;fitness=fitnessNew;%%記錄當(dāng)前迭代最優(yōu)值和最優(yōu)適應(yīng)度值%記錄最優(yōu)解Best_Pos=gBest;%記錄最優(yōu)解的適應(yīng)度值Best_fitness=gBestFitness;%記錄當(dāng)前迭代最優(yōu)解的適應(yīng)度值IterCurve(t)=gBestFitness;endend至此,粒子群優(yōu)化算法的代碼基本編寫完成,所有涉及粒子群優(yōu)化算法的子函數(shù)均包括如圖1.3所示的.m文件。圖1.3.m文件下一節(jié)將講解如何使用上述粒子群優(yōu)化算法來解決優(yōu)化問題。1.3 粒子群優(yōu)化算法的應(yīng)用案例1.3.1??????21 1問題描述:求解一組x1,x2,使得下面函數(shù)的值最小。f(x,2)=x2+21 1其中,x1與x2的取值范圍分別為[?10,10],[?10,10]。首先,我們可以利用MTLAB繪圖的方式來查看搜索空間是什么,然后繪制該函數(shù)的搜索曲面,結(jié)果如圖1.4所示。%%繪制f(x1,x2)的搜索曲面x1=-10:0.01:10;x2=-10:0.01:10;fori=1:size(x1,2)forj=1:size(x2,2)>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|9X1(i,j)=x1(i);X2(i,j)=x2(j);f(i,j)=x1(i)^2+x2(j)^2;endendsurfc(X1,X2,f,'LineStyle','none');%繪制搜索曲面圖1.4f(x1,x2)的搜索曲面從函數(shù)表達(dá)式和搜索空間可知,該函數(shù)的最小值為0,最優(yōu)解為x1=0,x2=0。利用粒子群優(yōu)化算法對(duì)該問題進(jìn)行求解,設(shè)置粒子群的種群數(shù)量pop為50,最大迭代次數(shù)maxIter為100,由于是求解x1與x2,因此將粒子的維度dim設(shè)置為2,粒子上邊界ub=[10,10],粒子下邊界lb=[?10,?10],速度上邊界vmax=[2,2],速度下邊界vmin=[?2,?2]。根據(jù)問題設(shè)定如下適應(yīng)度函數(shù)fun.。%%適應(yīng)度函數(shù)functionfitness=fun(x)%x為輸入一個(gè)粒子,維度為[1,dim]%fitness為輸出的適應(yīng)度值fitness=x(1)^2+x(2)^2;end求解該問題的主函數(shù)main.m如下:%%利用粒子群優(yōu)化算法求解x1^2+x2^2的最小值clc;clearall;closeall;%粒子群參數(shù)設(shè)定pop=50;dim=2;ub=[10,10];lb=[-10,-10];vmax=[2,2];vmin=[-2,-2];maxIter=100;fobj=@(x)fun(x);

%種群數(shù)量%變量維度%粒子的上邊界信息%粒子的下邊界信息%粒子的速度上邊界%粒子的速度下邊界%最大迭代次數(shù)%設(shè)置適應(yīng)度函數(shù)為fun(x)10|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>%利用粒子群優(yōu)化算法求解問題[Best_Pos,Best_fitness,IterCurve]=pso(pop,dim,ub,lb,fobj,vmax,vmin,maxIter);%繪制迭代曲線figureplot(IterCurve,'r-','linewidth',1.5);gridon;%網(wǎng)格開title('粒子群迭代曲線')xlabel('迭代次數(shù)')ylabel('適應(yīng)度值')的2';disp(['最優(yōu)解對(duì)應(yīng)的函數(shù)值為:',num2str(Best_fitness)]);程序運(yùn)行結(jié)果如圖1.5所示。圖1.5程序運(yùn)行結(jié)果輸出結(jié)果如下:求解得到的x1,x2為:-0.0044388-0.0090971最優(yōu)解對(duì)應(yīng)的函數(shù)值為:0.00010246從粒子群優(yōu)化算法尋優(yōu)的結(jié)果來看,使用粒子群優(yōu)化算法得到的最終值,0.0090971,非常接近理論最優(yōu)值(0,0),表明粒子群優(yōu)化算法具有尋優(yōu)能力強(qiáng)的特點(diǎn)。1.3.2????????????????????????問題描述壓力容器設(shè)計(jì)問題的目標(biāo)是使壓力容器制作(配對(duì)、成型和焊接)成本最低,壓力容器示意圖如圖1.6所示,壓力容器的兩端都由封蓋封住,頭部一端的封蓋為半球狀。L是不考慮頭部的圓柱體部分的截面長度R是圓柱體的內(nèi)壁半徑Ts和Th分別表示圓柱體的壁厚和>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|1頭部的壁厚LRTs和Th即為壓力容器設(shè)計(jì)問題的4個(gè)優(yōu)化變量該問題的目標(biāo)函數(shù)表示如下:1 sx=[x,2,3,x4]=T,h,R,1 s21 1 1inf(x)=.6224x34+1.77823+3.166x24+19.821 1 11目標(biāo)函數(shù)的約束條件表示如下:1(x)=?x+0.01933≤01g2(x)=?x+0.009543≤02 3g3(x)=?π3?4π3/3+1296002 3g4(x)=4?240≤0x0≤1≤10,0≤x≤10,10≤3≤10,10≤4≤100 圖1.壓力容器示意圖x適應(yīng)度函數(shù)設(shè)計(jì)在該問題中,我們求解的問題是帶約束條件的問題,其中約束條件為x0≤1≤10,0≤2≤10,10≤3≤10,10≤x4≤100x通過粒子群尋優(yōu)的邊界對(duì)約束條件進(jìn)行設(shè)置,即設(shè)置粒子x上邊界為ub=[100,100,100,100]粒子x下邊界為lb=[0,0,10,10]其中需要在適應(yīng)度函數(shù)中對(duì)g1(x),g2(x),g3(x),g4(x)進(jìn)行約束,若x1,x2,x3,x4均不滿足約束條件,則設(shè)置該適應(yīng)度函數(shù)無效,并將其設(shè)置為inf。定義適應(yīng)度函數(shù)fun.m如下:%壓力容器適應(yīng)度函數(shù)functionfitness=fun(x)x1=x(1);%Tsx2=x(2);%Thx3=x(3);%Rx4=x(4);%L%%約束條件判斷g1=-x1+0.0193*x3;g2=-x2+0.00954*x3;g3=-pi*x3^2-4*pi*x3^3/3+1296000;g4=x4-240;if(g1<=0&&g2<=0&&g3<=0&&g4<=0)%若滿足約束條件,則計(jì)算適應(yīng)度值fitness=0.6224*x1*x3*x4+1.7781*x2*x3^2+3.1661*x1^2*x4+19.84*x1^2*x3;else%否則適應(yīng)度函數(shù)無效fitness=inf;endend12|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>粒子群主函數(shù)設(shè)計(jì)通過上述分析,可以設(shè)置粒子群參數(shù)如下:量p為數(shù)r為度m置為即界b界界x=界n數(shù)m:%%基于粒子群優(yōu)化算法的壓力容器設(shè)計(jì)clc;clearall;closeall;%粒子群參數(shù)設(shè)定pop=50;dim=4;ub=[100,100,100,100];lb=[0,0,10,10];vmax=[2,2,2,2];vmin=[-2,-2,-2,-2];maxIter=500;fobj=@(x)fun(x);%粒子群求解問題

%種群數(shù)量%變量維度%粒子的上邊界%粒子的下邊界%粒子的速度上邊界%粒子的速度下邊界%最大迭代次數(shù)%設(shè)置適應(yīng)度函數(shù)為fun(x)[Best_Pos,Best_fitness,IterCurve]=pso(pop,dim,ub,lb,fobj,vmax,vmin,maxIter);%繪制迭代曲線figureplot(IterCurve,'r-','linewidth',1.5);gridon;%網(wǎng)格開title('粒子群迭代曲線')xlabel('迭代次數(shù)')ylabel('適應(yīng)度值')disp(['求解得到的x1,x2,x3,x4為:',num2str(Best_Pos(1)),'',num2str(Best_Pos(2)),'',num2str(Best_Pos(3)),'',num2str(Best_Pos(4))]);disp(['最優(yōu)解對(duì)應(yīng)的函數(shù)值為:',num2str(Best_fitness)]);程序運(yùn)行結(jié)果如圖1.7所示。圖1.7程序運(yùn)行結(jié)果>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|13輸出結(jié)果如下:求解得到的x1,x2,x3,x4為:1.35660.6532267.822147.9934最優(yōu)解對(duì)應(yīng)的函數(shù)值為:10846.8139數(shù)。1.4 粒子群優(yōu)化算法的中間結(jié)果為了更加直觀地了解粒子群在每代的分布、前后迭代、粒子群的位置變化,以及每代中最優(yōu)粒子的位置以1.3.1節(jié)中求函數(shù)極值為例如圖1.8所示需要將粒子群優(yōu)化算法的中間結(jié)果繪制出來。為了達(dá)到此目的,我們需要記錄每代粒子群的位置(HistoryPosition,同時(shí)記錄每代最優(yōu)粒子的位(HistoryBest然后通過MTLAB繪圖函數(shù)將圖像繪制出來。圖1.8粒子群每代分布圖從圖1.8可以看出,隨著迭代次數(shù)的增加,整個(gè)種群和最優(yōu)粒子是向著中心位置(0,0)靠近的,說明粒子群不斷地朝著最優(yōu)位置靠近。通過這種方式可以直觀地看到粒子群的搜索過程。使得粒子群優(yōu)化算法變得更加直觀。14|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>記錄每代位置的MTLAB代碼如下:%%--------------粒子群優(yōu)化算法----------------------%%%%輸入:%pop為種群數(shù)量%dim為單個(gè)粒子的維度%ub為粒子的上邊界,維度為[1,dim]%lb為粒子的下邊界,維度為[1,dim]%fobj為適應(yīng)度函數(shù)接口%vmax為速度的上邊界,維度為[1,dim]%vmin為速度的下邊界,維度為[1,dim]%maxIter為算法的最大迭代次數(shù),用于控制算法的停止%%輸出:%Best_Pos為粒子群找到的最優(yōu)位置%Best_fitness為最優(yōu)位置對(duì)應(yīng)的適應(yīng)度值%IterCurve用于記錄每次迭代的最優(yōu)適應(yīng)度值,即后續(xù)用來繪制迭代曲線%HistoryPosition用于記錄每代粒子群的位置%HistoryBest用于記錄每代粒子群的最優(yōu)位置function[Best_Pos,Best_fitness,IterCurve,HistoryPosition,HistoryBest]=pso(pop,dim,ub,lb,fobj,vmax,vmin,maxIter)%%設(shè)置參數(shù)c1與c2c1=2.0;c2=2.0;%%初始化種群速度V=initialization(pop,vmax,vmin,dim);%%初始化種群位置X=initialization(pop,ub,lb,dim);%%計(jì)算適應(yīng)度值fitness=zeros(1,pop);fori=1:popfitness(i)=fobj(X(i,:));end%%將初始種群作為歷史最優(yōu)值pBest=X;pBestFitness=fitness;%%記錄初始全局最優(yōu)值,默認(rèn)優(yōu)化最小值%尋找適應(yīng)度值最小的位置[~,index]=min(fitness);%記錄適應(yīng)度值和位置gBestFitness=fitness(index);gBest=X(index,:);Xnew=X;%新位置fitnessNew=fitness;%新位置的適應(yīng)度值IterCurve=zeros(1,maxIter);%%開始迭代>>>|第1章粒子群優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|15fort=1:maxIter%對(duì)每個(gè)粒子速度進(jìn)行更新fori=1:pop%速度更新r1=rand(1,dim);r2=rand(1,dim);)=)+)-)+t-X(i,:));%速度邊界檢查及約束V(i,:)=BoundaryCheck(V(i,:),vmax,vmin,dim);%位置更新Xnew(i,:)=X(i,:)+V(i,:);%位置邊界檢查及約束Xnew(i,:)=BoundaryCheck(Xnew(i,:),ub,lb,dim);%計(jì)算新位置的適應(yīng)度值fitnessNew(i)=fobj(Xnew(i,:));%更新歷史最優(yōu)值iffitnessNew(i)<pBestFitness(i)pBest(i,:)=Xnew(i,:);pBestFitness(i)=fitnessNew(i);end%更新全局最優(yōu)值iffitnessNew(i)<gBestFitnessgBestFitness=fitnessNew(i);gBest=Xnew(i,:);endendX=Xnew;fitness=fitnessNew;%%記錄當(dāng)前迭代最優(yōu)值和最優(yōu)適應(yīng)度值%記錄最優(yōu)值Best_Pos=gBest;%記錄最優(yōu)值的適應(yīng)度值Best_fitness=gBestFitness;%記錄當(dāng)前迭代的最優(yōu)適應(yīng)度值IterCurve(t)=gBestFitness;HistoryBest{t}=Best_Pos;%記錄當(dāng)前代粒子群的位置HistoryPosition{t}=X;endend繪制每代信息的函數(shù)代碼如下:%%繪制每代粒子群分布fori=1:maxIterPosition=HistoryPosition{i};%獲取當(dāng)前代位置BestPosition=HistoryBest{i};%獲取當(dāng)前代最優(yōu)位置16|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>figure(3)plot(Position(:,1),Position(:,2),'*','linewidth',3);holdon;plot(BestPosition(1),BestPosition(2),'ro','linewidth',3);gridon;axis([-1010,-10,10])legend('粒子','最優(yōu)粒子');title(['第',num2str(i),'次迭代']);holdoffend參考文獻(xiàn)[1] KENNEDYJ,EBERHARTR.ParticleSwarmOptimization[C].ProceedingsofIEEEInternationalConferenceonNeuralNetworks,1995:1942-1948.[2] 李士勇,李研,林永茂.智能優(yōu)化算法與涌現(xiàn)計(jì)算[M].北京:清華大學(xué)出版社,2019.[3] 趙毅.粒子群優(yōu)化算法的改進(jìn)和應(yīng)用研究[D].沈陽:沈陽工業(yè)大學(xué),2019.[4] 李明.標(biāo)準(zhǔn)粒子群算法的收斂性分析及改進(jìn)研究[D].錦州:渤海大學(xué),2017.[5] 謝錚桂鐘少丹韋玉科.改進(jìn)的粒子群算法及收斂性分析[J].計(jì)算機(jī)工程與應(yīng)用201147(1):46-49.[6] 李愛國,覃征,鮑復(fù)民,等.粒子群優(yōu)化算法[J].計(jì)算機(jī)工程與應(yīng)用,2002(21):1-3,17.[7] 張利彪,周春光,馬銘,等.基于粒子群算法求解多目標(biāo)優(yōu)化問題[J].計(jì)算機(jī)研究與發(fā)展,2004(7):1286-1291.[8] 張麗平.粒子群優(yōu)化算法的理論及實(shí)踐[D].杭州:浙江大學(xué),2005.[9] 周馳,高海兵,高亮,等.粒子群優(yōu)化算法[J].計(jì)算機(jī)應(yīng)用研究,2003(12):7-11.[10]張麗平,俞歡軍,陳德釗,等.粒子群優(yōu)化算法的分析與改進(jìn)[J].信息與控制,2004(5):513-517.[11]侯志榮,呂振肅.基于MATLAB的粒子群優(yōu)化算法及其應(yīng)用[J].計(jì)算機(jī)仿真,2003(10):68-70.[12]潘峰,陳杰,甘明剛,等.粒子群優(yōu)化算法模型分析[J].自動(dòng)化學(xué)報(bào),2006(3):368-377.[13]ARORA.J.S.IntroductiontoOptimumDesign[M].AcademicPress,2004.[14]胡志敏顏學(xué)峰.雙層粒子群算法及應(yīng)用于壓力容器設(shè)計(jì)[J].計(jì)算機(jī)與應(yīng)用化學(xué)201229(9):111-114.第2章 蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)2.1 蟻獅優(yōu)化算法的基本原理蟻獅優(yōu)(AntLionOptimizationALO算法是2014年由澳大利亞學(xué)者SeyedaliMirjalili提出的,該算法的核心思想是模擬蟻獅捕獵螞蟻的狩獵機(jī)制以實(shí)現(xiàn)全局尋優(yōu)。蟻獅在捕獵前利用其巨大的下顎在沙子中挖出一個(gè)漏斗狀的陷阱,并藏在陷阱底部等待獵物的到來,如圖2.1所示。一旦隨機(jī)游走的螞蟻落入陷阱,蟻獅就會(huì)迅速將其捕食,隨后重新修繕陷阱等待下一次捕獵。圖2.1蟻獅的捕獵行為蟻獅優(yōu)化算法通過數(shù)值模擬實(shí)現(xiàn)螞蟻和蟻獅之間的相互作用對(duì)問題進(jìn)行優(yōu)化,即引入螞蟻的隨機(jī)游走機(jī)制并實(shí)現(xiàn)全局搜索,通過輪盤賭策略和精英策略保證種群的多樣性和算法的尋優(yōu)性。蟻獅相當(dāng)于優(yōu)化問題的解,通過捕獵高適應(yīng)度的螞蟻,實(shí)現(xiàn)對(duì)近似最優(yōu)值的更新和保存。2.1.1???????螞蟻在覓食過程中是隨機(jī)移動(dòng)的利用隨機(jī)游走來模擬螞蟻的移動(dòng)隨機(jī)游走的表達(dá)式為Xt)=[cusm(2r(1)?,cusum(2r(t2)?",cusum(2r(tmaxter)?] (2.1)其中,X(t)為螞蟻的位置,cusum為累加和,t為當(dāng)前的迭代次數(shù),r(t)為隨機(jī)函數(shù),即,ìír(t)=,ìí

nd≤0.5rnd>0.5

(2.2)18|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>=ici=ici其中,rand是在區(qū)間[0,1]內(nèi)均勻分布的隨機(jī)數(shù)。螞蟻在進(jìn)行隨機(jī)游走后,需要對(duì)游走后的位置進(jìn)行歸一化,即t t tt tb?aXj=(Xj?aj)(dj?cj)+t t tt tb?a其中Xjt表示第j維在t次迭代時(shí)的標(biāo)準(zhǔn)化位置aj為第j維變量隨機(jī)游走的最小值bj為第j維變量隨機(jī)游走的最大值;cjt為第j維變量在第t次迭代的最小值;djt為第j維變量在第t次迭代的最大值。2.1.2????為了模擬蟻獅的捕獵能力,采用了輪盤賭策略。如圖2.2所示,假設(shè)螞蟻只被困在一只選定的蟻獅陷阱中,蟻獅優(yōu)化算法在優(yōu)化過程中,輪盤賭策略根據(jù)蟻群的適應(yīng)度選擇蟻群。這一機(jī)制為更適合的蟻獅捕食螞蟻提供了更好的機(jī)會(huì)。圖2.2螞蟻在蟻獅陷阱里的隨機(jī)游走ìí?螞蟻的隨機(jī)游走受到蟻獅陷阱的影響。陷阱對(duì)螞蟻的影響可以用如下表達(dá)式表ìí?t?tiont+ct,j?tiont?ct,ìí?d=iit?ntiont+dt,j?ntliont?ìí?d=ii

rnd<05rnd≥0.5nd<05rnd≥0.5

(2.4)(2.5)其中,Antlionit為第i只螞蟻在第t代的位置,cjt為第j維變量在第t次迭代的最小值,djt為第j維變量在第t次迭代的最大值,c與d分別為第t代的游走邊界。2.1.3????????因?yàn)槲浵伒囊苿?dòng)是隨機(jī)的,所以蟻獅需要根據(jù)自身的適應(yīng)性來構(gòu)造陷阱。當(dāng)螞蟻進(jìn)入陷>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|19阱時(shí),蟻獅會(huì)向坑中央噴射沙子,使沙子從試圖逃跑的螞蟻身上滑下來,導(dǎo)致螞蟻隨機(jī)游走的超球半徑自適應(yīng)地減小,有利于蟻獅捕食螞蟻。在蟻獅捕捉螞蟻的過程中,陷阱表現(xiàn)為螞蟻游走邊界不斷縮小,即ctcct=I (2.6)dtddt=I (2.7)其中,I隨著迭代次數(shù)的增加分段線性增加,即tI=10wxtr (2.8)tt為當(dāng)前迭代次數(shù),w取決于當(dāng)前代數(shù)。ì0.1′xter,???0.5′xter???t>í0.75′xter,?′??0.9′xtr,′??0.95xter,

w=2w=3w=4 (2.9)w=5w=62.1.4?????????,最后階段是當(dāng)一只螞蟻到達(dá)坑底,且被蟻獅的下巴夾住時(shí);在該階段后,蟻獅把螞蟻拉到沙子里吃掉為了模仿這一過程假設(shè)當(dāng)螞蟻?zhàn)兊帽认鄳?yīng)的蟻獅更適合捕食(進(jìn)入沙子)然后,蟻獅需要更新自己的位置到被捕食螞蟻的最新位置,以提高捕捉新獵物的概率。,t tt tntoni=nti, f(nti)>f(ntioni) (t tt t精英策略是進(jìn)化算法的一個(gè)重要特征,它使進(jìn)化算法能夠保持在優(yōu)化過程中的任何階段所獲得的最優(yōu)解。將每次迭代中得到的最佳蟻獅均保存為精英蟻獅中。因?yàn)榫⑹沁m應(yīng)度最好的蟻獅,它能夠在迭代過程中影響所有螞蟻的移動(dòng)。所以,每只螞蟻均同時(shí)根據(jù)輪盤賭策略和精英策略隨機(jī)地圍繞一個(gè)選定的蟻獅行走。intt=(RAt+REt)/ (2.1)i其中,Antit表示第i只螞蟻在第t次迭代時(shí)的位置,RAt表示螞蟻在第t次迭代時(shí)圍繞適應(yīng)度輪盤賭選擇蟻獅隨機(jī)游走后的位置,REt表示螞蟻在第t次迭代時(shí)圍繞精英蟻獅隨機(jī)游走后的位置。2.1.5????????蟻獅優(yōu)化算法流程圖如圖2.3所示。蟻獅優(yōu)化算法的具體步驟如下:步驟1:設(shè)定參數(shù),初始化種群。步驟2:計(jì)算適應(yīng)度值并排序,記錄全局最優(yōu)位置。步驟3:獲取精英蟻獅位置,通過輪盤賭策略選擇另外一只蟻獅。20|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>步驟4:螞蟻分別圍繞精英蟻獅和隨機(jī)蟻獅進(jìn)行隨機(jī)游走。步驟5:更新螞蟻位置,合并螞蟻和蟻獅位置,更新蟻獅位置。步驟6:是否滿足結(jié)束條件,若滿足,則輸出最優(yōu)蟻獅位置;否則重復(fù)步驟2~6。圖2.3蟻獅優(yōu)化算法流程圖2.2 蟻獅優(yōu)化算法的MTLAB實(shí)現(xiàn)2.2.1?????MTLAB相關(guān)函數(shù)函數(shù)rand()是MTLAB自帶的隨機(jī)數(shù)生成函數(shù),能生成區(qū)間[0,1]內(nèi)的隨機(jī)數(shù)。>>rand()ans=0.5640若要一次性生成多個(gè)隨機(jī)數(shù)則可以這樣使用函數(shù)rand(ro,col)其中row和col分別表示行和列,如rand(3,4)表示生成3行4列的范圍在區(qū)間[0,1]內(nèi)的隨機(jī)數(shù)。>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|21>>rand(3,4)ans=0.16610.11300.25060.85760.28600.2406

0.49340.09040.79640.46750.55350.7057若要生成指定范圍內(nèi)的隨機(jī)數(shù),則可以利用如下表達(dá)式表示r=b+(ub?b)′rd()其中ub表示范圍的上邊界lb表示范圍的下邊界如在區(qū)間[0,4]內(nèi)生成5個(gè)隨機(jī)數(shù)相關(guān)代碼如下:>>(4-0).*rand(1,5)+0ans=0.16922.93351.80312.08171.693編寫蟻獅初始化函數(shù)定義蟻獅初始化函數(shù)名稱為initialization,并單獨(dú)編寫成一個(gè)函數(shù)并將該函數(shù)存放在initialization.m文件中。利用節(jié)中的隨機(jī)數(shù)生成方式,生成初始種群。%%種群初始化函數(shù)functionX=initialization(pop,ub,lb,dim)%pop為蟻獅種群數(shù)量%dim為單個(gè)蟻獅的維度%ub為每個(gè)維度的變量上邊界,維度為[1,dim]%lb為每個(gè)維度的變量下邊界,維度為[1,dim]%X為輸出的種群,維度為[pop,dim]X=zeros(pop,dim);%為X事先分配空間fori=1:popforj=1:dim)=)-)+;數(shù)endendend例如設(shè)定種群數(shù)量為10每個(gè)螞蟻維度均為5每個(gè)維度的邊界均為[?5,5]利用初始化函數(shù)初始化種群。>>pop=10;dim=5;ub=[5,5,5,5,5];lb=[-5,-5,-5,-5,-5];X=initialization(pop,ub,lb,dim)X=22|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>4.0128-4.00302.98291.39840.8161-0.55853.32922.8580-0.24582.54322.2.2?????

-4.1002-1.2295-1.4263-1.3664-0.83940.9041-2.0766-0.6887-0.30570.9329

2.2631-2.88672.94112.95711.63952.4232-1.90474.4058-4.33532.0006

0.3289-4.7501-3.04920.03722.3809-0.1881-2.36310.4283-1.4527-2.4433

-3.5791-2.3254-3.6387-2.84733.3831-4.53874.8229-0.1423-3.68624.3412適應(yīng)度函數(shù)是優(yōu)化問題的目標(biāo)函數(shù),根據(jù)不同應(yīng)用設(shè)計(jì)相應(yīng)的適應(yīng)度函數(shù)。我們可以把自己設(shè)計(jì)的適應(yīng)度函數(shù)單獨(dú)寫成一個(gè)函數(shù)方便優(yōu)化算法調(diào)用一般將適應(yīng)度函數(shù)命名為fun,這里我們定義一個(gè)適應(yīng)度函數(shù)并將其存放在fun.m文件中,這里適應(yīng)度函數(shù)定義如下:%%適應(yīng)度函數(shù)functionfitness=fun(x)%x為輸入一只螞蟻,維度為[1,dim]%fitness為輸出的適應(yīng)度值fitness=sum(x.^2);end這里,適應(yīng)度值就是x所有值的平方和,如x=[1,2],那么經(jīng)過適應(yīng)度函數(shù)后得到的值為5。>>x=[1,2];fitness=fun(x)fitness=52.2.3ш??????邊界檢查的作用是防止變量超過規(guī)定的范圍,一般當(dāng)變量大于上邊界時(shí),直接將其設(shè)置為上邊界;當(dāng)變量小于下邊界時(shí),直接將其設(shè)置為下邊界,其具體邏輯表達(dá)式如下:ub,ìíl=?ub,ìí

l>bl<b定義邊界檢查函數(shù)為BoundaryCheck(),并將其保存為BoundaryCheck.m文件。%%邊界檢查函數(shù)function[X]=BoundaryCheck(x,ub,lb,dim)%dim為數(shù)據(jù)的維度大小%x為輸入數(shù)據(jù),維度為[1,dim]%ub為數(shù)據(jù)上邊界,維度為[1,dim]%lb為數(shù)據(jù)下邊界,維度為[1,dim]>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|23fori=1:dimifx(i)>ub(i)x(i)=ub(i);endifx(i)<lb(i)x(i)=lb(i);endendX=x;end假設(shè)x=[1,?2,3,?4]定義的上邊界為[1,1,1,1]下邊界為[?1,?1,?1,?1]于是在經(jīng)過邊界檢查和約束后,x應(yīng)該為[1,?1,1,?1]。>>dim=4;x=[1,-2,3,-4];ub=[1,1,1,1];lb=[-1,-1,-1,-1];X=BoundaryCheck(x,ub,lb,dim)X=1-1 1-12.2.4在蟻獅優(yōu)化算法中,蟻獅的選擇是通過輪盤賭策略進(jìn)行選擇的。輪盤賭策略是指在一群螞蟻中,隨機(jī)挑選一只螞蟻,但是挑選的概率并不是均勻分布的,而是適度值越大,被選中的概率越大。定義輪盤賭策略函數(shù)為RouletteWheelSelection()將其并保存為RouletteWheelSelection.m文件。%%輪盤賭策略%weights為輸入的權(quán)重,在蟻獅優(yōu)化算法中,weights為各蟻獅的適應(yīng)度值%choice為輸出,含義為被選中螞蟻的索引functionchoice=RouletteWheelSelection(weights)accumulation=cumsum(weights);%權(quán)重累加p=)*;值chosen_index=-1;forindex=1:length(accumulation)if(accumulation(index)>=p)%若大于或等于閾值,則輸出當(dāng)前索引,并將其作為結(jié)果,循環(huán)結(jié)束chosen_index=index;break;endendchoice=chosen_index;end24|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>其中涉及的MTLAB函數(shù)cumsum()為累加函數(shù)如X=[x1,x2,x3]則cumsum(X)得到的結(jié)果為X=[x1,(x1+x2),x3]。>>cumsum([1,1,3])ans=1 2 5為了驗(yàn)證輪盤賭策略的有效性,假設(shè)X=[1,5,3],那么當(dāng)運(yùn)行200次后,理論上選中5的概率應(yīng)該比較大,即返回的索引應(yīng)該是位置2,測(cè)試如下:X=[1,5,3];fori=1:20index(i)=RouletteWheelSelection(X);end%分別統(tǒng)計(jì)位置1,2,3被選中的概率p1=sum(index==1)/20;p2=sum(index==2)/20;p3=sum(index==3)/20;disp(['位置1被選中的概率:',num2str(p1)]);disp(['位置2被選中的概率:',num2str(p2)]);disp(['位置3被選中的概率:',num2str(p3)]);輸出結(jié)果如下:位置1被選中的概率:0.15位置2被選中的概率:0.5位置3被選中的概率:0.35從結(jié)果來看,的確是位置2被選中的概率更高。2.2.5???????????蟻獅優(yōu)化算法的隨機(jī)游走主要包含以下步驟:①計(jì)算隨機(jī)游走系數(shù)I;②計(jì)算隨機(jī)游走邊界;③根據(jù)隨機(jī)游走邊界進(jìn)行隨機(jī)游走。計(jì)算隨機(jī)游走系數(shù)I隨機(jī)游走系數(shù)I隨著迭代次數(shù)的增加而分段線性增加,即tI=10wxtrt其中,t為當(dāng)前迭代次數(shù),w取決于當(dāng)前代數(shù)。??ì0.1′maxr???0.5′xter,?t>í0.75′axter,?′??0.9′xtr,′??0.95xter,

w=w=3w=4w=5w=6>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|25ìí?=idìí?=idi計(jì)算隨機(jī)游走系數(shù)的具體MTLAB代碼如下:%%計(jì)算隨機(jī)游走系數(shù)I:I=1;w=1;ift>0.1*maxIterw=2;endift>maxIter*0.5w=3;endift>maxIter*0.75w=4;endift>maxIter*(0.9)w=5;endifcurrent_iter>maxIter*(0.9)w=6;endI=1+10^w*(t/maxIter);%加1是為了防止I==0計(jì)算隨機(jī)游走邊界隨機(jī)游走邊界的計(jì)算公式為ìí?=icit?ntiont+ct,j?ntnt?ctìí?=ici

and<05and≥0.5t?ntiont+dt,j?ntiont?dt,

and<0.5and≥0.5其中,Antlionit為第i只螞蟻在第t代的位置,cjt為第j維變量在第t次迭代的最小值;djt為第j維變量在第t次迭代的最大值,ct與dt分別為第t代的隨機(jī)游走邊界。在蟻獅捕捉螞蟻的過程中,陷阱表現(xiàn)為螞蟻的隨機(jī)游走邊界不斷縮小,則ctct=Icdtdt=Id其中,式中主要包含陷阱邊界和螞蟻邊界。計(jì)算隨機(jī)游走邊界的具體MTLAB代碼如下。%%計(jì)算隨機(jī)游走邊界%根據(jù)隨機(jī)游走系數(shù)確定陷阱邊界lb=lb/(I);%下邊界ub=ub/(I);%上邊界26|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>%計(jì)算螞蟻下邊界ifrand<0.5lb=lb+antlion;elselb=-lb+antlion;end%計(jì)算螞蟻上邊界ifrand>=0.5ub=ub+antlion;elseub=-ub+antlion;end計(jì)算隨機(jī)游走后的位置計(jì)算隨機(jī)游走后的位置的原理為X(t)=[cusm(2r(1)?,cusum(2r(t2)?)",cusum(2r(tmxter)?]其中,X(t)為螞蟻的位置,cumsum為累加和,t為當(dāng)前的迭代次數(shù),r(t)為隨機(jī)函數(shù),即,ìír(t)=,ìí

nd≤0.5rnd>0.5其中,rand為在區(qū)間[0,1]內(nèi)均勻分布的隨機(jī)數(shù)。在螞蟻進(jìn)行隨機(jī)游走后,需要對(duì)隨機(jī)游走后的位置進(jìn)行歸一化,即t t tt tb?aXj=(Xj?aj)(dj?ct t tt tb?a注意,先進(jìn)行隨機(jī)游走然后根據(jù)邊界歸一化。計(jì)算隨機(jī)游走后的位置的具體MTLAB代碼如下:%%計(jì)算隨機(jī)游走后的位置fori=1:dimX=[0cumsum(2*(rand(maxIter,1)>0.5)-1)'];a=min(X);b=max(X);c=lb(i);d=ub(i);X_norm=((X-a).*(d-c))./(b-a)+c;end隨機(jī)游走函數(shù)整體代碼根據(jù)~節(jié)將隨機(jī)游走編寫為一個(gè)模塊,定義函數(shù)名稱為Random_walk_around_antlion(),并將其保存為Random_walk_around_antlion.m文件。%%蟻獅優(yōu)化算法的隨機(jī)游走%%輸入:%dim:蟻獅維度%maxIter:最大迭代次數(shù)>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|27%lb:蟻獅下邊界維度為1×dim%ub:蟻獅上邊界維度為1×dim%antlion:蟻獅%t:當(dāng)前迭代次數(shù)%%輸出%RWs為隨機(jī)游走后歸一化的位置function[RWs]=Random_walk_around_antlion(dim,maxIter,lb,ub,antlion,t)%%計(jì)算游走系數(shù)I:I=1;w=1;ift>0.1*maxIterw=2;endift>maxIter*0.5w=3;endift>maxIter*0.75w=4;endift>maxIter*(0.9)w=5;endift>maxIter*(0.9)w=6;endI=1+10^w*(t/maxIter);%加1是為了防止I==0%%計(jì)算隨機(jī)游走邊界%根據(jù)隨機(jī)游走系數(shù)確定陷阱邊界lb=lb/(I);%下邊界ub=ub/(I);%上邊界%計(jì)算蟻獅下邊界ifrand<0.5lb=lb+antlion;elselb=-lb+antlion;end%計(jì)算蟻獅上邊界ifrand>=0.5ub=ub+antlion;elseub=-ub+antlion;end28|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>%%隨機(jī)游走fori=1:dimX=[0cumsum(2*(rand(maxIter,1)>0.5)-1)'];a=min(X);b=max(X);c=lb(i);d=ub(i);X_norm=((X-a).*(d-c))./(b-a)+c;RWs(:,i)=X_norm;endend2.2.6???????MTLAB??將整個(gè)蟻獅優(yōu)化算法定義為一個(gè)模塊,其模塊名稱函數(shù)為ALO,并將其存儲(chǔ)為ALO.m文件。整個(gè)蟻獅優(yōu)化算法的MTLAB代碼如下:%%--------------蟻獅優(yōu)化算法----------------------%%%%輸入:%pop為蟻獅種群數(shù)量%dim為單個(gè)蟻獅的維度%ub為蟻獅的上邊界,維度為[1,dim]%lb為蟻獅的下邊界,維度為[1,dim]%fobj為適應(yīng)度函數(shù)接口%maxIter為算法的最大迭代次數(shù),用于控制算法的停止%%輸出:%Best_Pos為蟻獅優(yōu)化算法找到的最優(yōu)位置%Best_fitness為最優(yōu)位置對(duì)應(yīng)的適應(yīng)度值%IterCurve用于記錄每次迭代的最優(yōu)適應(yīng)度值,即后續(xù)用來繪制迭代曲線n]=)%初始化蟻獅的位置antlion_position=initialization(pop,ub,lb,dim);%初始化螞蟻的位置ant_position=initialization(pop,ub,lb,dim);IterCurve=zeros(1,maxIter);antlions_fitness=zeros(1,pop);ants_fitness=zeros(1,pop);%計(jì)算蟻獅的適應(yīng)度值fori=1:popantlions_fitness(i)=fobj(antlion_position(i,:));end%對(duì)蟻獅的適應(yīng)度值進(jìn)行排序,存放在函數(shù)Sorted_antlions()中[sorted_antlion_fitness,sorted_indexes]=sort(antlions_fitness);fornewindex=1:popSorted_antlions(newindex,:)=antlion_position(sorted_indexes>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|29(newindex),:);end%精英蟻獅,及排序后位置位于第一的蟻獅Elite_antlion_position=Sorted_antlions(1,:);s=;%記錄全局最優(yōu)值和最優(yōu)值對(duì)應(yīng)的適應(yīng)度值Best_Pos=Elite_antlion_position;Best_fitness=Elite_antlion_fitness;

%精英蟻獅的位置%精英蟻獅的適應(yīng)度值IterCurve(1)=Best_fitness;Current_iter=2;%開始循環(huán)whileCurrent_iter<maxIter+1%隨機(jī)游走策略fori=1:pop%根據(jù)輪盤賭策略隨機(jī)選擇一個(gè)蟻獅Rolette_index =RouletteWheelSelection(1./sorted_antlion_fitness);%這里取倒數(shù),適應(yīng)度值越小的被選擇的概率越大%計(jì)算圍繞隨機(jī)蟻獅游走后的RARA = Random_walk_around_antlion(dim,maxIter,lb,ub,Sorted_antlions(Rolette_index,:),Current_iter);%計(jì)算圍繞精英蟻獅游走后的RERE=Random_walk_around_antlion(dim,maxIter,lb,ub,Elite_antlion_position(1,:),Current_iter);%計(jì)算螞蟻的位置ant_position(i,:)=(RA(Current_iter,:)+RE(Current_iter,:))/2;endfori=1:pop%螞蟻邊界檢查和約束ant_position(i,:)=BoundaryCheck(ant_position(i,:),ub,lb,dim);%螞蟻的適應(yīng)度值計(jì)算ants_fitness(i)=fobj(ant_position(i,:));end%%合并蟻獅和螞蟻的位置double_population=[Sorted_antlions;ant_position];double_fitness=[sorted_antlion_fitnessants_fitness];%排序[double_fitness_sorted,newIndex]=sort(double_fitness);double_sorted_population=double_population(newIndex,:);%取前pop種群數(shù)量作為新精英蟻獅antlions_fitness=double_fitness_sorted(1:pop);Sorted_antlions=double_sorted_population(1:pop,:);%更新精英蟻獅ifantlions_fitness(1)<Elite_antlion_fitnessElite_antlion_position=Sorted_antlions(1,:);30|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>Elite_antlion_fitness=antlions_fitness(1);end%確保精英蟻獅在第一個(gè)位置Sorted_antlions(1,:)=Elite_antlion_position;antlions_fitness(1)=Elite_antlion_fitness;%記錄全局最優(yōu)值Best_fitness=Elite_antlion_fitness;Best_Pos=Elite_antlion_position;%記錄每次迭代的最優(yōu)值IterCurve(Current_iter)=Best_fitness;Current_iter=Current_iter+1;end至此,基本蟻獅優(yōu)化算法的代碼編寫完成,所有涉及蟻獅優(yōu)化算法的子函數(shù)均包括如圖2.4所示的.m文件。圖2.4.m文件下一節(jié)將講解如何使用上述蟻獅優(yōu)化算法來解決優(yōu)化問題。2.3 蟻獅優(yōu)化算法的應(yīng)用案例2.3.1??????21 1問題描述:求解一組x1,x2,使得下面函數(shù)的值最小。f(x,2)=x2+21 1其中,x1與x2的取值范圍分別為[?10,10],[?10,10]。首先,我們可以利用MTLAB繪圖的方式來查看搜索空間是什么,并繪制該函數(shù)的搜索曲面,結(jié)果如圖2.5所示。%%繪制f(x1,x2)的搜索曲面x1=-10:0.01:10;x2=-10:0.01:10;fori=1:size(x1,2)forj=1:size(x2,2)X1(i,j)=x1(i);X2(i,j)=x2(j);f(i,j)=x1(i)^2+x2(j)^2;endendsurfc(X1,X2,f,'LineStyle','none');%繪制搜索曲面>>>|第2章蟻獅優(yōu)化算法原理及其MATLAB實(shí)現(xiàn)|31圖2.5f(x1,x2)搜索曲面從函數(shù)表達(dá)式和搜索曲面可知,該函數(shù)的最小值為0,最優(yōu)解為x1=0,x2=0。利用蟻獅優(yōu)化算法對(duì)該問題進(jìn)行求解設(shè)置蟻獅種群數(shù)量pop為50最大迭代次數(shù)maxIter為100,由于是求解x1與x2,因此將蟻獅的維度dim設(shè)定為2,蟻獅上邊界ub=[10,10],蟻獅下邊界lb=[?10,?10]。根據(jù)問題設(shè)定適應(yīng)度函數(shù)fun.m如下:%%適應(yīng)度函數(shù)functionfitness=fun(x)%x為輸入一只螞蟻,維度為[1,dim]%fitness為輸出的適應(yīng)度值fitness=x(1)^2+x(2)^2;end求解該問題的主函數(shù)main.m如下:%%利用蟻獅優(yōu)化算法求解x1^2+x2^2的最小值clc;clearall;closeall;%設(shè)定蟻獅參數(shù)pop=50;dim=2;ub=[10,10];lb=[-10,-10];maxIter=100;fobj=@(x)fun(x);%蟻獅求解問題

%蟻獅種群數(shù)量%蟻獅變量維度%蟻獅上邊界%蟻獅下邊界%最大迭代次數(shù)%設(shè)置適應(yīng)度函數(shù)為fun(x)[Best_Pos,Best_fitness,IterCurve]=ALO(pop,dim,ub,lb,fobj,maxIter);%繪制迭代曲線figureplot(IterCurve,'r-','linewidth',1.5);gridon;%網(wǎng)格開title('蟻獅迭代曲線')xlabel('迭代次數(shù)')ylabel('適應(yīng)度值')32|智能優(yōu)化算法及其MATLAB實(shí)現(xiàn)|>>>的2';disp(['最優(yōu)解對(duì)應(yīng)的函數(shù)值為:',num2str(Best_fitness)]);程序運(yùn)行結(jié)果如圖2.6所示。圖2.6程序運(yùn)行結(jié)果輸出結(jié)果如下:求解得到的x1,x2為:1.7967e-071.891

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論