遗传算法的经典解析(2008-08-17102247)

上传人:自*** 文档编号:80693246 上传时间:2019-02-19 格式:DOC 页数:7 大小:77.50KB
返回 下载 相关 举报
遗传算法的经典解析(2008-08-17102247)_第1页
第1页 / 共7页
遗传算法的经典解析(2008-08-17102247)_第2页
第2页 / 共7页
遗传算法的经典解析(2008-08-17102247)_第3页
第3页 / 共7页
遗传算法的经典解析(2008-08-17102247)_第4页
第4页 / 共7页
遗传算法的经典解析(2008-08-17102247)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《遗传算法的经典解析(2008-08-17102247)》由会员分享,可在线阅读,更多相关《遗传算法的经典解析(2008-08-17102247)(7页珍藏版)》请在金锄头文库上搜索。

1、遗传算法的经典解析(2008-08-17 10:22:47)标签:遗传算法杂谈 分类:科学研究遗传算法的经典解析-看了以后就会用ga了zhanhuichong 发表于: 2008-6-14 10:42 来源: Matlab中文学习站下面是英国sheffield大学的ga工具箱的经典编写程序示例,大家可以根据它,对相关数据修改就可以解决一切ga问题了至于matlab自带的ga工具箱,使用相当简单,真正工程应用没有sheffield大学的ga工具箱应用广泛,这里就不多累赘了记住使用时将下面的大写全部改为小写Nvar=20;%变量个数Nind=100;%种群大小Subpop=10;%子种群数量Max

2、gen=500;%最大遗传代数Miggen=20;%每隔20代发生迁移Range=0;200;%变量范围Ggap=0.8;%代沟率Xovr=1;%交叉率Mutr=1/xovr;%变异率Insr=0.9;%插入率Migr=0.2;%迁移率Selfun=sus;%选择函数Xovfun=recdis;%重组函数Mutfun=mutbga;%变异函数Gen=0;Trace=zeros(maxgen,2);%遗传算法性能跟踪FieldDD=rep(range,1,nvar);%译码矩阵Chorm=crtrp(nind,fieldDD);%创建初始种群Objv=objfun(chorm);%计算目标函数W

3、hile gen<maxgenFitv=ranking(objv,2,1,subpop);%分配适度值Selch=selet(selfun,chorn,fitv,ggap,subpop);%选择recch=recombin(xovfun,selch,xovr,subpop);%重组mutch=mutate(mutfun,recch,fieldDD,mutr,subpop);%变异objvoff=objfun(mutch);%计算目标函数值chorm,objv=reins(chorm,mutch,subpop,1 indr,objv,objvoff);%替代Gen=gen+1;trace(

4、gen,1) =min(objv);Trace(gen,2)=mean(objv);%在子种群中迁移个体If(rem(gen,miggen)=0)chorm,objv=migrate(chor,subpop,migr,1,1,objv);EndEndyy,ii=min(objv);%输出最有解及序号Figure(1)Plot(chorm(ii,-ro);Figure(2);%遗传算法性能跟踪图Plot(trace(:,1);Hold onPlot(trace(:,2),-.r);Legend(解的变化,种群均值的变化);Xlabel(迭代次数); 本帖最后由 zhanhuichong 于 20

5、08-6-14 11:08 编辑 未命名.bmp最新回复zhanhuichong at 2008-6-15 12:18:36 因为每个个体对应一组染色体,故经常叫种群中的个体为染色体而每个染色体有好多基因组成,每个基因就是对应为题的每一个变量1.函数bs2rvphen=bs2rv(chrom,fieldD)根据译码矩阵fieldD将二进制串矩阵chorm转换成实值向量,返回矩阵包含对应的种群表现型。fieldD=len;lb;ub;code;scale;lbin;ubinlen:指明chorm中每个变量(基因)的二进制编码的长度,满足sum(len)=size(chorm,2)lb和ub:分别

6、指明每个变量使用的上下边界code:指明每个变量的编码方式,1为标准二进制编码,0为格雷编码scale:指明每个变量的是否使用对数或算术刻度,1是对数刻度,0为算术刻度lbin和ubin:指明表示范围总是否包含每个边界,1表示包含,0不包含比如:fieldD=5697 %len 0-5-19 %lb 10 0 10 20 %ub 0111 %code 0101 %scale 1110 %lbin 0100 %ubin表示chrom的每个个体(染色体)的编码规则为:共有4个变量(即每个染色体有4个基因),第1个基因体是使用5位标准二进制编码,上下边界为0 10,只包含上边界的算术刻度第2个基因体

7、是使用6位格雷二进制编码,上下边界为-5 0,包含上下边界的对数刻度2.crtbasebasevec=crtbase(lind,base)产生向量的元素对应染色体每个基因的基数(每个变量的范围)lind:每个染色体的基因(变量)个数,sum(lind)=变量个数,且length(lind)=length(base)base:对应每个基因的基数比如:basevec=crtbase(2 3 4 2,10 20 15 8)结果为:basevec=10 10 20 20 20 15 15 15 15 8 8上面表示创建有2+3+4+2=11个基因(变量)的染色体(个体)前两的变量的取值为0-9,接着三

8、个0-19,还有四个0-14,最后两个0-7由上面可以看出basevec其实可使用matlab的其它简单命令创建,因此很少用到它,一般使用rep。再强调一下,简单一点说basevec其实就是每个变量的基数(取值范围)3.crtbpnewchrom,newlind,newbasevec=crtbp(nind,lind,basevec)创建离散随机初始种群,经常和crtbase一起使用basevec:其实就是上面创建的basevec向量nind:种群中染色体(个体)的数量lind:变量的个数,即lind=length(basevec)注意在basevec给出时,lind可以省略,但要是baseve

9、c没有给出,则lind必须给,此时默认创建取值为0-1的种群比如:basevec=crtbase(3,2,8,5)chrom1=crtbp(3,5)%创建一个有3个个体,5个变量的初始种群chrom2=crtbp(4,5,basevec)%4*5的种群,等效chrom2=crtbp(4, basevec)结果为:basevec=8 8 8 5 5chrom1=0 1 0 0 01 1 0 1 01 0 1 1 0chrom2=6 5 7 0 47 1 3 4 23 7 1 0 46 6 4 4 3-前三个函数一般只是在离散编码中使用-4.crtrpchrom=crtrp(nind,fieldD

10、R)创建由任意个体组成的实值随机原始种群nind:种群中个体数量fieldDR:是一个2*nvar的二维矩阵,表示每个变量的取值上下限比如:创建一个含有3个个体,4个变量的随机种群fieldDR=-100-50-30-20 100 50 30 20;chrom=crtrp(3,fieldDR)chrom=40.23 -17.17 28.0015.38 82.26 13.25 18.52 -9.09 -90.20 -13.25 7.89 9.255.migratechrom,objv=migrate(chrom,subpop,migopt,objv)完成当前种群的子种群间的迁移,并返回迁移后的种

11、群subpop:子种群的数量migopt:migopt(1)个体迁移率,默认0.2migopt(2)迁移方式,0为均匀迁移,1为适应度的迁移,默认0migopt(3)迁移种群结构,0为完全网状,1为临近结构,2为环状,默认0objv:为目标函数值列向量,当migopt(2)=1是必须给出6.mutatenewchorm=mutate(mutfun,oldchrom,fieldDR,mutopt,sunbpop)执行种群变异mutfun:变异函数fieldDR:变量的取值范围,实值型时为2*nvar的二维矩阵,离散型时为1*nvar向量mutopt:mutopt(1)变异率,实值型默认1/nva

12、r,离散型默认0.7/lindmutopt(2)压缩变异的范围,取值范围为0 1,默认1(不可压缩),注意当为离散型时不需要给出7.rankingfinnv=ranking(objv,rfun,subpop)按照个体的目标值objv由小到大的顺序对它们进行排序,并返回一包含个体适应度值的fitnv的列向量rfun:rfun(2)指定排序方法,0为线性,1为非线性,默认0rfun(1)指定压差,当rfun(2)=0时,取值为1 2,默认为2,当rfun(2)=1时,取值为1 length(objv)-2 另外还可以length(objv)=length(rfun),此时它则包含对每一行的适应度值

13、计算至于scaling一般使用很少,这里就不介绍了8.recombinnewchrom=recombine(recfun,oldchrom,recopt,subpop)执行基因重组recfun:变异函数recopt:重组交叉率9.reinsnewchrom,newobjvch=reins(chrom,selch,subpop,insopt,objvch,objvsel)完成插入子代到当前种群,用子代代替父代并返回结构种群,本函数属于选择函数,但是为了恢复种群数量,必须要有,它没有与select重复oldchrom:父代种群selch:子代种群insopt:insopt(1)指明选择方法,0为均匀选择,1为基于适应度的选择insopt(2)重插入的比率,在0 1,默认1objvch:是chrom的目标值(基于适应度的选择,该参数必须有)objvsel:是selch中个体目标值(基于适应度的选择,该参数必须有)10.selectselch=select(selfun,chrom,fitnv,ggap,subpop)从种群chrom中选择优良个体selfun:选择函数fitnv:列向量,chrom的个体适应度值ggap:代沟率,默认1.0 本帖最后由 zhanhuicho

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号