遗传算法及其改进措施Word下载.docx

上传人:b****5 文档编号:19141742 上传时间:2023-01-04 格式:DOCX 页数:17 大小:2.25MB
下载 相关 举报
遗传算法及其改进措施Word下载.docx_第1页
第1页 / 共17页
遗传算法及其改进措施Word下载.docx_第2页
第2页 / 共17页
遗传算法及其改进措施Word下载.docx_第3页
第3页 / 共17页
遗传算法及其改进措施Word下载.docx_第4页
第4页 / 共17页
遗传算法及其改进措施Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

遗传算法及其改进措施Word下载.docx

《遗传算法及其改进措施Word下载.docx》由会员分享,可在线阅读,更多相关《遗传算法及其改进措施Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

遗传算法及其改进措施Word下载.docx

对于一个需要进行优化的实际问题,一般可按下述步骤构造遗传算法:

第一步:

确定决策变量及各种约束条件,即确定出个体的表现型X和问题的解空间;

第二步:

建立优化模型,即确定出目标函数的类型及数学描述形式或量化方法;

第三步:

确定表示可行解的染色体编码方法,即确定出个体的基因型x及遗传算法的搜索空间;

第四步:

确定解码方法,即确定出由个体基因型x到个体表现型X的对应关系或转换方法;

第五步:

确定个体适应度的量化评价方法,即确定出由目标函数值到个体适应度的转换规则;

第六步:

设计遗传算子,即确定选择运算、交叉运算、变异运算等遗传算子的具体操作方法。

第七步:

确定遗传算法的有关运行参数,即M,G,Pc,Pm等参数。

具体程序流程图见下图所示:

图1遗传算法流程图

四、优化过程

1.第一题

图2Rosenbrock函数图像

图3遗传算法迭代寻优过程

程序运行结果如下:

最优点函数取值

2.第二题

图4:

Rastrigin函数图像

图5:

遗传算法迭代寻优过程

3.第三题

图6Schaffer函数图像

图7遗传算法迭代寻优过程

由仿真结果可知,随着进化过程的进行,群体中适应度较低的一些个体被逐渐淘汰掉,而适应度较高的一些个体会越来越多,并且它们都集中在所求问题的最优点附近,从而搜索到问题的最优解。

五、问题的发现与改进

1.问题一:

局部最优解

从第三题的函数图像中可以看出,该函数有无限多个局部极大值点,只有一个全局最优点

此函数最导致峰周围有一圈脊,上面的取值均为0.990283。

从上面的优化过程可以看出,当随机选定初始种群后,随着迭代次数的增加,种群最终都集中在了这一圈脊上,也就是寻优过程陷入了局部最优点,并没有找到函数的的最优点。

对于遗传算法中的上述问题,我们采用的解决方案如下。

解决方法1:

等值线法

初始种群的选取对函数能不能找到最优点有着重要的影响,本文通过分析函数的等值线缩小初始种群的随机产生范围,从而让种群朝着全局最优点进化。

在Matlab下画出函数的等值线如下图:

图8目标函数的等值线图

从图中可以看出,以中心最优点为圆心,围绕着中心点分布着多条等值线,从中心的红色区域向外到蓝色区域,目标函数值先减小再增加最后又减小,所以本文以中间红色区域到蓝色区域中选取合适的等值线截面,并在该面上随机产生初始种群,这样可以有效防止迭代陷入局部最优解。

改进后的寻优结果:

图9改进后的遗传算法寻优过程

图6中的最终种群进化到了函数一圈“脊”上,但是这只是函数的局部最优点,而从图9可以清楚地看到,种群进化到最后都集中在了中心凸起点的附近,这也是函数的最大值点,可见改进后的遗传算法有效的解决了局部最优点的问题,顺利找到了函数的全局最优解。

解决方法2:

模拟退火算法

模拟退火算法是模仿了自然界退火现象,利用了物理中固体物质的退火过程与一般问题的相似性,从某一初始温度开始,伴随着温度的不断下降,结合概率突跳特性在解空间中随机寻找全局最优解,它能有效的克服寻优陷入局部最小值的优化方法。

其具体算法原理本文不详述,只给出采用模拟退火算法的实现过程如下图所示:

图10模拟推过算法实现过程

相关参数选择为:

初始温度Temperature=30

步长因子StepFactor=0.002

容差Tolerance=1e-7

马可夫链长度MarkovLength=1000

衰减参数DecayScale=0.95

程序运行结果为(程序见附录):

寻优过程如下:

图11模拟退火算法的寻优过程

从上面的寻优结果可以看出,模拟退火算法解决了本例中遗传算法寻优陷入局部最优解的问题,最终找到了SchafferFunction函数的全局唯一最优解

问题二:

寻优速度

基本的遗传算法中产生优良个体的主要手段是同过交叉重组,但这样并不能保证产生新个体的速度,即迭代寻优的速度很慢,考虑到为了保证较高的精度,本文的基因编码分别是十位、十二位与十三位,那么对于二元函数,染色体的长度就是二十、二十四与二十六,因此可以在交叉重组时,将较长的染色体分为若干段,并对每一小段进行两两配对交叉重组,这样相当于每个染色体在一次的迭代过程中参与了几次交叉重组,大大加快了新个体的产生速度。

本文即将染色体分为了两段,进行交叉重组(程序见附录),加快了寻优速度。

六程序附录

1遗传算法主程序

%%%%%遗传算法主程序%%%%%

clear%清除普通变量,不清除全局变量

clf

popsize=80;

%种群大小

chromlength=26;

%字符串长度(个体染色体长度)

pc=0.6;

pm=0.001;

%globalNumv=2;

pop=initpop(popsize,chromlength)

fori=1:

200%200为迭代次数

objvalue=calobjvalue(pop);

%计算函数值

fitvalue=calfitvalue(objvalue);

%计算个体适应度

avefitvalue(i)=sum(fitvalue)/popsize;

newpop=selection(pop,fitvalue);

%选择

newpop=crossover_multiv(newpop,pc);

newpop=mutation(newpop,pm);

[bestindividual,bestfit]=best(pop,fitvalue);

z(i)=max(bestfit)%个体适应度的最大值

n(i)=i;

x(i)=decodechrom(bestindividual,1,chromlength/2)*8/8191-4%将二进制的数转换为十进制数然后归一化到0-10之间

y(i)=decodechrom(bestindividual,(chromlength/2+1),chromlength/2)*8/8191-4

pop=newpop;

end

figure

(1);

i=1:

1:

200;

holdon;

plot(i,avefitvalue)

plot(i,z)

xlabel('

迭代次数'

);

ylabel('

函数值'

legend('

种群平均适应度'

'

种群最大适应度'

figure

(2);

plot3(x,y,z,'

r+'

holdon

x1=-4:

0.1:

4;

x2=-4:

[xx,yy]=meshgrid(x1,x2);

z1=xx.^2+yy.^2;

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

mesh(xx,yy,z)

gridon;

2种群初始化函数

%%%%%%%%%初始化%%%%%%%%%%%%

functionpop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength));

3计算个体适应度函数

%%%计算个体的适应度

functionfitvalue=calfitvalue(objvalue)%这里的objvalue是一个列向量

globalCmin;

Cmin=0;

%display(objvalue);

[px,py]=size(objvalue);

%这里px是种群大小,py=1

fori=1:

px

ifobjvalue(i)+Cmin>

0%计算出的目标函数值小于0则适应度为0

temp=Cmin+objvalue(i);

else

temp=0.0;

fitvalue(i)=temp;

%display(fitvalue);

fitvalue=fitvalue'

;

%将行向量转化为列向量

4选择复制函数

%%%选择复制%%%%%

functionnewpop=selection(pop,fitvalue)

totalfit=sum(fitvalue);

%求所有适应度之和

fitvalue=fitvalue/totalfit%单个个体被选择的概率

fitvalue=cumsum(fitvalue)%累计概率

[px,py]=size(pop);

ms=sort(rand(px,1))

fitin=1;

newin=1;

whilenewin<

=px

if(ms(newin))<

fitvalue(fitin)

newpop(newin,:

)=pop(fitin,:

newin=newin+1;

fitin=fitin+1;

5交叉重组函数

%%%%%%%%%交叉重组%%%%%%%%%

functionnewpop=crossover_multiv(pop,pc)

pop1=ones(px,py);

pop2=pop;

2:

px-1

if(rand<

pc)

cpoint=round(rand*(py-1))%cpoint为交叉点

pop1(i,:

)=[pop2(i,1:

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

py)]

pop1(i+1,:

)=[pop2(i+1,1:

cpoint)pop2(i,cpoint+1:

)=pop2(i,1:

py)%若不交叉则直接复制到下一代

)=pop2(i+1,1:

py)

newpop=pop1;

6变异函数

%%%%%%%%变异函数%%%%

functionnewpop=mutation(pop,pm)

newpop=ones(size(pop));

pm)

mpoint=round(rand*py);

ifmpoint<

=0

mpoint=1;

newpop(i,:

)=pop(i,:

ifany(newpop(i,mpoint))==0

newpop(i,mpoint)=1;

newpop(i,mpoint)=0;

7模拟退火算法

function[BestX,BestY]=SimulateAnnealing1

clear;

clc;

%要求最优值的目标函数,搜索的最大区间

XMAX=4;

YMAX=4;

MarkovLength=1000;

%马可夫链长度

DecayScale=0.95;

%衰减参数

StepFactor=0.002%步长因子

Temperature=30

Tolerance=1e-7;

AcceptPoints=0.0;

%Metropolis过程中总的接收点个数

rnd=rand;

PreX=-XMAX*rand;

PreY=-YMAX*rand;

PreBestX=PreX;

PreBestY=PreY;

BestX=PreX;

BestY=PreY;

%每迭代一次退火一次知道满足迭代条件为止

mm=abs(ObjectFunction(BestX,BestY)-ObjectFunction(PreBestX,PreBestY));

k=0;

whilemm>

Tolerance

Temperature=DecayScale*Temperature

%在当前温度T下迭代马尔科夫链长度的次数

fori=0:

MarkovLength

%第一步:

在此点附近随机选取下一点

p=0;

whilep==0;

NextX=PreX+StepFactor*XMAX*(rand-0.5)

NextY=PreY+StepFactor*YMAX*(rand-0.5)

ifp==(~(NextX>

=-XMAX&

&

NextX<

=XMAX&

NextY>

=-YMAX&

NextY<

=YMAX))%随机点如果在设定范围内则跳出while循环

p=1;

%第二步:

检查是否为全局最优点

if(ObjectFunction(BestX,BestY)>

ObjectFunction(NextX,NextY))

PreBestX=BestX;

PreBestY=BestY;

%先把上一个最优点保留下来

BestX=NextX;

BestY=NextY;

%此为新的最优解

%第三步:

进行Metroplis过程

if(ObjectFunction(PreX,PreY)-ObjectFunction(NextX,NextY)>

0)

%接收此点,即下一个迭代点以新接受的点开始

PreX=NextX;

PreY=NextY;

AccpetPoints=AcceptPoints+1

changer=-1*(ObjectFunction(NextX,NextY)-ObjectFunction(PreX,PreY))/Temperature;

%/还是./的问题

p1=exp(changer);

double(p1);

ifp1>

rand%

AcceptPoints=AcceptPoints+1

k=k+1;

x(k)=BestX;

y(k)=BestY;

z(k)=ObjectFunction(BestX,BestY);

z(k)=-z(k)

mm=abs(ObjectFunction(BestX,BestY)-ObjectFunction(PreBestX,PreBestY));

disp('

最小值在点:

'

BestX

BestY

disp('

最小值为:

ObjectFunction(BestX,BestY)

k

plot(i,z,'

r'

title('

模拟退火寻优过程'

寻优过程'

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

当前位置:首页 > 人文社科 > 哲学历史

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

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