写在开始

最近又在看一点遗传算法方面的文章了,然而这一次突然看懂了,所以顺便来写一点理解.

关于遗传算法

以下来自维基百科:

遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。

一些实现方面的理解

这个算法的重点我认为是在如何编码基因和如何筛选个体上,然后还有好几处调参的地方.

关于编码

编码分为二进制和实数,我只说二进制的.二进制的编码首先你要有一个从数值到解的一个映射关系,也就是你需要求最大值的那个F(x),然后要将x编码为二进制,其实也很简单,因为完全可以粗暴的把这个x的二进制那些位作为编码基因.然后要保证你所有的基因都在这个函数的定义域里,如果超出去了就要去掉重新弄了.

关于筛选个体

筛选个体也就是所谓的优胜劣汰,这一方面的东西的话就是要考虑好留下多少个体,然后留下多少不是很适合的个体来增加物种多样性(可能不需要).

一些实现方面的基本套路

这是纯粹我自己想的,可能和其他人说的不太一样.

  1. 先初始化一个种群,说白了就是初始化一堆x,然后确定在定义域内.
  2. 然后就是编码基因,把这一群x转化成二进制.
  3. 看一下前后两次的最优解的差距,小到一定程度之后就结束算法.跳到9
  4. 开始种群的交配
  5. 首先对基因进行交叉互换,也就是对着那一堆二进制从中间一个位置拆开,然后两个二进制拼在一起出现一个新的基因也就是一个新的x.
  6. 然后对着这个新的基因进行变异,产生一个全新的个体.
  7. 进行生存竞争,把较差的个体清除.
  8. 回到3.
  9. 输出结果

如果想要优化一点性能的话就把7提到4的前面,先竞争再交配,这样子的话可以让产生的新个体少一点,运算量也就随之少一点了.

写在最后

遗传算法整体来说我认为就这些过程,应该说是算法很简单,但是里面有很多调优问题需要经验来解决.

Last modification:January 27th, 2020 at 01:37 pm