遗传算法优化求解.docx

上传人:b****5 文档编号:6814126 上传时间:2023-01-10 格式:DOCX 页数:19 大小:275.12KB
下载 相关 举报
遗传算法优化求解.docx_第1页
第1页 / 共19页
遗传算法优化求解.docx_第2页
第2页 / 共19页
遗传算法优化求解.docx_第3页
第3页 / 共19页
遗传算法优化求解.docx_第4页
第4页 / 共19页
遗传算法优化求解.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

遗传算法优化求解.docx

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

遗传算法优化求解.docx

遗传算法优化求解

第1题

图1J.D.SchafferFunction图像

图2各代最优值与遗传代数坐标表示图

输出结果:

Q=

0.9980

A=

137

ans=

-0.0352

ans=

0.0274

其中Q为最优值;A为最优值对应的代数;对应的x1=-0.0352,x2=0.0274。

 

第3题

图3GeneralizedRosenbrockValleyFunction图像

图4适应度最优与遗传代数的坐标表示

图5各代函数最小值与遗传代数的坐标表示

输出结果:

z=

3.9059e+003

 

index=

88

 

Q=

0.0053

 

A=

88

 

ans=

0.9870

 

ans=

0.9669

其中:

Z为适应度的最大值,对应在index=88代时产生;

Q为函数最小值,A与index意义相同;

对应坐标x1=0.9870,x2=0.9669

 

 

图6遗传算法流程简图

 

存在问题或缺陷:

没有从根本上深入实现遗传算法的优点,算法内存在具有类似功能的重复模块,例如对对种群适应度的计算,在一次循环(遗传一代)中会进行两次计算,在这一方面有待改进。

算法的另一个缺陷:

由于没有实现对群体适应度平均值的评价,不能从直观上看出有“遗传优化”的效果,即不能看出最优值逐渐变好的趋势。

第1题Matlab程序代码:

clear

clf

popsize=50;%种群大小

chromlength=10;

G=200;%遗传代数(终止代数)

pc=0.6;%交叉概率

pm=0.001;%变异概率

umax=4;

umin=-4;

pop=round(rand(popsize,2*chromlength));%产生初始种群

forj=1:

G

[pxpy]=size(pop);

forr=1:

px%解码

m=pop(r,:

);

y1=0;y2=0;

m1=m(1:

chromlength);

fori=1:

chromlength

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(chromlength+1:

2*chromlength);

fori=1:

chromlength

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

objvalue(r,:

)=0.5-((sin(sqrt(x1.^2+x2.^2))).^2-0.5)/(1+0.001*(x1^2+x2^2)).^2;%计算每个个体函数值

end

globalCmin;

Cmin=0;

[px,py]=size(objvalue);

fori=1:

px%计算适应度

ifobjvalue(i)-Cmin>0

temp=objvalue(i)-Cmin;

else

temp=0.0;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';

totalfit=sum(fitvalue);%该代种群适应度累加

fitprb=fitvalue/totalfit;%每个个体被选择的概率

fitprb=cumsum(fitprb);%例如fitvalue=[1234]cumsum(fitvalue)=[13610]

[px,py]=size(pop);

%复制部分:

ms=sort(rand(px,1));%从小到大排列

fitin=1;

newin=1;

whilenewin<=px%复制

if(ms(newin))

pop(newin)=pop(fitin);

newin=newin+1;

else

fitin=fitin+1;

end

end

%交叉部分

[px,py]=size(pop);

fori=1:

2:

px-1%交叉

if(rand

cpoint=round(rand*py);

if(cpoint==0)

cpoint=round(rand*py);

end

newpop(i,:

)=[pop(i,1:

cpoint),pop(i+1,cpoint+1:

py)];

newpop(i+1,:

)=[pop(i+1,1:

cpoint),pop(i,cpoint+1:

py)];

else

newpop(i,:

)=pop(i,:

);

newpop(i+1,:

)=pop(i+1,:

);

end

end

pop=newpop;

%变异部分

[px,py]=size(pop);%变异

fori=1:

px

if(rand

mpoint=round(rand*20);

ifmpoint==0

mpoint=round(rand*20);

end

ifpop(i,mpoint)==0

pop(i,mpoint)=1;

else

pop(i,mpoint)=0;

end

end

newnewpop(i,:

)=pop(i,:

);

end

%计算最大适应值函数值

pop=newnewpop;

[pxpy]=size(pop);

forr=1:

px

m=pop(r,:

);

y1=0;y2=0;

m1=m(1:

chromlength);

fori=1:

chromlength

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(chromlength+1:

2*chromlength);

fori=1:

chromlength

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

objvalue(r,:

)=0.5-((sin(sqrt(x1.^2+x2.^2))).^2-0.5)/(1+0.001*(x1^2+x2^2)).^2;

end

globalCmin;

Cmin=0;

[px,py]=size(objvalue);

fori=1:

px

ifobjvalue(i)-Cmin>0

temp=objvalue(i)-Cmin;

else

temp=0.0;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';

[px,py]=size(pop);

bestindividual=pop(1,:

);

bestfit=fitvalue

(1);

fori=2:

px-1

iffitvalue(i)>bestfit

bestindividual=pop(i,:

);

bestfit=fitvalue(i);

end

end

w(j)=bestfit;%确定该代最佳适应值

bestpop=bestindividual;%确定该代最佳个体

[qx,qy]=size(bestindividual);%解码计算相应的最佳函数值

forc=1:

1:

qx

m=bestindividual(c,:

);

y1=0;y2=0;

m1=m(1:

1:

qy/2);

fori=1:

1:

qy/2

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(qy/2+1:

1:

qy);

fori=1:

1:

qy/2

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

end

resultmax(j)=0.5-((sin(sqrt(x1.^2+x2.^2))).^2-0.5)/(1+0.001*(x1^2+x2^2)).^2;

bestx1(j)=x1;

bestx2(j)=x2;

pop=newnewpop;

end

figure

(1)

x=[1:

j];

plot(x,w,'--r');

holdon;

figure

(2)

x=linspace(-4,4,100);

y=linspace(-4,4,100);

[xx,yy]=meshgrid(x,y);

zz=0.5-((sin(sqrt(xx.^2+yy.^2))).^2-0.5)./(1+0.001.*(xx^2+yy^2)).^2;

mesh(xx,yy,zz);

[zindex]=max(w)%所有代中最大适应值及其位置

[QA]=max(resultmax)%所有代中最大函数值及其位置

bestx1(A)%对应x1

bestx2(A)%对应x2

 

第3题Matlab程序代码:

clear

clf

popsize=50;%种群大小

chromlength=10;%基因长度

G=200;

pc=0.6;%交叉概率

pm=0.001;%变异概率

umax=2.048;

umin=-2.048;

pop=round(rand(popsize,2*chromlength));%产生初始种群

forj=1:

G%G为遗传代数

[pxpy]=size(pop);

forr=1:

px%解码及计算函数值

m=pop(r,:

);

y1=0;y2=0;

m1=m(1:

chromlength);

fori=1:

chromlength

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(chromlength+1:

2*chromlength);

fori=1:

chromlength

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

objvalue(r,:

)=100*(x2-x1.^2).^2+(1-x1).^2;

end

globalCmax;

Cmax=3905.9262;

[px,py]=size(objvalue);

fori=1:

px%适应度计算

ifCmax-objvalue(i)>0

temp=Cmax-objvalue(i);

else

temp=0.0;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';

totalfit=sum(fitvalue);

fitprb=fitvalue/totalfit;

fitprb=cumsum(fitprb);%例如fitvalue=[1234]cumsum(fitvalue)=[13610]

复制部分

[px,py]=size(pop);

ms=sort(rand(px,1));%´ÓСµ½´óÅÅÁÐ

fitin=1;

newin=1;

whilenewin<=px%¸´ÖÆ(Ñ¡Ôñ)

if(ms(newin))

pop(newin)=pop(fitin);

newin=newin+1;

else

fitin=fitin+1;

end

end

交叉部分

[px,py]=size(pop);

fori=1:

2:

px-1%½»²æ

if(rand

cpoint=round(rand*py);

if(cpoint==0)

cpoint=round(rand*py);

end

newpop(i,:

)=[pop(i,1:

cpoint),pop(i+1,cpoint+1:

py)];

newpop(i+1,:

)=[pop(i+1,1:

cpoint),pop(i,cpoint+1:

py)];

else

newpop(i,:

)=pop(i,:

);

newpop(i+1,:

)=pop(i+1,:

);

end

end

pop=newpop;

%变异部分

[px,py]=size(pop);%±äÒì

fori=1:

px

if(rand

mpoint=round(rand*20);

ifmpoint==0

mpoint=round(rand*20);

end

ifpop(i,mpoint)==0

pop(i,mpoint)=1;

else

pop(i,mpoint)=0;

end

end

newnewpop(i,:

)=pop(i,:

);

end

pop=newnewpop;

%计算函数值

[pxpy]=size(pop);%Çó³öȺÌåÖÐÊÊÓ¦Öµ×î´óµÄ¸öÌå¼°ÆäÊÊÓ¦Öµ

forr=1:

px%½âÂ룬¼ÆËãÄ¿±êº¯Êý

m=pop(r,:

);

y1=0;y2=0;

m1=m(1:

chromlength);

fori=1:

chromlength

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(chromlength+1:

2*chromlength);

fori=1:

chromlength

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

objvalue(r,:

)=100*(x2-x1.^2).^2+(1-x1).^2;

end

%寻找该代最优适应度及对应函数值对应位置

globalCmax;

Cmax=3905.9262;

[px,py]=size(objvalue);

fori=1:

px%¼ÆËãȺÌåÖÐÿ¸ö¸öÌåµÄÊÊÓ¦¶È

ifCmax-objvalue(i)>0

temp=Cmax-objvalue(i);

else

temp=0.0;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';

[px,py]=size(pop);

bestindividual=pop(1,:

);

bestfit=fitvalue

(1);

fori=2:

px-1

iffitvalue(i)>bestfit

bestindividual=pop(i,:

);

bestfit=fitvalue(i);

end

end

w(j)=bestfit;

bestpop=bestindividual;%È·¶¨¸Ã´ú×îÓÅֵλÖÃ

[qx,qy]=size(bestindividual);

forc=1:

1:

qx

m=bestindividual(c,:

);

y1=0;y2=0;

m1=m(1:

1:

qy/2);

fori=1:

1:

qy/2

y1=y1+m1(i)*2^(i-1);

end

x1=(umax-umin)*y1/1023+umin;

m2=m(qy/2+1:

1:

qy);

fori=1:

1:

qy/2

y2=y2+m2(i)*2^(i-1);

end

x2=(umax-umin)*y2/1023+umin;

end

resultmin(j)=100*(x2-x1.^2).^2+(1-x1).^2;

bestx1(j)=x1;

bestx2(j)=x2;

pop=newnewpop;

end

figure

(1)

x=[1:

j];

plot(x,w,'--r');

xlabel('ÒÅ´«µÄ´úÊý')

ylabel('¸÷´úÊÊÓ¦¶È×îÓÅÖµ')

%holdon;

figure

(2)

x=[1:

j];

plot(x,resultmin,'--r');

xlabel('ÒÅ´«µÄ´úÊý')

ylabel('¸÷´úº¯Êý×îСֵ')

%holdon;

figure(3)

x=linspace(-2.048,2.048,100);

y=linspace(-2.048,2.048,100);

[xx,yy]=meshgrid(x,y);

zz=100*(yy-xx.^2).^2+(1-xx).^2;

mesh(xx,yy,zz);

[zindex]=max(w)%寻找适应度最优及代数

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

当前位置:首页 > 法律文书 > 调解书

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

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