遗传算法

我们可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。

学过高中数学的孩纸都知道,函数中存在着很多的极大值和极小值。而最大值则是指定区间的极大值中的最大的那一个。从图像上具体表现为,极大值像是一座座山峰,极小值则是像一座座山谷。

这些山峰对应着局部最优解,其中有一个山峰是海拔最高的,这个山峰则对应的是全局最优解。那么,遗传算法要做的就是尽量爬到最高峰,而不是困在较低的小山峰上。

1. 袋鼠蹦跳理论

既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

下面介绍介绍“袋鼠跳”的几种方式。

爬山算法:一只袋鼠朝着比现在高的地方跳去。它找到了不远处的最高的山峰。但是这座山不一定是最高峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

模拟退火:袋鼠喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高峰跳去。这就是模拟退火算法。

遗传算法:有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。而只要简单的“否定”一些表现不好的个体就行了(把那些总是爱走下坡路的袋鼠射杀,这就是遗传算法的精粹)。

2. 对比传统算法

我们知道,传统的优化方法主要有三种:枚举法、启发式算法和搜索算法:

  1. 枚举法:枚举出可行解集合内的所有可行解,以求出精确最优解。对于连续函数,该方法要求先对其进行离散化处理。这样就可能因离散处理而永远达不到最优解。此外,当枚举空间比较大时,该方法的求解效率比较低。有时甚至在目前先进计算工具上无法求解。

  2. 启发式算法:寻求一种能产生可行解的启发式规则,以找到一个最优解或近似最优解。该方法的求解效率比较高,但对每一个需求解的问题必须找出其特有的启发式规则,这个启发式规则一般无通用性,不适合于其他问题。

  3. 搜索算法:寻求一种搜索算法,该算法在可行解集合的一个子集内进行搜索操作,以找到问题的最优解或者近似最优解。该方法虽然保证不了一定能够得到问题的最优解,但若适当地利用一些启发知识,就可在近似解的质量和效率上达到一种较好的平衡。

随着问题种类的不同以及问题规模的扩大,要寻求一种能以有限的代价来解决搜索和优化的通用方法,遗传算法正是为我们提供的一个有效的途径,它不同于传统的搜索和优化方法。主要区别在于:

  1. 自组织、自适应和自学习性(智能性):应用遗传算法求解问题时,在编码方案、适应度函数及遗传算子确定后,算法将利用进化过程中获得的信息自行组织搜索。由于基于自然的选择策略为“适者生存,不适应者被淘汰”,因而适应度大的个体具有较高的生存概率。通常,适应度大的个体具有更适应环境的基因结构,再通过基因重组和基因突变等遗传操作,就可能产生更适应环境的后代。进化算法的这种自组织、自适应特征,使它同时具有能根据环境变化来自动发现环境的特性和规律的能力、自然选择消除了算法设计过程中的一个最大障碍,即需要事先描述问题的全部特点,并要说明针对问题的不同特点算法应采取的措施。因此,利用遗传算法的方法,我们可以解决那些夏杂的非结构化间题。

  2. 遗传算法的本质并行性:遗传算法按并行方式搜索一个种群数目的点,而不是单点。它的并行性表现在两个方面,一是遗传算法是内在并行性(inherent parallelism).即遗传算法本身非常适合大规模并行。最简单的并行方式是让几百甚至数千台计算机各自进行独立种群的演化计算.,运行过程中甚至不进行任何通信(独立的种群之间若有少量的通信一般会带来更好的结果)。等到运算结束时才通信比较,选取最佳个体。这种并行处理方式对并行系统结构没有什么限制和要求,可以说,遗传算法适合在目前所有的并行机或分布式系统上进行并行处理,而且对并行效率没有太大影响。二是遗传算法的内含并行性(implicit parallelism)。由于遗传算法采用种群的方式组织搜索,因而可同时搜索解空间内的多个区域,并相互交流信息。使用这种搜索方式,虽然每次只执行与种群规模n成比例的计算,但实质上已进行了大约 次有效搜索,这就使遗传算法能以较少的计算获得较大的收益。

  3. 遗传算法不需要求导或其他辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数。

  4. 遗传算法强调慨率转换规则,而不是确定的转换规则。

  5. 遗传算法可以更加直接地应用。

  6. 遗传算法对给定问题,可以产生许多的潜在解,最终选择可以由使用者确定(在某些特殊情况下,如多目标优化问题不止一个解存在,有一组pareto最优解。这种遗传算法对于确认可替代解集而言是特别合适的)。

3. 自适应遗传算法

自适应遗传算法(Adaptive Genetic Algorithm,AGA)是对基本遗传算法的一种改进,它通过对遗传参数的自适应调整,大大提高了遗传算法的收敛精度,加快了收敛速度。

自适应遗传算法在保持群体多样性的同时,保证了遗传算法的收敛性。自适应遗传算法的遗传参数是自适应的,提高了基本遗传算法的收敛速度和收敛精度。如今大量改进算法根据生物进化特征,更加形象的模拟生物进化,使算法能够以较大概率收敛到最优解。为了提高遗传算法的收敛速度、搜索精度以及稳定性,自适应遗传算法各个阶段(编码、计算流程、种群规模、种群初始化策略、GA算子、终止条件等)的设计必须合理,这样,许多改进的自适应遗传算法就应运而生。自适应遗传策略研究与设计可以分为微观遗传策略研究和宏观遗传策略研究两部分[1]。

  • 微观遗传策略:主要讨论群体规模、遗传算子的形式和参数设计,及其对GA求解能力的影响。
  • 宏观遗传策略:主要讨论关于通过GA流程的再设计,改变GA的宏观特征,或者以GA流程为基础,引入其他算法构成混合GA,以期提高GA求解全局最优解的能力。下面我们讨论改进遗传算法的一些方法。
原文地址:https://www.cnblogs.com/brt2/p/13866067.html