神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)_第1頁
神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)_第2頁
神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)_第3頁
神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)_第4頁
神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu) Beijing Jiaotong University 智能控制技術(shù)報告神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)學 院:電子信息工程學院學 號:姓 名:指導教師:時 間:2014.11.29目錄一、課題背景3二、模型建立32.1 算法流程42.2 BP算法實現(xiàn)42.2.1 數(shù)據(jù)選擇和歸一化42.2.2 BP神經(jīng)網(wǎng)絡(luò)訓練52.2.3 BP神經(jīng)網(wǎng)絡(luò)預測52.3 遺傳算法實現(xiàn)62.3.1 種群初始化62.3.2 適應(yīng)度函數(shù)62.3.3 選擇操作62.3.4 交叉操作62.3.5 變異操作6三、編程實現(xiàn)63.1 數(shù)據(jù)準備63.2 BP神經(jīng)網(wǎng)絡(luò)主函數(shù)73.3 編碼函數(shù)83.4 適應(yīng)度函

2、數(shù)93.5 選擇操作93.6 交叉操作103.7 變異操作113.8 遺傳算法主函數(shù)12四、結(jié)果分析144.1 BP神經(jīng)網(wǎng)絡(luò)擬合結(jié)果分析144.2遺傳算法尋優(yōu)結(jié)果分析16一、 課題背景在研究中經(jīng)常會遇到一些非常復雜的非線性系統(tǒng),這些系統(tǒng)方程復雜,難以用數(shù)學方法準確建模。在這種情況下,可以建立BP神經(jīng)網(wǎng)絡(luò)表達這些非線性系統(tǒng)。該方法把系統(tǒng)看成是一個黑箱,首先用系統(tǒng)輸入輸出數(shù)據(jù)訓練BP神經(jīng)網(wǎng)絡(luò),使網(wǎng)絡(luò)能夠表達該未知函數(shù),然后就可以用訓練好的BP神經(jīng)網(wǎng)絡(luò)預測系統(tǒng)輸出。對于未知的非線性函數(shù),僅通過函數(shù)的輸入輸出數(shù)據(jù)難以準確尋找函數(shù)極值。遺傳算法通過模擬自然界遺傳機制和生物進化論能夠進行并行隨機搜索最優(yōu)化

3、,所以對非線性函數(shù)極值尋優(yōu)可以通過神經(jīng)網(wǎng)絡(luò)結(jié)合遺傳算法求解。利用神經(jīng)網(wǎng)絡(luò)的非線性擬合能力和遺傳算法的非線性尋優(yōu)能力尋找函數(shù)極值。本文擬合的非線性函數(shù)為:fx=-xx2-3.2x+2.89x-32 x0,3該函數(shù)的圖形如圖所示:圖1-1待擬合函數(shù)圖形從函數(shù)方程和圖形可以看出,該函數(shù)僅有一個全局最大值為0.9655,對應(yīng)的坐標是(0.537,0.9655)。雖然從函數(shù)方程和圖形中很容易找出函數(shù)及極值對應(yīng)的坐標,但是在方程未知的條件下函數(shù)極值及極值對應(yīng)的坐標就很難求到。二、 模型建立2.1 算法流程神經(jīng)網(wǎng)絡(luò)遺傳算法函數(shù)極值尋優(yōu)主要分為BP神經(jīng)網(wǎng)絡(luò)訓練擬合和遺傳算法極值尋優(yōu)兩步,算法流程如圖所示:圖2

4、-1算法流程圖神經(jīng)網(wǎng)絡(luò)訓練擬合根據(jù)尋優(yōu)函數(shù)的特點構(gòu)建適合的BP神經(jīng)網(wǎng)絡(luò),用非線性函數(shù)的輸入輸出數(shù)據(jù)訓練BP神經(jīng)網(wǎng)絡(luò),訓練后的神經(jīng)網(wǎng)絡(luò)就可以預測函數(shù)輸出。遺傳算法極值尋優(yōu)把訓練后的BP神經(jīng)網(wǎng)絡(luò)預測結(jié)果作為個體適應(yīng)度值,通過選擇、交叉和變異操作尋找函數(shù)的全局最優(yōu)值及對應(yīng)的值。2.2 BP算法實現(xiàn)2.2.1 數(shù)據(jù)選擇和歸一化數(shù)據(jù)歸一化是神經(jīng)網(wǎng)絡(luò)訓練和預測前對數(shù)據(jù)常做的一種處理方法。數(shù)據(jù)歸一化處理把所有的數(shù)據(jù)都歸一化為0,1之間的數(shù),其目的是取消各維數(shù)據(jù)間數(shù)量級差別,避免因為輸入輸出數(shù)據(jù)數(shù)量級差別較大而造成訓練失敗或者預測誤差較大。數(shù)據(jù)歸一化可以使用MATLAB自帶函數(shù)mapminmax,該函數(shù)有多種

5、形式,常用的方法如下:%樣本輸入輸出數(shù)據(jù)歸一化inputn,inputps=mapminmax(input_train);outputn,outputps=mapminmax(output_train);input_train、output_train是訓練輸入、輸出原始數(shù)據(jù),inputn、outputn是歸一化后的數(shù)據(jù),inputps、outputps為數(shù)據(jù)歸一化后得到的結(jié)構(gòu)體,里面包含了數(shù)據(jù)的最大值、最小值和平均值等信息,可以用于測試數(shù)據(jù)歸一化和反歸一化。測試數(shù)據(jù)歸一化和反歸一化程序一般如下:%數(shù)據(jù)歸一化inputn_test=mapminmax('apply',input

6、_test,inputps); %網(wǎng)絡(luò)輸出反歸一化BPoutput=mapminmax('reverse',an,outputps);input_test是預測輸入數(shù)據(jù),input_test是歸一化后的預測數(shù)據(jù),'apply'表示根據(jù)inputps進行歸一化;an是網(wǎng)絡(luò)預測結(jié)果,outputs是訓練輸出數(shù)據(jù)歸一化得到的結(jié)構(gòu)體,BPoutput是反歸一化后的網(wǎng)絡(luò)預測輸出,'reverse'表示對數(shù)據(jù)進行反歸一化。2.2.2 BP神經(jīng)網(wǎng)絡(luò)訓練用訓練數(shù)據(jù)訓練神經(jīng)網(wǎng)絡(luò),使網(wǎng)絡(luò)對非線性函數(shù)具有預測能力。MATLAB神經(jīng)網(wǎng)絡(luò)工具箱中自帶BP神經(jīng)網(wǎng)絡(luò)函數(shù),使用

7、時只需要調(diào)用相關(guān)的子程序即可。BP神經(jīng)網(wǎng)絡(luò)訓練主要用到newff、sim兩個函數(shù)。1. newff:BP神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置函數(shù)函數(shù)功能:構(gòu)建一個BP網(wǎng)絡(luò)。函數(shù)形式:net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)2. train:BP神經(jīng)網(wǎng)絡(luò)訓練函數(shù)函數(shù)功能:用訓練數(shù)據(jù)訓練BP神經(jīng)網(wǎng)絡(luò)。函數(shù)形式:net,tr=train(NET,X,T,Pi,Ai)2.2.3 BP神經(jīng)網(wǎng)絡(luò)預測用訓練好的BP神經(jīng)網(wǎng)絡(luò)預測非線性函數(shù)輸出,并通過BP神經(jīng)網(wǎng)絡(luò)預測輸出和期望輸出分析BP網(wǎng)絡(luò)的分析能力。MATLAB神經(jīng)網(wǎng)絡(luò)工具箱提供的BP神經(jīng)網(wǎng)絡(luò)預測函數(shù)是sim。1. sim:BP神經(jīng)

8、網(wǎng)絡(luò)預測函數(shù)函數(shù)功能:用訓練好的BP神經(jīng)網(wǎng)絡(luò)預測函數(shù)輸出函數(shù)形式:y=sim(net,y)以上三個函數(shù)的具體用法可以參考其自帶的幫助,本文不作詳述。根據(jù)需要擬合的函數(shù)有1個輸入?yún)?shù)、1個輸出參數(shù),確定BP神經(jīng)網(wǎng)絡(luò)為1-5-1。取函數(shù)的4000組輸入輸出數(shù)據(jù),從中隨機選取3900組訓練網(wǎng)絡(luò),100組數(shù)據(jù)測試網(wǎng)絡(luò)性能,網(wǎng)絡(luò)訓練好后用于非線性函數(shù)輸出。2.3 遺傳算法實現(xiàn)2.3.1 種群初始化個體編碼方法為實數(shù)編碼,每個個體均為一個實數(shù)串,由輸入層與隱含層連接權(quán)值、隱含層閾值、隱含層與輸出層連接權(quán)值以及輸出層閾值4部分組成。個體包含了神經(jīng)網(wǎng)絡(luò)全部權(quán)值和閾值,在網(wǎng)絡(luò)結(jié)構(gòu)已知的情況下,就可以構(gòu)成一個結(jié)構(gòu)

9、、權(quán)值、閾值確定的神經(jīng)網(wǎng)絡(luò)。2.3.2 適應(yīng)度函數(shù)根據(jù)個體得到的BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值,用訓練數(shù)據(jù)訓練BP神經(jīng)網(wǎng)絡(luò)后預測系統(tǒng)輸出,把訓練好的BP神經(jīng)網(wǎng)絡(luò)預測輸出作為個體適應(yīng)度的值。2.3.3 選擇操作遺傳算法選擇操作有輪盤賭法、錦標賽法等多種方法,本文采用采用輪盤賭法,即基于適應(yīng)度比例的選擇策略,每個個體i的選擇pi為:pi=fij=0nfi其中,fi為個體i的適應(yīng)度值,N為種群的個體數(shù)目。2.3.4 交叉操作由于個體采用實數(shù)編碼,所以交叉操作方法采用實數(shù)交叉法,d第k個染色體ak和第l個染色體al在j位的交叉操作方法如下:akj=akj1-b+aijbaij=aij1-b+akjb其中

10、,b是0,1間的隨機數(shù)。2.3.5 變異操作選取第i個個體的第j個基因aij進行變異,變異操作方法如下:aij=aij+(aij-amax)*f(g) r0.5aij+(amin-aij)*f(g) r<0.5式中,amax為基因aij的上界;amin為基因aij的下界;fg=r2(1-g/Gmax);r2為一個隨機數(shù);g為當前迭代次數(shù);amax是最大進化次數(shù);r為0,1之間的隨機數(shù)三、 編程實現(xiàn)3.1 數(shù)據(jù)準備根據(jù)擬合函數(shù)得到4000組輸入input和輸出數(shù)據(jù)output,存入data中。for i=1:4000 input(i,:)=3*rand; output(i)=-input(

11、i)*(input(i)2-3.2*input(i)+2.89)*(input(i)-3)/2;endoutput=output'save data input output3.2 BP神經(jīng)網(wǎng)絡(luò)主函數(shù)對于4000組數(shù)據(jù),采用其中3900組用來訓練神經(jīng)網(wǎng)絡(luò),最后100組用來測試網(wǎng)絡(luò)擬合性能。%清空環(huán)境變量clccleardata;tic% 訓練數(shù)據(jù)預測數(shù)據(jù)提取及歸一化%下載輸入輸出數(shù)據(jù)load data output input %從1到4000間隨機排序k=rand(1,4000);m,n=sort(k); %找出訓練數(shù)據(jù)和預測數(shù)據(jù)input_train=input(n(1:3900)

12、,:)'output_train=output(n(1:3900),:)'input_test=input(n(3901:4000),:)'output_test=output(n(3901:4000),:)' %選連樣本輸入輸出數(shù)據(jù)歸一化inputn,inputps=mapminmax(input_train);outputn,outputps=mapminmax(output_train); %BP網(wǎng)絡(luò)訓練%初始化網(wǎng)絡(luò)結(jié)構(gòu)net=newff(inputn,outputn,5); net.trainParam.epochs=100;net.trainParam

13、.lr=0.1;net.trainParam.goal=0.0000004; %網(wǎng)絡(luò)訓練net=train(net,inputn,outputn); %BP網(wǎng)絡(luò)預測%預測數(shù)據(jù)歸一化inputn_test=mapminmax('apply',input_test,inputps); %網(wǎng)絡(luò)預測輸出an=sim(net,inputn_test); %網(wǎng)絡(luò)輸出反歸一化BPoutput=mapminmax('reverse',an,outputps); %結(jié)果分析 figure(1)plot(BPoutput,':og')hold onplot(outp

14、ut_test,'-*');legend('預測輸出','期望輸出','fontsize',12)title('BP網(wǎng)絡(luò)預測輸出','fontsize',12)xlabel('樣本','fontsize',12)ylabel('輸出','fontsize',12)print -dtiff -r600 4-3%預測誤差error=BPoutput-output_test; figure(2)plot(error,'-*')

15、title('神經(jīng)網(wǎng)絡(luò)預測誤差') figure(3)plot(output_test-BPoutput)./BPoutput,'-*');title('神經(jīng)網(wǎng)絡(luò)預測誤差百分比') errorsum=sum(abs(error) toc save data net inputps outputps3.3 編碼函數(shù)function ret=Code(lenchrom,bound)% lenchrom input : 染色體長度% bound input : 變量的取值范圍% ret output: 染色體的編碼值flag=0;while flag=

16、0pick=rand(1,length(lenchrom); %線性插值,編碼結(jié)果以實數(shù)向量存入ret中ret=bound(:,1)'+(bound(:,2)-bound(:,1)'.*pick; flag=test(lenchrom,bound,ret); %檢驗染色體的可行性end3.4 適應(yīng)度函數(shù)function fitness = fun(x)% x input 個體% fitness output 個體適應(yīng)度值load data net inputps outputps %數(shù)據(jù)歸一化x=x'inputn_test=mapminmax('apply

17、9;,x,inputps); %網(wǎng)絡(luò)預測輸出an=sim(net,inputn_test); %網(wǎng)絡(luò)輸出反歸一化fitness=mapminmax('reverse',an,outputps);3.5 選擇操作function ret=select(individuals,sizepop)% individuals input : 種群信息% sizepop input : 種群規(guī)模% ret output : 經(jīng)過選擇后的種群 fitness1=individuals.fitness;sumfitness=sum(fitness1);sumf=fitness1./sumfit

18、ness;index=; for i=1:sizepop %轉(zhuǎn)sizepop次輪盤 pick=rand; while pick=0 pick=rand; end for i=1:sizepop pick=pick-sumf(i); if pick<0 index=index i; break; end endendindividuals.chrom=individuals.chrom(index,:);individuals.fitness=individuals.fitness(index);ret=individuals;3.6 交叉操作function ret=Cross(pcro

19、ss,lenchrom,chrom,sizepop,bound)% pcorss input : 交叉概率% lenchrom input : 染色體的長度% chrom input : 染色體群% sizepop input : 種群規(guī)模% ret output : 交叉后的染色體 for i=1:sizepop %隨機選擇兩個染色體進行交叉 pick=rand(1,2); while prod(pick)=0 pick=rand(1,2); end index=ceil(pick.*sizepop); %交叉概率決定是否進行交叉 pick=rand; while pick=0 pick=r

20、and; end if pick>pcross continue; end flag=0; while flag=0 %隨機選擇交叉位 pick=rand; while pick=0 pick=rand; end pos=ceil(pick.*sum(lenchrom); pick=rand; %交叉開始 v1=chrom(index(1),pos); v2=chrom(index(2),pos); chrom(index(1),pos)=pick*v2+(1-pick)*v1; chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉結(jié)束 flag1=t

21、est(lenchrom,bound,chrom(index(1),:);%檢驗染色體1可行性 flag2=test(lenchrom,bound,chrom(index(2),:);%檢驗染色體2可行性 if flag1*flag2=0 flag=0; else flag=1; end %如果兩個染色體不是都可行,則重新交叉 end endret=chrom;3.7 變異操作function ret=Mutation(pmutation,lenchrom,chrom,sizepop,pop,bound)% pcorss input : 變異概率% lenchrom input : 染色體長度

22、% chrom input : 染色體群% sizepop input : 種群規(guī)模% opts input : 變異方法的選擇% pop input : 當前種群的進化代數(shù)和最大的進化代數(shù)信息% ret output : 變異后的染色體for i=1:sizepop % 隨機選擇一個染色體進行變異 pick=rand; while pick=0 pick=rand; end index=ceil(pick*sizepop); % 變異概率決定該輪循環(huán)是否進行變異 pick=rand; if pick>pmutation continue; end flag=0; while flag=

23、0 % 變異位置 pick=rand; while pick=0 pick=rand; end pos=ceil(pick*sum(lenchrom); v=chrom(i,pos); v1=v-bound(pos,1); v2=bound(pos,2)-v; pick=rand; %變異開始 if pick>0.5 delta=v2*(1-pick(1-pop(1)/pop(2)2); chrom(i,pos)=v+delta; else delta=v1*(1-pick(1-pop(1)/pop(2)2); chrom(i,pos)=v-delta; end %變異結(jié)束 flag=t

24、est(lenchrom,bound,chrom(i,:); %檢驗染色體的可行性 endendret=chrom;3.8 遺傳算法主函數(shù)%清空環(huán)境變量clcclear %初始化遺傳算法參數(shù)%初始化參數(shù)maxgen=50; %進化代數(shù),即迭代次數(shù)sizepop=30; %種群規(guī)模pcross=0.4; %交叉概率選擇,0和1之間pmutation=0.2; %變異概率選擇,0和1之間 lenchrom=1; %每個變量的字串長度,如果是浮點變量,則長度都為1bound=0 3; %數(shù)據(jù)范圍 individuals=struct('fitness',zeros(1,sizepop

25、), 'chrom',);%將種群信息定義為一個結(jié)構(gòu)體avgfitness=; %每一代種群的平均適應(yīng)度bestfitness=; %每一代種群的最佳適應(yīng)度bestchrom=; %適應(yīng)度最好的染色體 %初始化種群計算適應(yīng)度值%初始化種群for i=1:sizepop %隨機產(chǎn)生一個種群 individuals.chrom(i,:)=Code(lenchrom,bound); x=individuals.chrom(i,:); %計算適應(yīng)度 individuals.fitness(i)=fun(x); %染色體的適應(yīng)度end%找最好的染色體bestfitness bestind

26、ex=max(individuals.fitness);bestchrom=individuals.chrom(bestindex,:); %最好的染色體avgfitness=sum(individuals.fitness)/sizepop; %染色體的平均適應(yīng)度%記錄每一代進化中最好的適應(yīng)度和平均適應(yīng)度trace=avgfitness bestfitness; %迭代尋優(yōu)%進化開始for i=1:maxgen i %選擇 individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop;

27、%交叉 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound); %變異 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i maxgen,bound); %計算適應(yīng)度 for j=1:sizepop x=individuals.chrom(j,:); %解碼 individuals.fitness(j)=fun(x); end %找到最小和最大適應(yīng)度的染色體及它們在種群中的位置 newbestfitness,newbestindex=max(individuals.fitness); worestfitness,worestindex=min(individuals.fitness); %代替上一次進化中最好的染色體 if bestfitness<newbestfitness bestfitness=newbestfitness; bestchrom=individuals.chrom(newbestindex,:); end individuals.chrom(worestindex,:)=bestchrom; individuals.fitn

溫馨提示

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

評論

0/150

提交評論