本文首发于我的个人博客网站:https://www.xerrors.fun/Genetic-algorithm-tsp/ 欢迎访问
念念不忘,必有回响!
关于遗传算法的解释有很多。建立简单的叙述一下,不明白的地方可以看文章最后方的参考链接,有优秀的博文可以参考。相信我,读完这篇文章,关于遗传算法的原理以及实现都有了一定的认识。
1. 生物进化与遗传算法
遗传算法(Genetic Algorithm,GA)是Holland教授于20世纪60年代提出,它主要借用了生物进化中“物竞天择,适者生存”的自然机理,通过选择、遗传和变异等机制,模拟自然进化过程来求解复杂问题的一种搜索算法。从某种程度上说遗传算法是对生物进化过程进行的数学仿真。与自然界类似,遗传算法从代表问题可能潜在解集的一个种群(population)开始,将择优与随机信息结合起来并逐步迭代,在每一代中通过一定的规则,使用上代中适应性最好的个体(individual),来形成新的种群,如此重复,直到满足指定条件为止。
生物进化与遗传算法
生物进化的特性总结如下:达尔文进化论
- 进化过程发生在染色体上,而不是发生在它们所编码的生物体上;
- 自然选择把染色体以及由它们所译成的结构的表现联系在一起,那些适应性好的个体的染色体经常比差的染色体有更多的繁殖机会;
- 繁殖过程是进化发生的时刻。变异可以使生物体子代的染色体不同于它们父代的染色体。通过结合两个父代染色体中的物质,重组过程可以在子代中产生有很大差异的染色体;
- 生物进化没有记忆。有关产生个体的信息包含在个体所携带的染色体的集合以及染色体编码的结构之中,这些个体会很好地适应它们的环境。
算法和自然界的对应关系
遗传算法 | 生物进化 |
---|---|
适应函数 | 环境 |
适应值函数 | 适应性 |
适应函数值最大的解被保留的概率最大 | 适者生存 |
问题的一个解 | 个体 |
解的编码 | 染色体 |
编码的元素 | 基因 |
被选定的一组解 | 群体 |
根据适应函数选择的一组解 | 种群 |
以一定的方式由双亲产生后代的过程 | 交配 |
编码的某些分量发生变化的过程 | 变异 |
遗传算法的主要步骤
遗传算法的控制参数包括群体规模N、算法停止准则以及交配概率pc和变异概率pm
遗传算法的主要特点
- 遗传算法是一个随机搜索算法,适用于数值求解具有多参数、多变量、多目标的复杂最优化问题。
- 遗传算法对待求解问题的指标函数没有什么特殊的要求,如不要求连续性、导数存在、单峰值等假设,甚至不需要显示地写出指标函数。
- 经过编码以后,遗传算法几乎不需要任何与问题有关的知识,唯一需要的信息是适应值的计算。也不需要使用者对问题有很深入的了解和求解技巧,只需通过选择、交配和变异等简单的操作便可求解复杂的问题,是一个比较通用的优化算法。
- 遗传算法具有天然的并行性,适用于并行化求解。
2. 遗传算法的实现
主要为以下几个步骤
- 如何编码?
- 如何定义适应函数?
- 初始种群的产生
- 如何选择
- 交配策略
- 变异策略
编码问题
对一个具体的应用问题如何编码是应用遗传算法的首要问题,也是遗传算法应用的难点。事实上,还不存在一种通用的编码方法,特殊的问题往往需要采用特殊的编码方法。目前几种常用的编码技术主要包括二进制编码、浮点数编码、字符编码等。
适应函数
遗传算法中的适应度函数也称为评价函数,是用来判断群体中的个体的优劣程度的指标,是根据所求问题的目标函数来进行评估的。适应度函数是算法演化过程的驱动力,是进行自然选择的唯一依据。在具体应用中,适应度函数的设计要结合求解问题本身的要求而定。适应度函数设计直接影响到遗传算法的性能。(下面没看懂)
- 非线性加速适应函数。该方法利用已有的信息构造适应函数。
- 线性加速适应函数。该方法是将当前得到的最优指标函数值放大为指标函数值平均值的M倍。
另一种定义适应函数的方法是利用染色体指标函数值从小到大的排列序号作为适应函数值,利用该值采用“赌轮盘”的方法得到每个染色体被选中的概率。
初始种群的产生
遗传算法中初始种群中的个体可以是随机产生的,但是最好采用如下策略来设定:
- 根据问题的固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。
- 先随机生成一定数目的个体,然后从中挑出最好的个体加入到初始群体中。这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。
然后进行选择、交叉和变异等运算,解决问题。
选择策略
选择操作也称为复制(reproduction),是指从当前种群中选出个体以生成交配池(mating pool)的过程。所选出的这些个体具有良好的特征,以便产生优良的后代。较大的选择压力使最优个体有较高的复制数目,从而使算法收敛速度快,但也较容易出现过早收敛的现象。相对而言,较小的选择压力一般能使群体保持足够的多样性,从而增大算法收敛到全局最优的概率,但算法的收敛速度一般较慢。
- 轮盘赌选择
轮盘赌选择(Roulette Wheel Selection)策略在遗传算法中使用的最多。在轮盘赌选择方法中先按个体的选择概率产生一个轮盘,轮盘每个区的角度与个体的选择概率成正比,然后产生一个随机数,它落入转盘的哪个区域就选择相应的个体交叉。很显然,选择概率大的个体被选中的可能性较大,获得交叉的机会也就越大。
P ( x i ) = f ( x i ) ∑ j = 1 N f ( x j ) P\left(x_{i}\right)=\frac{f\left(x_{i}\right)}{\sum_{j=1}^{N} f\left(x_{j}\right)} P(xi)=∑j=1Nf(x