遗传算法作业.docx
- 文档编号:8266362
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:270.15KB
遗传算法作业.docx
《遗传算法作业.docx》由会员分享,可在线阅读,更多相关《遗传算法作业.docx(15页珍藏版)》请在冰豆网上搜索。
遗传算法作业
遗传、蚁群算法作业
1、利用遗传算法求出下面函数的极小值:
z=2-exp[-(x2+y2)],x,y[-5,+5]
解:
第一步确定决策变量及其约束条件:
x,y[-5,+5]
第二步建立优化模型:
minz(x,y)=2-exp[-(x2+y2)]
第三步确定编码方法。
用长度为50位的二进制编码串来表示决策变量x,y。
第四步确定解码方法。
解码时将50位长的二进制编码前25位转换为对应的十
进制整数代码,记为x,后25位转换后记为y。
第五步确定个体评价方法。
第六步设计遗传算子。
选择运算用比例选择算子,交叉运算使用单点交叉算子,
变异运算使用基本位变异算子。
第七步确定遗传算法的运行参数。
实现代码:
%n——种群规模
%ger----迭代次数
%pc----交叉概率
%pm----变异概率
%v----初始种群(规模为n)
%f----目标函数值
%fit----适应度向量
%vx----最优适应度值向量
%vmfit----平均适应度值向量
clearall;
closeall;
clc;
tic;
n=30;
ger=200;
pc=0.65;
pm=0.05;
%生成初始种群
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.A2+y.A2)))';
[x,y]=meshgrid(xmin:
0.1:
xmax,ymin:
0.1:
ymax);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<=ger
%Reproduction(Bi-classistSelection)vtemp=roulette(v,fit);
%Crossoverv=crossover(vtemp,pc);
%Mutation
M=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=[vmfitfit_mean];
it=it+1;
每次迭代中最优目标函数值
每次迭代中目标函数值的平均值
end
%%%%最后结果disp(sprintf('\n'));%
空一行
%显示最优解及最优值
disp(sprintf('Maximumfound[x,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('最优,平均函数值变化趋势');
xlabel('Generations');
ylabel('f(x)');
holdon;
plot(-vmfit,'r');
holdoff;
runtime=toc
结果:
Numberofgenerations:
200
Populationsize:
30
Crossoverprobability:
0.650
Mutationprobability:
0.050
Maximumfound[x,f(x)]:
[-0.0091,0.0099,1.0002]runtime=5.2720
故最优解为x=-0.0091,y=0.0099,z=1.0002
第八步结果分析
图1原始函数图形
图2染色体的最终位置
1.6
17
1.6
1.5
$1.4
1.3
1.2
1.1
1
图3个体适应度的最大值和平均值
2、利用蚁群算法求出下面函数的极小值:
z=2-exp[-(x2+y2)],x,y[-5,+5]
解:
实现代码如下:
%Antmainprogramclearall;closeall;clc;
tic;
Ant=100;
Ger=50;
xmin=-5;xmax=5;ymin=-5;ymax=5;tcl=0.05;
f='-(2-exp(-(x.A2+y.A2)))';%待优化的目标函数
[x,y]=meshgrid(xmin:
tcl:
xmax,ymin:
tcl:
ymax);vxp=x;
vyp=y;
vzp=eval(f);
figure
(1);mesh(vxp,vyp,-vzp);holdon;
%初始化蚂蚁位置
fori=1:
Ant
X(i,1)=(xmin+(xmax-xmin)*rand
(1));
X(i,2)=(ymin+(ymax-ymin)*rand
(1));
%TO----信息素,函数值越大,信息素浓度越大
T0(i)=exp(-(X(i,1)A2+X(i,2)A2))-2;
endplot3(X(:
1),X(:
2),-T0,'k*');holdon;
gridon;
title('蚂蚁的初始分布位置');
xlabel('x');
ylabel('y');
zlabel('f(x,y)');
%开始寻优
P0=0.2;%P0
P=0.8;%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);
end
forj_g_tr=1:
Ant
ifProb(i_ger,j_g_tr) (1)-1)*lamda;temp2=X(j_g_tr,2)+(2*rand (1)-1)*lamda; elsetemp1=X(j_g_tr,1)+(xmax-xmin)*(rand (1)-0.5);temp2=X(j_g_tr,2)+(ymax-ymin)*(rand (1)-0.5); end iftemp1 end iftemp1>xmaxtemp1=xmax; end iftemp2 end iftemp2>ymaxtemp2=ymax; end if -(2-exp(-(temp1.A2+temp2.A2)))>-(2-exp(-(X(j_g_tr,1)A2+X(j_g_tr,2)A 2))) X(j_g_tr,1)=temp1; X(j_g_tr,2)=temp2; end end %信息素更新 fort_t=1: Ant T0(t_t)=(1-P)*T0(t_t)-(2-exp(-(X(t_t,1)A2+X(t_t,2)A2))); end [c_iter,i_iter]=max(T0);maxpoint_iter=[X(i_iter,1),X(i_iter,2)]; max_local(i_ger)=-(2-exp(-(X(i_iter,1).A2+X(i_iter,2)42))); %将每代全局最优解存到max_global矩阵中 ifi_ger>=2 ifmax_local(i_ger)>max_global(i_ger-1)max_global(i_ger)=max_local(i_ger); else max_global(i_ger)=max_global(i_ger-1); end else max_global(i_ger)=max_local(i_ger); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure (2); mesh(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(TO); maxpoint=[X(i_max,1),X(i_max,2)] maxvalue=(2-exp(-(X(i_max,1).A2+X(i_max,2)42))) runtime=toc 结果: maxpoint=0.0033-0.0035 maxvalue=1.0000 runtime=0.9855 =1”■ 图1原始函数图形 =14」 -5-5 图2染色体的最终位置 图3个体适应度的最大值和平均值 3、利用蚁群算法求下面加权有向图中从A到G的最短路解: 分析: 将点1~16是否在路径分别取值为0或1,这样就形成了16位的0,1序列,从而计算这条路径的距离。 将距离作为信息素的一个映射变量,由于这里要求最短路,所以可以使用倒数或者相对距离作为信息素浓度。 这样就可以获得每只蚂蚁的遗传概率,若转移概率大于全局转移因子,则进行全局转移;否则以一定的步长进行转移。 这样就可以逐步向全局最优解靠近。 第一步初始化N只蚂蚁。 实际上救赎N条道路,并计算当前蚂蚁的位置、作图。 第二步初始化运行参数,开始迭代。 第三步在迭代步数范围内,计算转移概率,如果小于全局转移概率就进行小范围的搜索,否则进行大范围的搜索。 第四步更新信息素,记录状态,准备进行下一次迭代。 第五步 实现代码: %n 种群规模 %ger 迭代次数 %pc 交叉概率 %pm 变异概率 %v 初始种群(规模为n) %f 目标函数值 %fit适应度向量 %vx最优适应度值向量 %vmfit平均适应度值向量 functionshortroad_ant_main %Antmainprogram clearall;closeall;clc;%清屏 tic;%计时开始 Ant=50;Ger=100;%运行参数初始化 power=[053100100100100100100100100100100100100100; 1000100136100100100100100100100100100100; 1001000100876100100100100100100100100100; 100100100010010010068100100100100100100100; 100100100100010010035100100100100100100100; 100100100100100010010033100100100100100100; 100100100100100100010084100100100100100100; 100100100100100100100010010022100100100100; 100100100100100100100100010010012100100100; 100100100100100100100100100010033100100100; 100100100100100100100100100100010010035100; 100100100100100100100100100100100010052100; 100100100100100100100100100100100100066100; 10010010010010010010010010010010010010001004; 10010010010010010010010010010010010010010003; 1001001001001001001001001001001001001001001000];[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=0.2;%P0 P=0.8;%P %C=[]; %开始寻优 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);%应该以多大的速率向它靠拢 end forj_g_tr=1: Ant ifProb(i_ger,j_g_tr) %局部转移小动作转移 M=rand(1,PN) temp=v(j_g_tr,: )-2.*(v(j_g_tr,: ).*M)+M; else %全局转移大步伐转移 M=rand(1,PN) temp=v(j_g_tr,: )-2.*(v(j_g_tr,: ).*M)+M; end %始点和终点重新加入。 即不能在移动过程中发生改变。 temp(: 1)=1;temp(: end)=1; ifshort_road_fun(temp,power) ),powe r) %记录 v(j_g_tr,: )=temp; end end %信息素更新,准备下一次迭代fit=short_road_fun(v,power); T0=(1-P)*T0+(max(fit)-fit);%信息素蒸发 [sol,indb]=min(fit); v(1,: )=v(indb,: );%记录本次迭代的状态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); fit=zeros(vm,1);%记录每一条路径的距离 fori=1: vm I=find(v(i,: )==1);%寻找在路径上的点 [Im,In]=size(I); forj=1: In-1fit(i)=fit(i)+power(I(j),I(j+1));%求路径的距离 end end end %% %Functioninit_population functionv=init_population(n1,s1) v=round(rand(n1,s1));%初始化所有的蚂蚁 end 第六步输出结果: Shortroadis1258121516 Mininumis18 ans=1100100100010011 runtime=2.4924 可知: 最优解为: 1100100100010011 最短路为: 1t2~12~15~16 最优值为: 18 运行时间为: 2.4924s 第七步结果分析 图1代表了50只蚂蚁的初始状态的无序分布情况 图3信息素浓度的平均值和最优值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遗传 算法 作业
![提示](https://static.bdocx.com/images/bang_tan.gif)