进化计算

进化算法
进化算法,也被成为是演化算法(evolutionaryalgorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”。进化算法产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编码,种群初始化,交叉变异算子,经营保留机制等基本操作。与传统的基于微积分的方法和穷举方法等优化算法相比,进化计算是一种成熟的具有高鲁棒性和广泛适用性的全局优化方法,具有自组织、自适应、自学习的特性,能够不受问题性质的限制,有效地处理传统优化算法难以解决的复杂问题(比如NP难优化问题)。

  1. 选择阶段
    选择的过程主要是为选出优质的后代用作下一次的迭代。在个体集合中,每个个体有自己被选中的概率,下面介绍几种选择的方法
    通常来说我们选用轮盘赌的方式。每个个体通过适应度函数得到他们的适应度的值,然后得到在所有个体中被选中的百分比,放入轮盘中,如下图所示,11号个体就没有可能被选中。
    第二张图是我们常用的线段抽样的方法,每个个体的线段长度和各自的适应度的值有关,基本概念和轮盘赌类似。在这里插入图片描述
    第三种是local选择,在这个选择方式中,每个个体被限定在特定的结构内,彼此相连,这个结构可以是全封闭的环形,三角形等。有一维的,二维的,也有三维的。如下图所示。每个population之间隔有一定的距离,较小的团体之间隔离的距离越大。同时邻居的大小决定了传播的速度。这也就意味着人多的团体可能更快的陷入局部最小值问题。所以我们通常对较小的社区使用本地选择。还有比赛选择等

  2. 在选择完成后我们就需要重组和交叉。
    在上面选择出优秀的个体后将它们结合,形成新的个体,这个个体将整合父母包含的信息。重组的方式有很多种,离散重组。先随机选择两个父代个体,然后将其分量进行随机交换,构成子代新个体的各个分量,从而得出如下新个体。
    第二个是中值重组。这种重组方式也是先随机选择两个父代个体,然后将父代个体各分量的平均值作为子代新个体的分量,构成的新个体为。最后混杂重组。这种重组方式的特点在于父代个体的选择上。混杂重组时先随机选择一个固定的父代个体,然后针对子代个体每个分量再从父代群体中随机选择第二个父代个体。也就是说,第二个父代个体是经常变化的。至于父代两个个体的组合方式,既可以采用离散方式,也可以来用中值方式,甚至可以把中值重组中的1/2改为[0,1]之间的任一权值。

  3. 变异就是在每个分量上面加上零均值、某一方差的高斯分布的变化产生新的个体。这个某一方差就是变异程度。变异程度并不是一直不变化的,算法开始的时候变异程度比较大,当接近收敛后,变异程度会开始减小。

这结束一个轮回然后重新开始选择步骤。

3.2 遗传算法
遗传操作是模拟生物基因的操作,他的任务就是根据个体适应度对其施加一定的操作,从而实现优胜劣汰的进化过程.从优化搜索的角度来看,遗传操作可以使问题的解逐代优化,逼近最优解,遗传操作包括以下三个基本遗传算子:选择、交叉、变异.选择和交叉基本上完成了遗传算法的大部分搜索功能,变异增加了遗传算法找到最优解的能力.

3.1、选择

选择是指从群体中选择优良个体并淘汰劣质个体的操作.它建立在适应度评估的基础上.适应度越大的个体,被选中上的可能性就越大,他的“子孙”在下一代中的个数就越多,选择出来的个体就被放入配对库中.目前常用的选择方法有轮赌盘方法、最佳个体保留法、期望值法、排序选择法、竞争法、线性标准化法.

3.2、交叉

交叉就是指把两个父代个体的部分结构加以替换重组而生成新的个体的操作,交叉的目的是为了在下一代产生新的个体,通过交叉操作,遗传算法的搜索能力得到了飞跃性的提高.交叉是遗传算法获取优良个体的重要手段.交叉操作是按照一定的交叉概率在匹配库中随机的选取两个个体进行的,交叉位置也是随机的,交叉概率一般取得很大,为0.6~0.9.
在这里插入图片描述

3.3、变异

变异就是以很小的变异概率Pm随机地改变种群中个体的某些基因的值,变异操作的基本过程是:产生一个[0,1]之间的随机数rand,如果rand<Pm,则进行变异操作.变异操作本身是一种局部随机搜索,与选择、交叉算子结合在一起,能够避免由于选择和交叉算子而引起的某些信息永久性丢失,保证了遗传算法的有效性,使遗传算法具有了局部随机搜索能力,同时使得遗传算法能够保持群体的多样性,以防出现未成熟收敛.在变异操作中,变异概率不宜取得过大,如果Pm>0.5,遗传算法就退化为了随机搜索.
在这里插入图片描述

另一个关键点基因编程,基因编程与遗传算法有明显的不同,遗传算法结局问题是会产生一个字符串作为染色体,而基因编程则是产生一个结局方案的计算机程序。基因编程结局问题出要分为四个步骤, 首先初始化随机种群和确定问题。其次运行种群里的每一个程序,通过适应度函数评判各自解决问题的效果。然后创建新的程序种群。这个新的种群包括了在前面表现好的程序,变异以后的程序以及交叉后的程序。最后再找到新种群里最好的程序作为输出。那么基因编程里的交叉和变异算子也与遗传算法里的有所不同。在传统的遗传算法里我们是将父母染色体进行交叉编程一个新的染色体,但在基因编程里我们的两个父母程序可以通过交叉产出两个新的程序。如下图所示。相同的变异算子也有两种可能的突变,对单个程序可能会产生单个终端的突变也有可能退一个子功能的突变。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值