简介
进化算法主要包括:
- 遗传算法
- 进化程序设计
- 进化规划
- 进化策略
之后的文章记录遗传算法、进化规划、进化策略三种算法的理解。
遗传算法
规则
适者生存,优胜劣汰!
概念
概念0:编码与解码
要将问题进行数学建模,将问题的解利用二进制数字串进行表示。
而进行适应度分析时,要将其解码成特征进行评价。
概念1:基因和染色体
在遗传算法中,我们首先需要将要解决的问题映射成一个数学问题,也就是所谓的“数学建模”,那么这个问题的一个可行解即被称为一条“染色体”。一个可行解一般由多个元素构成,那么这每一个元素就被称为染色体上的一个“基因”。
概念2:适应度函数
给染色体打分(评价解的优良程度)
概念3:交叉
遗传算法每一次迭代都会生成N条染色体,在遗传算法中,这每一次迭代就被称为一次“进化”。交叉算子种类很多,具体使用时找收藏夹,要注意有的交叉算子处理之后要进行冲突检查。
概念4:变异
当我们通过交叉生成了一条新的染色体后,需要在新染色体上随机选择若干个基因,然后随机修改基因的值,从而给现有的染色体引入了新的基因,突破了当前搜索的限制,更有利于算法寻找到全局最优解。交叉只能找到局部最优解,永远没有办法达到全局最优解。
概念5:复制
每次进化中,为了保留上一代优良的染色体,需要将上一代中适应度最高的几条染色体直接原封不动地复制给下一代。假设每次进化都需生成N条染色体,那么每次进化中,通过交叉方式需要生成N-M条染色体,剩余的M条染色体通过复制上一代适应度最高的M条染色体而来。
概念6:选择
如何从群体中找到染色体进行交叉,这涉及到一定的选择策略,常用的有轮盘赌选择策略、锦标赛选择策略、线性排序选择(Linear Ranking Selection)和指数排序选择(Exponential Ranking Selection)。后面两种选择策略避免了轮盘赌的一个缺点,那就是可以让适应度为0的个体也有机会产生后代(会确定一个最低概率)。
流程
- 在算法初始阶段,它会随机生成一组可行解,也就是第一代染色体。
- 采用适应度函数分别计算每一条染色体的适应程度,并根据适应程度计算每一条染色体在下一次进化中被选中的概率(这个上面已经介绍,这里不再赘述)。
(上面都是准备过程,下面正式进入“进化”过程) - 通过“交叉”,生成N-M条染色体;
- 对交叉后生成的N-M条染色体进行“变异”操作;
- 使用“复制”的方式生成M条染色体;
- N条染色体生成完毕,紧接着分别计算N条染色体的适应度和下次被选中的概率。
(这就是一次进化的过程,紧接着进行新一轮的进化)
超参数
进化次数允许范围:算法到达一定效果就停止,保证效率。
进化策略
流程
- 编码:对要求解的问题以数字串的方式进行编码(由目标参数和策略参数组成),计算合适度值
- 判断是否满足终止条件:如满足则输出结果;否则执行下述步骤
- 选择n个父代参与繁殖
- 按给定的方式执行交叉操作(可选)
- 基于高斯分布的扰动执行变异操作
- 产生m个子代,并计算合适度值(m>n)
- 返回步骤2
进化规划
- 编码:对要求解的问题以数字串的方式进行编码(由目标参数和策略参数组成),计算合适度值
- 判断是否满足终止条件:如满足则输出结果;否则执行下述步骤
- 选择n个父代参与繁殖
- 基于高斯分布的扰动执行变异操作
- 产生n个子代,并计算合适度值
- 返回步骤2
进化策略、进化规划与遗传算法
编码方面:不像传统遗传算法那样需要对要求解的问题进行0-1编码和解码,而是直接对求解的问题进行编码,即直接将优化问题的解表示为数字串的形式,不需要特定的编码和译码,可直接进行实数编码。
均采用同样的变异操作方式,即变异时,对父代中的个体加上一个服从均值为0,标准差为 σ 的高斯分布随机变量。标准差是变化的,编码时属于染色体串中的一部分。
进化策略与进化规划的差别
- 进化策略中的交叉算子是可选的;如需要进行交叉运算时,采用类似遗传算法的处理方法,如离散交叉或中值交叉方式。进化规划没有交叉算子。
- 父代选择方面:进化策略采用概率选择的方法形成父代(如基于随机分布的方式抽取父代个体),父代每一个个体都能以同样的概率被选中。 进化规划采用确定性方式,即当前种群中每个父代都要经过变异来产生子代。
- 变异表达式上的差异。
- 生存选择方面,即新的子代生成后,如何和父代共同形成新的父代的方式。