<算法>利用基本遗传算法解决函数最大值问题

发表于 算法 2017-04-25 阅读数: 238

利用基本遗传算法解答1/(|x1|+|x2|+|x3|+|x4|+1)的最大值,步骤如下:

  1. 初始化X条染色体
  2. 进行初始适应性评估,评估函数是:1/(|x1|+|x2|+|x3|+|x4|+1),标准答案是1
  3. 选出初始最优适应值
  4. 开始繁衍
  5. 求出适应值的和,以及每条染色体与总适应值的比
  6. 对染色体进行选择,淘汰最弱的染色体
  7. 对染色体进行配对交叉
  8. 染色体变异
  9. 重新评估适应值,并检测是否有更大的最优适应值,有则更新
  10. 重复2-9的步骤

测试环境:

遗传算法求解

为什么使用Python:

拥有强大的内置数学函数库,代码简洁明了。

不需要去解决一些算法之外的事情,比如求最优染色体时的算法。

简单实用,效率高。

1.初始化染色体:

遗传算法求解

2.进行初始适应性评估,评估函数是:1/(|x1|+|x2|+|x3|+|x4|+1),标准答案是1

遗传算法求解

3.选出初始最优适应值

遗传算法求解

4.开始繁衍

遗传算法求解

5.求出适应值的和,以及每条染色体与总适应值的比

遗传算法求解

6.对染色体进行选择,淘汰最弱的染色体

遗传算法求解

7.对染色体进行配对交叉

遗传算法求解

8.染色体变异

遗传算法求解

9.重新评估适应值,并检测是否有更大的最优适应值,有则更新

遗传算法求解

10.重复2-9的步骤

遗传算法求解

运行结果展示:

遗传算法求解

从图中可以看到,并非总是能获得最优的解,主要是因为函数非常可能提前收敛(即染色体全部相同)。这需要通过调整参数使得结果变得优秀。

我相信在这个基础上进行一些优化,答案非常可能更加趋近于1 ,有兴趣的朋友可以试试。

代码下载地址:

https://github.com/Ckend/Genetic-Algorithm-Presentation

https://alltoshare.com/product/1705.html

或者点击原文进行下载(github)。

欢迎关注微信公众号:幻象客 https://www.huanxiangke.com

欢迎进入极致分享:https://alltoshare.com

幻象客 二维码

Add comment