遺傳算法及優(yōu)化問題(重要_第1頁
遺傳算法及優(yōu)化問題(重要_第2頁
遺傳算法及優(yōu)化問題(重要_第3頁
免費預覽已結束,剩余13頁可下載查看

下載本文檔

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

文檔簡介

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

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

3、是由進化論和遺傳學機理而產生的直接搜索優(yōu)化方法;故而在這個算法中要用到各種進化和遺傳學的概念.首先給出遺傳學概念、遺傳算法概念和相應的數(shù)學概念三者之間的對應關 系.這些概念如下:序號遺傳學概念遺傳算法概念數(shù)學概念1個體要處理的基本對象、結構也就是可行解2群體個體的集合被選定的一組可行解3染色體個體的表現(xiàn)形式可行解的編碼4基因染色體中的元素編碼中的元素5基因位某一基因在染色體中的位置元素在編碼中的位置6適應值個體對于環(huán)境的適應程度, 或在環(huán)境壓力下的生存能力可行解所對應的適應函數(shù) 值7種群被選定的一組染色體或個體根據入選概率定出的一組 可行解8選擇從群體中選擇優(yōu)勝的個體, 淘汰劣質個體的操作保留

4、或復制適應值大的可 行解,去掉小的可行解9交叉一組染色體上對應基因段的 交換根據交叉原則產生的一組 新解10交叉概率染色體對應基因段交換的概 率(可能性大?。╅]區(qū)間0,1上的一個值,一般為 0.650.9011變異染色體水平上基因變化編碼的某些元素被改變12變異概率染色體上基 因變化的 概率 (可能性大?。╅_區(qū)間(0,1)內的一個值,一般為 0.0010.0113進化、 適者生存?zhèn)€體進行優(yōu)勝劣汰的進化, 一代又一代地優(yōu)化目標函數(shù)取到最大值,最 優(yōu)的可行解(2)遺傳算法的步驟遺傳算法計算優(yōu)化的操作過程就如同生物學上生物遺傳進化的過程,主要有三個基本操作(或稱為算子):選擇(Selection)、

5、交叉(Crossove)、變異(Mutation).遺傳算法基本步驟主要是:先把問題的解表示成“染色體”,在算法中也就是以二進制編碼的串,在執(zhí)行遺傳算法之前,給出一群“染色體”,也就是假設的可行解.然后,把這些假設的可行解置于問題的“環(huán)境”中,并按適者生存的 原則,從中選擇出較適應環(huán)境的“染色體”進行復制,再通過交叉、變異過程產 生更適應環(huán)境的新一代“染色體”群.經過這樣的一代一代地進化,最后就會收 斂到最適應環(huán)境的一個“染色體”上,它就是問題的最優(yōu)解.下面給出遺傳算法的具體步驟,流程圖參見圖 1:第一步:選擇編碼策略,把參數(shù)集合(可行解集合)轉換染色體結構空間;第二步:定義適應函數(shù),便于計算

6、適應值;第三步:確定遺傳策略,包括選擇群體大小,選擇、交叉、變異方法以及確 定交叉概率、變異概率等遺傳參數(shù);第四步:隨機產生初始化群體;第五步:計算群體中的個體或染色體解碼后的適應值;第六步:按照遺傳策略,運用選擇、交叉和變異算子作用于群體,形成下一 代群體;第七步:判斷群體性能是否滿足某一指標、或者是否已完成預定的迭代次數(shù), 不滿足則返回第五步、或者修改遺傳策略再返回第六步.圖1 一個遺傳算法的具體步驟遺傳算法有很多種具體的不同實現(xiàn)過程,以上介紹的是標準遺傳算法的主要 步驟,此算法會一直運行直到找到滿足條件的最優(yōu)解為止.2. 遺傳算法的實際應用例 1:設 f (x) x 2x 0.5,求 m

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

8、題,將某個變量值代表的個體表示為一個0,1二進制串.當然,串長取決于求解的精度.如果要設定求解精 度到六位小數(shù),由于區(qū)間長度為2 ( 1) 3,則必須將閉區(qū)間1,2分為3 106 等分因為20971522213 1062224194304所以編碼的二進制串至少需要22位.將一個二進制串(b21b20b19b1b0)轉化為區(qū)間1,2內對應的實數(shù)值很簡單, 只需采取以下兩步(Matlab程序參見附錄4):1)將一個二進制串(b21b20b19b1b。)代表的二進制數(shù)化為10進制數(shù):21(b21b20b9( bi 2 )10 x'i 02) x'對應的區(qū)間1,2內的實數(shù):x'

9、2 ( 1)222例如,一個二進制串g示實數(shù) 0.637197.x' 22889673222 10.637197-1二進制串<>,則分別表示區(qū)間的兩個端點值 和2.利用這種方法我們就完成了遺傳算法的第一步編碼,這種二進制編碼的方法完全符合上述的編碼的三個原則.首先我們來隨機的產生一個個體數(shù)為4個的初始群體如下:pop(1)=a1,%a2,%a3<>% a4 ( Matlab程序參見附錄2)化成十進制的數(shù)分別為:pop(1)= 1.523032, 0.574022 , -0.697235 , 0.247238 接下來我們就要解決每個染色體個體的適應值問題了.(2)

10、 定義適應函數(shù)和適應值保證映射后的適應值非負,而且目也為以后計算各個體的入選概率由于給定的目標函數(shù)f(x)x2 2x 0.5在1,2內的值有正有負,所以必須通過建立適應函數(shù)與目標函數(shù)的映射關系, 標函數(shù)的優(yōu)化方向應對應于適應值增大的方向, 打下基礎.對于本題中的最大化問題,定義適應函數(shù)g(x),采用下述方法:g(x)f (x)Fmin ,若 f (x) Fmin00,其他式中Fmin既可以是特定的輸入值,也可以是當前所有代或最近K代中f(x)的最小值,這里為了便于計算,將采用了一個特定的輸入值.若取Fmin1,則當f(x) 1時適應函數(shù)g(x) 2 ;當f (x)1.1時適應函數(shù) g(x) 0

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

12、ng(ai), i 1,2,3, ,ng(ai)i 1由上述給出的群體,我們可以計算出各個個體的入選概率.4首先可得g(ai)6.478330,i 14然后分別用四個個體的適應值去除以g(a),得:i 1P(a1)=2.226437 / 6.478330 = 0.343675 % a1P(a2)=2.318543 / 6.478330 = 0.357892 % a2P(a3)=0 / 6.478330 =0% a3P(a4)=1.933350 / 6.478330 = 0.298433 % a4 (Matlab 程序參見附錄 7)(4) 產生種群計算完了入選概率后,就將入選概率大的個體選入種群

13、,淘汰概率小的個體,并用入選概率最大的個體補入種群,得到與原群體大小同樣的種群(Matlab程序參見附錄&附錄11).要說明的是:附錄11的算法與這里不完全相同為保證收斂性,附錄11的算法作了修正,采用了最佳個體保存方法(elitist model),具體內容將在后面給 出介紹.由初始群體的入選概率我們淘汰掉 a3,再加入a2補足成與群體同樣大小的 種群得到newpop(1)如下:n ewpop(1)=,% a1,% a2% a2<>% a4(5) 交叉交叉也就是將一組染色體上對應基因段的交換得到新的染色體,然后得到新的染色體組,組成新的群體(Matlab程序參見附錄9).

14、我們把之前得到的n ewpop(1)的四個個體兩兩組成一對,重復的不配對,進 行交叉.(可以在任一位進行交叉)<11010111010>,、交叉得:<100001100、10>,<100>,X交叉得:<011<>通過交叉得到了四個新個體,得到新的群體jchpop (1)如下:jchpop(1)=<010>,<011>,<>這里采用的是單點交叉的方法,當然還有多點交叉的方法,不過有些煩瑣, 這里就不著重介紹了.(6) 變異變異也就是通過一個小概率改變染色體位串上的某個基因(Matlab程序參見附錄10).現(xiàn)

15、把剛得到的jchpop(1)中第3個個體中的第9位改變,就產生了變異,得到 了新的群體pop(2)如下:pop(2)= <111>,<> 然后重復上述的選擇、交叉、變異直到滿足終止條件為止.(7) 終止條件遺傳算法的終止條件有兩類常見條件:(1采用設定最大(遺傳)代數(shù)的方 法,一般可設定為50代,此時就可能得出最優(yōu)解此種方法簡單易行,但可能 不是很精確(Matlab程序參見附錄1); (2)根據個體的差異來判斷,通過計算 種群中基因多樣性測度,即所有基因位相似程度來進行控制.3. 遺傳算法的收斂性前面我們已經就遺傳算法中的編碼、適應度函數(shù)、選擇、交叉和變異等主要 操作的

16、基本內容及設計進行了詳細的介紹作為一種搜索算法,遺傳算法通過對 這些操作的適當設計和運行,可以實現(xiàn)兼顧全局搜索和局部搜索的所謂均衡搜 索,具體實現(xiàn)見下圖2所示.圖2均衡搜索的具體實現(xiàn)圖示應該指出的是,遺傳算法雖然可以實現(xiàn)均衡的搜索,并且在許多復雜問題的 求解中往往能得到滿意的結果,但是該算法的全局優(yōu)化收斂性的理論分析尚待解 決.目前普遍認為,標準遺傳算法并不保證全局最優(yōu)收斂但是,在一定的約束 條件下,遺傳算法可以實現(xiàn)這一點.下面我們不加證明地羅列幾個定理或定義,供讀者參考(在這些定理的證明 中,要用到許多概率論知識,特別是有關馬爾可夫鏈的理論,讀者可參閱有關文 獻).定理1如果變異概率為Pm(

17、0,1),交叉概率為Pc0,1,同時采用比例選擇法(按個體適應度占群體適應度的比例進行復制),則標準遺傳算法的變換矩 陣P是基本的.定理2標準遺傳算法(參數(shù)如定理1)不能收斂至全局最優(yōu)解.由定理2可以知道,具有變異概率Pm(0,1),交叉概率為Pc 0,1以及按比例選擇的標準遺傳算法是不能收斂至全局最最優(yōu)解.我們在前面求解例1時所用的方法就是滿足定理1的條件的方法.這無疑是一個令人沮喪的結論.然而,慶幸的是,只要對標準遺傳算法作一些改進,就能夠保證其收斂性.具 體如下:我們對標準遺傳算法作一定改進,即不按比例進行選擇,而是保留當前 所得的最優(yōu)解(稱作 超個體).該超個體不參與遺傳.最佳個體保存

18、方法(elitist model)的思想是把群體中適應度最高的個體不 進行配對交叉而直接復制到下一代中.此種選擇操作又稱復制( copy). De Jong 對此方法作了如下定義:定義 設到時刻t (第t代)時,群體中a (t)為最佳個體又設A (t + 1) 為新一代群體,若 A (t + 1)中不存在a* (t),則把a*(t)作為A (t + 1)中的第 n+1個個體(其中,n為群體大小)(Matlab程序參見附錄11).采用此選擇方法的優(yōu)點是,進化過程中某一代的最優(yōu)解可不被交叉和變異操 作所破壞但是,這也隱含了一種危機,即局部最優(yōu)個體的遺傳基因會急速增加 而使進化有可能限于局部解也就是

19、說,該方法的全局搜索能力差,它更適合單 峰性質的搜索空間搜索,而不是多峰性質的空間搜索所以此方法一般都與其他 選擇方法結合使用定理 3 具有定理 1 所示參數(shù),且在選擇后保留當前最優(yōu)值的遺傳算法最終 能收斂到全局最優(yōu)解當然,在選擇算子作用后保留當前最優(yōu)解是一項比較復雜的工作,因為該解 在選擇算子作用后可能丟失但是定理 3 至少表明了這種改進的遺傳算法能夠收 斂至全局最優(yōu)解有意思的是,實際上只要在選擇前保留當前最優(yōu)解,就可以保 證收斂,定理 4 描述了這種情況定理 4 具有定理 1 參數(shù)的,且在選擇前保留當前最優(yōu)解的遺傳算法可收斂 于全局最優(yōu)解2例 2:設 f (x) 3 x x ,求 max

20、f (x), x 0,2 ,編碼長度為 5,采用上述定理 4 所述的“在選擇前保留當前最優(yōu)解的遺傳算法”進行此略,留作練習二、相關函數(shù)(命令)及簡介本實驗的程序中用到如下一些基本的 Matlab 函數(shù): ones, zeros, sum, size, length, subs, double 等,以及 for, while 等基本程序結構語句,讀者可參考前面 專門關于 Matlab 的介紹,也可參考其他數(shù)學實驗章節(jié)中的“相關函數(shù)(命令) 及簡介”內容,此略三、實驗內容上述例 1 的求解過程為:群體中包含六個染色體,每個染色體用 22 位 01 碼,變異概率為 0.01 ,變 量區(qū)間為 1,2

21、,取 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í)行結果為:Count =50Result =1.03161.03161.03161.03161.03161.03161.49901.49901.49901.49901.49901.4990BestMember =1.03161.49901,4羽11.49914aay - f-1 4SS0 - I-1 JQR7II|1|I! 0

22、3; 血 祐 M 藥丑I% 如 站 和圖2例1的計算結果(注:上圖為遺傳進化過程中每一代的個體最大適應度;而下圖為目前為止的個體最大適應度單調遞增)我們通過Matlab軟件實現(xiàn)了遺傳算法,得到了這題在第一種終止條件下的最 優(yōu)解:當 x取 1.0316時,Max f(x) 1.4990 .當然這個解和實際情況還有一點出入(應該是x取1時,Max f (x)1.5000 ),但對于一個計算機算法來說已經很不錯了.我們也可以編制Matlab程序求在第二種終止條件下的最優(yōu)解.此略,留作練 習.實踐表明,此時的遺傳算法只要經過10代左右就可完成收斂,得到另一個“最優(yōu)解”,與前面的最優(yōu)解相差無幾.四、自己

23、動手1 .用Matlab編制另一個主程序 Genetic2.m,求例1的在第二種終止條件下的最 優(yōu)解.提示:一個可能的函數(shù)調用形式以及相應的結果為:Cou nt,Result,BestMember=Ge netic2(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,0.00001) Count =13Result =1.03921.03921.03921.03921.03921.03921.49851.49851.49851.49851.49851.4985BestMember =1.03921.4985可以看到:兩組解都已經很接近實際結果,對于兩種方法所產生

24、的最優(yōu)解差 異很小.可見這兩種終止算法都是可行的,而且可以知道對于例1的問題,遺傳算法只要經過10代左右就可以完成收斂,達到一個最優(yōu)解.2按照例2的具體要求,用遺傳算法求上述例2的最優(yōu)解.3附錄9子程序Crossing.m中的第3行到第7行為注解語句若去掉前面的% 號,則程序的算法思想有什么變化?4. 附錄9子程序Cross in g.m中的第8行至第13行的程序表明,當 Dim(1)>=3 時,將交換數(shù)組Population的最后兩行,即交換最后面的兩個個體.其目的是什么?5. 仿照附錄10子程序Mutatio n.m,修改附錄9子程序Cross in g.m,使得交叉過 程也有一個概

25、率值(一般取 0.650.90);同時適當修改主程序 Genetic1.m或 主程序Genetic2.m,以便代入交叉概率.6. 設f(x)x2 4x 1,求maxf(x), x 2,2,要設定求解精度到15位小數(shù).五、附錄附錄1:主程序Genetic1.mfun ctio nCou nt,Result,BestMember=Ge netic1(MumberLe ngth,MemberNumber,Fu nctio nFitn ess,MinX,MaxX,Fmi n, Mutatio nProbability,Ge n)Populatio n=Populatio nln itialize(Mu

26、mberLe ngth,MemberNumber);global Count;global Curren tBest;Cou nt=1;Populatio nCode=Populati on;Populatio nFit ness=Fit ness(Populatio nCode,F un ctio nFit ness,MinX,MaxX,Mumbe rLen gth);PopulationFitnessF=FitnessF(PopulationFitness,Fmin);PopulationProbability=Probability(PopulationFitnessF);Populat

27、ion,CurrentBest,EachGenMaxFitness=Elitist(PopulationCode,Populatio nFitness,MumberLength);EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count)=CurrentBest(length(CurrentBest);while Count<GenNewPopulation=Select(Population,PopulationProbability,MemberNumber); Population=NewPopulation;NewPopul

28、ation=Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength);Population=NewPopulation;NewPopulation=Mutation(Population,MutationProbability);Population=NewPopulation;PopulationFitness=Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength); PopulationFitnessF=FitnessF(PopulationFitness,Fmin)

29、; PopulationProbability=Probability(PopulationFitnessF);Count=Count+1;NewPopulation,CurrentBest,EachGenMaxFitness=Elitist(Population,PopulationFitn ess,MumberLength);EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count)=CurrentBest(length(CurrentBest);Population=NewPopulation;endDim=size(Populat

30、ion);Result=ones(2,Dim(1);for i=1:Dim(1)Result(1,i)=Translate(Population(i,:),MinX,MaxX,MumberLength);endResult(2,:)=PopulationFitness;BestMember(1,1)=Translate(CurrentBest(1:MumberLength),MinX,MaxX,Mumb erLength);BestMember(2,1)=CurrentBest(MumberLength+1);close allsubplot(211)plot(EachMaxFitness)s

31、ubplot(212)plot(MaxFitness)【程序說明】主程序 Geneticl.m包含了 8個輸入參數(shù):(1) MumberLength: 表示一個染色體位串的二進制長度 (例 1 中取 22)(2) MemberNumber: 表示群體中染色體的個數(shù) (例 1 中取 6 個)(3) FunctionFitness: 表示目標函數(shù),是個字符串,因此用表達式時,用單 引號括出(例 1 中是 f (x)x2 2x 0.5 )(4) MinX : 變量區(qū)間的下限(例 1 中是 1,2 中的)(5) MaxX : 變量區(qū)間的上限(例 1 中是 1,2 中的 2)(6) Fmin: 定義適應

32、函數(shù)過程中給出的一個目標函數(shù)的可能的最小值,由 操作者自己給出(例 1 中取 Fmin= 2 )(7) MutationProbability : 表示變異的概率,一般都很小 (例 1 中取 0.01)(8) Gen: 表示遺傳的代數(shù),也就是終止程序時的代數(shù) (例 1 中取 50)另外,主程序Geneticl.m包含了 3個輸出值:Count表示遺傳的代數(shù);Result 表示計算的結果,也就是最優(yōu)解;BestMember表示最優(yōu)個體及其適應值.附錄 2:子程序 PopulationInitialize.mfunction Population=PopulationInitialize(Mumb

33、erLength,MemberNumber) Temporary=rand(MemberNumber,MumberLength);Population=(Temporary>=0.5*ones(size(Temporary);【程序說明】子程序 PopulationInitialize.m 用于產生一個初始群體這個初始群 體含有MemberNumber個染色體,每個染色體有 MumberLength個基因(二進制 碼)附錄 3:子程序 Fitness.mfunction PopulationFitness=Fitness(PopulationCode,FunctionFitness,Mi

34、nX,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【程序說明】子程序 Fitness.m 用于計算群體中每一個染色體的目標函數(shù)值子 程序中含有 5 個輸入參數(shù): PopulationCode 表示用 01 代碼表示的群體, FunctionFitness 表示目標函數(shù),它是

35、一個字符串,因此寫入調用程序時,應該用 單引號括出, MumberLength 表示染色體位串的二進制長度 MinX 和 MaxX 分 別指變量區(qū)間的上下限附錄 4:子程序 Translate.mfunction PopulationData=Translate(PopulationCode,MinX,MaxX,MumberLength)PopulationData=0;Dim=size(PopulationCode);for i=1:Dim(2)Populatio nData=Populatio nData+Populatio nCode(i)*(2A(MumberLe ngth-i); e

36、nd Populatio nData=MinX+Populatio nData*(MaxX-MinX)/(2Pim(2)-1);【程序說明】子程序Translate.m把編成碼的群體翻譯成變量的數(shù)值含有4個輸入參數(shù), PopulationCode, MinX, MaxX, MumberLength附錄 5:子程序 Transfer.mfunction PopulationFitness=Transfer(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength) PopulationFitness=0;PopulationData=Transl

37、ate(PopulationCode,MinX,MaxX,MumberLength); PopulationFitness=double(subs(FunctionFitness,'x',sym(PopulationData);【程序說明】 子程序 Transfer 把群體中的染色體的目標函數(shù)值用數(shù)值表示出來, 它是 Fitness 的 重要子 程序其有 5 個輸入參數(shù)分別為 PopulationCode, FunctionFitness, MinX, MaxX ,MumberLength附錄 6:子程序 FitnessF.mfunction PopulationFitness

38、F=FitnessF(PopulationFitness,Fmin) Dim=size(PopulationFitness);PopulationFitnessF=zeros(1,Dim(2);for i=1:Dim(2)if PopulationFitness(i)>Fmin PopulationFitnessF(i)=PopulationFitness(i)-Fmin;endif PopulationFitness(i)<=FminPopulationFitnessF(i)=0;endend【程序說明】子程序FitnessF.m是用于計算每個染色體的適應函數(shù)值的.其輸入 參數(shù)如

39、下: PopulationFitness 為群體中染色體的目標函數(shù)值, Fmin 為定義適應函 數(shù)過程中給出的一個目標函數(shù)的可能的最小值.附錄 7:子程序 Probability.mfunction PopulationProbability=Probability(PopulationFitness) SumPopulationFitness=sum(PopulationFitness);PopulationProbability=PopulationFitness/SumPopulationFitness;【程序說明】子程序 Probability.m 用于計算群體中每個染色體的入選概率,

40、輸 入參數(shù)為群體中染色體的適應函數(shù)值PopulationFitness.附錄 8:子程序 Select.mfunction NewPopulation=Select(Population,PopulationProbability,MemberNumber) CProbability(1)=PopulationProbability(1);for i=2:MemberNumberCProbability(i)=CProbability(i-1)+PopulationProbability(i);endfor i=1:MemberNumberr=rand(1);Index=1;while r&g

41、t;CProbability(Index)Index=Index+1;endNewPopulation(i,:)=Population(Index,:);end【程序說明】子程序 Select.m 根據入選概率(計算累計概率)在群體中按比例 選擇部分染色體組成種群,該子程序的 3 個輸入參數(shù)分別為:群體 Population, 入選概率PopulationProbability,群體中染色體的個數(shù) MemberNumber.附錄 9:子程序 Crossing.mfunction NewPopulation=Crossing(Population,FunctionFitness,MinX,Max

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

評論

0/150

提交評論