遗传算法作业.docx

上传人:b****6 文档编号:8266362 上传时间:2023-01-30 格式:DOCX 页数:15 大小:270.15KB
下载 相关 举报
遗传算法作业.docx_第1页
第1页 / 共15页
遗传算法作业.docx_第2页
第2页 / 共15页
遗传算法作业.docx_第3页
第3页 / 共15页
遗传算法作业.docx_第4页
第4页 / 共15页
遗传算法作业.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

遗传算法作业.docx

《遗传算法作业.docx》由会员分享,可在线阅读,更多相关《遗传算法作业.docx(15页珍藏版)》请在冰豆网上搜索。

遗传算法作业.docx

遗传算法作业

遗传、蚁群算法作业

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信息素浓度的平均值和最优值

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1