引入精英主义的遗传算法MATLAB程序实现_第1页
引入精英主义的遗传算法MATLAB程序实现_第2页
引入精英主义的遗传算法MATLAB程序实现_第3页
引入精英主义的遗传算法MATLAB程序实现_第4页
引入精英主义的遗传算法MATLAB程序实现_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人工智能作业题目:引入精英主义的遗传算法 MATLAB程序实现姓名:林俊杰学 号: 130120052学院: 电气工程与自动化学院专业:控制理论与控制工程年级:2013级指导教师:李玉蓉2014年 1月8日一、基本遗传算法遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法, 它借鉴了达尔文的进化论和孟德尔的遗传学说。基本遗传算法的步骤有:初 始群体的产生个体编码适应度汁算选择运算交叉运算变异运二、引入精英主义的基本遗传算法精英主义(Elitist Strategy)是基本遗传算法的一种优化。为了防止进化过程中 产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到

2、 下一代中。引入精英主义的遗传算法具有收敛速度快、最优解寻求稳定、有较好的稳定性。可通过引入精英个数的比例来控制整体的收敛速度,个数越多收敛越 快,但过多的精英个数可能会造成算法的局部收敛,反而得到不良结果。三、基本遗传算法程序运行结果与说明测试程序采用了 Rose nbrock函数,该函数有两个局部极大点f (2.048, 2.048)3897.7342和 f ( 2.048, 2.048)3905.926,其中后者为全局最大点。如图1、2、3所示为基本遗传算法在运行过程中,对最优解的跟踪曲线。可以看出未改进的基本遗传算法最优解跟踪曲线呈现出震荡,不稳定。甚至在整个寻求过程都无法找到最后的最

3、优解,这样的遗传算法性能根本无法满足工程及 应用要求。如图4所示基本遗传算法在某一代找到了最优解后, 该最优解由于在 轮盘选择中未被选中,所以很快的算法失去了该最有解,致使整个求解过程震荡,无结果。4awFit E*14nM4 fMN 学IM即更愕.图1图2图3图4三、引入精英主义的遗传算法程序运行结果与说明引入精英主义后,很好的解决了该问题。如图 5、6 7、8所示最优解寻求 曲线快速的收敛到最优解,整个曲线平整无波动。具有较好的收敛速度、稳定性。 明显克服了基本遗传算法的震荡不稳定。 而且在数次运行过程中找出最优解的概 率明显增加,但仍然存在不能求的最优解的情况。出现不能求解情况是待改进的

4、 地方。图5图6图7图8四、总结通过遗传算法程序的编写,熟悉了遗传算法的工作原理。通过引入精英主义 对基本遗传算法进行了改进, 解决了基本遗传算法的不稳定性、 波动性、 收敛速 度慢的缺点。但在最优解求解的成功率上改进不是很大,有待将来改进。五、程序附录clc;clear;popsize=20; % 群体大小chromlength=20; % 单个个体长度pc=0.8; % 交叉概率pm=0.08; % 变异概率global tracenum; % 全局变量用于每代中的最大值跟踪tracenum=1;global maxtrace;pop=initpop(popsize,chromlength

5、); % 随机产生初始群体for i=1:600 %600 为进化代数objvalue=calobjvalue(pop); % 计算目标函数fitvalue=calfitvalue(objvalue); % 计算群体中每个个体的适应度 newpop=selection(pop,fitvalue); % 选择复制%objvaluepop=newpop; % 种群更新newpop=crossover(pop,pc); % 交叉pop=newpop;% 种群更新newpop=mutation(pop,pm); % 变异pop=newpop;% 种群更新endobjvalue=calobjvalue(

6、pop); % 计算目标函数fitvalue=calfitvalue(objvalue); % 计算群体中每个个体的适应度 newpop=selection(pop,fitvalue); % 复制pop=newpop;% 种群更新*objvalue=calobjvalue(pop)% 计算目标函数x = 1:601;% 绘制最大值跟踪图figure(1);subplot(1,1,1);plot(x,maxtrace,r-o);%title( 加入精英主义的遗传算法最优解跟踪图);title( 基本遗传算法最优解跟踪图 );*function bestindividual=best(pop,fi

7、tvalue)% 求出适应值最大的个体 px,py=size(pop);% 计算种群矩阵维数 bestindividual=pop(1,:);% 定义最大适应度个体bestfit=fitvalue(1);% 定义最大适应度 for i=2:px% 循环找出最大适应度个体 if fitvalue(i)bestfit bestindividual=pop(i,:);bestfit=fitvalue(i);endendglobal maxtrace;% 全局变量声明 global tracenum;% 全局变量声明 maxtrace(tracenum)=bestfit;% 用于最大适应度跟踪 tra

8、cenum=tracenum+1;*function fitvalue=calfitvalue(objvalue)% 计算个体的适应度 global Cmin;% 全局变量声明Cmin=0;% 适应度最小值 px,py=size(objvalue);for i=1:pxif objvalue(i)+Cmin0% 如果函数值小于 0,则适应度为 0.否则为函数值 temp=Cmin+objvalue(i);else temp=0.0; end fitvalue(i)=temp; end fitvalue=fitvalue;*function objvalue=calobjvalue(pop)%

9、函数值计算 temp1=decodechrom(pop,1,10); % 将 pop 每行 1 到 10 的元素转化成十进制数 temp2=decodechrom(pop,11,10);% 将 pop 每行 11 到 20 的元素转化成十进制数 x1=temp1.*(4.096/1023)-2.048;% 将数据转换为原范围数据 x2=temp2.*(4.096/1023)-2.048;% 将数据转换为原范围数据 objvalue=100.*(x1.*x1-x2).*(x1.*x1-x2)+(1-x1).*(1-x1);% 计算函数值*function newpop=crossover(pop

10、,pc)% 交叉过程 px,py=size(pop);% 求得种群矩阵维数 newpop=ones(size(pop);x=1:px;% 定义 x 变量存放交叉顺序 x=x(randperm(numel(x);% 随机产生交叉顺序 for i=1:2:px-1% 种群循环交叉 if(rand 2)% 进行基因互换 newpop(x(i),:)=pop(x(i),1:(cpoint-1),pop(x(i+1),cpoint:py); newpop(x(i+1),:)=pop(x(i+1),1:(cpoint-1),pop(x(i),cpoint:py);elsenewpop(x(i),:)=po

11、p(x(i),:); newpop(x(i+1),:)=pop(x(i+1),:); endelse%不满足交叉概率,直接复制到下一代newpop(x(i),:)=pop(x(i),:); newpop(x(i+1),:)=pop(x(i+1),:);endend*function pop2=decodebinary(pop)% 将二进制转换为十进制 px,py=size(pop); % 求 pop 行和列数for i=1:pypop1(:,i)=24(py-i).*pop(:,i);endpop2=sum(pop1,2); % 求 pop1 的每行之和*function pop2=decod

12、echrom(pop,spoint,length)% 将个体中的不同参数分离,并转换为十进制 pop1=pop(:,spoint:spoint+length-1);pop2=decodebinary(pop1); *function pop=initpop(popsize,chromlength)% 随机产生种群 pop=round(rand(popsize,chromlength);*function newpop=mutation(pop,pm)% 变异过程px,py=size(pop);% 计算种群矩阵维数 newpop=ones(size(pop);for i=1:px% 循环对每个个

13、体变异 if(randpm)% 判断是否大于变异概率,否则不参与变异 num=round(rand*py);% 随机产生变异基因个数 if num=0num=1;endfor y=1:nummpoint=round(rand*py);% 随机产生变异位置if mpoint=0mpoint=1;endnewpop(i,:)=pop(i,:);if any(newpop(i,mpoint)=0% 进行基因变异 newpop(i,mpoint)=1;elsenewpop(i,mpoint)=0;endpop(i,:)=newpop(i,:);end else newpop(i,:)=pop(i,:);end end*function newpop=selection(pop,fitvalue)% 选择复制过程 totalfit=sum(fitvalue); % 求适应值之和 b=best(pop,fitvalue);% 求出适应度最大个体 fitvalue=fitvalue/totalfit; % 单个个体被选择的概率 fitvalue=cumsum(fitvalue);% 采用轮盘选择法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论