遺傳算法螞蟻算法作業_第1頁
遺傳算法螞蟻算法作業_第2頁
遺傳算法螞蟻算法作業_第3頁
遺傳算法螞蟻算法作業_第4頁
遺傳算法螞蟻算法作業_第5頁
已閱讀5頁,還剩17頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、題目1:z=2-exp-(x2+y2),x,y-5,+5?,求函數最小值1)用遺傳算法來做:第一步:確定決策變量及其拘束條件.-5=x=5第二步:建立優化模型maxf(x)-(2-exp(-(x.2+y.2)第三步:確定編碼方法,用長度為50位的二進制編碼串來表示決策變量x第四步:確定解碼方法5(5)x50y21第五步:確定個體議論方法個體的適應度取為每次迭代的最小值的絕對值加上目標函數值,即F(x)|minf(x)|f(x)第六步:確定參數本題種群規模n=30,迭代次數ger=200,交織概率pc=,變異概率pm=代碼:clearall;closeall;clc;tic;n=30;ger=2

2、00;pc=;pm=;生成初始種群v=init_population(n,50);N,L=size(v);disp(sprintf(Numberofgenerations:%d,ger);disp(sprintf(Populationsize:%d,N);disp(sprintf(Crossoverprobability:%.3f,pc);disp(sprintf(Mutationprobability:%.3f,pm);待優化問題xmin=-5;xmax=5;ymin=-5;ymax=5;f=-(2-exp(-(x.2+y.2);x,y=meshgrid(xmin:xmax,ymin:yma

3、x);vxp=x;vyp=y;vzp=eval(f);figure(1);mesh(vxp,vyp,-vzp);holdon;gridon;計算適應度,并畫出初始種群圖形x=decode(v(:,1:25),xmin,xmax);y=decode(v(:,26:50),ymin,ymax);fit=eval(f);plot3(x,y,-fit,k*);title(a)染色體的初始地址);xlabel(x);ylabel(y);zlabel(f(x,y);迭代前的初始化vmfit=;vx=;it=1;%迭代計數器開始進化whileit=gerReproduction(Bi-classistSel

4、ection)vtemp=roulette(v,fit);Crossoverv=crossover(vtemp,pc);MutationM=rand(N,L)=pm;%M(1,:)=zeros(1,L);v=v-2.*(v.*M)+M;Resultsx=decode(v(:,1:25),xmin,xmax);y=decode(v(:,26:50),ymin,ymax);fit=eval(f);sol,indb=max(fit);%每次迭代中最優目標函數值v(1,:)=v(indb,:);fit_mean=mean(fit);%每次迭代中目標函數值的平均值vx=vxsol;vmfit=vmfit

5、fit_mean;it=it+1;end%最后結果disp(sprintf(n);%空一行顯示最優解及最優值disp(sprintf(Maximumfoundx,f(x):%.4f,%.4f,%.4f,x(indb),y(indb),-sol);圖形顯示最優結果figure(2);mesh(vxp,vyp,-vzp);holdon;gridon;plot3(x,y,-fit,r*);title(染色體的最后地址);xlabel(x);ylabel(y);zlabel(f(x,y);圖形顯示最優及平均函數值變化趨勢figure(3);plot(-vx);%title(最優,平均函數值變化趨勢);

6、xlabel(Generations);ylabel(f(x);holdon;plot(-vmfit,r);holdoff;runtime=toc運行結果:Maximumfoundx,f(x):,(2)用蟻群算法來做代碼:%Antmainprogramclearall;closeall;clc;tic;Ant=100;Ger=50;xmin=-5;xmax=5;ymin=-5;ymax=5;tcl=;f=-(2-exp(-(x.2+y.2);%待優化的目標函數x,y=meshgrid(xmin:tcl:xmax,ymin:tcl:ymax);vxp=x;vyp=y;vzp=eval(f);fi

7、gure(1);mesh(vxp,vyp,-vzp);holdon;初始化螞蟻地址fori=1:AntX(i,1)=(xmin+(xmax-xmin)*rand(1);X(i,2)=(ymin+(ymax-ymin)*rand(1);T0-信息素,函數值越大,信息素濃度越大T0(i)=exp(-(X(i,1).2+X(i,2).2)-2;endplot3(X(:,1),X(:,2)-T0,k*);holdon;gridon;title(螞蟻的初始分布地址);xlabel(x);ylabel(y);zlabel(f(x,y);%開始尋優fori_ger=1:GerP0=;%P0-全局轉移選擇因子

8、P=;%P-信息素蒸發系數lamda=1/i_ger;%轉移步長參數T_Best(i_ger),BestIndex=max(T0);forj_g=1:Ant%求取全局轉移概率r=T0(BestIndex)-T0(j_g);Prob(i_ger,j_g)=r/T0(BestIndex);endforj_g_tr=1:AntifProb(i_ger,j_g_tr)P0temp1=X(j_g_tr,1)+(2*rand(1)-1)*lamda;temp2=X(j_g_tr,2)+(2*rand(1)-1)*lamda;elsetemp1=X(j_g_tr,1)+(xmax-xmin)*(rand(1

9、);temp2=X(j_g_tr,2)+(ymax-ymin)*(rand(1);endiftemp1xmaxtemp1=xmax;endiftemp2ymaxtemp2=ymax;endif-(2-exp(-(temp1.2+temp2.2)-(2-exp(-(X(j_g_tr,1).2+X(j_g_tr,2).2)X(j_g_tr,1)=temp1;X(j_g_tr,2)=temp2;endend%信息素更新fort_t=1:AntT0(t_t)=(1-P)*T0(t_t)-(2-exp(-(X(t_t,1).2+X(t_t,2).2);endc_iter,i_iter=max(T0);m

10、axpoint_iter=X(i_iter,1),X(i_iter,2);max_local(i_ger)=-(2-exp(-(X(i_iter,1).2+X(i_iter,2).2);%將每代全局最優解存到max_global矩陣中ifi_ger=2ifmax_local(i_ger)max_global(i_ger-1)max_global(i_ger)=max_local(i_ger);elsemax_global(i_ger)=max_global(i_ger-1);endelsemax_global(i_ger)=max_local(i_ger);endend%figure(2);m

11、esh(vxp,vyp,-vzp);holdon;x=X(:,1);y=X(:,2);plot3(x,y,-eval(f),b*);holdon;gridon;title(螞蟻的最后分布地址);xlabel(x);ylabel(y);zlabel(f(x,y);figure(3);plot(1:Ger,-max_global,b-)holdon;title(最優函數值變化趨勢);xlabel(iteration);ylabel(f(x);gridon;c_max,i_max=max(T0);maxpoint=X(i_max,1),X(i_max,2)maxvalue=-(2-exp(-(X(i

12、_max,1).2+X(i_max,2).2)runtime=toc結果:maxvalue=題目2:利用蟻群算法求下面加權有向圖中從A到G的最短路:解:第一步:初始化N只螞蟻,也就是N條道路第二步:初始化運行參數,開始迭代第三步:在迭代步數范圍之內,計算轉移概率,若是小于全局轉移概率就進行小范圍的搜尋,否則就進行大范圍的搜尋第四步:更新信息素,記錄狀態,準備進行下一次迭代第五步:轉第三步第六步:輸出結果代碼:functionshortroad_ant_mainAntmainprogramclearall;closeall;clc;%清屏tic;%計時開始Ant=50;Ger=100;%運行參數

13、初始化PMPN=size(power);初始化螞蟻地址v=init_population(Ant,PN);v(:,1)=1;v(:,PN)=1;%始點和終點納入路徑%把距離當信息素濃度fit=short_road_fun(v,power);%距離越小越好,所以要和信息素濃度相對應。T0=max(fit)-fit;畫出圖形figure(1);gridon;holdon;plot(fit,k*);title(a)螞蟻的初始地址);xlabel(x);ylabel(f(x);%初始化vmfit=;vx=;P0=;%P0-全局轉移選擇因子P=;%P-信息素蒸發系數%C=;開始尋優fori_ger=1:

14、Gerlamda=1/i_ger;%轉移步長參數T_Best(i_ger),BestIndex=max(T0);%最大信息素濃度forj_g=1:Ant%求取全局轉移概率r=T0(BestIndex)-T0(j_g);%與最正確的螞蟻的距離Prob(i_ger,j_g)=r/T0(BestIndex);%應該以多大的速率向它靠攏endforj_g_tr=1:AntifProb(i_ger,j_g_tr)P0%局部轉移-小動作轉移M=rand(1,PN)lamda;temp=v(j_g_tr,:)-2.*(v(j_g_tr,:).*M)+M;else%全局轉移-大步伐轉移M=rand(1,PN)

15、P0;temp=v(j_g_tr,:)-2.*(v(j_g_tr,:).*M)+M;end%始點和終點重新加入。即不能夠在搬動過程中發生改變。temp(:,1)=1;temp(:,end)=1;ifshort_road_fun(temp,power)short_road_fun(v(j_g_tr,:),power)%記錄v(j_g_tr,:)=temp;endend%信息素更新,準備下一次迭代fit=short_road_fun(v,power);T0=(1-P)*T0+(max(fit)-fit);%信息素蒸發sol,indb=min(fit);v(1,:)=v(indb,:);%記錄本次迭

16、代的狀態media=mean(fit);vx=vxsol;vmfit=vmfitmedia;end%最后結果disp(sprintf(n);%空一行顯示最優解及最優值disp(sprintf(Shortroadis%s,num2str(find(v(indb,:);%num2str數據轉換成字符。disp(sprintf(Mininumis%d,sol);v(indb,:)圖形顯示最優結果figure(2);gridon;holdon;plot(fit,r*);title(螞蟻的最后地址);xlabel(x);ylabel(f(x);圖形顯示最優及平均函數值變化趨勢figure(3);plot(vx);title(最優,平均函數值變化趨勢);xlabel(Generations);ylabel(f(x);holdon;plot(vmfit,r);holdoff;runtime=toc%時間結束end%functionfit=short_road_fun(v,power)vmvn=size(v);

溫馨提示

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

評論

0/150

提交評論