【正文】
感謝陳世林同學(xué)提供電腦,讓我能順利完成論文的書寫。 胡老師 淵博的學(xué)識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、敏銳的學(xué)術(shù)思想、高尚的為師品德無(wú)時(shí)無(wú)刻不在影響著我,使我受益匪淺。對(duì)三個(gè)測(cè)試函數(shù)分別用程序進(jìn)行測(cè)試,結(jié)果表明微粒群算法的正確性和它在函數(shù)優(yōu)化方面優(yōu)點(diǎn)。該算法為人們提供了如下一種思路 :使智慧出現(xiàn)而不是努力強(qiáng)迫它;模擬自然而不是力圖控制它;尋求使事情簡(jiǎn)單化而不是讓它復(fù)雜。 PSO 基本都能更快地達(dá)到全局優(yōu)值, PSO 基本不 受問(wèn)題峰數(shù)增加的影響,受問(wèn)題維數(shù)的影 響也很小。也就是說(shuō), PSO 算法執(zhí)行 一種有“意識(shí) (Conscience)”的變異。 PSO 算法與演化規(guī)劃 (EP)很相似。 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 24 圖 Schaffe 函數(shù) 優(yōu)化 情況 小 結(jié) PSO 最直接的應(yīng)用就是多元函數(shù)的優(yōu)化問(wèn)題,包括帶約束的優(yōu)化問(wèn)題。其最小值 st val ue ? , 最小值 位置 gb e st po st i on =( 50 2, 30 2, 10 3) 3. Schaffe 函數(shù) 2 2 22 2 2( s in ) 0 . 5( ) 0 . 5 (1 . 0 0 . 0 0 1 ( ) )xyfx xy???? ?? (4. 11) 平移后的函數(shù)。 圖 二維 Rosenbrock 函數(shù) 優(yōu)化 效果圖 三維情況如圖 所示。 2. Rosenbrock 函數(shù),也叫香蕉函數(shù)( Banana ) 2211( ) (1 0 0 ( ) ( 1 ) )ni i iif x x x x??? ? ? ?? (4. 9) 與對(duì) Rastrigrin 函數(shù)一樣,對(duì) Rosenbrock 作平移處理,得式 。 020040060080002004006008000200400600800xR a s t r i g r i n 函數(shù)三維情況時(shí)粒子位置圖yz 圖 Rastrigrin 函數(shù)三維情況 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 22 其中 每 條連續(xù)的線表示一個(gè)粒子在三維空間中的一條運(yùn)動(dòng)軌跡。 圖 Rastrigrin 函數(shù)測(cè)試一 需要指出的是, 在粒子數(shù)量不多的時(shí)候,位置會(huì)稍微有些偏差, 一般取 2040后效果就會(huì)很好。 1( ) ( ( 2 0 0 ) 1 0 c o s ( 2 ( 2 0 0 ) ) 1 0 )niiif x x x??? ? ? ? ?? (4. 8) 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 20 用 我 們的程序?qū)κ? 進(jìn)行求解,如圖 所示, 從 圖 中可知 在二維情況下,最小值是 m in ( ) 9. 83 39 96fx ?? ,位置是( 200, 200);重新選取初始化粒子的測(cè)試結(jié)果如圖 所示。現(xiàn)我們選取幾個(gè)典型非線性函數(shù)來(lái)運(yùn)用算法求其解。 圖 4. 3 程序運(yùn)行結(jié)果 其中 速度 參數(shù)為: m ax m in5, 5。 其中各個(gè)色素塊代表一個(gè)粒子,粒子的初始位置為圖 中選取的位置,每條線代表一個(gè)粒子的運(yùn)動(dòng)軌跡。 圖 程序初始化注極值點(diǎn) 然后用鼠標(biāo)在程序窗口中隨機(jī)點(diǎn)取點(diǎn), 作 為初始化時(shí)粒子的位置 , 如圖 所示 。 由于式 我們可以看出,其最小值點(diǎn)為( 200, 200)。 表 4. 1: 參數(shù)測(cè)試表 ? 1c 2c 全局最佳值 全局最佳位置 維數(shù) ( 201, 200) 2 ( 200, 200) 2 ( 200, 200) 2 ( 201, 201, 201) 3 ( 200, 200, 201) 3 ( 200, 201, 200) 3 從表 的測(cè)試結(jié)果,我們可以看出,當(dāng)權(quán)重系數(shù)取后兩組時(shí)得出較好的結(jié)果 。為了在窗口中方便顯示數(shù)據(jù),把式 修改為 21( ) ( 2 0 0 )niif x x???? (4. 6) 我們先對(duì) 參數(shù) 進(jìn)行測(cè)試, 群體規(guī)模 25,迭代次 為 數(shù) 300。 我們只對(duì)無(wú)約束情況進(jìn)行討論。三個(gè)權(quán)重因子,主要影響收斂速度方面。 要想達(dá)到較好的測(cè)試效果,在測(cè)試時(shí),還可能 需要 對(duì)粒子最大 速度進(jìn)行適重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 17 當(dāng)?shù)恼{(diào)整。 PSO 算法求進(jìn)行函數(shù) 優(yōu) 化問(wèn)題 PSO 算法在求解復(fù)雜的函數(shù)優(yōu)化 問(wèn)題時(shí)對(duì)函數(shù)的要求相當(dāng)寬,并不要求函數(shù)有解析解、可微,甚至連續(xù)。 常用的求解無(wú)約束非 線性規(guī)劃的方法有:一維搜索法、梯度法、 NEWTON 法、擬 NEWTON 法、共軛方向法和 POWELL 方法等;求解約束非線性規(guī)劃的方法有:罰函數(shù)法與乘子法、可行方向法、二次 規(guī)劃法等。求解線性規(guī)劃的方法中的單純形算法是一種通用的有效算法,于 1947 年由 首先提出, 50 多年的計(jì)算實(shí)踐表明,它不僅是求解線性規(guī)劃的基本方法而且是整數(shù)規(guī)劃和非線性規(guī)劃某些算法的基礎(chǔ)。 此外,根據(jù)決策變量、目標(biāo)函數(shù)和要求不同,最優(yōu)化分類為整數(shù)規(guī)劃、動(dòng)態(tài)規(guī)劃、網(wǎng)絡(luò)規(guī)劃、幾何規(guī)劃、多目標(biāo)規(guī)劃等若干分支。特別,若約束集為 nDR? ,則最優(yōu)化問(wèn)題稱為無(wú)約束最優(yōu)化問(wèn)題 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 16 min ( )nxRfx? (4. 2) 約束 最優(yōu)化問(wèn)題通常寫為 m in ( ). . ( ) 0 1 , 2 , ,( ) 0 1 , 2 , ,ijfxs t g x i mh x j l???? (4. 3) 當(dāng)目標(biāo)函數(shù)和約束函數(shù)中到少有一個(gè)是 x 的非線性函數(shù),式 和式 稱為非線性規(guī)劃。所謂的最佳表現(xiàn)為一個(gè)目標(biāo)函數(shù)在滿足一定約束條件下的極大或極小。因此,要尋求最優(yōu)的設(shè)計(jì)與決策,以獲得最好的經(jīng)濟(jì)或技術(shù)效果,這就促使最優(yōu)化技術(shù)迅速發(fā)展,為最優(yōu)化技術(shù)的發(fā)展提供了有力的工具 [18]。特別是 20 世紀(jì) 50 年代以來(lái),由于 近代科技與生產(chǎn)發(fā)展的需要和計(jì)算機(jī)技術(shù)的飛速發(fā)展,使得最優(yōu)化技術(shù)得到了迅速發(fā)展,現(xiàn)最優(yōu)化技術(shù)已成為一門得到廣泛應(yīng)用的新興學(xué)科。在第二次世界大戰(zhàn)中,由于軍事上的需要產(chǎn)生了運(yùn)籌學(xué),提出了大量不能用古典方法解決的最優(yōu)化問(wèn)題,從而產(chǎn)生了如線性規(guī)劃、非線性規(guī)劃、動(dòng)態(tài)規(guī)劃、網(wǎng)絡(luò)流規(guī)劃等新的方法。隨著計(jì)算機(jī)科學(xué)的發(fā)展和應(yīng)用,應(yīng)用最優(yōu)化方法最解決問(wèn)題領(lǐng)域不斷擴(kuò)大,最優(yōu)化的理論和方法不斷發(fā)展。 } 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 4 基于 PSO 算法的函數(shù)優(yōu)化 15 4 基于 PSO 算法的函數(shù)優(yōu)化 引 言 隨著現(xiàn)代科技和生產(chǎn)的發(fā)展,人們?cè)诮鉀Q一個(gè)工程應(yīng)用或經(jīng)濟(jì)應(yīng)用問(wèn)題時(shí),總是希望得到一個(gè)最優(yōu)的方案。 } //位置調(diào)整 SwarmAdjust[i].iPos[k] = SwarmAdjust[i].iPos[k] + SwarmAdjust[i].iVec[k]。 //最大速度限制 if (SwarmAdjust[i].iVec[k] MAX_V) { SwarmAdjust[i].iVec[k] = MAX_V。 fRand2 = (double)rand() / (double)RAND_MAX。 kDIM。 i++) { int k =0。 //對(duì)微粒位置進(jìn)行調(diào)整 for (i=0。 double fRand2 = 。 } 4.方法名稱: AdjustBirdPosition 方法功能: 調(diào)整粒子群中各個(gè)粒子位置 int SwarmBird::AdjustBirdPosition(void) { int iResult = 0。 i++) { if (SwarmAdjust[i].dPbestValue SwarmAdjust[gbest].dPbestValue) { gbest = i。 for (i=0。 } 3.方法名稱: GetGobleParticleValue 方法功能: 取得全局最優(yōu)值,并且把它放到 gbest 中 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 3 PSO 算法的實(shí)現(xiàn) 13 int SwarmBird::GetGobleParticleValue(void) { int iResult = 0。 j++) { SwarmAdjust[i].iPbestPosition[j] = SwarmAdjust[i].iPos[j]。 //給局部最佳位置賦值 for (int j=0。 i()()。 int iResult = 0。 } return iResult。 i()()。 int iResult = 0。 d l g )4 : E v a l u a t e P a r t i cl e V a l u e ( v o i d )6 : G e t P a r t P a r t i cl e V a l u e ( v o i d )7 : G e t G o b l e P a r t i cl e V a l u e ( v o i d )8 : A d j u st B i r d P o si t i o n ( v o i d )5 : E v a l u a t e P a r t i cl e V a l u e ( v o i d )2 : I n i t ( ) 圖 微粒群系統(tǒng)時(shí)序圖 具體實(shí)現(xiàn) 現(xiàn)在將 SwarmBird 中的關(guān)鍵方法實(shí)現(xiàn)代碼做簡(jiǎn)要說(shuō)明。由于可重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 3 PSO 算法的實(shí)現(xiàn) 11 視化顯示的目的是用 此效果來(lái)反應(yīng)粒子的運(yùn)動(dòng)情況所以具體實(shí)現(xiàn)這里就不作具體說(shuō)明了。在實(shí)現(xiàn) PSO 算法時(shí), 其時(shí)序圖見圖 所示。在 UML 中,描述程序的運(yùn)行順序不再是以往面向過(guò)程編程時(shí)采用的流程圖了。dlg) :設(shè)置權(quán)重參數(shù)值 EvaluateParticleValue(void) :計(jì)算每個(gè)粒子的評(píng)價(jià)值 GetPartParticleValue(void) :設(shè)置每個(gè)粒子的局部最優(yōu)值 GetGobleParticleValue(void) :設(shè)置微粒群的全局最優(yōu)值索引 AdjustBirdPosition(void) :調(diào)整微粒群中的微粒的位置 Clear(void) :清除數(shù)據(jù) 算法實(shí)現(xiàn)流程 在面向?qū)ο缶幊虝r(shí),我們用 UML(統(tǒng)一 建模語(yǔ) 言 )來(lái)控制程序的開發(fā)過(guò)程。其類圖如圖 3. 2 所示。其類圖如圖 所示。在 本文中我們就用面向?qū)ο缶幊碳夹g(shù),在 的環(huán)境下,用 C++語(yǔ)言實(shí)現(xiàn) PSO 算法 。 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì) (論文) 3 PSO 算法的實(shí)現(xiàn) 9 3 PSO 算法的實(shí)現(xiàn) 算法實(shí)現(xiàn) 分析 PSO 算法 的提出是 美國(guó)社會(huì)心理學(xué) 家 James Kennedy 和電氣工程師 Russell Eberhar 受他們?cè)缙趯?duì)許多鳥類的群體行為 進(jìn)行建模與仿真研究結(jié)果 的啟發(fā)。加速常數(shù) 1c 和 2c 代表將每個(gè)微粒推向 bestp 和 bestg 位置的統(tǒng)計(jì)加速項(xiàng)的權(quán)重。 2. 權(quán)重因子 在 PSO算法中有 3個(gè)權(quán)重 因子:慣性權(quán)重 ? ,加速常數(shù) 1c 和 2c 。 最小速度 minv 的值一般設(shè)定為 maxv? ,作用和 maxv 相同。 關(guān)