課程設(shè)計---蜂群算法及其應(yīng)用_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  蜂群算法及其應(yīng)用</b></p><p><b>  研究背景。</b></p><p>  伴隨著當今社會、經(jīng)濟、文化和科技日新月異的發(fā)展,現(xiàn)實生活中面臨著許多復(fù)雜的非線性大系統(tǒng)和快速反應(yīng)性系統(tǒng),這使得我們傳統(tǒng)的優(yōu)化方法逐漸陷入困境。于是,人們開始尋找更快、更好的方法去解決這些復(fù)雜問題。在自然界中,那些不起眼的群居

2、低智能的生物表現(xiàn)出來的令人嘆為觀止的復(fù)雜的群體智慧給予我們啟迪,如:蟻群、鳥群、蜜蜂群、魚群等。在群居生物中,單個個體的智能是簡單的,但若干個個體組成的群體卻表現(xiàn)出遠遠超出個體相加的智慧。在群體中,個體間相互合作、相互協(xié)調(diào)的自組織能力能夠完成非常復(fù)雜的任務(wù)。這種現(xiàn)象引起眾多學者的關(guān)注,人們開始研究現(xiàn)象背后存在的機理,并用計算機仿真其中可循的規(guī)律,用以解決傳統(tǒng)優(yōu)化方法難以解決的復(fù)雜問題。其中,較為典型且廣泛應(yīng)用的群體智能算法有:蟻群算法、

3、微粒群算法以及蜂群算法等。</p><p>  二十世紀初期以來,在優(yōu)化領(lǐng)域中,傳統(tǒng)的方法,如:線性規(guī)劃、非線性規(guī)劃、對策論、多目標規(guī)劃、決策論排隊論、隨機規(guī)劃、庫存論等,不僅在理論上的研究有很大的發(fā)展,而且在軍事、經(jīng)濟、城市建設(shè)規(guī)劃、工廠生產(chǎn)規(guī)劃、最優(yōu)設(shè)計等各個方面的應(yīng)用取得顯著成就。但伴隨著社會、經(jīng)濟和科學技術(shù)的飛速發(fā)展,在生產(chǎn)生活中出現(xiàn)的許多復(fù)雜的非線性系統(tǒng)和快速反應(yīng)系統(tǒng)等不斷的呈現(xiàn)在我們面前,使得傳統(tǒng)的優(yōu)

4、化方法遇到了空前的挑戰(zhàn)。</p><p>  群體智能是指由大量數(shù)目的智能個體組成的具有智能的群體,這個群體體現(xiàn)出來的智能絕對不是個體智能的簡單相加,而是超過這個和的智能現(xiàn)象。在進行目標搜索時,單個個體雖然也能夠?qū)ふ业侥繕耍皇蔷窒抻诰植?,并不是全局最好的結(jié)果。個體在空間中隨機搜尋,在沒有得到整個群體的信息反饋時,它的搜索是隨機的、低智能的、無規(guī)律的。只有群體問的個體相互合作、相互協(xié)調(diào),進行信息共享時,才能

5、表現(xiàn)出來在全局中針對目標的尋優(yōu)特征。作為智能個體,就其大小和功能來說,又是相對的,要根據(jù)所要解決的具體問題而定。另外,群體智能中的個體,在整個群體尋優(yōu)過程中也并不能時刻保證都具有尋優(yōu)的特征,其智能尋優(yōu)方式的實現(xiàn)足通過整個智能群體的優(yōu)化特征而體現(xiàn)出來的。</p><p>  人工蜂群算法作為典型的群體智能算法,是基于種群尋優(yōu)的啟發(fā)式搜索算法,充分發(fā)揮群體中個體問的信息傳遞,在蜂巢周圍尋找到路徑最短,食物最豐富的食物

6、源。由于整個覓食過程與旅行商問題的相似性,該算法適合用來解決旅行商的最短路徑問題,并取得較好的結(jié)果。</p><p>  蜂群算法(BCO,Bee Colony Optimization)是受到自然界的蜜蜂行為啟發(fā)而提出的一種新穎的元啟發(fā)式優(yōu)化算法。根據(jù)所受啟發(fā)的生物機理的不同,蜂群算法可分為兩大類:</p><p>  基于蜜蜂繁殖機理的蜂群算法(BCO on propagating)。

7、</p><p>  基于蜜蜂采蜜機理的蜂群算法(BC0 on gathering)。</p><p>  兩種思想各有其獨特的實現(xiàn)原理和發(fā)展軌跡。</p><p>  對于基于繁殖的蜂群算法。Abbass發(fā)展出一種蜜蜂繁殖優(yōu)化模型(BMO,Bee Mating Optimization)。 Bozorg Haddad和A.Afshar共同將其發(fā)展并應(yīng)用基于離散變量

8、的水庫優(yōu)化問題中。隨后,Bozorg Haddad等將同一理論在三種數(shù)學問題的測試平臺上進行了應(yīng)用。</p><p>  蜜蜂的采蜜行為是一種典型的群體智慧行為。Yang發(fā)展出一種虛擬蜜蜂理論(VBA,virtual bee algorithm)來解決數(shù)值優(yōu)化問題。VBA中,一群虛擬蜜蜂初始時隨機分布在解空間中:這個蜜蜂根據(jù)判決函數(shù)計算的適應(yīng)度來尋找附近的花蜜源。理論中,解的優(yōu)化程度可以用蜜蜂之間交流的劇烈程度來

9、衡量。對于多變量數(shù)值優(yōu)化問題,Karaboga根據(jù)蜜蜂采集行為設(shè)計了虛擬蜜蜂種群模型(ABC,artificial bee colony algorithm),并和Basturk一起將ABC模型與GA進行了性能上的比較,并進一步與其他比較著名的元啟發(fā)式理論如:差分進化(DE),粒子群(PSO)在非約束數(shù)值優(yōu)化問題上進行了仿真比較。進而ABC理論被擴展應(yīng)用到解決約束(CO,constraint optimization)問題,并在13種比

10、較著名的約束優(yōu)化問題上與DE,PSO進行了比較。目前,ABC模型的研究主要集中在人工神經(jīng)網(wǎng)絡(luò)的訓(xùn)練上。</p><p>  2、蜂群算法的理論基礎(chǔ)</p><p>  Seely最早提出一種蜂群的群居行為為模型。模型中,群體中的各個角色蜜蜂,只是完成簡單的、低智商的任務(wù);但群體中的個體通過舞蹈、氣味等信息交互方式使整個群體協(xié)同能夠完成較為復(fù)雜的任務(wù),如建筑蜂巢、繁衍后代和覓食等。</

11、p><p>  Karaboga D在2005年將蜂群算法應(yīng)用到函數(shù)值優(yōu)化問題上,并提出系統(tǒng)的ABC(Artificial Bee Colony Algorithm)算法,取得很好的效果。</p><p>  在人工蜂群算法中,食物源的位置表示待優(yōu)化問題的一個可行解,食物源的豐富程度代表解的質(zhì)量,即適應(yīng)度。在模型中,我們通常設(shè):引領(lǐng)蜂的數(shù)量=跟隨蜂的數(shù)量=群體中解的數(shù)量。算法中,初始化生成M個

12、解,對于每個解都是一個D維向量。而后,蜜蜂開始對全部的食物源進行循環(huán)搜索,最大循環(huán)次數(shù)為MCN。其中,引領(lǐng)蜂會先對全局進行搜索,并比較搜索前后食物源的豐富程度,蜜蜂會選擇食物源較為豐富的目標。當所有的引領(lǐng)蜂完成搜索后,他們會回到信息交流區(qū)(舞蹈區(qū))把自己掌握的關(guān)于食物源的信息與其他蜜蜂進行信息共享。跟隨蜂則會根據(jù)引領(lǐng)蜂提供的信息按照一定的概率選擇引領(lǐng)蜂進行跟隨。越豐富的食物源被選擇的概率越大。然后,跟隨蜂會和引領(lǐng)蜂一樣進行鄰域搜索,并選

13、擇較好的解。</p><p>  人工蜂群算法中,蜜蜂的采蜜行為和函數(shù)優(yōu)化問題的對應(yīng)關(guān)系如表2.1所示:</p><p>  表2.1 蜂群覓食行為與函數(shù)優(yōu)化的對應(yīng)關(guān)系</p><p>  Table 2.1 The relationship of Bee Colony foraging behavior and function optimization</

14、p><p>  初始化時,隨機生成Ns個可行解并計算函數(shù)值,將函數(shù)值從優(yōu)到劣排名,前50%作為蜜源位置即引領(lǐng)蜂,后50%為跟隨蜂。隨機產(chǎn)生可行解的公式如下:</p><p><b>  (2.1)</b></p><p>  其中j∈{1,2,?,Q}為Q維解向量的某個分量。</p><p>  蜜蜂記錄自己到目前為止的最優(yōu)

15、值,并在當前蜜源附近展開鄰域搜索,產(chǎn)生一個新位置替代前一位置的公式為:</p><p><b>  (2.2)</b></p><p>  其中j∈{1,2,?,Q},k∈(1,2,?,sn),k為隨機生成且k≠i, 為[一1,1]之間的隨機數(shù)。</p><p>  蜜蜂采蜜時采用貪婪原則,將記憶中的最優(yōu)解和鄰域搜索到的解做比較,當搜索解優(yōu)于記

16、憶中的最優(yōu)解時,替換記憶解;反之,保持不變。在所有的引領(lǐng)蜂完成鄰域搜索后,引領(lǐng)蜂跳擺尾舞與跟隨蜂共享蜜源信息。跟隨蜂根據(jù)蜜源信息以一定概率選擇引領(lǐng)蜂,收益度大的引領(lǐng)蜂吸引跟隨蜂的概率大于收益度小的引領(lǐng)蜂。同樣,跟隨蜂在采蜜源附近鄰域搜索,采用貪婪準則,比較跟隨蜂搜索解與原引領(lǐng)蜂的解,當搜索解優(yōu)于原引領(lǐng)蜂的解時,替換原引領(lǐng)蜂的解,完成角色互換;反之,保持不變。</p><p>  ABC算法中,跟隨蜂選擇引領(lǐng)蜂的概

17、率公式為:</p><p><b>  (2. 3)</b></p><p>  按照如下公式計算適應(yīng)值:</p><p>  根據(jù)f是否大于零, (2. 4)</p><p>  式(2.3)中, 為第f個解的適應(yīng)值,對應(yīng)食物源的豐富程度。食物源越豐富,被跟隨蜂選擇的概率越大。為防止算法

18、陷入局部最優(yōu),算法1imit次迭代沒有改進,放棄該解,由偵察蜂產(chǎn)生一個新的位置代替。</p><p>  人工蜂群算法的算法流程:</p><p>  ABC算法的流程為:</p><p><b>  1:初始化種群;</b></p><p>  2:cycle=l:</p><p><b&

19、gt;  3:repeat:</b></p><p>  4:雇傭蜂根據(jù)公式(2.2)在解的鄰域內(nèi)產(chǎn)生新解(食物源位置),其中,k是i鄰域內(nèi)的一個值,是[一1,1]之間的隨機數(shù);</p><p>  5:應(yīng)用貪婪原則選擇在 和 之問做出選擇;</p><p>  6:根據(jù)公式(2.3)(2.4)計算轉(zhuǎn)移概率 ;</p><p> 

20、 7:根據(jù)轉(zhuǎn)移概率,跟隨蜂選擇引領(lǐng)蜂進行跟隨,并根據(jù)公式(2.2)產(chǎn)生一個新解;</p><p>  8:跟隨蜂應(yīng)用貪婪原則選擇在和 之問做出選擇;</p><p>  9:放棄一個解,角色轉(zhuǎn)變成偵查蜂,并根據(jù)公式(2.1)產(chǎn)生一個新解;</p><p><b>  10:記錄最好解;</b></p><p>  11:

21、cycle=cycle+1;</p><p>  12:達到最大循環(huán)數(shù),最Pcycle=mcn。,</p><p>  從上述算法中我們不難看出,ABC算法的核心由三個部分構(gòu)成:</p><p>  1.引領(lǐng)蜂:進行鄰域搜索;</p><p>  2.跟隨蜂:對目標進行“開采”;</p><p>  3.偵察蜂:對目標

22、進行“探索”。</p><p>  3、蜂群算法解決函數(shù)優(yōu)化問題</p><p>  3.1函數(shù)優(yōu)化問題的描述</p><p>  目標優(yōu)化問題可以描述為: </p><p>  Max f(x ) (3.1.1) x∈S </p><p>  或:Min f( x)

23、 (3.1.2) x∈S </p><p>  這里S→ 稱為搜索空間,f(x):S→ 稱為目標函數(shù)。 (3.1.1)式描述的優(yōu)化問題稱為極大化問題,(3.1.2)式描述的稱為極小化問題。 當把f(x)看成是一序列的函數(shù)時上述的問題就轉(zhuǎn)變?yōu)槎嗄繕藘?yōu)化問題。 </p><p>  對很多實際問題進行數(shù)學建模后??蓪⑵涑橄鬄橐粋€數(shù)值函數(shù)的優(yōu)化問題。由于問題種類的繁多、影響因素的復(fù)雜。這些

24、數(shù)學函數(shù)會呈現(xiàn)出不同的數(shù)學特征,比如連續(xù)的、離散的、凸的、凹的、單峰值的、多峰值的函數(shù)等等,經(jīng)常遇到的函數(shù)還有這些不同數(shù)學特征的組合。除了在函數(shù)是連續(xù)、可求導(dǎo)、低階的簡單情況下可解折地求出其最優(yōu)解外。大部分情況需要通過數(shù)值計算方法來進行近似優(yōu)化計算,盡管人們對這個問題研究了很多年。但至今仍無一種既能處理各種不同的復(fù)雜函數(shù)、又具有良好求解結(jié)果的數(shù)值計算方法。特別是當問題的規(guī)模比較大時,優(yōu)化計算時的搜索空間急 劇擴大,人們認識到要嚴格地求出

25、其最優(yōu)解不太現(xiàn)實。所以需要研究出一種能夠在可接受的時間和可接受的精度范圍內(nèi)求出數(shù)值函數(shù)近似最優(yōu)解的方法或通用算法。蜂群算法提供了求解復(fù)雜系統(tǒng)優(yōu)化問題的通用框架,函數(shù)優(yōu)化正是其最成熟的應(yīng)用域。也是對蜂群算法進行性能評價的常用算倒。在對各種復(fù)雜形式的測試函數(shù)的計算中。由于蜂群算法直接以目標函數(shù)值作為搜索信息。同時使用多個搜索點進行索,且這種概率搜索始終遍及整個解空間,都能找到幾乎全局最優(yōu)解。對于一些非線性、多模型、多目標的函數(shù)優(yōu)化問題,在其

26、他優(yōu)化方法較難</p><p>  實踐表明,遺傳算法求解函數(shù)優(yōu)化問題的計算教率比較高、適用范圍相當廣。與傳統(tǒng)的優(yōu)化方法相比.遺傳算法具有如下特點:具有簡單通用、魯捧性強、適 于并行處理以及高效、實用等顯著優(yōu)點。</p><p>  3.2 解決問題的步驟</p><p><b>  (1) 編碼</b></p><p>

27、;  在遺傳算法的運行過程中,它不對所求問題的實際決策變量直接進行操作,而是對表示可行解的個體編碼施加選擇、交叉和變異等遺傳操作。將一個問題的可行解從其可行解空間轉(zhuǎn)換到遺傳算法所能處理的搜索空間的轉(zhuǎn)換方法就稱為編碼。典型的遺傳算法都采用二進制的編碼方式,在本文中我們也采用這種與自然界中的實際情況相對應(yīng)的編碼方式。但是在多個變量的情況下,傳統(tǒng)的整體編碼是用一個一維數(shù)組來按順序存放所有的基因。這樣的編碼方式明顯地存在著問題:隨著自變量維數(shù)的

28、增加或求解精度要求的提高,整個位串的長度會迅速地增加,這樣,整個位串的長度將變得難以忍受,不方便操作;此外,一旦位串過長,將不可避免地導(dǎo)致重復(fù)操作,而且由于位串過長,還會降低雜交和變異操作的結(jié)果,致使算法易陷于局部最優(yōu)或增加運行時間。</p><p>  為了解決這些問題,我們采用一種改進的二進制編碼方式——獨立編碼方式。它將每個變量都相互獨立開來,采用多維的數(shù)組來表示多維的變量,用獨立編碼方式就表示為:<

29、/p><p>  x1=0110110100 ,x2=1101001011</p><p>  chrom[n][0]= 0110110100 x1</p><p>  chrom[n][1]= 1101001011 x2</p><p>  實驗表明,獨立編碼較整體編碼具有良好的收斂性,能使函數(shù)較好地逼近于極值。

30、原因主要在于當雜交和變異概率不變時,原始的整體編碼由于精度要求,導(dǎo)致位串過長,而其中相當大的一部分位串只表示小數(shù)點后的數(shù)值,所以若雜交和變異算子作用在這一部分上,則對數(shù)值的改變不大。而獨立編碼由于大大縮短了位串長度,所以使得雜交和變異算子有很大可能作用到代表小數(shù)點以前的數(shù)值位串上,致使自變量的數(shù)值有較大改變。這就能使算法有效地跳出局部最優(yōu)解陷阱,更好地接近全局最優(yōu)解。</p><p><b>  (2)

31、 選擇與交叉</b></p><p>  蜂后以一定的速率穿梭于空間中的不同區(qū)域,并在各個區(qū)域內(nèi)隨機地與碰到的雄蜂進行交配。在婚飛的開始,給蜂后賦予一定量的能量,在能量消耗到零或某一限度時或在受精囊裝滿時返回蜂巢。</p><p>  雄蜂提供給后代一半的基因,因此保證雄蜂的高適應(yīng)度也有利于產(chǎn)生適應(yīng)度較高的幼蜂。為此,我們使用一個模擬的退火算法來對雄蜂進行選擇。按照退火算法的原

32、理,令當前的雄蜂為D0,隨機產(chǎn)生下一個用于交配的雄蜂為 D1,如果f (D1) ≥f (D0) 則D1被接受為當前雄蜂(f(D)表示雄蜂 D 的適應(yīng)度) ,準備與蜂后交配。否則 D1僅以概率:</p><p><b>  (3.2.1)</b></p><p>  被接受。S(t)表示蜂后在 t 時刻的速率,隨著時間的推移,S(t)的值會越來越小,則接受不良個體的概率

33、也就越來越小,所以總能保持雄蜂的高適應(yīng)度。</p><p>  雄蜂與蜂后交配的隨機率用下式表示:</p><p><b>  (3.2.2)</b></p><p>  此處,prob(Q ,D)是將 D的精子加入到蜂后Q的受精囊的概率,也就是指交配成功的概率;⊿f(t)是 D 的適應(yīng)度 f(D)與Q 的適應(yīng)度 f(Q)的絕對差值;S(t)表

34、示蜂后在t 時刻的速率。</p><p>  表面上看來這個函數(shù)有些類似退火算法,當蜂后在剛開始婚飛因而速率很大時或是雄蜂的適應(yīng)度和蜂后的一樣高時,交配的概率很大。隨著時間的推移,蜂后的速率和能量以下面的方式衰減:</p><p>  S(t+1)=α*S(t) (3.2.3) E(t+1)=E(t) -r (3.2.4)</p>

35、<p>  此處,α 是一個因子,α∈[0 ,1] ;r 是每次轉(zhuǎn)移后能量的消耗量。</p><p><b>  (3)變異和災(zāi)變</b></p><p>  自然界中的變異率是進化的動力,只有通過變異率才能使后代產(chǎn)生前代沒有的特性,為進化提供條件。同時變異率設(shè)置得是否合適對于算法的表現(xiàn)也有很大的影響。如果變異率太小則某位的有效基因可能經(jīng)過好多代的進化都不

36、會出現(xiàn),算法容易陷入局部解中;如果變異率設(shè)得太大則經(jīng)常變異容易丟失一些有效基因,反而倒喪失了啟發(fā)性而變得更像隨機搜索。一般情況下,變異率設(shè)在 0.0001 ~0.1就比較合適了。</p><p>  在自然界中,有時會因為環(huán)境的突然性的巨大變化而使物種發(fā)生很大的改變,這時原有的基因平衡被打破,創(chuàng)造出完全不同的染色體,生物的性狀發(fā)生很大的變化。將這種思想應(yīng)用于我們的蜂群算法中,有利于進化跳出局部極值點,快速、準確地

37、搜索出全局最優(yōu)解。但是,災(zāi)變率的選擇也不是任意的,它應(yīng)該根據(jù)具體的情況而合理地設(shè)定。多次實驗的結(jié)果表明:選擇災(zāi)變率的標準是要在整個的進化過程中保證發(fā)生1 到2 次的災(zāi)變。否則,若災(zāi)變率設(shè)得太小,可能整個進化完成后都沒有發(fā)生一次災(zāi)變,也就喪失了設(shè)置災(zāi)變率的意義;若災(zāi)變率太大,則多次的反復(fù)災(zāi)變就很容易丟失經(jīng)過多代進化積累起來的有利基因組合。</p><p>  3.3 核心參數(shù)的設(shè)置</p><p

38、>  改進后的ABC算法中需設(shè)定的參數(shù)有三個:種群數(shù)SN,搜索代數(shù)MCN,limit 。(1)Rosenbrock 函數(shù)</p><p> ?。? )Griew函數(shù)</p><p> ?。? )Schaffer函數(shù)</p><p>  二維Rosenbrok函數(shù)f1(X) 是一個非凸函數(shù),它在(1 ,1)處達到極小值;f2(X) 是由Griewangk提出的。

39、它的全局極小是xi=0 ,i=1 ,2 ,…。其局部極小點是xi ≈ ±k* π*,i=1,2, …,n,k=0 ,1 ,2 ,…。</p><p>  函數(shù)f1(X) ,算法參數(shù)設(shè)置為:種群規(guī)模SN=100;終止代數(shù)MCN=300limit=100 ,T0=100。</p><p>  函數(shù)f2(X) ,算法參數(shù)設(shè)置為:種群規(guī)模SN=50;終止代數(shù)MCN=500limit=50

40、 ,T0=100。</p><p>  函數(shù)f3(X) ,算法參數(shù)設(shè)置為:種群規(guī)模SN=30;終止代數(shù)MCN=60;limit=10 ,T0=100。</p><p><b>  3.4 核心代碼</b></p><p><b>  clear all</b></p><p><b>  

41、close all</b></p><p><b>  clc</b></p><p>  %/* Control Parameters of ABC algorithm*/</p><p>  NP=20; %/* The number of colony size (employed bees+onlooker bees)*/&

42、lt;/p><p>  FoodNumber=NP/2; %/*The number of food sources equals the half of the colony size*/</p><p>  limit=100; %/*A food source which could not be improved through "limit" trials is

43、abandoned by its employed bee*/</p><p>  maxCycle=2500; %/*The number of cycles for foraging {a stopping criteria}</p><p>  %/* Problem specific variables*/</p><p>  objfun='Sph

44、ere'; %cost function to be optimized</p><p>  D=100; %/*The number of parameters of the problem to be optimized*/</p><p>  ub=ones(1,D)*100; %/*lower bounds of the parameters. */</p>

45、<p>  lb=ones(1,D)*(-100);%/*upper bound of the parameters.*/</p><p>  runtime=1;%/*Algorithm can be run many times in order to see its robustness*/</p><p>  %Foods [FoodNumber][D]; /*Foods

46、 is the population of food sources. Each row of Foods matrix is a vector holding D parameters to be optimized. The number of rows of Foods matrix equals to the FoodNumber*/</p><p>  %ObjVal[FoodNumber]; /*f

47、 is a vector holding objective function values associated with food sources */</p><p>  %Fitness[FoodNumber]; /*fitness is a vector holding fitness (quality) values associated with food sources*/</p>

48、<p>  %trial[FoodNumber]; /*trial is a vector holding trial numbers through which solutions can not be improved*/</p><p>  %prob[FoodNumber]; /*prob is a vector holding probabilities of food sources (so

49、lutions) to be chosen*/</p><p>  %solution [D]; /*New solution (neighbour) produced by v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) j is a randomly chosen parameter and k is a randomlu chosen solution different f

50、rom i*/</p><p>  %ObjValSol; /*Objective function value of new solution*/</p><p>  %FitnessSol; /*Fitness value of new solution*/</p><p>  %neighbour, param2change; /*param2change c

51、orrresponds to j, neighbour corresponds to k in equation v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij})*/</p><p>  %GlobalMin; /*Optimum solution obtained by ABC algorithm*/</p><p>  %GlobalParams[D];

52、/*Parameters of the optimum solution*/</p><p>  %GlobalMins[runtime]; /*GlobalMins holds the GlobalMin of each run in multiple runs*/</p><p>  GlobalMins=zeros(1,runtime);</p><p>  

53、for r=1:runtime</p><p>  % /*All food sources are initialized */</p><p>  %/*Variables are initialized in the range [lb,ub]. If each parameter has different range, use arrays lb[j], ub[j] instea

54、d of lb and ub */</p><p>  Range = repmat((ub-lb),[FoodNumber 1]);</p><p>  Lower = repmat(lb, [FoodNumber 1]);</p><p>  Foods = rand(FoodNumber,D) .* Range + Lower;</p><

55、p>  ObjVal=feval(objfun,Foods);</p><p>  Fitness=calculateFitness(ObjVal);</p><p>  %reset trial counters</p><p>  trial=zeros(1,FoodNumber);</p><p>  %/*The best fo

56、od source is memorized*/</p><p>  BestInd=find(ObjVal==min(ObjVal));</p><p>  BestInd=BestInd(end);</p><p>  GlobalMin=ObjVal(BestInd);</p><p>  GlobalParams=Foods(Best

57、Ind,:);</p><p><b>  iter=1;</b></p><p>  while ((iter <= maxCycle)),</p><p>  %%%%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%</p><p>  for i=1:(Foo

58、dNumber)</p><p>  %/*The parameter to be changed is determined randomly*/</p><p>  Param2Change=fix(rand*D)+1;</p><p>  %/*A randomly chosen solution is used in producing a mutant s

59、olution of the solution i*/</p><p>  neighbour=fix(rand*(FoodNumber))+</p><p>  %/*Randomly selected solution must be different from the solution i*/ </p><p>  while(neighbou

60、r==i)</p><p>  neighbour=fix(rand*(FoodNumber))+1;</p><p><b>  end</b></p><p>  sol=Foods(i,:);</p><p>  % /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */<

61、/p><p>  sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*</p><p>  % /*if generated parameter value is out of boundaries, it is shifted ont

62、o the boundaries*/</p><p>  ind=find(sol<lb);</p><p>  sol(ind)=lb(ind);</p><p>  ind=find(sol>ub);</p><p>  sol(ind)=ub(ind);</p><p>  %evaluate new

63、 solution</p><p>  ObjValSol=feval(objfun,sol);</p><p>  FitnessSol=calculateFitness(ObjValSol)</p><p>  % /*a greedy selection is applied between the current solution i and its mut

64、ant*/</p><p>  if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/</p><p

65、>  Foods(i,:)=sol;</p><p>  Fitness(i)=FitnessSol;</p><p>  ObjVal(i)=ObjValSol;</p><p>  trial(i)=0;</p><p><b>  else</b></p><p>  trial(i)

66、=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/</p><p><b>  end</b></p><p><b>  end;</b></p><p>  %%%%%%%%%%%%%%%%%%%%%%%

67、% CalculateProbabilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  %/* A food source is chosen with the probability which is proportioal to its quality*/</p><p>  %/*Diffe

68、rent schemes can be used to calculate the probability values*/</p><p>  %/*For example prob(i)=fitness(i)/sum(fitness)*/</p><p>  %/*or in a way used in the metot below prob(i)=a*fitness(i)/max(

69、fitness)+b*/</p><p>  %/*probability values are calculated by using fitness values and normalized by dividing maximum fitness value*/</p><p>  prob=(0.9.*Fitness./max(Fitness))+0.1;</p>&

70、lt;p>  %%%%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p><b>  i=1;</b></p><p><b>  t=0;</b></p><p>  w

71、hile(t<FoodNumber)</p><p>  if(rand<prob(i))</p><p><b>  t=t+1;</b></p><p>  %/*The parameter to be changed is determined randomly*/</p><p>  Param2Ch

72、ange=fix(rand*D)+1;</p><p>  %/*A randomly chosen solution is used in producing a mutant solution of the solution i*/</p><p>  neighbour=fix(rand*(FoodNumber))+1; </p><p>  %/*Rando

73、mly selected solution must be different from the solution i*/ </p><p>  while(neighbour==i)</p><p>  neighbour=fix(rand*(FoodNumber))+1;</p><p><b>  end;</b></

74、p><p>  sol=Foods(i,:);</p><p>  % /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */</p><p>  sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*

75、(rand-0.5)*2;</p><p>  % /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/</p><p>  ind=find(sol<lb);</p><p>  sol(ind)=lb(ind);</p>

76、<p>  ind=find(sol>ub);</p><p>  sol(ind)=ub(ind);</p><p>  %evaluate new solution</p><p>  ObjValSol=feval(objfun,sol);</p><p>  FitnessSol=calculateFitness(

77、ObjValSol);</p><p>  % /*a greedy selection is applied between the current solution i and its mutant*/</p><p>  if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current

78、 solution i, replace the solution with the mutant and reset the trial counter of solution i*/</p><p>  Foods(i,:)=sol;</p><p>  Fitness(i)=FitnessSol;</p><p>  ObjVal(i)=ObjValSol;&

79、lt;/p><p>  trial(i)=0;</p><p><b>  else</b></p><p>  trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/</p><p><b&

80、gt;  end;</b></p><p><b>  end;</b></p><p><b>  i=i+1;</b></p><p>  if (i==(FoodNumber)+1) </p><p><b>  i=1;</b></p><

81、;p><b>  end; </b></p><p><b>  end;</b></p><p>  %/*The best food source is memorized*/</p><p>  ind=find(ObjVal==min(ObjVal));</p><p>  ind

82、=ind(end);</p><p>  if (ObjVal(ind)<GlobalMin)</p><p>  GlobalMin=ObjVal(ind);</p><p>  GlobalParams=Foods(ind,:);</p><p><b>  end; </b></p><p

83、>  %%%%%%%%%%%% SCOUT BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</p><p>  %/*determine the food sources whose trial counter exceeds the "limit" value. </p><p>  %In

84、Basic ABC, only one scout is allowed to occur in each cycle*</p><p>  ind=find(trial==max(trial));</p><p>  ind=ind(end);</p><p>  if (trial(ind)>limit)</p><p>  Bas

85、(ind)=0;</p><p>  sol=(ub-lb).*rand(1,D)+lb;</p><p>  ObjValSol=feval(objfun,sol);</p><p>  FitnessSol=calculateFitness(ObjValSol);</p><p>  Foods(ind,:)=sol;</p>

86、<p>  Fitness(ind)=FitnessSol;</p><p>  ObjVal(ind)=ObjValSol;</p><p><b>  End;</b></p><p>  fprintf('er=%d ObjVal=%g\n',iter,GlobalMin);</p><p

87、>  iter=iter+1;</p><p>  end % End of ABC</p><p>  GlobalMins(r)=GlobalMin;</p><p>  end; %end of runs</p><p><b>  save all</b></p><p>  3.4

88、 實驗結(jié)果和分析</p><p>  (1)函數(shù)f1(X) ,50次連續(xù)運算的結(jié)果為:平均最優(yōu)解1.42×10-14,成功率100%,隨機選取一次最優(yōu)個體的進化過程如圖3.1所示。</p><p>  圖3. 1 函數(shù)f1(x)最佳個體進化過程</p><p>  (2)函數(shù)f2(x), 50次連續(xù)運算的結(jié)果為:平均最優(yōu)解1.42×10-14,

89、成功率100%,隨機選取一次最優(yōu)個體的進化過程如圖3.2所示。</p><p>  圖3.2 函數(shù)f2(x)最佳個體進化過程</p><p>  (3)函數(shù)f3(x), 50次連續(xù)運算的結(jié)果為:平均最優(yōu)解1.42×10-14,成功率100%,隨機選取一次最優(yōu)個體的進化過程如圖3.3所示。</p><p>  圖3.3 函數(shù)f3(x)最佳個體進化過程&l

90、t;/p><p>  (4)結(jié)果分析:表1 是本文提出的BABC 算法與標準ABC算法、GA、PSO 算法各運行50次的實驗結(jié)果比較。GA和PSO 是文獻中的算法結(jié)果。從表1 可見,ABC算法在搜索空間中局部極值點少的情況下具有良好的尋優(yōu)能力。但是對于復(fù)雜函數(shù)來說,ABC算法和PSO 算法優(yōu)化結(jié)果并不理想,很容易陷入局部極值。而改進后的BABC 算法對于測試函數(shù),特別是對于復(fù)雜多峰函數(shù)的優(yōu)化結(jié)果明顯好于前面兩種方法。

91、這是因為BABC 算法中同時包含了確定性和隨機性搜索因素,在處理多維復(fù)雜函數(shù)時能表現(xiàn)出較強的優(yōu)化性能。</p><p>  表1 BABC算法與標準ABC、GA以及PSO算法優(yōu)化結(jié)果比較</p><p><b>  4、總結(jié)和展望</b></p><p>  盡管人工蜂群算法在國內(nèi)外的研究還有待發(fā)展,但其已經(jīng)在解決復(fù)雜問題方面,特別是離散問

92、題方面表現(xiàn)出明顯的優(yōu)越性。已經(jīng)取得的成果表明該算法具有很大的發(fā)展空間。對于算法來況,在熟知其算法原理的前提下,更為重要的足為所要求解的問題建立一個數(shù)學模型,使算法對于問題的求解更加切實有效。在實際生產(chǎn)生活中,對于算法模型的收斂性和時間復(fù)雜度是值得我們深入研究和探討的問題。人工蜂群算法,作為全局隨機搜索算法,能夠以一定的概率避免陷入局部最優(yōu)。然而,針對復(fù)雜空間的全局搜索,無法避免地增加了時間復(fù)雜度,耗費了大量時間。為了能夠更好、更快的找到

93、問題的最優(yōu)解,在算法進行全局搜索的過程中,針對要解決的實際問題,加入局部搜索算法也是很好的思想。利用算法的全局性搜索防止陷入局部最優(yōu),利用局部搜索來加快算法的收斂速度,降低時間復(fù)雜度,如何能更好的將二者完美的結(jié)合在一起,是值得我們進一步研究的問題。另外,本文算法如果能和其他啟發(fā)式仿生算法結(jié)合,形成混合智能算法,也是值得研究的問題。</p><p>  群體智能算法本質(zhì)上是一種模擬進化算法,其產(chǎn)生、應(yīng)用和發(fā)展的過程

94、與進化算法相輔相成,息息相關(guān)。在群體智能模型中,如果能將算法和搜索策略結(jié)合應(yīng)用,且群體中個體問存在信息交換,則在群智能算法中可以體現(xiàn)出進化算法的優(yōu)越性:首先,在進化算法的整個搜索過程中,不容易陷入局部最優(yōu),即使在所定義的適應(yīng)函數(shù)是不連續(xù)的、非規(guī)則的或有噪聲的情況下,它們也能以很大的概率找到全局最優(yōu)解;其次,由于它固有的內(nèi)存并行性,非常適合并行計算;再次,進化算法采用自然界的生物進化機制表現(xiàn)出復(fù)雜的現(xiàn)緣,因此能夠迅速、穩(wěn)定的解決高難度的問

95、題。因此,它容易混合到已有的模型中,可擴展性很好,又因為具有易與別的技術(shù)融合的特點,進化算法已普遍應(yīng)用到優(yōu)化等相關(guān)領(lǐng)域。</p><p>  本文主要講述人工蜂群算法,并利用此算法解決函數(shù)優(yōu)化問題,總結(jié)了解決函數(shù)優(yōu)化的框架,并驗證。具有一定的推廣價值。</p><p>  目前,關(guān)于群體智能的研究還處于一個開始階段,依然存在著很多的懸而術(shù)決的問題,但需要指出的是,人工蜂群算法和微粒群算法均

96、屬于概率算法,從數(shù)學上對其正確性和穩(wěn)定性的證明是比較困難的,而且算法在解決問題的過程中,整個系統(tǒng)的整體智能行為是通過低層次的個體與個體之問的信息交互來體現(xiàn)的。單個簡單的個體組成的群體并不意味著也簡單,設(shè)計者必須能夠?qū)⒏邔哟蔚膹?fù)雜行為(也就是系統(tǒng)所要完成的功能,例如背包問題、車間調(diào)度問題、旅行商等)映射到低層次(例如個體信息的交互)上面, 而這二者又是存在較大差別的。</p><p>  本文存在管不足之處是蜂群中

溫馨提示

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

評論

0/150

提交評論