




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選學(xué)習(xí)資料 - - - 歡迎下載% 下面舉例說明遺傳算法% 求以下函數(shù)的最大值% fx=10*sin5x+7*cos4x x0、10 %將x的值用一個10位的二值形式表示為二值問題,一個10 位的二值數(shù)供應(yīng)的辨論率為每為10-0/210- 1 0.01 ; % 將變量域0、10離散化為二值域0、1023、 x=0+10*b/1023、其中b 為 0、1023中的一個二值數(shù);% m 文件函數(shù)定義語句:function輸出變量 =函數(shù)名稱(輸入變量1,輸入變量2,)語句 ; %輸入變量與輸出變量的關(guān)系end; %非必需的例如:function c=myadda、b c=a+b;調(diào)用方式:c=my
2、add1、2 %輸出結(jié)果為c=a+b=1+2=3% 2.1 初始化 編碼 % initpop.m函數(shù)的功能為實現(xiàn)群體的初始化,popsize 表示 群體的大小 ,chromlength 表示染色體的長度二值數(shù)的長度 ,% 長度大小取決于變量的二進制編碼的長度在本例中取10 位;%遺傳算法子程序%name: initpop.m(實現(xiàn)群體的初始化)%初始化function pop=initpoppopsize、chromlength %定義 m 文件函數(shù)(實現(xiàn)種群初始化的函數(shù)) pop=roundrandpopsize、chromlength;% rand()隨機產(chǎn)生函數(shù);rand 隨機產(chǎn)生每個單
3、元為0、1行數(shù)為popsize,列數(shù) 為 chromlength 的矩陣, 此式子為輸出變量pop 與輸入變量popsize和 chromlength 的關(guān)系式 ;% round 對矩陣的每個單元進行圓整, round 函數(shù)的作用為按 指定的位數(shù) 對數(shù)值進行四舍五入;這樣產(chǎn)生的初始種群;% r% 2.2 運算目標(biāo)函數(shù)值% 2.2.1 將二進制數(shù)轉(zhuǎn)化為十進制數(shù)1%遺傳算法子程序%name: decodebinary.m%產(chǎn)生2n2n-1.1 的行向量,然后求和,將二進制轉(zhuǎn)化為十進制function pop2=decodebinarypop % 定義 m 文件函數(shù)(將二進制數(shù)轉(zhuǎn)化為十進制數(shù)的函數(shù))
4、px、py=sizepop; % 求 pop 的行數(shù)和列數(shù);px 為種群數(shù),染色體的長度為py for i=1:pypop1:、i=2.py-i.*pop:、i;%pop1:、i 表示 pop1 矩陣的第i 列全部元素endpop2=sumpop1、2; % 求 pop1 的每行之和%matlab 中 sum函數(shù)的用法%a=sumx; % 對 x 矩陣的列求和a=sumx、2; % 對 x 矩陣的行求和a=sumx:; %x矩陣的全部元素求和%a:、j 表示提取a 矩陣的第j 列全部元素ai、: 表示提取a 矩陣的第i 行元素,ai、 j 表示提取a 矩陣的第i 行第 j 列的元素;% 2.2
5、.2 將二進制編碼轉(zhuǎn)化為十進制數(shù)2精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載% decodechrom.m 函數(shù)的功能為將染色體 或二進制編碼 的特定位置轉(zhuǎn)換為十進制,參數(shù)spoint 表示待解碼的二進制串的起始位置% 對于多個變量而言,如有兩個變量,采納20 為表示,每個變量10 為,就第一個變量從1 開頭,另一個變量從11 開頭;本例為1 ,% 參數(shù)1ength 表示所截取的長度(本例為10);%遺傳算法子程序%name: decodechrom.m (將染色體二進制編碼轉(zhuǎn)換成十進制)function pop2=decodechrompop、spoint、length% 參數(shù) spoi
6、nt 表示待解碼的二進制串的起始位置 pop1=pop:、spoint:spoint+length-1;%提取矩陣pop 的第 spoint 到 spoint+length-1 列,形成一個新矩陣pop1; pop2=decodebinarypop1; % 解二進制碼% 2.2.3 運算目標(biāo)函數(shù)值% calobjvalue.m函數(shù)的功能為 實現(xiàn)目標(biāo)函數(shù)的運算,其公式采納本文示例仿真,可依據(jù)不同優(yōu)化問題予以修改;%遺傳算法子程序%name: calobjvalue.m%實現(xiàn)目標(biāo)函數(shù)的運算function objvalue=calobjvaluepoptemp1=decodechrompop、1、
7、10; % 將 pop 每行轉(zhuǎn)化成十進制數(shù),1 代表待解碼的二進制串起始位置、10 代表截取的長度x=temp1*10/1023; % 將二值域中的數(shù)轉(zhuǎn)化為變量域的數(shù)objvalue=10*sin5*x+7*cos4*x; %運算目標(biāo)函數(shù)值% 2.3 運算個體的適應(yīng)值%遺傳算法子程序%name:calfitvalue.m%運算個體的適應(yīng)值%>> a=3 4 2;1 5 3;4 7 1 a =342153471a1=3 ; a2 =1 ; a3=4 ;a4=4 ; a5=5%依據(jù) 2.2.3 運算出的目標(biāo)函數(shù)值運算個體的適應(yīng)值function fitvalue=calfitvalue
8、objvalue % 定義函數(shù)global cmin; %global 表示全局cmin=0;px、py=sizeobjvalue;% objvalue 為列向量矩陣for i=1:pxif objvaluei+cmin>0% objvaluei 表示矩陣objvalue 的第 i 個元素(從上往下數(shù))temp=cmin+objvaluei; elsetemp=0.0;endfitvaluei=temp; % 列向量矩陣fitvalue 為 px 個循環(huán)中temp 的值構(gòu)成的;endfitvalue=fitvalue' % 運算符 '表示向量的復(fù)共軛,最終的fitvalu
9、e 為行向量矩陣精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載% 2.4 挑選復(fù)制其算法為:設(shè)置挑選算法執(zhí)行次數(shù)j=0在區(qū)間 0、 totalfitness內(nèi)產(chǎn)生一隨機數(shù)rands, totalfitness 表示種群個體適應(yīng)度之和 i=0 , sum=0;其中 i 表示第 i 個個體, sum 表示 0 i 的個體的適應(yīng)度值之和 sum = sum +fitnessi ,假如sum>rands,轉(zhuǎn);否就轉(zhuǎn) i+ ,轉(zhuǎn)返回第i 個個體 indivalsi j+ ,假如j = 個體總數(shù)totalindavial ,挑選操作終止,否就轉(zhuǎn)% 挑選或復(fù)制操作為打算哪些個體可以進入下一代;程序中采
10、納賭輪盤挑選法挑選,這種方法較易實現(xiàn);% 依據(jù)方程 pi=fi/ fi=fi/fsu(m fsum 表示總概率和,一般設(shè)為1),挑選步驟:% 1)在第 t 代,由( 1)式運算fsum 和 pi% 2)產(chǎn)生 0、1的隨機數(shù)rand .,求s=rand .*fsum% 3)求 fi中s最小的k,就第 k 個個體被選中% 4)進行 n 次 2).3)操作,得到n 個個體,成為第t=t+1 代種群%遺傳算法子程序%name: selection.m%挑選復(fù)制123456% a=1 2 3;4 5 6 a =cumsuma ans =123579b=1 2 3; cumsumb ans =136% r
11、andm、n表示產(chǎn)生m*n 矩陣,randm、n、p表示產(chǎn)生p 個 m*n 矩陣,randm、n、p、q表示產(chǎn)生p*q 個 m*n 矩陣%function newpop=selectionpop、fitvalue %定義挑選函數(shù), 有沒有都可; totalfit=sumfitvalue; %求適應(yīng)值之和fitvalue=fitvalue/totalfit; %適應(yīng)值 =單個個體被挑選的概率fitvalue=cumsumfitvalue;%fitvalue為行向量矩陣,cumsumfitvalue 表示元素依次累加的新行矩陣;px、py=sizepop; % px為種群數(shù),染色體的長度為pyms
12、=sortrandpx、1; %sort 從小到大排列;randpx、1 為任意產(chǎn)生px 個元素的行向量矩陣;i=1; j=1;while j<=pxifmsj<fitvaluei%ms 為產(chǎn)生的隨機的行矩陣;fitvalue 為元素依次累加的新的行矩陣;newpopj=popi;% newpop 為輸出函數(shù) , pop 為初始種群2.1 中;j=j+1;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elseend endi=i+1;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載% 2.5 交叉交叉算法步驟可描述為:設(shè)置交叉次數(shù)j=0 ;在群體的范疇內(nèi)隨機產(chǎn)生兩個整數(shù),其值在區(qū)間1
13、, totalindival之間產(chǎn)生一個隨機數(shù)randc, randc 0、1如 rands p,c 不執(zhí)行交叉操作,直接轉(zhuǎn)隨機產(chǎn)生在區(qū)間0、indavallength 內(nèi)的整數(shù)crosssite作為交叉點,執(zhí)行交叉操作 j+ ;假如j countidnival/2 ,終止交叉操作,否就轉(zhuǎn)2% 交叉 crossover,群體中的每個個體之間都以肯定的概率pc 交叉,即兩個個體從各自字符串的某一位置% (一般為隨機確定)開頭相互交換,這類似生物進化過程中的基因分裂與重組;例如,假設(shè)2 個父代個體x1 ,x2 為:% x1=0100110% x2=1010001% 從每個個體的第3 位開頭交叉,交
14、又后得到2 個新的子代個體y1, y2 分別為:% y1 0100001% y2 1010110% 這樣 2 個子代個體就分別具有了2 個父代個體的某些特點;利用交又我們有可能由父代個體在子代組合成具有更高適合度的個體;%事實上交又為遺傳算法區(qū)分于其它傳統(tǒng)優(yōu)化方法的主要特點之一;%遺傳算法子程序%name: crossover.m%交叉%pc 交叉概率,交叉概率過大(0.75-1 ),高適應(yīng)值的個體簡單被破壞,交叉率過小0-0.25,算法退化成隨機搜尋,合適的范疇在0.25-0.75之間;function newpop=crossoverpop、pc px、py=sizepop;newpop=
15、onessizepop;%newpop 為 px*py 階元素都為1 的矩陣,目的就為產(chǎn)生一個px*py 階矩陣for i=1:2:px-1% 為 for 循環(huán), i 間隔一個數(shù)取值,為1, 3,5, px-1 ,防止重復(fù)交叉; ifrand<pccpoint=roundrand*py; %cpoint交叉點,隨機產(chǎn)生交叉點;newpopi、:=popi、1:cpoint、popi+1、cpoint+1:py;% 交叉操作 ,相鄰兩行直接進行交叉; newpopi+1、:=popi+1、1:cpoint、popi、cpoint+1:py;% 交叉操作 ,相鄰兩行直接進行交叉;else%如
16、 rand pc ,不執(zhí)行交叉操作newpopi、:=popi;newpopi+1、:=popi+1;endend% 2.6 變異變異算法描述如下:精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載 j=0產(chǎn)生一個隨機數(shù)randm 0、1假如randm>pm,就不進行變異操作,直接轉(zhuǎn),否就轉(zhuǎn)隨機產(chǎn)生一整數(shù)mut 0、indivallength,將該位的數(shù)值翻轉(zhuǎn)或進行替換操作 j+ ,假如j> countindival (個體總數(shù)) ,就退出變異操作,否就轉(zhuǎn)% 變異 mutation ,基因的突變普遍存在于生物的進化過程中;變異為指父代中的每個個體的每一位都以概率 pm 翻轉(zhuǎn),即由 “1
17、變”為 “0”,% 或由 “ 0變”為 “ 1;”遺傳算法的變異特性可以使求解過程隨機地搜尋到解可能存在的整個空間,因此可以在肯定程度上求得全局最優(yōu)解;%遺傳算法子程序%name: mutation.m%變異% all 函數(shù):檢測矩陣中為否全為非零元素,假如為,就返回1,否就,返回0;any 函數(shù):檢測矩陣中為否有非零元素,假如有,就返回1,否就,返回0;用法和all 一樣function newpop=mutationpop、pm px、py=sizepop; newpop=onessizepop;for i=1:pxifrand<pm%隨機產(chǎn)生0-1 的數(shù)值小于變異概率pm,就執(zhí)行變
18、異操作; mpoint=roundrand*py; %mpoint變異點, round 作用對數(shù)值進行四舍五入 ; if mpoint<=0%變異點 0 時mpoint=1;end newpopi=popi;if anynewpopi、mpoint=0 %any函數(shù)的用法, anynewpopi、mpoint 判定元素值為否為非零0,判斷結(jié)果等于0 時newpopi、mpoint=1;%假如 newpopi、mpoint 元素值為否為0,把 0 變 1, 變異操作精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elseend elsenewpopi、mpoint=0;%假如 newpopi
19、、mpoint 元素值為不為0,把 1 變 0, 變異操作精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載endendnewpopi=popi;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載% 2.7 求出群體中最大的適應(yīng)值及其個體%遺傳算法子程序%name: best.m%求出群體中適應(yīng)值最大的值% function x y=my_funca、b x=a+b;y=a-b;調(diào)用如下:m n=my_func5、2 %輸出結(jié)果為m=a+b=5+2=7; n=a-b=5-2=3function bestindividual、bestfit=bestpop、fitvalue px、py=sizepop;
20、精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載bestindividual=pop1、:; % 矩陣 pop 的第一行,初始最好個體bestfit=fitvalue1;%定義初始最大適應(yīng)值 for i=2:pxif fitvaluei>bestfit bestindividual=popi、:; bestfit=fitvaluei;endend% 2.8 主程序%遺傳算法主程序%name:genmain05.m clearclfpopsize=20; % 群體大小chromlength=10; % 字符串長度(個體長度)pc=0.6; % 交叉概率pm=0.001; % 變異概率pop=
21、initpoppopsize、chromlength; %隨機產(chǎn)生初始群體for i=1:20%為迭代次數(shù) objvalue=calobjvaluepop; %運算目標(biāo)函數(shù)fitvalue=calfitvalueobjvalue; %運算群體中每個個體的適應(yīng)度 newpop=selectionpop、fitvalue; %復(fù)制 newpop=crossoverpop、pc; % 交叉newpop=mutationpop、pc; %變異bestindividual、bestfit=bestpop、fitvalue;%求出群體中適應(yīng)值最大的個體及其適應(yīng)值 yi=maxbestfit;% maxa
22、:返回一個行向量,向量的第i 個元素為矩陣a 的第 i 列上的最大值;%y 、u=maxa :返回行向量y 和 u, y 向量記錄 a 的每列的最大值,u 向量記錄每列最大值的行號;ni=i; % 貌似沒啥用pop5=bestindividual;xi=decodechrompop5、1、chromlength*10/1023;%對矩陣 pop5 進行解碼,變成十進制數(shù)pop=newpop; endfplot'10*sin5*x+7*cos4*x'、0 10 % fplotfun、limits在指定的范疇limits 內(nèi)畫出函數(shù)名為fun 的圖像;hold onplotx、y、
23、'r*' % 畫出來的點有重合的,其實與循環(huán)次數(shù)為相同的;hold offz index=maxy; % 運算最大值及其位置x5=xindex% 運算最大值對應(yīng)的x值y=z【問題】求fx=x 10*sin5x 7*cos4x的最大值,其中0<=x<=9【分析】挑選二進制編碼,種群中的個體數(shù)目為10,二進制編碼長度為20,交叉概率為0.95、變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)functionsol、eval=fitnesssol、options x=sol1;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載eval=x 10*sin5*x 7*cos4*x;%
24、把上述函數(shù)儲備為fitness.m 文件并放在工作目錄下 initpop=initializega10、0 9、'fitness'%生成初始種群,大小為10 xendpop、bpop、trace=ga09、'fitness'、initpop、1e-611、'maxgenterm'、25、'normgeomselect'、.0.08、'arithxover'、2、'nonunifmutation'、2 25 3 %次遺傳迭代運算借過為:x =7.8562 24.8553 當(dāng) x 為 7.8562 時,
25、 f ( x)取最大值24.8553注:遺傳算法一般用來取得近似最優(yōu)解,而不為最優(yōu)解;遺傳算法實例2【問題】在5<=xi<=5、i=1、2區(qū)間內(nèi),求解fx1、x2=-20*exp-0.2*sqrt0.5*x1.2x2.2-exp0.5*cos2*pi*x1cos2*pi*x222.71282 的最小值;【分析】種群大小10,最大代數(shù)1000 ,變異率0.1、交叉率0.3【程序清單】源函數(shù)的matlab 代碼 function eval=fsol numv=sizesol、2; x=sol1:numv;eval=-20*exp-0.2*sqrtsumx.2/numv-expsumco
26、s2*pi*x/numv 22.71282;%適應(yīng)度函數(shù)的matlab 代碼 function sol、eval=fitnesssol、options numv=sizesol、2-1;x=sol1:numv; eval=fx; eval=-eval;%遺傳算法的matlab 代碼bounds=ones2、1*-5 5; p、endpop、bestsols、trace=gabounds、'fitness'注:前兩個文件儲備為m 文件并放在工作目錄下,運行結(jié)果為p =0.0000 -0.0000 0.0055大家可以直接繪出fx 的圖形來大致看看f ( x)的最值為多少,也可為使
27、用優(yōu)化函數(shù)來驗證;matlab 命令行執(zhí)行命令:fplot'x 10*sin5*x 7*cos4*x'、0、9 evalops 為傳遞給適應(yīng)度函數(shù)的參數(shù),opts 為二進制編碼的精度,termops 為挑選maxgenterm終止函數(shù)時傳遞個maxgenterm 的參數(shù),即遺傳代數(shù);xoverops為傳遞給交叉函數(shù)的參數(shù);mutops 為傳遞給變異函數(shù)的參數(shù);【問題】求fx=x+10*sin5x+7*cos4x的最大值,其中0<=x<=9【分析】挑選二進制編碼,種群中的個體數(shù)目為10,二進制編碼長度為20,交叉概率為0.95、變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)functionsol、eval=fitnesssol、options x=sol1; eval=x+10*sin5*x+7*cos4*x;%把上述函數(shù)儲備為fitness.m 文件并放在工作目錄下initpop=initializega10、0 9、'fitness'%生成初始種群,大小為10精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載xendpop、bpop、trace=ga09、'fitness'、initpop、1e-611、'maxgenterm'、25
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單面窗戶采購合同范本
- 司機協(xié)議合同范例
- 業(yè)務(wù)員簡單辭職報告
- 通信網(wǎng)絡(luò)管理員高級考試模擬題含參考答案
- 辦卡會員合同范本
- 農(nóng)村固體廢物處理合同范本
- 一周總結(jié)30篇模板
- 壓路機租用合同范本
- 公司出售寫合同范例
- 2014旅游協(xié)議合同范本
- 人教版小學(xué)數(shù)學(xué)三年級下冊第一單元位置與方向一單元測試
- GB/T 18684-2002鋅鉻涂層技術(shù)條件
- 既有住宅加裝電梯業(yè)主意愿征集表
- 第九講:信息與大數(shù)據(jù)倫理問題-工程倫理
- 四年級美術(shù)素養(yǎng)附答案
- 2021年全國中學(xué)生天文奧林匹克競賽預(yù)賽試題及答案
- 四年級下冊音樂教案-2.2我們美麗的祖國 |接力版
- Quantum軟件培訓(xùn)手冊
- 服裝市場營銷項目2服裝市場營銷環(huán)境分析課件
- 中國傳媒大學(xué)《當(dāng)代電視播音主持教程》課件
- 《納米復(fù)合材料》第2章 納米復(fù)合材料概論
評論
0/150
提交評論