遗传算法(二):算法的实现

技术凯 2020-12-27 00:00:00 2400

  上一篇文章我们介绍了遗传算法的基本原理,本节我们介绍如何在matlab中实现遗传算法。

三、实验环境

Matlab R2017b:

四、问题分析
4.1设定参数


  其中突变概率指的是某个个体的染色体发生突变的概率。因为实际中并不可能每一个个体都会发生变异,而是存在一定的概率,因此我们在这里定义每一个个体突变发生的概率为0.05。
  同理,交叉概率指的就是某个个体与另一个个体发生染色体交叉的概率。
  迭代次数指的是整个种群迭代2000多次。

  其中的chrom_range指的是每个节点值的区间。在我们的这个模型中,x∈[0,10],y∈[0,10]x∈[0,10],y∈[0,10]。第一行放的是两个变量的区间下限,第二行放的是区间上限。
  fitness_ave用来存放每一代的平均适应度,主要是用来最后画图,观察种群在每一次迭代中适应度的变化情况。fitness_best同理。
  chrom_best用来存放最优适应度对应的最优染色体与适应度,可以回想一下上一章染色体变异中需要最优适应度,优胜劣汰中需要最优染色体,这个矩阵作用就是如此。

4.2初始化种群


种群的初始化过程

  Initialize函数用于初始化染色体。具体操作就是用一个for循环对每个个体的染色体进行随机赋值,并利用chrom_range将其限定在变量规定的区间之内。

  CalFitness函数则是计算chrom内每个个体的适应度,并将其保存在fitness中。由于该函数由目标函数变换得到,描述所得到的染色体的优劣所以我们不妨设直接使用目标函数作为适应度函数评判所得到的染色体。

  FindBest函数寻找出当前种群中的最优染色体,并将其保存在chrom_best。

  CalAveFitness函数用于计算当前种群中的平均适应度。

4.3迭代开始

  初始化完以后就开始迭代,为了保证迭代次数和iter一致,这里我们就直接令t从2开始迭代。

  再一次迭代过程中,一个种群执行操作顺序为:染色体变异,染色体交叉,计算适应度,寻找最优染色体,替换当前存储的最优染色体,优胜劣汰。

  需要注意的是这里替换当前最优染色体。因为我们将这个种群的个个个体的染色体重新变异、交叉过了,所以最优染色体也会变化。但是这一代的最优染色体不一定比上一次迭代的最优染色体好,所以需要判定是否将最优染色体这个位置给换掉。

  其中MutChrom函数用来对种群进行染色体变异操作。这里面的操作比较多,主要可以分为三步:

1.判断某节点是否变异;
2.判断变异是增加还是减少;
3.判断变异后的值是否越界。

  越界函数IfOut函数我们看它是左越界还是右越界,如果是左越界,则 让节点值等于区间下限;如果是右越界,则让节点值等于区间上限。

4.4遗传操作

  AcrChrom函数是染色体交叉函数。逻辑相较染色体变异来说比较简单,大致可以分为以下几点:

1.判断该节点是否交叉;
2.随机寻找一个与其交叉的节点;
3.对两个节点进行交叉。


  ReplaceWorse函数则是优胜劣汰这个过程,将种群中的最劣染色体替换掉。这里是直接用最优染色体替换,并且替换掉的是最后几个染色体,目的是加快收敛速度,但可能会陷入局部最优解。

4.5.迭代结果输出

输出遗传算法迭代图

  在这里我们只输出一个标准图为迭代过程中种群的平均适应度与最优适应度。在之前我们已经得到了每一代的平均适应度fitness_ave与最优适应度fitness_best,所以可以直接输出图像

  最后我们希望将是用遗传算法求得的函数区间最值与真实的函数 图相对比,检查我们求得结果是否陷入局部最优解。利用MATLAB绘制二元函数的三维图形。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
技术凯
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区