- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遗传算法实验心得
1.定义种群和个体 定义种群为S,种群数N=50,其中x,y是染色体中的两个基因组。 2.算法设计 确定编码设计 由于原函数的变量取值包含负数,不方便进行编码,所以将原函数的变量进行转换,从 [-1010]转换成[020],相应的,函数也要进行变换。 根据要求分辨率为,即编码范围至少为[0XX00],设编码位数为n+1,则20/(2^(n+1)-1)=s中最小的个体并选择复制。 4)进入N次2、3操作,得到N个个体,形成新一代种群S1。 交叉 参加交叉运算的染色体个数占全体染色体总数的比例,记为Pc,根据要求本题中选为20/50,28/50,36/50,44/50. 按交叉率所决定参加交叉的染色体个数C,从S1中随机算则C配对进行交叉操作,并用产生的新染色体代替原染色体,得到新种群S2。 其中值得注意的是,代码编写过程中设置了交叉掩码,由于题目中设定交叉位数为个体位数的一半,所以设计代码如下: cover=[111];%生成交叉掩码mask(1:18)=cover(randperm(18));%打乱 mask(19:36)=cover(randperm(18)); 掩码中的片段表明了哪个父体向字体提供变量值,利用交叉操作我们有可能由父代个体 在子代组合成具有更高适应度的个体。 变异 发生变异的基因位数所占全体染色体的基因总位数的比例,即为Pm,根据要求本题中选为1/50,5/50,10/50,15/50. 按变异率所决定的变异次数m,从交叉所得的种群中随机确定m个染色体进行变异操作,用产生的新染色体代替原染色体,得到新种群S3。 最优个体的保存 需要将最高适应度和其对应的最优个体进行存储。 3.结果分析 四组结果比较,如下图所示,可以发现,交叉率和变异率越高越容易达到最优,但是达到最优的速度不定,这应该与没有进行最有个体的保护有关,所以曲线也较为曲折。 得到的最高适应度为,而且由于每次初始化的种群不同,所以交叉率与变异率的对比也有一定的变化因素在。 4.作业心得 附代码: %函数功能是实现群体的初始化,其中N为群体大小,length是染色体的长度,即二进制的位数 %本次程序中,位数取18 functiongroup=init(N,length) group=round(rand(N,length));%rand随机生成行数为N,列数为length,单元值为{0,1}的随机数矩阵 %round对矩阵中的每个单元的值进行四舍五入,进行二值化处理,每一列即为随机产生的18位染色体编码 %将二进制数转化为十进制数 %产生[2^n2^(n-1)...1]的行向量,与对应二进制列相乘,然后求和 functiongroupdec=decodebinary(group) [gx,gy]=size(group);%求group的行列数 fori=1:gy temp(:,i)=2.^(gy-i).*group(:,i); end groupdec=sum(temp,2);%对相乘后的矩阵进行每行求和 %将二进制编码转化为十进制数,其中参数point表示待解二进制码串的起始位置 %因为对于本题来说,有两个变量,用36来表示,每个变量18,那么第一个变量从1开始,第二个变量就从19开始 functiongroupdec=decodestr(group,point,length) temp=group(:,point:point+length-1); groupdec=decodebinary(temp);%调用二进制转十进制函数 %选择复制 function[newgroup1]=selection(group,fitvalue) fsum=sum(fitvalue);%求适应度之和 fitvalue=fitvalue/fsum;%求单个个体被选中的概率 fitvalue=cumsum(fitvalue);%累积概率 [gx,gy]=size(group); s=sort(unifrnd(0,1,1,gx));%获取随机数组,并从小到大排列,方便适应度选择 fitin=1; newin=1; whilenewin0 temp=objvalue(i); else temp=;%目标函数值为负数则将该适应度赋为0 end fitvalue(i)=temp; end %求出群体中适应度最高的值 function[bestindividual,bestfit]=best(group,fitva
文档评论(0)