遺傳算法及優(yōu)化問題重要_有代碼_第1頁
遺傳算法及優(yōu)化問題重要_有代碼_第2頁
遺傳算法及優(yōu)化問題重要_有代碼_第3頁
遺傳算法及優(yōu)化問題重要_有代碼_第4頁
遺傳算法及優(yōu)化問題重要_有代碼_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、word實驗十遺傳算法與優(yōu)化問題一、問題背景與實驗目的遺傳算法Genetic Algorithm GA,是模擬達爾文的遺傳選擇和自然淘汰 的生物進化過程的計算模型,它是由美國Michigan大學的教授于1975年首先提 出的.遺傳算法作為一種新的全局優(yōu)化搜索算法,以其簡單通用、魯棒性強、適 于并行處理與應用X圍廣等顯著特點,奠定了它作為21世紀關鍵智能計算之一 的地位.本實驗將首先介紹一下遺傳算法的根本理論,然后用其解決幾個簡單的函數(shù) 最值問題,使讀者能夠?qū)W會利用遺傳算法進展初步的優(yōu)化計算.1 .遺傳算法的根本原理遺傳算法的根本思想正是基于模仿生物界遺傳學的遺傳過程.它把問題的參數(shù)用基因代表,

2、把問題的解用染色體代表在計算機里用二進制碼表示,從而得到一個由具有不同染色體的個體組成的群體.這個群體在問題特定的環(huán)境里生 存競爭,適者有最好的機會生存和產(chǎn)生后代. 后代隨機化地繼承了父代的最好特 征,并也在生存環(huán)境的控制支配下繼續(xù)這一過程.群體的染色體都將逐漸適應環(huán)境,不斷進化,最后收斂到一族最適應環(huán)境的類似個體, 即得到問題最優(yōu)的解.值 得注意的一點是,現(xiàn)在的遺傳算法是受生物進化論學說的啟發(fā)提出的,這種學說對我們用計算機解決復雜問題很有用, 而它本身是否完全正確并不重要目前生 物界對此學說尚有爭議.1遺傳算法中的生物遺傳學概念由于遺傳算法是由進化論和遺傳學機理而產(chǎn)生的直接搜索優(yōu)化方法;故而

3、在這個算法中要用到各種進化和遺傳學的概念.首先給出遺傳學概念、遺傳算法概念和相應的數(shù)學概念三者之間的對應關 系.這些概念如下:廳P遺傳學概念遺傳算法概念數(shù)學概念1個體要處理的根本對象、結(jié)構(gòu)也就是可行解2群體個體的集合被選定的一組可行解3染色體個體的表現(xiàn)形式可行解的編碼4基因染色體中的元素編碼中的元素5基因位某一基因在染色體中的位置元素在編碼中的位置6適應值個體對于環(huán)境的適應程度, 或在環(huán)境壓力下的生存能力可行解所對應的適應函數(shù) 值7種群被選定的一組染色體或個體根據(jù)入選概率定出的一組 可行解8選擇從群體中選擇優(yōu)勝的個體, 淘汰劣質(zhì)個體的操作保存或復制適應值大的可 行解,去掉小的可行解9交叉一組染

4、色體上對應基因段的 交換根據(jù)父叉原如此產(chǎn)生的一 組新解10父叉概率染色體對應基因段交換的概 率可能住大小閉區(qū)間0,1上的一個值11變異染色體水平上基因變化編碼的某些元素被改變141 / 14word12變異概率染色體上基 因變化的 概率 可能住大小開區(qū)間(0,1)內(nèi)的一個值13進化、適者生存?zhèn)€體進展優(yōu)勝劣汰的進化, 一代又一代地優(yōu)化目標函數(shù)取到最大值,最 優(yōu)的可行解2遺傳算法的步驟遺傳算法計算優(yōu)化的操作過程就如同生物學上生物遺傳進化的過程,主要有三個根本操作或稱為算子:選擇Selection、交叉Crossover5、變異Mutation.遺傳算法根本步驟主要是:先把問題的解表示成“染色體,在

5、算法中也就 是以二進制編碼的申,在執(zhí)行遺傳算法之前,給出一群“染色體,也就是假設 的可行解.然后,把這些假設的可行解置于問題的“環(huán)境中,并按適者生存的 原如此,從中選擇出較適應環(huán)境的“染色體進展復制,再通過交叉、變異過程 產(chǎn)生更適應環(huán)境的新一代“染色體群. 經(jīng)過這樣的一代一代地進化,最后就會 收斂到最適應環(huán)境的一個“染色體上,它就是問題的最優(yōu)解.下面給出遺傳算法的具體步驟,流程圖參見圖 1:第一步:選擇編碼策略,把參數(shù)集合可行解集合轉(zhuǎn)換染色體結(jié)構(gòu)空間;第二步:定義適應函數(shù),便于計算適應值;第三步:確定遺傳策略,包括選擇群體大小,選擇、交叉、變異方法以與確 定交叉概率、變異概率等遺傳參數(shù);第四步

6、:隨機產(chǎn)生初始化群體;第五步:計算群體中的個體或染色體解碼后的適應值;第六步:按照遺傳策略,運用選擇、交叉和變異算子作用于群體,形成下一 代群體;第七步:判斷群體性能是否滿足某一指標、或者是否已完成預定的迭代次數(shù), 不滿足如此返回第五步、或者修改遺傳策略再返回第六步.圖1 一個遺傳算法的具體步驟142 / 14word遺傳算法有很多種具體的不同實現(xiàn)過程,以上介紹的是標準遺傳算法的主要 步驟,此算法會一直運行直到找到滿足條件的最優(yōu)解為止.2 .遺傳算法的實際應用例 1:設 f(x)x2 2x 0.5,求 max f(x), x 1,2.注:這是一個非常簡單的二次函數(shù)求極值的問題,相信大家都會做.

7、在此我 們要研究的不是問題本身,而是借此來說明如何通過遺傳算法分析和解決問題.在此將細化地給出遺傳算法的整個過程.1編碼和產(chǎn)生初始群體首先第一步要確定編碼的策略,也就是說如何把1到2這個區(qū)間內(nèi)的數(shù)用計 算機語言表小出來.編碼就是表現(xiàn)型到基因型的映射,編碼時要注意以下三個原如此:完備性:問題空間中所有點潛在解都能成為 GA編碼空間中的點染色 體位用的表現(xiàn)型;健全性:GA編碼空間中的染色體位用必須對應問題空間中的某一潛在解;非冗余性:染色體和潛在解必須一一對應.這里我們通過采用二進制的形式來解決編碼問題,將某個變量值代表的個體表示為一個0, 1二進制用.當然,用長取決于求解的精度.如果要設定求解精

8、 度到六位小數(shù), 由于區(qū)間長度為2 ( 1) 3,如此必須將閉區(qū)間 1,2分為 3 106等分.因為2097152 221 3 106 222 4194304所以編碼的二進制用至 少需要22位.將一個二進制用b21b20b19b1bQ轉(zhuǎn)化為區(qū)間1,2內(nèi)對應的實數(shù)值很簡單, 只需采取以下兩步Matlab程序參見附錄4:代表的二進制數(shù)化為10進制數(shù):212x'對應的區(qū)間(b21b20bl9blb3)21,2內(nèi)的實數(shù):x2bi 2i)10x0(1)1將一個二進制用b21b20b19 b1b。x'2=22889673x 1 2288967 f 0.63719721利用這種方法我們就完成

9、了遺傳算法的第一步一一編碼,這種二進制編碼的方法完全符合上述的編碼的三個原如此.首先我們來隨機的產(chǎn)生一個個體數(shù)為 4個的初始群體如下:pop(1)=< >,% a1< >,% a2< >,% a3< >% a4 Matlab程序參見附錄2化成十進制的數(shù)分別為:pop(1)= , 0.574022 , -0.697235 , 0.247238 143 / 14word接下來我們就要解決每個染色體個體的適應值問題了. 2定義適應函數(shù)和適應值由于給定的目標函數(shù)f(x)x2 2x 0.5在1,2內(nèi)的值有正有負,所以必保證映射后的適應值非負,而且目也為以后

10、計算各個體的入選概率g(x),采用下述方法:若 f(x) Fmin 0其他須通過建立適應函數(shù)與目標函數(shù)的映射關系, 標函數(shù)的優(yōu)化方向應對應于適應值增大的方向, 打下根底.對于此題中的最大化問題,定義適應函數(shù)/、 f(x) Fmin.g(x) 0,式中Fmin既可以是特定的輸入值,也可以是當前所有代或最近K代中f(x)的最小值,這里為了便于計算,將采用了一個特定的輸入值.假如取Fmin1,如此當f (x) 1時適應函數(shù)g(x) 2;當f (x)1.1時適應函數(shù)g(x) 0 .由上述所隨機產(chǎn)生的初始群體,我們可以先計算出目標函數(shù)值分別如下 Matlab程序參見附錄3:f pop(1)= , -1.

11、380607 ,0.933350 然后通過適應函數(shù)計算出適應值分別如下取 Fmin 1 ,Matlab程序參見附錄5、附錄6:gpop(1)= 2.226437,2.318543 ,0 ,1.933350 3確定選擇標準這里我們用到了適應值的比例來作為選擇的標準,得到的每個個體的適應值 比例叫作入選概率.其計算公式如下:對于給定的規(guī)模為n的群體pop= a1 ,a2,a3,|,an,個體ai的適應值為g(ai),如此其入選概率為 g(ai) Ps(ai) -, i 1,2,3, ,ng(aj i 1由上述給出的群體,我們可以計算出各個個體的入選概率. 4首先可得g(a) 6.478330,i

12、1 4然后分別用四個個體的適應值去除以g(ai),得:i 1P(a1)=2.226437 / =% a1P(a2)=2.318543 / = 0.357892 % a2 P(a3)=0 / =0% a3P(a4)=1.933350 / =% a4Matlab 程序參見附錄 74產(chǎn)生種群計算完了入選概率后,就將入選概率大的個體選入種群,淘汰概率小的個體, 并用入選概率最大的個體補入種群,得到與原群體大小同樣的種群Matlab程序參見附錄8、附錄11.要說明的是:附錄11的算法與這里不完全一樣.為保證收斂性,附錄 11的14 4 / 14word算法作了修正,采用了最優(yōu)個體保存方法elitist

13、model,具體內(nèi)容將在后面給 出介紹.由初始群體的入選概率我們淘汰掉 a3,再參加a2補足成與群體同樣大小的種群得到newpop(1)如下:newpop(1)=<110101110,% al<10000110A,% a2<>,% a2<>% a45交叉交叉也就是將一組染色體上對應基因段的交換得到新的染色體,然后得到新的染色體組,組成新的群體Matlab程序參見附錄9.我們把之前得到的newpop(1)的四個個體兩兩組成一對,重復的不配對,進展交叉.可以在任一位進展交叉交叉得:交叉得:通過交叉得到了四個新個體,得到新的群體jchpop (1)如下:jchpo

14、p(1)=<110101110><>,<100001100>,<>這里采用的是單點交叉的方法,當然還有多點交叉的方法,不過有些煩瑣, 這里就不著重介紹了.6變異變異也就是通過一個小概率改變?nèi)旧w位用上的某個基因Matlab程序參見附錄10.現(xiàn)把剛得到的jchpop(1)中第3個個體中的第9位改變,就產(chǎn)生了變異,得到 了新的群體pop(2)而下:pop(2)= <>,<>,<100001101>,<> 然后重復上述的選擇、交叉、變異直到滿足終止條件為止.7終止條件遺傳算法的終止條件有兩類常見條件:1采

15、用設定最大遺傳代數(shù)的方145 / 14word法,一般可設定為50代,此時就可能得出最優(yōu)解.此種方法簡單易行,但可能 不是很準確Matlab程序參見附錄1;2根據(jù)個體的差異來判斷,通過計算 種群中基因多樣性測度,即所有基因位相似程度來進展控制.3.遺傳算法的收斂性前面我們已經(jīng)就遺傳算法中的編碼、適應度函數(shù)、選擇、交叉和變異等主要 操作的根本內(nèi)容與設計進展了詳細的介紹.作為一種搜索算法,遺傳算法通過對 這些操作的適當設計和運行,可以實現(xiàn)兼顧全局搜索和局部搜索的所謂均衡搜 索,具體實現(xiàn)見如下圖2所示.圖2均衡搜索的具體實現(xiàn)圖示應該指出的是,遺傳算法雖然可以實現(xiàn)均衡的搜索,并且在許多復雜問題的 求解

16、中往往能得到滿意的結(jié)果,但是該算法的全局優(yōu)化收斂性的理論分析尚待解 決.目前普遍認為,標準遺傳算法并不保證全局最優(yōu)收斂.但是,在一定的約束 條件下,遺傳算法可以實現(xiàn)這一點.下面我們不加證明地羅列幾個定理或定義,供讀者參考在這些定理的證明 中,要用到許多概率論知識,特別是有關馬爾可夫鏈的理論,讀者可參閱有關文 獻.定理1如果變異概率為Pm(0,1),交叉概率為Pc 0,1,同時采用比例選擇法按個體適應度占群體適應度的比例進展復制,如此標準遺傳算法的變換 矩陣P是根本的.定理2標準遺傳算法參數(shù)如定理1不能收斂至全局最優(yōu)解.由定理2可以知道,具有變異概率Pm (0,1),交叉概率為Pc 0,1以與按

17、比例選擇的標準遺傳算法是不能收斂至全局最最優(yōu)解.我們在前面求解例1時所用的方法就是滿足定理1的條件的方法.這無疑是一個令人沮喪的結(jié)論.然而,慶幸的是,只要對標準遺傳算法作一些改良,就能夠保證其收斂性.具 體如下:我們對標準遺傳算法作一定改良,即不按比例進展選擇,而是保存當前 所得的最優(yōu)解稱作 超個體.該超個體不參與遺傳.最優(yōu)個體保存方法elitistmodel的思想是把群體中適應度最高的個體不進展配對交叉而直接復制到下一代中.此種選擇操作又稱復制 copy. DeJong 對此方法作了如下定義:定義 設到時刻t第t代時,群體中at為最優(yōu)個體.又設At+1146 / 14word為新一代群體,假

18、如At+1中不存在a*t,如此把a*(t)作為At+1中的 第n+1個個體其中,n為群體大小Matlab程序參見附錄11.采用此選擇方法的優(yōu)點是,進化過程中某一代的最優(yōu)解可不被交叉和變異操 作所破壞.但是,這也隱含了一種危機,即局部最優(yōu)個體的遺傳基因會急速增加 而使進化有可能限于局部解.也就是說,該方法的全局搜索能力差,它更適合單 峰性質(zhì)的搜索空間搜索,而不是多峰性質(zhì)的空間搜索.所以此方法一般都與其他 選擇方法結(jié)合使用.定理3具有定理1所示參數(shù),且在選擇后保存當前最優(yōu)值的遺傳算法最終能 收斂到全局最優(yōu)解.當然,在選擇算子作用后保存當前最優(yōu)解是一項比擬復雜的工作,因為該解 在選擇算子作用后可能丟

19、失.但是定理 3至少明確了這種改良的遺傳算法能夠收 斂至全局最優(yōu)解.有意思的是,實際上只要在選擇前保存當前最優(yōu)解,就可以保 證收斂,定理4描述了這種情況.定理4具有定理1參數(shù)的,且在選擇前保存當前最優(yōu)解的遺傳算法可收斂 于全局最優(yōu)解.例2:設f(x) 3 x2 x,求max f (x), x 0,2,編碼長度為5,采用上述定理4所述的“在選擇前保存當前最優(yōu)解的遺傳算法進展.此略,留作練習.二、相關函數(shù)命令與簡介本實驗的程序中用到如下一些根本的Matlab函數(shù):ones, zeros, sum, size,length, subs, double等,以與for, while等根本程序結(jié)構(gòu)語句,讀

20、者可參考前面 專門關于Matlab的介紹,也可參考其他數(shù)學實驗章節(jié)中的“相關函數(shù)命令 與簡介內(nèi)容,此略.三、實驗內(nèi)容上述例1的求解過程為:群體中包含六個染色體,每個染色體用 22位01碼,變異概率為0.01,變 量區(qū)間為1,2,取Fmin= 2 ,遺傳代數(shù)為50代,如此運用第一種終止條件指 定遺傳代數(shù)的Matlab程序為:Count,Result,BestMember=Genetic1(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,50) 執(zhí)行結(jié)果為:Count =50Result =BestMember =147 / 14word般 1 1111r1111

21、.4D9 -/1田虹 /-1.4SSS - -I-1 JQR7iI|1|I口 片 1。 伯 如 乂 加 王 上口 延 效圖2例1的計算結(jié)果注:上圖為遺傳進化過程中每一代的個體最大適應度;而如下圖為目前為止的個體最大適應度一一單調(diào)遞增我們通過Matlab軟件實現(xiàn)了遺傳算法,得到了這題在第一種終止條件下的最 優(yōu)解:當 x取時,Max f(x) 1.4990 .當然這個解和實際情況還有一點出入應該是x取1時,Max f(x) 1.5000, 但對于一個計算機算法來說已經(jīng)很不錯了.我們也可以編制Matlab程序求在第二種終止條件下的最優(yōu)解.此略,留作練 習.實踐明確,此時的遺傳算法只要經(jīng)過10代左右就

22、可完成收斂,得到另一個“最優(yōu)解,與前面的最優(yōu)解相差無幾.四、自己動手1 .用Matlab編制另一個主程序 Genetic2.m,求例1的在第二種終止條件下的最 優(yōu)解.提示:一個可能的函數(shù)調(diào)用形式以與相應的結(jié)果為:Count,Result,BestMember=Genetic2(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,0.00001)Count =13Result =BestMember =148 / 14word可以看到:兩組解都已經(jīng)很接近實際結(jié)果,對于兩種方法所產(chǎn)生的最優(yōu)解差異很小.可見這兩種終止算法都是可行的,而且可以知道對于例1的問題,遺傳算法只

23、要經(jīng)過10代左右就可以完成收斂,達到一個最優(yōu)解.2 .按照例2的具體要求,用遺傳算法求上述例 2的最優(yōu)解.3 .附錄9子程序Crossing.m中的第3行到第7行為注解語句.假如去掉前面的% 號,如此程序的算法思想有什么變化?4 .附錄9子程序Crossing.m中的第8行至第13行的程序明確,當 Dim(1)>=3 時,將交換數(shù)組Population的最后兩行,即交換最后面的兩個個體.其目的 是什么?5 .仿照附錄10子程序MutationGenetic2.m,以便代入交叉概率.6 .設f(x) x2 4x 1,求max f (x), x 2,2,要設定求解精度到15位小數(shù).五、附錄f

24、unctionCount,Result,BestMember=Genetic1(MumberLength,MemberNumber,FunctionFitn ess,MinX,MaxX,Fmin,MutationProbability,Gen)Population=PopulationInitialize(MumberLength,MemberNumber);global Count;global CurrentBest;Count=1;PopulationCode=Population;PopulationFitness=Fitness(PopulationCode,FunctionFitn

25、ess,MinX,MaxX,Mumbe rLength);PopulationFitnessF=FitnessF(PopulationFitness,Fmin);PopulationProbability=Probability(PopulationFitnessF);149 / 14wordPopulation,CurrentBest,EachGenMaxFitness=Elitist(PopulationCode,Populatio nFitness,MumberLength);EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count

26、)=CurrentBest(length(CurrentBest);while Count<GenNewPopulation=Select(Population,PopulationProbability,MemberNumber);Population=NewPopulation;NewPopulation=Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength);Population=NewPopulation;NewPopulation=Mutation(Population,MutationProbability);P

27、opulation=NewPopulation;PopulationFitness=Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength);PopulationFitnessF=FitnessF(PopulationFitness,Fmin); PopulationProbability=Probability(PopulationFitnessF);Count=Count+1;NewPopulation,CurrentBest,EachGenMaxFitness=Elitist(Population,PopulationFitn

28、ess,MumberLength);EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count)=CurrentBest(length(CurrentBest);Population=NewPopulation;endDim=size(Population);Result=ones(2,Dim(1);for i=1:Dim(1)Result(1,i)=Translate(Population(i,:),MinX,MaxX,MumberLength);endResult(2,:)=PopulationFitness;BestMember(1,

29、1)=Translate(CurrentBest(1:MumberLength),MinX,MaxX,Mumb erLength);BestMember(2,1)=CurrentBest(MumberLength+1);close allsubplot(211)plot(EachMaxFitness)subplot(212)plot(MaxFitness)【程序說明】主程序 Genetic1.m包含了 8個輸入?yún)?shù):(1) MumberLength:表示一個染色體位用的二進制長度.例1中取22(2) MemberNumber:表示群體中染色體的個數(shù).例1中取6個(3) FunctionFitn

30、ess:表示目標函數(shù),是個字符串,因此用表達式時,用單150 / 14word引號括出.例1中是f (x)x2 2x 0.5(4) MinX :變量區(qū)間的下限.例1中是1,2中的(5) MaxX:變量區(qū)間的上限.例1中是1,2中的2(6) Fmin:定義適應函數(shù)過程中給出的一個目標函數(shù)的可能的最小值,由操作者自己給出.例1中取Fmin= 2(7) MutationProbability :表示變異的概率,一般都很小.例1中取0.01(8) Gen:表示遺傳的代數(shù),也就是終止程序時的代數(shù).例1中取50另外,主程序Genetic1.m包含了 3個輸出值:Count表示遺傳的代數(shù);Result 表示

31、計算的結(jié)果,也就是最優(yōu)解;BestMember表示最優(yōu)個體與其適應值.附錄 2:子程序 PopulationInitialize.mfunction Population=PopulationInitialize(MumberLength,MemberNumber)Temporary=rand(MemberNumber,MumberLength);Population=(Temporary>=0.5*ones(size(Temporary);【程序說明】子程序 PopulationInitialize.m用于產(chǎn)生一個初始群體.這個初始群 體含有MemberNumber個染色體,每個染色體

32、有 MumberLength個基因二進制 碼.附錄3:子程序Fitness.mfunctionPopulationFitness=Fitness(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength)Dim=size(PopulationCode);PopulationFitness=zeros(1,Dim(1);for i=1:Dim(1)PopulationFitness(i)=Transfer(PopulationCode(i,:),FunctionFitness,MinX,MaxX,MumberLength); end【程序說明】子

33、程序Fitness.m用于計算群體中每一個染色體的目標函數(shù)值.子 程序中含有 5個輸入?yún)?shù):PopulationCode表示用01代碼表示的群體, FunctionFitness表示目標函數(shù),它是一個字符串,因此寫入調(diào)用程序時,應該用 單引號括出,MumberLength表示染色體位用的二進制長度.MinX和MaxX分別指變量區(qū)間的上下限.附錄4:子程序Translate.mfunction PopulationData=Translate(PopulationCode,MinX,MaxX,MumberLength)PopulationData=0;Dim=size(PopulationCod

34、e);for i=1:Dim(2)PopulationData=PopulationData+PopulationCode(i)*(2A(MumberLength-i); end151 / 14wordPopulationData=MinX+PopulationData*(MaxX-MinX)/(2ADim(2)-1);【程序說明】子程序Translate.m把編成碼的群體翻譯成變量的數(shù)值.含有 4個 輸入?yún)?shù),PopulationCode,MinX,MaxX, MumberLength .附錄 5:子程序 Transfer.mfunctionPopulationFitness=Transfe

35、r(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength) PopulationFitness=0;PopulationData=Translate(PopulationCode,MinX,MaxX,MumberLength);PopulationFitness=double(subs(FunctionFitness,'x',sym(PopulationData);【程序說明】子程序Transfer把群體中的染色體的目標函數(shù)值用數(shù)值表示出來, 它是Fitness的重要子程序.其有5個輸入?yún)?shù)分別為PopulationCode

36、, FunctionFitness, MinX, MaxX , MumberLength.附錄6:子程序FitnessF.mfunction PopulationFitnessF=FitnessF(PopulationFitness,Fmin)Dim=size(PopulationFitness);PopulationFitnessF=zeros(1,Dim(2);for i=1:Dim(2)if PopulationFitness(i)>FminPopulationFitnessF(i)=PopulationFitness(i)-Fmin;endif PopulationFitness

37、(i)<=FminPopulationFitnessF(i)=0;end end【程序說明】子程序FitnessF.m是用于計算每個染色體的適應函數(shù)值的.其輸入 參數(shù)如下:PopulationFitness為群體中染色體的目標函數(shù)值,F(xiàn)min為定義適應函 數(shù)過程中給出的一個目標函數(shù)的可能的最小值.附錄7:子程序Probability.mfunction PopulationProbability=Probability(PopulationFitness) SumPopulationFitness=sum(PopulationFitness);PopulationProbability=

38、PopulationFitness/SumPopulationFitness;【程序說明】子程序 Probability.m用于計算群體中每個染色體的入選概率,輸 入?yún)?shù)為群體中染色體的適應函數(shù)值PopulationFitness附錄8:子程序Select.mfunction NewPopulation=Select(Population,PopulationProbability,MemberNumber)152 / 14wordCProbability(1)=PopulationProbability(1); for i=2:MemberNumberCProbability(i)=CPro

39、bability(i-1)+PopulationProbability(i); end for i=1:MemberNumber r=rand(1);Index=1;while r>CProbability(Index) Index=Index+1;endNewPopulation(i,:)=Population(Index,:); end【程序說明】子程序 Select.m根據(jù)入選概率計算累計概率在群體中按比例 選擇局部染色體組成種群,該子程序的3個輸入?yún)?shù)分別為:群體 Population,入選才既率PopulationProbability,群體中染色體的個數(shù) MemberNumb

40、er.functionNewPopulation=Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength) %PopulationFitness=% Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength);%PopulationProbability=Probability(PopulationFitness);%SortResult,SortSite=sort(PopulationProbability);%Population=Population(SortSite,:);Dim=size(Population);if Dim(1)>=3Temp=Population(Dim(1),:);Population(Dim(1),:)=Population(Dim(1)-1,:);Population(Dim(1)-1,:)=Temp; endfor i=1:2:Dim(1)-1SiteArray=randperm(Dim(2);Site=SiteArray(1);Temp=Population(i,1:Site);Populat

溫馨提示

  • 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

提交評論