遗传算法(四)——交叉、变异与替换

交叉(Crossover)

在上一篇文章所描述的选择过后,我们在一个population中选出了一部分可以用作交配的父母个体,而染色体交叉操作,就是指我们在这些父母个体中,选择两个进行相互交配,将他们的染色体按照某种方式相互交换部分基因,形成两个新的个体的过程

实际上交叉操作还分为无性、有性、多亲重组三种:

  • 无性:子代由一个父个体产生
  • 有性:子代由两个父个体产生一个/两个子个体
  • 多亲重组:多余两个父个体产生一个/多个子个体

适用于二进制编码的交叉算子:

  1. 单点交叉(One-point Crossover):指在个体编码串中只随机设置一个交叉点,将染色体分成两部分,子代染色体的左右两侧分别来自于父母染色体。
    在这里插入图片描述
  2. 两点交叉/多点交叉(Two-point/Multi-point Crossover):在个体编码串中随机设置了两个/多个交叉点,然后再以间隔交换的方式进行部分基因交换。
    在这里插入图片描述
  3. 均匀交叉(也称一致交叉,Uniform Crossover):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。

适用于浮点数/实数编码的交叉算子:

  1. 离散重组:子个体的每一个变量按照等概率随机地挑选父母个体的变量值,组成新的子个体。
    在这里插入图片描述
  2. 中间重组:
    V a r s o n = V a r f a t h e r 1 + α × ( V a r f a t h e r 2 − V a r f a t h e r 1 ) Var_{son}=Var_{father1}+\alpha×(Var_{father2}-Var_{father1}) Varson=Varfather1+α×Varfather2Varfather1,其中 α \alpha α比例因子,由[-d,1+d]上均匀分布地随机数产生。d=0时,为中间充足,一般d=0.25。重组时,先为每一个子代的每一个变量产生一个 α \alpha α
    父子代的变量范围
    父子代关系
  3. 线性重组:其实就是中间重组的一个特殊情况,对于同一个子代,它的每一个变量的比例因子 α \alpha α都是固定的。
    在这里插入图片描述

模拟二进制交叉SBX(Simulated Binary Crossover)
SBX方法的主要思想是在使用浮点数编码/实数编码时,可以模拟二进制编码的交叉操作:
在这里插入图片描述
原论文:
Agrawal R B , Deb K , Agrawal R B . Simulated Binary Crossover for Continuous Search Space[J]. Complex Systems, 2000, 9(3):115-148.

混合交叉算子BLX(the Blend Crossover operator)
在这里插入图片描述
原论文:
Eshelman L J, Schaffer J D. Real-coded genetic algorithms and interval-schemata[M]//Foundations of genetic algorithms. Elsevier, 1993, 2: 187-202.

关于交叉操作有些优秀的博文推荐阅读:
遗传算法中几种交叉算子小结
Simulated Binary Crossover(SBX)的学习
SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子
百度文库-遗传算法


变异(Mutation)

在交叉操作过后形成的新个体,有一定的概率会发生基因变异,与选择操作一样,这个操作是基于概率的,这个概率成为变异概率 p m p_m pm。一般来说变异概率设置得很小,一般 p m ≤ 0.05 p_m≤0.05 pm0.05

适用于二进制编码和实数编码的变异算子:
最简单的做法就是:对交叉后代集中每个后代的每一位,产生一个随机数 r ⊂ [ 0 , 1 ] r\subset[0,1] r[0,1],若 r ≤ p m r≤p_m rpm则将该位取反,否者该位不变。

  1. 基本位变异(Simple Mutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。
  2. 均匀变异(Uniform Mutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)
  3. 边界变异(Boundary Mutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。
  4. 非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。
  5. 高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P**2的正态分布的一个随机数来替换原有的基因值。

另外:
如果变异概率很大,那么整个搜索过程就退化为一个随机搜索过程。所以,比较稳妥的做法是,进化过程刚刚开始的时候,取p为一个比较大的概率,随着搜索过程的进行,p逐渐缩小到0附近。

关于变异操作有些优秀的博文推荐阅读:
遗传算法系列 (4) 变异算法
【建模必备】遗传算法的基本原理与步骤(变异)
百度文库-遗传算法

替换策略

除了父子个体的选择、重组、变异之外,还需要考虑的是替换策略——生成的新个体如何取代旧的个体。
有如下几种:

  • 如果生成一个子个体,可以用来替换掉最差的父个体。这个替换规则可以(或必须)基于子个体的适应度优于父个体。
  • 玻尔兹曼(Boltzmann)选择可以用来确定子个体是否替换父个体。
  • 新的子个体替换掉种群中的劣势个体
遗传算法中的选择、交叉变异是三个基本的遗传操作,它们共同作用于种群中的个体,不断地产生新的个体,从而实现对问题的搜索和优化。下面是一张遗传算法中选择、交叉变异的示意图。 ![遗传算法中选择交叉变异示意图](https://cdn.jsdelivr.net/gh/lixinyang123/ImageHosting//img/20211017170206.png)遗传算法中,首先需要初始化一个种群,其中包含多个个体,每个个体表示问题的一个可能解。然后,通过选择、交叉变异等操作,不断产生新的个体,并逐步优化种群中的解。 选择操作用于从种群中选择出一部分个体,作为下一代的基础。选择的方法有多种,如轮盘赌选择、竞标选择等。在轮盘赌选择中,每个个体被赋予一个适应度值,代表其解决问题的能力。然后,按照适应度值的比例,将轮盘分成多个扇区,每个个体对应一个扇区的大小。最后,随机旋转轮盘,直到选择出足够数量的个体为止。 交叉操作用于将两个个体的染色体(即解决问题的方式)进行交换,从而产生新的个体。交叉的方法有多种,如单点交叉、多点交叉等。在单点交叉中,随机选择一个交叉点,将两个个体在该点之后的染色体交换,得到两个新的个体。例如,将个体A的染色体分为两段,分别为ABC和DEF,将个体B的染色体分为两段,分别为GHI和JKL,则单点交叉后得到两个新的个体,分别为ABCGHI和DEFJKL。 变异操作用于对个体的染色体进行微小的随机变化,从而产生新的个体。变异的方法有多种,如单点变异、多点变异等。在单点变异中,随机选择一个位置,将该位置上的基因进行随机变化。例如,将个体A的染色体中的第三个基因从C变为D,则变异后得到新的个体,其染色体为ABDDEF。 通过不断地选择、交叉变异遗传算法可以产生越来越好的解,最终找到问题的最优解。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值