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

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)十遺傳算法與優(yōu)化問題一、問題背景與實(shí)驗(yàn)?zāi)康倪z傳算法(GeneticAlgorithm—GA),是模擬達(dá)爾文的遺傳選擇和自然淘汰的生物進(jìn)化過程的計(jì)算模型,它是由美國(guó)Michigan大學(xué)的J.Holland教授于1975年首先提出的.遺傳算法作為一種新的全局優(yōu)化搜索算法,以其簡(jiǎn)單通用、魯棒性強(qiáng)、適于并行處理及應(yīng)用范圍廣等顯著特點(diǎn),奠定了它作為21世紀(jì)關(guān)鍵智能計(jì)算之一的地位.本實(shí)驗(yàn)將首先介紹一下遺傳算法的基本理論,然后用其解決幾個(gè)簡(jiǎn)單的函數(shù)最值問題,使讀者能夠?qū)W會(huì)利用遺傳算法進(jìn)行初步的優(yōu)化計(jì)算.1.遺傳算法的基本原理遺傳算法的基本思想正是基于模仿生物界遺傳學(xué)的遺傳過程.它把問題的參數(shù)用基因代表,把問題的解用染色體代表(在計(jì)算機(jī)里用二進(jìn)制碼表示),從而得到一個(gè)由具有不同染色體的個(gè)體組成的群體.這個(gè)群體在問題特定的環(huán)境里生存競(jìng)爭(zhēng),適者有最好的機(jī)會(huì)生存和產(chǎn)生后代.后代隨機(jī)化地繼承了父代的最好特征,并也在生存環(huán)境的控制支配下繼續(xù)這一過程.群體的染色體都將逐漸適應(yīng)環(huán)境,不斷進(jìn)化,最后收斂到一族最適應(yīng)環(huán)境的類似個(gè)體,即得到問題最優(yōu)的解.值得注意的一點(diǎn)是,現(xiàn)在的遺傳算法是受生物進(jìn)化論學(xué)說的啟發(fā)提出的,這種學(xué)說對(duì)我們用計(jì)算機(jī)解決復(fù)雜問題很有用,而它本身是否完全正確并不重要(目前生物界對(duì)此學(xué)說尚有爭(zhēng)議).(1)遺傳算法中的生物遺傳學(xué)概念由于遺傳算法是由進(jìn)化論和遺傳學(xué)機(jī)理而產(chǎn)生的直接搜索優(yōu)化方法;故而在這個(gè)算法中要用到各種進(jìn)化和遺傳學(xué)的概念.首先給出遺傳學(xué)概念、遺傳算法概念和相應(yīng)的數(shù)學(xué)概念三者之間的對(duì)應(yīng)關(guān)系.這些概念如下:序號(hào)遺傳學(xué)概念遺傳算法概念數(shù)學(xué)概念1個(gè)體要處理的基本對(duì)象、結(jié)構(gòu)也就是可行解2群體個(gè)體的集合被選定的一組可行解3染色體個(gè)體的表現(xiàn)形式可行解的編碼4基因染色體中的元素編碼中的元素5基因位某一基因在染色體中的位置元素在編碼中的位置6適應(yīng)值個(gè)體對(duì)于環(huán)境的適應(yīng)程度,或在環(huán)境壓力下的生存能力可行解所對(duì)應(yīng)的適應(yīng)函數(shù)值7種群被選定的一組染色體或個(gè)體根據(jù)入選概率定出的一組可行解

8選擇從群體中選擇優(yōu)勝的個(gè)體,淘汰劣質(zhì)個(gè)體的操作保留或復(fù)制適應(yīng)值大的可行解,去掉小的可行解9交叉一組染色體上對(duì)應(yīng)基因段的交換根據(jù)交叉原則產(chǎn)生的一組新解10交叉概率染色體對(duì)應(yīng)基因段交換的概率(可能性大?。╅]區(qū)間[0,1]上的一個(gè)值,一般為0.65~0.9011變異染色體水平上基因變化編碼的某些元素被改變12變異概率染色體上基因變化的概率(可能性大?。╅_區(qū)間(0,1)內(nèi)的一個(gè)值,一般為0.001~0.0113進(jìn)化、適者生存?zhèn)€體進(jìn)行優(yōu)勝劣汰的進(jìn)化,一代又一代地優(yōu)化目標(biāo)函數(shù)取到最大值,最優(yōu)的可行解(2)遺傳算法的步驟遺傳算法計(jì)算優(yōu)化的操作過程就如同生物學(xué)上生物遺傳進(jìn)化的過程,主要有三個(gè)基本操作(或稱為算子):選擇(Selection)、交叉(Crossover)、變異(Mutation).遺傳算法基本步驟主要是:先把問題的解表示成“染色體”,在算法中也就是以二進(jìn)制編碼的串,在執(zhí)行遺傳算法之前,給出一群“染色體”,也就是假設(shè)的可行解.然后,把這些假設(shè)的可行解置于問題的“環(huán)境”中,并按適者生存的原則,從中選擇出較適應(yīng)環(huán)境的“染色體”進(jìn)行復(fù)制,再通過交叉、變異過程產(chǎn)生更適應(yīng)環(huán)境的新一代“染色體”群.經(jīng)過這樣的一代一代地進(jìn)化,最后就會(huì)收斂到最適應(yīng)環(huán)境的一個(gè)“染色體”上,它就是問題的最優(yōu)解.下面給出遺傳算法的具體步驟,流程圖參見圖1:第一步:選擇編碼策略,把參數(shù)集合(可行解集合)轉(zhuǎn)換染色體結(jié)構(gòu)空間;第二步:定義適應(yīng)函數(shù),便于計(jì)算適應(yīng)值;第三步:確定遺傳策略,包括選擇群體大小,選擇、交叉、變異方法以及確定交叉概率、變異概率等遺傳參數(shù);第四步:隨機(jī)產(chǎn)生初始化群體;第五步:計(jì)算群體中的個(gè)體或染色體解碼后的適應(yīng)值;第六步:按照遺傳策略,運(yùn)用選擇、交叉和變異算子作用于群體,形成下一代群體;第七步:判斷群體性能是否滿足某一指標(biāo)、或者是否已完成預(yù)定的迭代次數(shù),不滿足則返回第五步、或者修改遺傳策略再返回第六步.

圖1一個(gè)遺步圖1一個(gè)遺步有不上遺遺傳算法很多種具體的同實(shí)現(xiàn)過程,以介紹的是標(biāo)準(zhǔn)傳算法的主要步驟,此算法會(huì)一直運(yùn)行直到找到滿足條件的最優(yōu)解為止.2.遺傳算法的實(shí)際應(yīng)用例1:設(shè)f(x)=—x2+2x+0.5,求maxf(x),xe[-1,2].注:這是一個(gè)非常簡(jiǎn)單的二次函數(shù)求極值的問題,相信大家都會(huì)做.在此我們要研究的不是問題本身,而是借此來說明如何通過遺傳算法分析和解決問題.在此將細(xì)化地給出遺傳算法的整個(gè)過程.編碼和產(chǎn)生初始群體首先第一步要確定編碼的策略,也就是說如何把-1到2這個(gè)區(qū)間內(nèi)的數(shù)用計(jì)算機(jī)語言表示出來.編碼就是表現(xiàn)型到基因型的映射,編碼時(shí)要注意以下三個(gè)原則:完備性:?jiǎn)栴}空間中所有點(diǎn)(潛在解)都能成為GA編碼空間中的點(diǎn)(染色體位串)的表現(xiàn)型;健全性:GA編碼空間中的染色體位串必須對(duì)應(yīng)問題空間中的某一潛在解;非冗余性:染色體和潛在解必須一一對(duì)應(yīng).這里我們通過采用二進(jìn)制的形式來解決編碼問題,將某個(gè)變量值代表的個(gè)體表示為一個(gè){0,1}二進(jìn)制串.當(dāng)然,串長(zhǎng)取決于求解的精度.如果要設(shè)定求解精度到六位小數(shù),由于區(qū)間長(zhǎng)度為2-(-1)=3,則必須將閉區(qū)間[-1,2]分為3X106等分.因?yàn)?097152=221<3x106<222=4194304所以編碼的二進(jìn)制串至少需要22位.將一個(gè)二進(jìn)制串(bbb-bb)轉(zhuǎn)化為區(qū)間[-1,2]內(nèi)對(duì)應(yīng)的實(shí)數(shù)值很簡(jiǎn)單,只需采取21201910以下兩步(Matlab程序參見附錄4):將一個(gè)二進(jìn)制串(bbb-bb)代表的二進(jìn)制數(shù)化為10進(jìn)制數(shù):21201910x'對(duì)應(yīng)的區(qū)間[-1,2]內(nèi)的實(shí)數(shù):例如,一個(gè)二進(jìn)制串a(chǎn)=<1000101110110101000111>表示實(shí)數(shù)0.637197.

x'=(1000101110110101000111)2=2288967二進(jìn)制串<0000000000000000000000>,<1111111111111111111111>,則分別表示區(qū)間的兩個(gè)端點(diǎn)值-1和2.利用這種方法我們就完成了遺傳算法的第一步一一編碼,這種二進(jìn)制編碼的方法完全符合上述的編碼的三個(gè)原則.首先我們來隨機(jī)的產(chǎn)生一個(gè)個(gè)體數(shù)為4個(gè)的初始群體如下:pop(1)={<1101011101001100011110>,<1000011001010001000010>,<0001100111010110000000>,<0110101001101110010101>}化成十進(jìn)制的數(shù)分別為:<1101011101001100011110>,<1000011001010001000010>,<0001100111010110000000>,<0110101001101110010101>}化成十進(jìn)制的數(shù)分別為:%%a1%%a2%%a3%%a4(Matlab程序參見附錄2)pop(1)={1.523032,0.574022,-0.697235,0.247238}接下來我們就要解決每個(gè)染色體個(gè)體的適應(yīng)值問題了.(2)定義適應(yīng)函數(shù)和適應(yīng)值由于給定的目標(biāo)函數(shù)f⑴=72+2+0.5在[-1,2]內(nèi)的值有正有負(fù),所以必須通過建立適應(yīng)函數(shù)與目標(biāo)函數(shù)的映射關(guān)系,保證映射后的適應(yīng)值非負(fù),而且目標(biāo)函數(shù)的優(yōu)化方向應(yīng)對(duì)應(yīng)于適應(yīng)值增大的方向,也為以后計(jì)算各個(gè)體的入選概率打下基礎(chǔ).對(duì)于本題中的最大化問題,定義適應(yīng)函數(shù)g3),采用下述方法:式中Fmin既可以是特定的輸入值,也可以是當(dāng)前所有代或最近K代中f3)的最小值,這里為了便于計(jì)算,將采用了一個(gè)特定的輸入值.若取門廣-1,則當(dāng)f⑴=1時(shí)適應(yīng)函數(shù)g⑴=2;當(dāng)f⑴=-1.1時(shí)適應(yīng)函數(shù)g⑴=0.由上述所隨機(jī)產(chǎn)生的初始群體,我們可以先計(jì)算出目標(biāo)函數(shù)值分別如下(Matlab程序參見附錄3):f[pop(1)]={1.226437,1.318543,-1.380607,0.933350}然后通過適應(yīng)函數(shù)計(jì)算出適應(yīng)值分別如下(Matlab程序參見附錄5、附錄6):取F=-1,g[pop(1)]={2.226437,2.318543,0,1.933350}確定選擇標(biāo)準(zhǔn)這里我們用到了適應(yīng)值的比例來作為選擇的標(biāo)準(zhǔn),得到的每個(gè)個(gè)體的適應(yīng)值比例叫作入選概率.其計(jì)算公式如下:對(duì)于給定的規(guī)模為n的群體pop={a,a,a,…,a},個(gè)體a的適應(yīng)值為g(a),則其入123nii選概率為由上述給出的群體,我們可以計(jì)算出各個(gè)個(gè)體的入選概率?首先可得1Lg(a)=6.478330,ii=1然后分別用四個(gè)個(gè)體的適應(yīng)值去除以蚓g(a),得:i

i=1P(a1)=2.226437/6.478330=0.343675%%alP(a2)=2.318543/6.478330=0.357892%%a2P(a3)=0/6.478330=0%%a3P(a4)=1.933350/6.478330=0.298433%%a4(Matlab程序參見附錄7)產(chǎn)生種群計(jì)算完了入選概率后,就將入選概率大的個(gè)體選入種群,淘汰概率小的個(gè)體,并用入選概率最大的個(gè)體補(bǔ)入種群,得到與原群體大小同樣的種群(Matlab程序參見附錄8、附錄11).要說明的是:附錄11的算法與這里不完全相同.為保證收斂性,附錄11的算法作了修正,采用了最佳個(gè)體保存方法(elitistmodel),具體內(nèi)容將在后面給出介紹.由初始群體的入選概率我們淘汰掉a3,再加入a2補(bǔ)足成與群體同樣大小的種群得到newpop(1)如下:newpop(1)={TOC\o"1-5"\h\z<1101011101001100011110>,%%a1<1000011001010001000010>,%%a2<1000011001010001000010>,%%a2<0110101001101110010101>}%%a4交叉交叉也就是將一組染色體上對(duì)應(yīng)基因段的交換得到新的染色體,然后得到新的染色體組,組成新的群體(Matlab程序參見附錄9).我們把之前得到的newpop(1)的四個(gè)個(gè)體兩兩組成一對(duì),重復(fù)的不配對(duì),進(jìn)行交叉?(可以在任一位進(jìn)行交叉<110101110^><^1001100011110>,<1101011101010001000010>交叉得:<1000011001010001000010>,<1000011001001100011110><10000110010100X>X>/01000010>,<1000011001010010010101>交叉得:<0110101001101110010101>,<0110101001101101000010><01101010011011通過交叉得到了四個(gè)新個(gè)體,得到新的群體jchpop(1)如下:jchpop(1)={<1101011101010001000010>,<1000011001001100011110>,<1000011001010010010101>,<0110101001101101000010>}這里采用的是單點(diǎn)交叉的方法,當(dāng)然還有多點(diǎn)交叉的方法,不過有些煩瑣,這里就不著重介紹了.變異變異也就是通過一個(gè)小概率改變?nèi)旧w位串上的某個(gè)基因(Matlab程序參見附錄10).現(xiàn)把剛得到的jchpop(1)中第3個(gè)個(gè)體中的第9位改變,就產(chǎn)生了變異,得到了新的群體pop(2)如下:pop(2)=(<1101011101010001000010>,<1000011001001100011110>,<1000011011010010010101>,<0110101001101101000010>}然后重復(fù)上述的選擇、交叉、變異直到滿足終止條件為止.(7)終止條件遺傳算法的終止條件有兩類常見條件:(1)采用設(shè)定最大(遺傳)代數(shù)的方法,一般可設(shè)定為50代,此時(shí)就可能得出最優(yōu)解.此種方法簡(jiǎn)單易行,但可能不是很精確(Matlab程序參見附錄1);(2)根據(jù)個(gè)體的差異來判斷,通過計(jì)算種群中基因多樣性測(cè)度,即所有基因位相似程度來進(jìn)行控制.3.遺傳算法的收斂性前面我們已經(jīng)就遺傳算法中的編碼、適應(yīng)度函數(shù)、選擇、交叉和變異等主要操作的基本內(nèi)容及設(shè)計(jì)進(jìn)行了詳細(xì)的介紹.作為一種搜索算法,遺傳算法通過對(duì)這些操作的適當(dāng)設(shè)計(jì)和運(yùn)行,可以實(shí)現(xiàn)兼顧全局搜索和局部搜索的所謂均衡搜索,具體實(shí)現(xiàn)見下圖2所示.圖2均衡搜索的具體實(shí)現(xiàn)圖示應(yīng)該指出的是,遺傳算法雖然可以實(shí)現(xiàn)均衡的搜索,并且在許多復(fù)雜問題的求解中往往能得到滿意的結(jié)果,但是該算法的全局優(yōu)化收斂性的理論分析尚待解決.目前普遍認(rèn)為,標(biāo)準(zhǔn)遺傳算法并不保證全局最優(yōu)收斂.但是,在一定的約束條件下,遺傳算法可以實(shí)現(xiàn)這一點(diǎn).下面我們不加證明地羅列幾個(gè)定理或定義,供讀者參考(在這些定理的證明中,要用到許多概率論知識(shí),特別是有關(guān)馬爾可夫鏈的理論,讀者可參閱有關(guān)文獻(xiàn)).定理1如果變異概率為Pme(0,1),交叉概率為Pg[0,1],同時(shí)采用比例選擇法(按個(gè)體適應(yīng)度占群體適應(yīng)度的比例進(jìn)行復(fù)制),則標(biāo)準(zhǔn)遺傳算法的變換矩陣P是基本的.定理2標(biāo)準(zhǔn)遺傳算法(參數(shù)如定理1)不能收斂至全局最優(yōu)解.由定理2可以知道,具有變異概率Pmg(0,1),交叉概率為Pe[0,1]以及按比例選擇的標(biāo)準(zhǔn)遺傳算法是不能收斂至全局最最優(yōu)解.我們?cè)谇懊媲蠼饫?時(shí)所用的方法就是滿足定理1的條件的方法.這無疑是一個(gè)令人沮喪的結(jié)論.然而,慶幸的是,只要對(duì)標(biāo)準(zhǔn)遺傳算法作一些改進(jìn),就能夠保證其收斂性.具體如下:我們對(duì)標(biāo)準(zhǔn)遺傳算法作一定改進(jìn),即不按比例進(jìn)行選擇,而是保留當(dāng)前所得的最優(yōu)解(稱作超個(gè)體).該超個(gè)體不參與遺傳.最佳個(gè)體保存方法(elitistmodel)的思想是把群體中適應(yīng)度最高的個(gè)體不進(jìn)行配對(duì)交叉而直接復(fù)制到下一代中.此種選擇操作又稱復(fù)制(copy).DeJong對(duì)此方法作了如下定義:定義設(shè)到時(shí)刻t(第t代)時(shí),群體中a*(t)為最佳個(gè)體.又設(shè)A(t+1)為新一代群體,若A(t+1)中不存在a*(t),則把a(bǔ)*(t)作為A(t+1)中的第n+1個(gè)個(gè)體(其中,n為群體大小)(Matlab程序參見附錄11).采用此選擇方法的優(yōu)點(diǎn)是,進(jìn)化過程中某一代的最優(yōu)解可不被交叉和變異操作所破壞.但是,這也隱含了一種危機(jī),即局部最優(yōu)個(gè)體的遺傳基因會(huì)急速增加而使進(jìn)化有可能限于局部解.也就是說,該方法的全局搜索能力差,它更適合單峰性質(zhì)的搜索空間搜索,而不是多峰性質(zhì)的空間搜索.所以此方法一般都與其他選擇方法結(jié)合使用.定理3具有定理1所示參數(shù),且在選擇后保留當(dāng)前最優(yōu)值的遺傳算法最終能收斂到全局最優(yōu)解.當(dāng)然,在選擇算子作用后保留當(dāng)前最優(yōu)解是一項(xiàng)比較復(fù)雜的工作,因?yàn)樵摻庠谶x擇算子作用后可能丟失.但是定理3至少表明了這種改進(jìn)的遺傳算法能夠收斂至全局最優(yōu)解.有意思的是,實(shí)際上只要在選擇前保留當(dāng)前最優(yōu)解,就可以保證收斂,定理4描述了這種情況.定理4具有定理1參數(shù)的,且在選擇前保留當(dāng)前最優(yōu)解的遺傳算法可收斂于全局最優(yōu)解.例2:設(shè)f⑴=3-展+x,求maxf(x),xe[0,2],編碼長(zhǎng)度為5,采用上述定理4所述的“在選擇前保留當(dāng)前最優(yōu)解的遺傳算法”進(jìn)行.此略,留作練習(xí).二、相關(guān)函數(shù)(命令)及簡(jiǎn)介本實(shí)驗(yàn)的程序中用到如下一些基本的Matlab函數(shù):ones,zeros,sum,size,length,subs,double等,以及for,while等基本程序結(jié)構(gòu)語句,讀者可參考前面專門關(guān)于Matlab的介紹,也可參考其他數(shù)學(xué)實(shí)驗(yàn)章節(jié)中的“相關(guān)函數(shù)(命令)及簡(jiǎn)介”內(nèi)容,此略.三、實(shí)驗(yàn)內(nèi)容上述例1的求解過程為:群體中包含六個(gè)染色體,每個(gè)染色體用22位0—1碼,變異概率為0.01,變量區(qū)間為[-1,2],取Fmin=-2,遺傳代數(shù)為50代,則運(yùn)用第一種終止條件(指定遺傳代數(shù))的Matlab程序?yàn)椋篬Count,Result,BestMember]=Genetic1(22,6,'-x*x+2*x+0.5',T,2,-2,0.01,50)執(zhí)行結(jié)果為:Count=50Result=1.03161.03161.03161.03161.03161.03161.49901.49901.49901.49901.49901.4990BestMember=1.03161.4990圖2例1的計(jì)算結(jié)果(注:上圖為遺傳進(jìn)化過程中每一代的個(gè)體最大適應(yīng)度;而下圖為目前為止的個(gè)體最大適應(yīng)度一一單調(diào)遞增)我們通過Matlab軟件實(shí)現(xiàn)了遺傳算法,得到了這題在第一種終止條件下的最優(yōu)解:當(dāng)X取1.0316時(shí),Maxf(x)=1.4990.當(dāng)然這個(gè)解和實(shí)際情況還有一點(diǎn)出入(應(yīng)該是X取1時(shí),Maxf(x)=1.5000),但對(duì)于一個(gè)計(jì)算機(jī)算法來說已經(jīng)很不錯(cuò)了.我們也可以編制Matlab程序求在第二種終止條件下的最優(yōu)解.此略,留作練習(xí).實(shí)踐表明,此時(shí)的遺傳算法只要經(jīng)過10代左右就可完成收斂,得到另一個(gè)“最優(yōu)解”,與前面的最優(yōu)解相差無幾.四、自己動(dòng)手用Matlab編制另一個(gè)主程序Genetic2.m,求例1的在第二種終止條件下的最優(yōu)解.提示:一個(gè)可能的函數(shù)調(diào)用形式以及相應(yīng)的結(jié)果為:[Count,Result,BestMember]=Genetic2(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可以看到:兩組解都已經(jīng)很接近實(shí)際結(jié)果,對(duì)于兩種方法所產(chǎn)生的最優(yōu)解差異很小.可見這兩種終止算法都是可行的,而且可以知道對(duì)于例1的問題,遺傳算法只要經(jīng)過10代左右就可以完成收斂,達(dá)到一個(gè)最優(yōu)解.按照例2的具體要求,用遺傳算法求上述例2的最優(yōu)解.附錄9子程序Crossing.m中的第3行到第7行為注解語句.若去掉前面的%號(hào),則程序的算法思想有什么變化?附錄9子程序Crossing.m中的第8行至第13行的程序表明,當(dāng)Dim(1)>=3時(shí),將交換數(shù)組Population的最后兩行,即交換最后面的兩個(gè)個(gè)體.其目的是什么?仿照附錄10子程序Mutation.m,修改附錄9子程序Crossing.m,使得交叉過程也有一個(gè)概率值(一般取0.65~0.90);同時(shí)適當(dāng)修改主程序Geneticl.m或主程序Genetic2.m,以便代入交叉概率.設(shè)f(x)=-x2-4x+1,求maxf(x),xe[-2,2],要設(shè)定求解精度到15位小數(shù).五、附錄附錄1:主程序Genetic1.mfunction[Count,Result,BestMember]=Genetic1(MumberLength,MemberNumber,FunctionFitness,MinX,MaxX,Fmin,MutationProbability,Gen)Population二PopulationInitialize(MumberLength,MemberNumber);globalCount;globalCurrentBest;Count=1;PopulationCode二Population;PopulationFitness二Fitness(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength);PopulationFitnessF二FitnessF(PopulationFitness,Fmin);PopulationProbability二Probability(PopulationFitnessF);[Population,CurrentBest,EachGenMaxFitness]=Elitist(PopulationCode,PopulationFitness,MumberLength);EachMaxFitness(Count)二EachGenMaxFitness;MaxFitness(Count)二CurrentBest(length(CurrentBest));whileCount<GenNewPopulation=Select(Population,PopulationProbability,MemberNumber);Population=NewPopulation;NewPopulation=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);PopulationProbability二Probability(PopulationFitnessF);Count二Count+1;[NewPopulation,CurrentBest,EachGenMaxFitness]=Elitist(Population,PopulationFitness,MumberLength);EachMaxFitness(Count)二EachGenMaxFitness;;MaxFitness(Count)二CurrentBest(length(CurrentBest));Population=NewPopulation;endDim二size(Population);Result=ones(2,Dim(1));fori=1:Dim(1)Result(1,i)=Translate(Population(i,:),MinX,MaxX,MumberLength);endResult(2,:)=PopulationFitness;BestMember(1,1)=Translate(CurrentBest(1:MumberLength),MinX,MaxX,MumberLength);BestMember(2,1)=CurrentBest(MumberLength+1);closeallsubplot(211)plot(EachMaxFitness)subplot(212)plot(MaxFitness)【程序說明】主程序Genetic1.m包含了8個(gè)輸入?yún)?shù):MumberLength:表示一個(gè)染色體位串的二進(jìn)制長(zhǎng)度.(例1中取22)MemberNumber:表示群體中染色體的個(gè)數(shù).(例1中取6個(gè))FunctionFitness:表示目標(biāo)函數(shù),是個(gè)字符串,因此用表達(dá)式時(shí),用單引號(hào)括出.(例1中是f(x)=—x2+2x+0.5)⑷MinX:變量區(qū)間的下限.(例1中是[-1,2]中的)⑸MaxX:變量區(qū)間的上限.(例1中是[-1,2]中的2)Fmin:定義適應(yīng)函數(shù)過程中給出的一個(gè)目標(biāo)函數(shù)的可能的最小值,由操作者自己給出.(例1中取Fmin=2)MutationProbability:表示變異的概率,一般都很小.(例1中取0.01)Gen:表示遺傳的代數(shù),也就是終止程序時(shí)的代數(shù).(例1中取50)另外,主程序Genetic1.m包含了3個(gè)輸出值:Count表示遺傳的代數(shù);Result表示計(jì)算的結(jié)果,也就是最優(yōu)解;BestMember表示最優(yōu)個(gè)體及其適應(yīng)值.附錄2:子程序PopulationInitialize.mfunctionPopulation二PopulationInitialize(MumberLength,MemberNumber)Temporary二rand(MemberNumber,MumberLength);Population=(Temporary>=0.5*ones(size(Temporary)));【程序說明】子程序PopulationInitialize.m用于產(chǎn)生一個(gè)初始群體.這個(gè)初始群體含有MemberNumber個(gè)染色體,每個(gè)染色體有MumberLength個(gè)基因(二進(jìn)制碼).附錄3:子程序Fitness.mfunctionPopulationFitness=Fitness(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength)Dim二size(PopulationCode);PopulationFitness二zeros(1,Dim(1));fori=1:Dim(1)PopulationFitness(i)二Transfer(PopulationCode(i,:),FunctionFitness,MinX,MaxX,MumberLength);end【程序說明】子程序Fitness.m用于計(jì)算群體中每一個(gè)染色體的目標(biāo)函數(shù)值.子程序中含有5個(gè)輸入?yún)?shù):PopulationCode表示用0—1代碼表示的群體,F(xiàn)unctionFitness表示目標(biāo)函數(shù),它是一個(gè)字符串,因此寫入調(diào)用程序時(shí),應(yīng)該用單引號(hào)括出,MumberLength表示染色體位串的二進(jìn)制長(zhǎng)度.MinX和MaxX分別指變量區(qū)間的上下限.附錄4:子程序Translate.mfunctionPopulationData二Translate(PopulationCode,MinX,MaxX,MumberLength)PopulationData=0;Dim二size(PopulationCode);fori=1:Dim(2)PopulationData二PopulationData+PopulationCode(i)*(2”(MumberLength-i));endPopulationData=MinX+PopulationData*(MaxX—MinX)/(2”Dim(2)T);【程序說明】子程序Translate.m把編成碼的群體翻譯成變量的數(shù)值.含有4個(gè)輸入?yún)?shù),PopulationCode,MinX,MaxX,MumberLength.附錄5:子程序Transfer.mfunctionPopulationFitness=Transfer(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength)PopulationFitness=0;PopulationData二Translate(PopulationCode,MinX,MaxX,MumberLength);PopulationFitness二double(subs(FunctionFitness,'x',sym(PopulationData)));【程序說明】子程序Transfer把群體中的染色體的目標(biāo)函數(shù)值用數(shù)值表示出來,它是Fitness的重要子程序.其有5個(gè)輸入?yún)?shù)分別為PopulationCode,FunctionFitness,MinX,MaxX,MumberLength.附錄6:子程序FitnessF.mfunctionPopulationFitnessF二FitnessF(PopulationFitness,Fmin)Dim二size(PopulationFitness);PopulationFitnessF二zeros(1,Dim(2));fori=1:Dim(2)ifPopulationFitness(i)>FminPopulationFitnessF(i)=PopulationFitness(i)-Fmin;endifPopulationFitness(i)<=FminPopulationFitnessF(i)=0;endend【程序說明】子程序FitnessF.m是用于計(jì)算每個(gè)染色體的適應(yīng)函數(shù)值的.其輸入?yún)?shù)如下:PopulationFitness為群體中染色體的目標(biāo)函數(shù)值,F(xiàn)min為定義適應(yīng)函數(shù)過程中給出的一個(gè)目標(biāo)函數(shù)的可能的最小值.附錄7:子程序Probability.mfunctionPopulationProbability二Probability(PopulationFitness)SumPopulationFitness二sum(PopulationFitness);PopulationProbability二PopulationFitness/SumPopulationFitness;【程序說明】子程序Probability.m用于計(jì)算群體中每個(gè)染色體的入選概率,輸入?yún)?shù)為群體中染色體的適應(yīng)函數(shù)值PopulationFitness.附錄8:子程序Select.mfunctionNewPopulation=fori=2:MemberNumberCProbability(i)=CProbability(i-1)+PopulationProbability(i);endfori=1:MemberNumberr=rand(1);Index=1;whiler>CProbability(Index)Index=Index+1;endNewPopulation(i,:)=Population(Index,:);end【程序說明】子程序Select.m根據(jù)入選概率(計(jì)算累計(jì)概率)在群體中按比例選擇部分PopulationProbability,群體中染色體的個(gè)數(shù)MemberNumber.附錄9:子程序Crossing.mfunctionNewPopulation=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);ifDim(1)>=3Temp二Population(Dim(1),:);Population(Dim(1)-1,:)=T

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論