遗传算法 基本思想

“适者生存”是自然界的一大规律,优胜劣汰,顾名思义,遗传算法可用来解决最优的问题。

遗传算法就是一个优胜劣汰的过程,最终选择出最好的群体。它的大致过程可以用下图表示:

遗传算法 基本思想

对于我们待求解的问题,首先确定解空间,然后根据我们要求解的问题确定适应度函数。最终是选取适应度值大的留下来。适应度函数的选取是根据原问题来的,一种简单的方法,比如是要求f = x^2 在[0,31]上的最大值,那么适应度函数可以选择f = x^2 本身,但如果待求解的问题是求最小的一个最优问题,则适应度函数的选取应该针对原问题重新设置,因为适应度函数每次都是淘汰最小的,适应度值是我们的一个判断。

然后进行初始化,随机得到一个初始的种群,对整个种群进行计算,得到相应的各自的适应度值,判断此时是否达到最优,如果在解空间上达到最优了,则停止算法,输出结果。否则,要根据选择算子(比如轮盘赌方法、锦标赛方法等)去选择留下来的种群,对留下来的种群进行交叉或者变异,产生新的群体,计算新群体的适应度值,重新进行判断。如此迭代,直到在解空间中得到最优值。

以上是遗传算法的一个基本的思路,在选择初始的一个种群时,种群规模的大小会影响最终结果,种群规模大,计算量大,种群规模小,很难得到最优值。基本遗传算法有一个缺陷,就是“早熟”,即容易局部收敛,算法停止,得到的结果是错误的。因此选取哪种选择算子判断哪些群体留下来也是一个很重要的问题。迭代的过程有可能很漫长,那该如何去判断每次迭代是否达到最优,一种方法是设置迭代的次数,因为遗传算法是优胜劣汰,达到一定的迭代次数可以停止;另一种方法是,通过设置目标值,比较当前得到的结果与目标值之间的差距,设定一个阈值,小于这个阈值则表明已经达到想要的最优值,此时可以停止算法。当然,还有其他更好的判断算法,就不在这里再做描述,有兴趣的可以自行查阅下文献。