材料多目標代碼fmaxga_第1頁
材料多目標代碼fmaxga_第2頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

function[BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation,options)%[BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation)%Findsamaximumofafunctionofseveralvariables.%fmaxgasolvesproblemsoftheform:%maxF(X)subjectto:LB<=X<=UB%BestPop--------最優(yōu)的群體即為最優(yōu)的染色體群%Trace-----------最佳染色體所對應的目標函數(shù)值%FUN------------目標函數(shù)%LB--------------自變量下限%UB--------------自變量上限%eranum----------種群的代數(shù),取100--1000(默認1000)%popsize---------每一代種群的規(guī)模;此可取50--100(默認50)%pcross-----------交叉的概率,此概率一般取0.5--0.85之間較好(默認0.8)%pmutation------變異的概率,該概率一般取0.05-0.2左右較好(默認0.1)%options--------1×2矩陣,options(1)=0二進制編碼(默認0),option(1)~=0十進制編碼,option(2)設定求解%精度(默認1e-4)%%如測試Shaffer's(f=0.5-((sin(sqrt(x(1)^2+x(2)^2)))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2))^2)函數(shù),自變量下限%%[-100,-100],上限[100,100],當x=[00]時,取得理想最優(yōu)MaxF6=1%運行得到相當好的結果:自變量為0.00033379-4.7684e-005時,最優(yōu)值1.000000%對應染色體是:10000000000000000001101111%1111111111111111T1=clock;ifnargin<3,error('FMAXGArequiresatleastthreeinputarguments');endifnargin==3,eranum=1000;popsize=50;pcross=0.8;pmutation=0.1;options=[01e-4];endifnargin==4,popsize=50;pcross=0.8;pmutation=0.1;options=[01e-4];endifnargin==5,pcross=0.8;pmutation=0.1;options=[01e-4];endifnargin==6,pmutation=0.1;options=[01e-4];endifnargin==7,options=[01e-4];endiffind((LB-UB)>0)error('數(shù)據(jù)輸入錯誤,請重新輸入(LB<UB):');ends=sprintf('程序運行需要約%.4f秒鐘時間,請稍等......',(eranum*popsize*40/(1000*50)));disp(s);bounds=[LB;UB]';bits=[];precision=options(2);%由求解精度確定二進制編碼長度bits=ceil(log2((bounds(:,2)-bounds(:,1))'./precision));[Pop]=initpop(popsize,bits);%初始化種群[m,n]=size(Pop);pm0=pmutation;BestPop=zeros(eranum,n);Trace=zeros(eranum,length(bits)+1);%分配初始解空間i=1;whilei<=eranumforj=1:mvalue(j)=feval(FUN(1,:),(b2f(Pop(j,:),bounds,bits)));%計算適應度end[MaxValue,Index]=max(value);BestPop(i,:)=Pop(Index,:);Trace(i,1)=MaxValue;Trace(i,(2:length(bits)+1))=b2f(BestPop(i,:),bounds,bits);[selectpop]=selectchrom(FUN,Pop,bounds,bits);%選擇[CrossOverPop]=CrossOver(selectpop,pcross);%交叉[NewPop]=Mutation(CrossOverPop,pmutation);%變異Pop=NewPop;%更新pmutation=pm0+(i^4)*(0.6-pm0)/(eranum^4);%隨著種群向前進化,逐步增大變異率p(i)=pmutation;i=i+1;endt=1:eranum;plot(t,Trace(:,1)');title('函數(shù)優(yōu)化的遺傳算法');xlabel('進化世代數(shù)(eranum)');ylabel('每一代最優(yōu)適應度(maxfitness)');[MaxFval,I]=max(Trace(:,1));X=Trace(I,(2:length(bits)+1));holdon;plot(I,MaxFval,'*');text(I+5,MaxFval,['FMAX='num2str(MaxFval)]);str1=sprintf('進化到%d代,自變量為%s時,得本次求解的最優(yōu)值%f\n對應染色體是:%s',...I,num2str(X),MaxFval,num2str(BestPop(I,:)));disp(str1);%figure(2);plot(t,p);%繪制變異值增大過程T2=clock;CostTime=T2-T1;ifCostTime(6)<0CostTime(6)=CostTime(6)+60;CostTime(5)=CostTime(5)-1;endifCostTime(5)<0CostTime(5)=CostTime(5)+60;CostTime(4)=CostTime(4)-1;end%像這種程序當然不考慮運行上小時啦str2=sprintf('程序運行耗時%d小時%d分鐘%.4f秒',CostTime(4),CostTime(5),CostTime(6));disp(str2);%初始化種群,采用二進制編碼function[pop]=initpop(popsize,bits)len=sum(bits);pop(1,:)=zeros(1,len);fori=2:popsize-1pop(i,:)=round(rand(1,len));endpop(popsize,:)=ones(1,len);%解碼function[fval]=b2f(bval,bounds,bits)%fval-表征各變量的十進制數(shù)%bval-表征各變量的二進制編碼串%bounds-各變量的取值范圍%bits-各變量的二進制編碼長度scale=(bounds(:,2)-bounds(:,1))'./(2.^bits-1);numV=size(bounds,1);cs=[0cumsum(bits)];fori=1:numVa=bval((cs(i)+1):cs(i+1));fval(i)=sum(2.^(size(a,2)-1:-1:0).*a)*scale(i)+bounds(i,1);end%計算各個體的適應度并采用輪盤賭進行選擇function[selectpop]=selectchrom(FUN,pop,bounds,bits)%采用輪盤賭選擇方法[m,n]=size(pop);fori=1:mfit(i)=feval(FUN(1,:),(b2f(pop(i,:),bounds,bits)));%以函數(shù)值為適應度endselectprob=fit/sum(fit);%選擇概率prob=cumsum(selectprob);%累計選擇概率sumprob=[0prob];fori=1:mselectpop(i,:)=pop(length(find(rand>=sumprob)),:);end%交叉操作function[NewPop]=CrossOver(OldPop,pcross)%OldPop為父代種群,pcross為交叉概率[m,n]=size(OldPop);r=rand(1,m);y1=find(r<pcross);y2=find(r>=pcross);len=length(y1);iflen>2&mod(len,2)==1%如果用來進行交叉的染色體的條數(shù)為奇數(shù),將其調(diào)整為偶數(shù)y2(length(y2)+1)=y1(len);y1(len)=[];endiflength(y1)>=2fori=0:2:length(y1)-2[NewPop(y1(i+1),:),NewPop(y1(i+2),:)]=EqualCrossOver(OldPop(y1(i+1),:),OldPop(y1(i+2),:));endendNewPop(y2,:)=OldPop(y2,:);function[children1,children2]=EqualCrossOver(parent1,parent2)%采用均勻交叉例:%父1:01110011010%父2:10101100101%掩碼:01100011010%交叉后新個體:%子1:11101111111%子2:00110000000L=length(parent1);hidecode=round(rand(1,L));%隨機生成掩碼,如hidecode=[01100011010];children1=zeros(1,L);children2=zeros(1,L);children1(find(hidecode==1))=parent1(find(hidecode==1));%掩碼為1,父1為子1提供基因children1(find(hidecode==0))=parent2(find(hidecode==0));%掩碼為0,父2為子1提供基因children2(find(hidecode==1))=parent2(find(hidecode==1));%掩碼為1,父2為子2提供基因children2(find(hidecode==0))=parent1(find(hidecode==0));%掩碼為0,父1為子2提供基因%變異操作function[NewPop]=Mutation(OldPop,pmutation)[m,n]=size(OldPop);r=rand(1,m);position=find(r<=pmutation);len=length(position);iflen>=1fori=1:lenk=unidrnd(n,1,1);%設置變異點數(shù),一般設置1點forj=1:length(k)ifOldPop(position(i),k(j))==1OldPop(position(i),k(j))=0;elseOldPop(position(i),k(j))=1;end

溫馨提示

  • 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

提交評論