遺傳算法實驗設計與仿真_第1頁
遺傳算法實驗設計與仿真_第2頁
遺傳算法實驗設計與仿真_第3頁
遺傳算法實驗設計與仿真_第4頁
遺傳算法實驗設計與仿真_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 遺傳算法與研究課程設計學 號: 200704134069 姓 名: 吳宇鑫 學 院: 信息科學與工程學院 專 業(yè): 自動化 班 級: 073班 設計時間: 2011-3-16至2011-4-6 指導教師: 吳 懷 宇 一設計內(nèi)容(一)設計題目求下面函數(shù)的最大值(二)設計的目的 掌握遺傳算法的基本原理 ,了解在 MATLAB 環(huán)境中實現(xiàn)遺傳算法各算子的編程方法。并以此例說明所編程序在函數(shù)全局尋優(yōu)中的應用。二設計方案(一)理論基礎1.遺傳算法簡介遺傳算法是進化算法中產(chǎn)生最早、影響最大、應用也比較廣泛的一個研究方向和領域,其基本思想是由美國密執(zhí)安大學的John H. Holland教授于1962年

2、率先提出的。1975年,他出版了專著自然與人工系統(tǒng)中的適應性行為(Adaptation in Natural and Artificial Systems)19,該書系統(tǒng)地闡述了遺傳算法的基本理論和方法,確立了遺傳算法的基本數(shù)學框架。此后,從事遺傳算法研究的學者越來越多,使之成為一種通用于多領域中的優(yōu)化算法。遺傳算法是一種基于生物的自然選擇和群體遺傳機理的搜索算法。它模擬了自然選擇和自然遺傳過程中發(fā)生的繁殖、交配和突變現(xiàn)象。它將每個可能的解看做是群體(所有可能解)中的一個個體,并將每個個體編碼成字符串的形式,根據(jù)預定的目標函數(shù)對每個個體進行評價,給出一個適應度值。開始時總是隨機地產(chǎn)生一些個體(

3、即候選解),根據(jù)這些個體的適應度利用遺傳算子對這些個體進行操作,得到一群新個體,這群新個體由于繼承了上一代的一些優(yōu)良性狀,因而明顯優(yōu)于上一代,這樣逐步朝著更優(yōu)解的方向進化。遺傳算法在每一代同時搜索參數(shù)空間的不同區(qū)域,然后把注意力集中到解空間中期望值最高的部分,從而使找到全局最優(yōu)解的可能性大大增加。作為進化算法的一個重要組成部分,遺傳算法不僅包含了進化算法的基本形式和全部優(yōu)點,同時還具備若干獨特的性能:1) 在求解問題時,遺傳算法首先要選擇編碼方式,它直接處理的對象是參數(shù)的編碼集而不是問題參數(shù)本身,搜索過程既不受優(yōu)化函數(shù)連續(xù)性的約束,也沒有函數(shù)導數(shù)必須存在的要求。通過優(yōu)良染色體基因的重組,遺傳算

4、法可以有效地處理傳統(tǒng)上非常復雜的優(yōu)化函數(shù)求解問題。2) 若遺傳算法在每一代對群體規(guī)模為n的個體進行操作,實際上處理了大約O(n3)個模式,具有很高的并行性,因而具有明顯的搜索效率。3) 在所求解問題為非連續(xù)、多峰以及有噪聲的情況下,能夠以很大的概率收斂到最優(yōu)解或滿意解,因而具有較好的全局最優(yōu)解求解能力。4) 對函數(shù)的性態(tài)無要求,針對某一問題的遺傳算法經(jīng)簡單修改即可適應于其他問題,或者加入特定問題的領域知識,或者與已有算法相結(jié)合,能夠較好地解決一類復雜問題,因而具有較好的普適性和易擴充性。5) 遺傳算法的基本思想簡單,運行方式和實現(xiàn)步驟規(guī)范,便于具體使用。2.遺傳算法對問題的描述對于一個求函數(shù)最

5、大值的優(yōu)化問題(求函數(shù)最小值也雷同),一般可描述為下述數(shù)學規(guī)劃模型: (1)式中,X=x1,x2,xnT 為決策變量,f(X)為目標函數(shù),和為約束條件,U是基本空間,R是U的一個子集。集合R表示由所有滿足約束條件的解所組成的一個集合,叫做可行解集合。它們的關系如圖1所示?;究臻g可行解集合URX可行解圖1 最優(yōu)化問題的可行解及可行解集合在遺傳算法中,將n維決策向量X=x1,x2,xnT用n個記號Xi(i=1,2,n)所組成的符號串X來表示:X = X1X2Xn X=x1 , x2 ,xnT把每個Xi看作一個遺傳基因,它的所有可能取值稱為等位基因,這樣,X就可看做是由n個遺傳基因所組成的一個染色

6、體。一般情況下,染色體的長度n是固定的,但對一些問題n也可以是變化的。根據(jù)不同的情況,這里的等位基因可以是一組整數(shù),也可以是某一范圍內(nèi)的實數(shù)值,或者是純粹的一個符號。最簡單的等位基因是由0和1這兩個整數(shù)組成的,相應的染色體就可表示為一個二進制符號串。這種編碼所形成的排列形式X是個體的基因型,與它對應的X值是個體的表現(xiàn)型。通常個體的表現(xiàn)型和基因型是一一對應的,但有時也允許基因型和表現(xiàn)型是多對一的關系。染色體X也稱為個體X,對于每個個體X,要按照一定的規(guī)則確定出其適應度。個體的適應度與其對應的個體表現(xiàn)型X的目標函數(shù)值相關聯(lián),X越接近于目標函數(shù)的最優(yōu)點,其適應度越大;反之,其適應度越小。在遺傳算法中

7、,決策變量X組成了問題的解空間。對問題最優(yōu)解的搜索是通過對染色體X的搜索過程來進行的,從而由所有的染色體X就組成了問題的搜索空間。生物的進化是以集體為主體的。與此相對應,遺傳算法的運算對象是由M個個體所組成的集合,稱為群體(或種群)。與生物一代一代的自然進化過程相類似,遺傳算法的運算過程也是一個反復迭代的過程,第代群體記做P(t),經(jīng)過一代遺傳和進化后,得到第t+1代群體,它們也是由多個個體組成的集合,記做P(t+1)。這個群體不斷地經(jīng)過遺傳和進化操作,并且每次都按照優(yōu)勝劣汰的規(guī)則將適應度高的個體更多地遺傳到下一代,這樣最終在群體中將會得到一個優(yōu)良的個體X,它所對應的表現(xiàn)型X將達到或接近于問題

8、的最優(yōu)解X*。生物的進化過程主要是通過染色體之間的交叉和染色體的變異來完成的。與此相對應,遺傳算法中最優(yōu)解的搜索過程也模仿生物的這個進化過程,使用所謂的遺傳算子作用于群體P(t)中,進行下述遺傳操作,從而得到新一代群體P(t+1)。·選擇(selectin):根據(jù)各個個體的適應度,按照一定的規(guī)則或方法,從第t代群體P(t)中選擇出一些優(yōu)良的個體遺傳到下一代群體P(t+1)中。·交叉(crossover):將群體P(t)內(nèi)的各個個體隨機搭配成對,對每一對個體,以某個概率(稱為交叉概率,crossoverrate)交換它們之間的部分染色體。·變異(mutation):

9、對群體P(t)中的每一個個體,以某一概率(稱為變異概率,mutationrate)改變某一個或某一些基因座上的基因值為其他的等位基因。3.遺傳算法的運算流程遺傳算法的主要運算流程如下:步驟一:初始化。設置進化代數(shù)計數(shù)器t=0;設置最大進化代數(shù)T;隨機生成M個個體作為初始群體P(0)。步驟二:個體評價。計算群體P(t)中各個個體的適應度。步驟三:選擇運算。將選擇算子作用于群體。步驟四:交叉運算。將交叉算子作用于群體。步驟五:變異運算。將變異算子作用于群體。群體P(t)經(jīng)過選擇、交叉、變異運算之后得到下一代群體P(t+1)。步驟六:終止條件判斷。若tT,則:t=t+1,轉(zhuǎn)到步驟二;若t>T,

10、則以進化過程中所得到的具有最大適應度的個體作為最優(yōu)解輸出,終止計算。具體的流程示意圖見圖2所示。群體P(t)選擇運算交叉運算變異運算群體P(t+1)解 碼解集合個體評價遺傳空間解空間圖2 遺傳算法的運算過程示意4.基本遺傳算法基于對自然界中生物遺傳與進化機理的模仿,針對不同的問題,很多學者設計了許多不同的編碼方法來表示問題的可行解,開發(fā)了許多種不同的遺傳算子來模仿不同環(huán)境下的生物遺傳特性。這樣,由不同的編碼方法和不同的遺傳算子就構(gòu)成了各種不同的遺傳算法。但這些遺傳算法都有共同的特點,即通過對生物遺傳和進化過程中選擇、交叉、變異機理的模仿,來完成對問題最優(yōu)解的自適應搜索過程。基于這個共同特點,G

11、oldberg總結(jié)出了一種統(tǒng)一的最基本的遺傳算法基本遺傳算法(simple genetic algorithms,簡稱SGA)20?;具z傳算法只使用選擇算子、交叉算子和變異算子這三種基本遺傳算子,其遺傳進化操作過程簡單,容易理解,是其他一些遺傳算法的雛形和基礎,它不僅給各種遺傳算法提供了一個基本框架,同時也具有一定的應用價值。(1)編碼方法用遺傳算法求解問題時,不是對所求解問題的實際決策變量直接進行操作,而是對表示可行解的個體編碼的操作,不斷搜索出適應度較高的個體,并在群體中增加其數(shù)量,最終尋找到問題的最優(yōu)解或近似最優(yōu)解。因此,必須建立問題的可行解的實際表示和遺傳算法的染色體位串結(jié)構(gòu)之間的聯(lián)

12、系。在遺傳算法中,把一個問題的可行解從其解空間轉(zhuǎn)換到遺傳算法所能處理的搜索空間的轉(zhuǎn)換方法稱之為編碼。反之,個體從搜索空間的基因型變換到解空間的表現(xiàn)型的方法稱之為解碼方法。編碼是應用遺傳算法是需要解決的首要問題,也是一個關鍵步驟。迄今為止人們已經(jīng)設計出了許多種不同的編碼方法?;具z傳算法使用的是二進制符號0和1所組成的二進制符號集0,1,也就是說,把問題空間的參數(shù)表示為基于字符集0,1構(gòu)成的染色體位串。每個個體的染色體中所包含的數(shù)字的個數(shù)L稱為染色體的長度或稱為符號串的長度。一般染色體的長度L為一固定的數(shù),如表示一個個體,該個體的染色體長度L=20。 二進制編碼符號串的長度與問題所要求的求解精度

13、有關。假設某一參數(shù)的取值范圍是a,b,我們用長度為L的二進制編碼符號串來表示該參數(shù),總共能產(chǎn)生種不同的編碼,若參數(shù)與編碼的對應關系為 0000000000000000000=0 a00000001=1 a+ 11111111=-1b則二進制編碼的編碼精度 假設某一個個體的編碼是,則對應的解碼公式為 例如,對于0,1023,若用長度為10的二進制編碼來表示該參數(shù)的話,則下述符號串: =0010101111就表示一個個體,它對應的參數(shù)值是=175.此時的編碼精度為1.二進制編碼方法相對于其它編碼方法的優(yōu)點,首先是編碼、解碼操作簡單易行;其次是交叉遺傳操作便于實現(xiàn);另外便于對算法進行理論分析。(2)

14、個體適應度函數(shù)在遺傳算法中,根據(jù)個體適應度的大小來確定該個體在選擇操作中被選定的概率。個體的適應度越大,該個體被遺傳到下一代的概率也越大;反之,個體的適應度越小,該個體被遺傳到下一代的概率也越小?;具z傳算法使用比例選擇操作方法來確定群體中各個個體是否有可能遺傳到下一代群體中。為了正確計算不同情況下各個個體的選擇概率,要求所有個體的適應度必須為正數(shù)或為零,不能是負數(shù)。這樣,根據(jù)不同種類的問題,必須預先確定好由目標函數(shù)值到個體適應度之間的轉(zhuǎn)換規(guī)則,特別是要預先確定好目標函數(shù)值為負數(shù)時的處理方法。設所求解的問題為:, .對于求目標函數(shù)最小值的優(yōu)化問題,理論上只需簡單地對其增加一個負號就可將其轉(zhuǎn)化為

15、求目標函數(shù)最大值的問題,即 當優(yōu)化問題是求函數(shù)最大值,并且目標函數(shù)總?cè)≌禃r,可以直接設定個體的適應度函數(shù)值就等于相應的目標函數(shù)值,即.但實際目標優(yōu)化問題中的目標函數(shù)有正也有負,優(yōu)化目標有求函數(shù)最大值,也有求函數(shù)最小值,顯然上面兩式保證不了所有情況下個體的適應度都是非負數(shù)這個要求,必須尋求出一種通用且有效的由目標函數(shù)值到適應度之間的轉(zhuǎn)換關系,有它來保證個體適應度總?cè)》秦撝怠闈M足適應度取負值的要求,基本遺傳算法一般采用下面方法將目標函數(shù)值變換為個體的適應度對于求目標函數(shù)最大值的優(yōu)化方法問題,變換方法為 0 式中,為一個適當?shù)南鄬Ρ容^小的數(shù),它可以是預先指定的一個較小的數(shù),或進化到當前代為止的最

16、小目標函數(shù)值,又或當前代或最近幾代群體中的最小目標函數(shù)值。(3)基本遺傳操作方法比例選擇:選擇或稱復制,建立在對個體適應度進行評價的基礎之上。其作用是從當前群體中選擇出一些比較優(yōu)良的個體,并將其復制到下一代群體中?;具z傳算法采用比例選擇的方法,所謂比例選擇,是指個體在選擇操作中被選中的概率與該個體的適應度大小成正比。單點交叉:單點交叉又稱簡單交叉,是遺傳算法所使用的交叉操作方法。基本位變異:基本位變異石最簡單和最基本的變異操作,也是基本遺傳算法中所使用的變異操作方法。對于基本遺傳算法中用二進制編碼符號串所表示的個體,對需要進行變異操作的某一基因,若原有基因值為0,則變異操作將該基因值變?yōu)?;

17、反之,若原有基因值為1,則變異操作將其變?yōu)?.(4)基本遺傳算法的運行參數(shù)執(zhí)行基本遺傳算法時,有4個參數(shù)需要事先指定。它們是群體的大小M、交叉概率、變異概率及終止的代數(shù)T. 群體大小M.群體的大小M表示群體中所含個體的數(shù)量。當M取值較小時,可提高遺傳算法的運算速度,但卻降低了群體的多樣性,有可能會引起遺傳算法的早熟現(xiàn)象;而當M取值較大時,又會使得遺傳算法的運行效率偏低。一般建議范圍是20100. 交叉概率。交叉操作室遺傳算法產(chǎn)生新個體的主要方法,所以交叉概率一般應取較大值。但若取值過大的話,它又會破壞群體活動的優(yōu)良模式,對進化運算反而產(chǎn)生不利影響;若取值過小的話,產(chǎn)生新個體的速度有太慢。一般建

18、議的取值范圍是0.41.00. 變異概率。若變異概率取值較大的話,雖能夠產(chǎn)生出較多的新個體,但也有可能破壞掉很多較好的模式,使得遺傳算法的性能近似于隨機搜索算法的性能;若變異概率取值太小的話,則變異操作產(chǎn)生新個體的能力和抑制早熟現(xiàn)象的能力就會較差。一般建議的取值范圍是0.0010.1. 終止代數(shù)T.終止代數(shù)T式表示遺傳算法運行結(jié)束條件的一個參數(shù),它表示遺傳算法運行到指定的進化代數(shù)之后就停止運行,并將當前群體中的最佳個體作為所求問題的最優(yōu)解輸出。一般建議的取值范圍是1001000.至于遺傳算法的終止條件,還可以利用某種判定準則,當判定出群體已經(jīng)進化成熟且不再有進化趨勢時就可終止算法的運行過程。如

19、連續(xù)幾代個體平均適應度的差異小于某一個極小的值;或者群體中所有個體適應度的方差小于某一個極小的值。這4個參數(shù)對遺傳算法的搜索結(jié)果及搜索效率都有一定的影響,目前尚無合理選擇它們的理論根據(jù)在遺傳算法的實際應用中,往往需要經(jīng)過多次的試算后才能確定出這些參數(shù)合理的取值范圍或取值大小?;具z傳算法是一個迭代過程,它模仿生物在自然環(huán)境中的遺傳和進化機理,反復將選擇操作、交叉操作、變異操作作用與群體,最終可得到問題的最優(yōu)解或近似最優(yōu)解。雖然算法的思想比較簡單,但它卻具有一定的實用價值,能夠解決一些復雜系統(tǒng)的優(yōu)化計算問題。遺傳算法的應用步驟如下:遺傳算法提供了一種求解復雜系統(tǒng)優(yōu)化問題的通用框架,它不依賴于問題

20、的領域和種類。對一個需要進行優(yōu)化計算的實際應用問題,一般可按下述步驟來構(gòu)造求解該問題的遺傳算法。第一步:建立優(yōu)化模型,即確定出目標函數(shù)、決策變量及各種約束條件以及數(shù)學描述形式或量化方法。第二步:確定表示可行解的染色體編碼方法,也即確定出個體的基因型x及遺傳算法的搜索空間。第三步:確定解碼方法,即確定出個體基因型x到個體表現(xiàn)型x的對應關系或轉(zhuǎn)換方法。第四步:確定個體適應度的量化評價方法,即確定出由目標函數(shù)值到個體適應度的轉(zhuǎn)換規(guī)則。第五步:設計遺傳操作方法,即確定出選擇運算、交叉運算、變異運算等具體操作方法。第六步:確定遺傳算法的有關運行參數(shù),即確定出遺傳算法的M、T、等參數(shù)。由上述構(gòu)造步驟可以看

21、出,可行解的編碼方法、遺傳操作的設計是構(gòu)造遺傳算法時需要考慮的兩個主要問題,也是設計遺傳算法時的兩個關鍵步驟。對不同的優(yōu)化問題需要使用不同的編碼方法和不同的遺傳操作,它們與所求解的具體問題密切相關,因而對所求解問題的理解程度是遺傳算法應用成功與否的關鍵。例111 求解規(guī)劃問題s.t. 解 主要運算過程如表7-3所示。(1)個體編碼.遺傳算法的運算對象是表示個體的符號串,所以必須把變量11基本遺傳算法的構(gòu)成要素,編碼為一種符號串。該例題中,和取07之間的整數(shù),可分別用3位無符號二進制整數(shù)來表示,將它們連接在一起所組成的6位無符號二進制整數(shù)就形成了個體的基因型,表示一個可行解。例如,基因型=101

22、110所對應的表現(xiàn)型是=(5,6)T。個體的表現(xiàn)型和基因型之間可以通過編碼和解碼相互轉(zhuǎn)換。(2)初始群體的產(chǎn)生。遺傳算法是對群體進行遺傳操作,需要準備一些表示起始搜索點的初始群體數(shù)據(jù)。本例中群體規(guī)模的大小M取為4,即群體由4個個體組成,每個個體可通過隨機方法產(chǎn)生。一個隨機產(chǎn)生的初始群體如表7-3中第2欄所示。(3)適應度計算。本例中,目標函數(shù)總?cè)》秦撝?,并且是以求函?shù)最大值為優(yōu)化目標,故可直接利用目標函數(shù)值作為個體的適應度,即。為計算函數(shù)的目標值,需先對個體基因型進行解碼。表7-3中第3、第4欄所示為初始群體各個個體的解碼結(jié)果,第5欄所示為各個個體所對應的目標函數(shù)值,它也是個體的適應度,第5欄

23、中還給出了群體中適應度的最大值和平均值。表7-31個體編號2初始群體P(0)345610111013534 34 25 500.242101011530.243011100340.174111001710.357選擇次數(shù)8選擇結(jié)果9配對情況10交叉點位置11交叉結(jié)果12變異點13變異結(jié)果10111011-23-41-2:23-4:4011001501100111110011111011111110101011101001101001211100111101111101114子代群體P(1)1516170110013110 98 26 58111111771010015111101173(4)選

24、擇操作.其具體操作過程是先計算出群體中所有個體的適應度的總和及每個個體的相對適應度的大小,如表7-3中5、6欄所示。表7-3中第7、8欄表示隨機產(chǎn)生的選擇結(jié)果。(5)交叉操作。本例中采用單點交叉的方法,并取交叉概率=1.00 。表7-3中第11欄所示為交叉運算的結(jié)果。(6)變異操作。為了能顯示變異操作,取變異概率=0.25,并采用基本位變異的方法進行變異運算。表7-3第13欄所示為變異運算的結(jié)果。對群體P(t)進行一輪選擇、交叉、變異操作之后得到新一輪群體P(t+1)。如表7-3第14欄所示。表中第15、16、17欄分別表示出了新群體的解碼值、適應度和適應度的最大值及平均值等。從表7-3中可以

25、看出群體經(jīng)過一代進化以后,其適應度的最大值、平均值都得到了明顯的改進。事實上,這里已經(jīng)找到了最佳個體“111111”。需要說明的是,表中第2、7、9、10、12欄的數(shù)據(jù)時隨機產(chǎn)生的。這里為了說明問題我們特意選擇了一些較好數(shù)值以便能夠得到較好的結(jié)果。在實際運算過程中有可能需要一定的循環(huán)次數(shù)才能達到這個結(jié)果。三.算法的Matlab實現(xiàn)(一)程序流程圖(二)程序設計思想1.個體編碼遺傳算法的運算對象是表示個體的符號串,所以必須把變量 xi 編碼為符號串。本題中,用實數(shù)來表示,即用-20 20區(qū)間上的隨機數(shù)。2.初始群體的產(chǎn)生遺傳算法是對群體進行的進化操作,需要準備一些表示起始搜索點的初始群體數(shù)據(jù)。本

26、課題中,群體規(guī)模的大小取為50,即群體由50染色體組成,每個個體通過隨機方法產(chǎn)生。3.適應度計算遺傳算法中以個體適應度的大小來評定各個個體的優(yōu)劣程度,從而決定其遺傳機會的大小。本課題中,目標函數(shù)是以求最大值為優(yōu)化目標,故可直接利用目標函數(shù)值作為個體的適應度4.選擇選擇運算把當前群體中適應度較高的個體按某種規(guī)則或模型遺傳到下一代群體中。本課題中,采用輪盤賭選擇法來決定進入下一代的個體。其具體操作過程是: 先計算出群體中所有個體的適應度的總和S(f(xi)(i=1.2,10);其次計算出每個個體的相對適應度的大小 ps= f(xi)/ S(f(xi); 概率值依次進行累加,前后兩組成概率之間形成一

27、個區(qū)域,直至概率值之和累加到1; 最后再產(chǎn)生一個0到1之間的隨機數(shù),依據(jù)該隨機數(shù)出現(xiàn)在上述哪一個概率區(qū)域內(nèi)來確定各個個體被選中的次數(shù)。5.交叉交叉運算是遺傳算法中產(chǎn)生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。本題中采用概率為90%的單點交叉方法,其具體操作過程是:先對群體進行依次配對; 其次隨機設置交叉點位置;最后再相互交換配對染色體之間的部分基因。6.變異變異運算是對個體的某一個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產(chǎn)生新個體的一種操作方法。本題中,我采用某一個基因變異的方法來進行變異運算,其具體操作過程是:首先隨機確定出各個個體的基因變異位置;

28、然后依照2.5%概率將變異點的原有基因用規(guī)定區(qū)間的隨機數(shù)替換。(三)程序清單1.主函數(shù)function m_main()Max_gen=50;% 運行代數(shù)pop_size=50;%種群大小chromsome=10;%染色體的長度pc=0.9;%交叉概率pm=0.25;%變異概率gen=0;%統(tǒng)計代數(shù)%迭代操作for i=1:Max_gen gen=gen+1; newpop,best_indiv,max_fit=ga(pop_size,pc,pm,chromsome); bt(i)=max_fit; best_indiv_tmp(i,1:chromsome)=best_indiv;end %運

29、行結(jié)果f_max gen_ct=max(bt)%求的最大值以及代數(shù)best_indiv=best_indiv_tmp(gen_ct,:)%畫圖hold on grid ont=1:gen;plot(t(1:gen),bt(1:gen),'g:o');xlabel('迭代次數(shù)/代'),ylabel('最佳適應度(最大值)');%坐標標注plot(gen_ct,f_max,'r*');%畫出最大值hold offgrid off2.遺傳操作函數(shù)function newpop,best_indiv,max_fit=ga(pop_size

30、,pc,pm,chromsome);%初始化init=40*rand(pop_size,chromsome)-20;pop=init;%輪盤賭選擇 fit=obj_fitness(pop); max_fit,index_max=max(fit); min_fit,index_min=min(fit); oldpop=pop; index=1:pop_size; index(index_max)=0;index(index_min)=0; index=nonzeros(index); newpop=oldpop(index,:); fit=obj_fitness(newpop); best_in

31、div=oldpop(index_max,:); tmp_pop_size=pop_size-2; ps=fit/sum(fit); pscum=cumsum(ps); r=rand(1,tmp_pop_size); selected=sum(pscum*ones(1,tmp_pop_size)<ones(tmp_pop_size,1)*r)+1; newpop=pop(selected,:);%交叉pop_size=size(newpop);if pop_size/2=0 pop_size=pop_size-1;end for i=1:2:pop_size-1 while pc>

32、rand c_pt=round(8*rand+1); pop_tp1=newpop(i,:);pop_tp2=newpop(i+1,:); newpop(i+1,1:c_pt)=pop_tp1(1,1:c_pt); newpop(i,c_pt+1:chromsome)=pop_tp2(1,c_pt+1:chromsome); end end% 變異 for i=1:pop_size if pm>rand m_pt=1+round(9*rand); newpop(i,m_pt)=40*rand-20; end end3.適應度計算函數(shù)function fitness=obj_fitness

33、(pop)%適應度計算函數(shù)r c=size(pop);x=pop;fitness=zeros(r,1);for i=1:r for j=1:c fitness(i,1)=fitness(i,1)+sin(sqrt(abs(40*x(i)+1-abs(x(i)/20.0; endend(四)運行結(jié)果與分析通過多次運行程序,并記錄如表1所示一組實驗數(shù)據(jù)表1 運行次數(shù)與最大值關系表運行次數(shù)515253550最大值19.5979919.8214819.9150119.9535019.95430(上面每個運行次數(shù)對應的最大值均是在此運行次數(shù)下運行10次所得到的平均值) 從表1可以看出,一般地,迭代次數(shù)越

34、多,所得的最大值越理想。(越接近理想值20)1. 運行代數(shù)為5f_max = 19.8430gen_ct =3best_indiv = -0.0496 -11.3825 10.8032 -17.4977 -18.1225 -3.2547 6.3578 -0.6684 12.7808 -4.4876f_max =19.0848gen_ct =2best_indiv = -1.6021 17.2796 6.8919 -3.1428 -6.5096 16.8353 -7.5151 11.9897 1.7280 -0.5885f_max =19.9680gen_ct =5best_indiv = -0

35、.0626 -4.8494 12.6032 -1.7708 1.8971 0.9066 -14.5424 1.8883 0.5392 12.3359f_max = 19.9289gen_ct =1best_indiv = 0.0686 -7.4566 3.8365 8.6504 12.2745 12.8992 -12.8993 12.0314 11.3289 15.4642f_max =19.2249gen_ct =1best_indiv = -1.5210 11.7728 5.0117 -7.2058 1.1210 11.4130 -10.2358 -9.1400 -11.4592 17.1

36、319f_max =19.0892gen_ct =1best_indiv = 1.6011 -19.0131 19.6361 8.5834 -10.8955 2.9639 -4.4671 -1.3494 13.4663 7.4920f_max =19.9311gen_ct =1best_indiv = 0.0547 6.7574 -19.8622 -5.5094 16.0980 -0.7264 15.4774 1.3609 7.5339 -3.0777f_max = 19.2115gen_ct =3best_indiv = 1.5589 -18.4875 13.5009 6.7789 2.63

37、10 18.1578 -17.1481 -19.6452 -18.8297 -9.2041f_max = 19.7613gen_ct =5best_indiv = -0.0464 6.4167 9.2656 -5.5115 1.5161 -13.1376 6.1937 -1.9843 13.0124 -12.1396f_max =19.1876gen_ct =3best_indiv = -1.4983 -17.2557 18.8165 10.7479 11.5869 14.2911 -16.6500 -2.0143 12.1496 -0.64972.運行代數(shù)為15f_max =19.9390g

38、en_ct = 7best_indiv = 0.0676 -11.9822 -16.8559 0.5190 -13.8701 -6.1255 12.6010 -6.8367 -10.6599 17.4566f_max =19.9455gen_ct = 6best_indiv = -0.0669 11.6152 19.9097 7.8835 -9.8352 12.6207 -9.7310 -6.6260 -19.5319 -10.4624f_max =19.9034gen_ct =15best_indiv = 0.0527 -4.5318 9.0487 -4.0527 0.7533 -6.225

39、1 -16.9766 2.8764 2.1100 11.1249f_max =19.9643gen_ct = 10best_indiv = 0.0589 1.5762 8.4767 -16.7676 0.9867 0.0975 12.1450 -7.9506 -14.1513 -9.6680f_max = 19.8780gen_ct = 6best_indiv =0.0513 -2.5618 12.7304 14.8526 -10.3822 4.4477 5.9564 -18.5784 -2.1529 7.6317f_max =19.7495gen_ct = 11best_indiv = -0

40、.0789 -4.9158 0.0615 18.2994 10.5395 5.5583 16.3405 -13.8658 -7.1112 6.4066f_max = 19.8550gen_ct =10best_indiv = 0.0738 1.5721 -13.1878 -3.3442 -17.8735 -12.5453 8.0510 -2.2273 17.8046 -11.3835f_max = 19.7762gen_ct = 15best_indiv = -0.0777 13.4896 -2.9297 5.4609 -14.8599 3.1170 -6.5060 -16.7093 -11.

41、6813 1.2465f_max = 19.9622gen_ct = 2best_indiv = -0.0644 -11.6714 -5.2552 -4.0803 6.0787 -9.8106 -19.5355 11.5958 2.2895 -13.0578f_max =19.7246gen_ct =4best_indiv = -0.0799 -13.7446 -1.7043 -7.0379 -3.8910 -8.0114 -14.3604 15.7785 4.0023 -18.93643.運行代數(shù)為25f_max =19.9692gen_ct = 18best_indiv = 0.0615

42、-3.0161 14.4880 8.0109 7.5944 -12.5905 14.0025 -2.6867 13.7511 10.2552f_max =19.9642gen_ct =21best_indiv = 0.0589 10.6547 -1.7682 6.3237 14.0837 7.6915 -3.7633 10.6667 18.9644 -11.1583f_max =19.9674gen_ct = 24best_indiv = 0.0599 -15.1953 -4.7007 -16.5906 6.9259 -9.1176 -11.4044 13.5344 -5.2051 3.615

43、2f_max = 19.9575gen_ct = 21best_indiv = -0.0652 1.2183 10.2997 13.0135 -12.8339 10.6255 14.6946 12.5588 11.0696 -8.2607f_max =19.8803gen_ct = 15best_indiv = 0.0514 17.5341 6.6755 -8.1241 -13.1000 -0.2097 11.0299 -9.6241 -1.9190 -16.9486f_max = 19.6730gen_ct =24best_indiv = 0.0438 -14.4244 -0.9067 11

44、.3440 2.2061 2.9081 17.2825 -15.1728 1.8544 -18.0114f_max =19.9449gen_ct = 21best_indiv = -0.0670 -0.5699 18.1656 2.5075 -13.3804 15.1292 9.0240 -1.3930 10.8860 -15.8724f_max =19.7906gen_ct =22best_indiv = -0.0475 -6.2727 7.7806 -0.2242 13.9716 15.6770 7.7771 -13.4887 -19.8965 -15.9007f_max = 19.230

45、6gen_ct =18best_indiv = -1.5371 -5.0118 9.9249 -3.5028 -17.1851 11.2032 -18.5345 -16.9791 2.0597 1.9871f_max =19.7930gen_ct = 7best_indiv =0.0475 -16.6796 -0.6106 -14.8531 -11.4288 2.3845 9.1818 -5.1160 2.9464 8.35344.運行代數(shù)為35f_max =19.9350gen_ct =24best_indiv = 0.0551 -19.4099 -19.4120 5.0720 -6.779

46、9 -19.2103 -13.7788 -6.2673 -15.4805 8.8496f_max = 19.9463gen_ct =23best_indiv = 0.0668 -6.2614 -0.6488 16.3578 -0.4945 -18.4840 12.9268 19.3845 -19.2750 13.8822f_max =19.9599gen_ct =21best_indiv = -0.0581 6.8885 -6.7583 -3.1837 14.9818 -2.0044 11.3058 -12.8963 -5.3344 5.9888f_max =19.9692gen_ct =11

47、best_indiv = 0.0612 18.0518 5.4484 -8.9049 -15.5474 -5.2109 17.5153 -16.1248 7.7735 -17.9483f_max =19.9332gen_ct =27best_indiv = -0.0549 -17.8944 -10.2895 11.9742 -18.1278 -4.5534 15.4569 -9.7809 12.1041 -7.8017f_max =19.9615gen_ct =9best_indiv = 0.0645 -8.7105 16.0071 -18.9656 -18.3360 -11.4238 6.7

48、602 -1.2544 6.2370 1.1231f_max =19.9461gen_ct =31best_indiv = 0.0668 -18.8678 -9.2167 -18.7102 -9.3673 4.4601 -6.4349 -2.5979 3.4062 0.1936f_max =19.9689gen_ct =15best_indiv = -0.0620 -3.6394 10.7060 -1.3808 -4.6508 -17.8127 -0.1212 -0.9198 7.0529 -0.5071f_max =19.9461gen_ct =5best_indiv = -0.0668 -14.9429 2.8125 2.1046 2.2577 17.0574 -12.3045 19.9361 -1.2323 -11.9025f_max = 19.9688gen_ct = 12best_indiv = -0.0607 -3.9846 9.8748 -14.0303 -7.3493 -8.6746 18.5346 15.5011 14.8274 4.19145.運行代數(shù)為50f_max =19.9610gen_ct =7best_indiv = -0.0646 16.3717 6.0022 16.58

溫馨提示

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

評論

0/150

提交評論