进化算法程序[精选].doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进化算法程序[精选]

进化算法作业 1 全局优化问题 (1) , 此问题的全局最优值。 一.程序 (1)主函数: main.m clear all; clc; popsize=60; %种群规模 chromlength=34; %二进制编码,编码精度为0.0001,所以串长l为17 pc=0.7; %杂交概率 pm=0.1; %变异概率 t=0; %进化代数初始为0 pop=initpop(popsize,chromlength); %随机产生初始种群 while t500 %迭代次数 t=t+1; [objvalue]=calobjvalue(pop); %计算目标函数值 fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 [bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应度最大的个体及其适应度值 x11=decodechrom(bestindividual,1,14); %将二进制数转换为十进制数 x22=decodechrom(bestindividual,15,14); x1(t)=-5+10*x11/(pow2(14)-1); %将二值域中的数转换为变量域的数 x2(t)=-5+10*x22/(pow2(14)-1); y(t)=4*x1(t)^2-2.1*x1(t)^4+1/3*x1(t)^6+x1(t)*x2(t)-4*x2(t)^2+4*x2(t)^4; %计算最佳个体的目标函数值 [newpop1]=selection(pop,fitvalue); %选择算子 [newpop2]=crossover(newpop1,pc); %交叉算子 [newpop3]=mutation(newpop2,pm); %变异算子 objvalue1=calobjvalue(newpop3(1,:)); if objvalue1y(t) newpop3(1,:)=bestindividual; %保留最佳个体 end pop=newpop3; %产生新种群 end y; %每代的最佳目标函数值 x1; %每代的最佳目标函数值对应的自变量 x2; [gy,k]=min(y) %gy为全局最优值,k为最优值对应的进化代数 gx1=x1(k) %全局最优值对应的自变量 gx2=x2(k) plot(y) %最优值收敛曲线 title(收敛性曲线); xlabel(进化代数); ylabel(函数值); axis([0,500,-1.5,1.5]); (2)初始种群:initpop.m function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); %rand随机产生[0,1]区间的一个小数,rand四舍五入取整 end (3)计算目标函数值::calobjvalue.m function [objvalue] =calobjvalue( pop ) temp1=decodechrom(pop,1,14); temp2=decodechrom(pop,15,14); x1=-5+(10*temp1)/(pow2(14)-1); %将二值域中的数转化为变量域中的数 x2=-5+(10*temp2)/(pow2(14)-1); objvalue=4*x1.^2-2.1*x1.^4+1/3*x1.^6+x1.*x2-4*x2.^2+4*x2.^4; %计算目标函数 end a.二进制转换为十进制:decodechrom.m function temp=decodechrom(pop,spoint,length ) pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint为起始点,length为一个变量的长度 temp=decodebinary(pop1); end b.求二进制串对应的十进制数:decodebinary.m function temp =decodebinary( pop) [px,py]=size(pop); %求pop行数和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end temp=sum

文档评论(0)

jsntrgzxy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档