遗传算法与深度学习实战(5)——遗传算法中常用遗传算子

news2024/9/21 0:48:40

遗传算法与深度学习实战(5)——遗传算法中常用遗传算子

    • 0. 前言
    • 1. 常用选择算子
      • 1.1 轮盘选择 (roulette wheel selection)
      • 1.2 随机遍历抽样 (Stochastic universal sampling, SUS)
      • 1.3 排序选择 (rank-based selection)
      • 1.4 适应度缩放选择(Fitness scaling)
      • 1.5 锦标赛选择 (Tournament selection)
    • 2. 常用交叉算子
      • 2.1 单点交叉 (Single-point crossover)
      • 2.2 k 点交叉 (K-point crossover)
      • 2.3 均匀交叉 (Uniform crossover)
      • 2.4 用于有序列表的交叉
    • 3. 常用变异算子
      • 3.1 位翻转突变 (Flip bit mutation)
      • 3.2 交换突变 (Swap mutation)
      • 3.3 反转突变 (Inversion mutation)
      • 3.4 倒换突变 (Scramble mutation)
    • 4. 常用于实数编码染色体的遗传算子
      • 4.1 混合交叉 (blend crossover)
      • 4.2 模拟二进制交叉 (simulated binary crossover)
      • 4.3 实数突变
    • 小结
    • 系列链接

0. 前言

遗传算子的选择需要考虑特定的基因或个体类型;当然,我们也可以根据具体问题自定义合适的遗传算子。将正确的遗传算子应用于具体问题需要了解不同遗传算子的功能和原理。在本节中,我们将介绍一些常见的遗传算子。

1. 常用选择算子

在遗传算法流程的每个循环的开始,利用选择算子从当前种群中选出个体,这些个体作为下一代个体的双亲。选择是基于概率的,并且被选中的个体的概率与其适应度相关联,从而有较高适应度的个体具有更高优势。

1.1 轮盘选择 (roulette wheel selection)

在轮盘选择 (也称为适应度比例选择,Fitness Proportionate Selection, FPS) 中,选择一个个体的概率与其适应度值直接成正比。这相当于在娱乐场中使用轮盘并为每个轮盘的一部分分配适应度值。转动轮盘时,每个个体被选中的几率与轮盘所占部分的大小成正比。
例如,假设我们有六个具有适应度值的个体,如下表所示。基于以下适合度值,计算每个个体对应轮盘的相应部分:

个体适应度相对占比
A87%
B1211%
C2724%
D43%
E4540%
F1715%

相应的轮盘如下:

轮盘选择

每次转动转盘时,选择点均用于从整个种群中选择一个个体。然后再次转动转盘,选择下一个个体,直到选择了足够的个体来产生下一代。因此,同一个个体可以被多次选中。

1.2 随机遍历抽样 (Stochastic universal sampling, SUS)

随机遍历抽样是轮盘选择的改进版本。使用相同的轮盘,比例相同,但使用多个选择点,只旋转一次转盘就可以同时选择所有个体:
随机遍历抽样

这种选择方法可以防止个体被过分反复选择,从而避免了具有特别高适应度的个体垄断下一代。因此,它为较低适应度的个体提供了被选择的机会,从而减少了原始轮盘选择方法的不公平性。

1.3 排序选择 (rank-based selection)

排序选择方法类似于轮盘选择,但不是直接使用适应度值来计算选择每个个体的概率,而是将适应度用于对个体进行排序。排序后,将为每个人指定代表其位置的等级,并根据这些等级计算轮盘概率。
例如,以先前使用的六个个体作为样本。由于在示例中种群规模为 6,排名最高的个人的排名值为 6,下一个人口的排名值为 5,依此类推。根据这些排名值计算每个个体对应的轮盘的部分:

个体适应度排名相对占比
A829%
B12314%
C27524%
D415%
E45629%
F17419%

对应的轮盘:

排序选择

当某些个体的适应度值比其他人大得多时,排序选择会很有用。由于排名消除了适应度值的巨大差异,因此使用排名代替原始适应度可以防止这几个个体垄断下一代。
同样,当所有个体都具有相似的适应度值时,基于排名的选择会增加它们之间的差异,为较好的个体带来明显的优势。

1.4 适应度缩放选择(Fitness scaling)

适应度缩放将缩放转换应用于原始适应度,将原始适应度值映射到所需范围 [ a , b ] [a,b] [a,b]

s c a l e d f i t n e s s = a × ( r a w f i t n e s s ) + b scaled fitness = a × (raw fitness) + b scaledfitness=a×(rawfitness)+b

实现缩放的适应度在期望范围内,例如,先前示例中的原始适应度值的范围在 445 之间。假设想将值映射到介于 50100 之间的新范围。可以使用以下方程式(分别代表适应度最低和最高的两个个体)来计算 a a a b b b 常数的值:

50 = a × 4 + b 100 = a × 45 + b 50 = a × 4 + b \\ 100 = a × 45 + b 50=a×4+b100=a×45+b

解决这个线性方程组将得到以下缩放参数值:

a = 1.22 , b = 45.12 a = 1.22, b = 45.12 a=1.22,b=45.12

然后可以按以下方式计算缩放后的适应度值:

s c a l e d f i t n e s s = 1.22 × ( r a w f i t n e s s ) + 45.12 scaled fitness = 1.22 × (raw fitness) + 45.12 scaledfitness=1.22×(rawfitness)+45.12

在表中添加缩放后的适应度值的新列:

个体适应度缩放后的适应度相对占比
A85013%
B126015%
C277819%
D45012%
E4510025%
F176616%

下图描述了相应的轮盘:

适应度缩放选择

如图所示,将适应度值缩放到新范围可提供比原始分区更合适的轮盘分区。现在,选择最佳个体的可能性仅是最差个个体的 2 倍,而在原始适应度轮盘中最佳适应度者时被选择的可能性较最差个体高 11 倍以上。

1.5 锦标赛选择 (Tournament selection)

在锦标赛选择方法的每一轮中,从总体中随机选择两个或多个个体,其中适应度得分最高的获胜并被选中。
例如,假设使用与前面示例中相同的六个个体和相同的适用度值。下图说明了随机选择其中三个 (ABF),F 作为获胜者,因为 F 在这三个个体中具有最大适应度值:

锦标赛选择

参加每个锦标赛选择回合的个体数量 (示例中为 3 个) 称为锦标赛规模。规模越大,最好的个人参加比赛的机会就越高,得分低的个人赢得比赛并被选中的机会就越小。
这种选择方法的优势在于,只要可以比较任意两个个体并确定其中哪个更好,就不需要适应度函数的实际值。

2. 常用交叉算子

交叉操作,也称为重组,用于结合双亲的遗传信息,以产生(通常是两个)后代。交叉操作通常使用一些(高)概率值。假如不应用交叉,父母双方都会直接克隆到下一代。

2.1 单点交叉 (Single-point crossover)

在单点交叉法中,随机选择双亲染色体上的位置。此位置称为交叉点 (crossover point) 或切割点 (cut point)。该点右边的基因在双亲染色体之间交换,得到了两个后代,每个后代都携带着双亲的一些遗传信息。
下图说明了在一对二进制染色体上进行的单点交叉操作,交叉点位于第五个和第六个基因之间:

单点交叉

2.2 k 点交叉 (K-point crossover)

k 点交叉是单点交叉的扩展,在交叉过程中使用 k 个交叉点,其中 k 表示正整数。下图是 k=2 时的 k 点交叉示例,第一个交叉点位于第三和第四基因之间,另一个位于第七和第八个基因之间:

k 点交叉

2.3 均匀交叉 (Uniform crossover)

在均匀交换中,每个基因是通过随机选择一个亲本独立确定的。当随机分布为 50% 时,每个父母都有影响后代的机会相同:

均匀交叉

Note: 在此示例中,第二个后代是通过对第一代后代的选择进行求补而创建的,但是,两个后代也可以彼此独立地创建。
由于这种方法不必交换染色体的全部片段,因此其后代具有更大的多样性。

2.4 用于有序列表的交叉

在以上示例中,我们在两个基于整数的染色体上进行交叉操作,虽然 09 之间的每个值都在每个亲本上出现一次,但是每个后代都有某些值出现多次,而其他值则丢失了。
考虑到在某些任务中,基于整数的染色体可能代表有序列表的索引。例如在旅行商问题中——假设有几个城市,我们知道每个城市之间的距离,并且需要找到穿过所有城市的最短路线。假设有四个城市,则表示此问题的可能解的简便方法是构造访问城市顺序的具有四位整数染色体的,例如 (1,2,3,4)(3,4,2,1)。具有两个相同值或缺少某些值的染色体诸如 (1,2,2,4) 是无效的。
对于这种情况,需要设计其他交叉方法以确保创建的后代仍然有效,如有序交叉。

2.4.1 有序交叉

有序交叉 (OX1) 方法致力于尽可能保留亲本基因的相对顺序。
第一步是具有随机切割点的两点交叉:

step.1

从第二个切割点之后开始,按原始顺序遍历所有父母的基因,开始填充每个后代中的其余基因。对于第一个双亲,6 是下一个基因,但是在后代中已经存在,因此继续(环绕)到 1,这也已经存在,下一个位置是 2。由于后代中尚不存在 2,因此将其添加到该位置,如下图所示。对于第二对亲子代,从 5 开始但其在子代中已经存在,然后移至 4 也同样存在,当移动到 2 时,后代中并不存在,因此将其添加到子代中:

step.2

对于第一个双亲,继续到 3 (已经存在于后代中),然后是 4 (后代中并不存在),将其添加到后代中。对于另一个亲本,下一个基因是 6。由于对应的后代中不存在该基因,因此将其添加到其中:

step.3

以类似的方式继续处理后续基因,并填写下一个可用位点,如下图所示:

step.4

如下图所示,产生两个有效后代染色体:

step.5

3. 常用变异算子

变异算子应用于由于选择和交叉操作而产生的后代。
突变是基于概率的,并且通常以(非常)低的概率发生,因为它带有损害应用此算子个体表现的风险。在遗传算法的某些版本中,随着世代的发展,突变概率逐渐增加,以进化防止停滞并确保种群的多样性。另一方面,如果突变率过度增加,则遗传算法将变成与随机搜索等效的算法。

3.1 位翻转突变 (Flip bit mutation)

将位翻转突变应用于二进制染色体时,随机选择一个基因,其值被翻转(求补):

翻转位突变

这可以扩展到多个随机基因的翻转,而不仅仅是一个。

3.2 交换突变 (Swap mutation)

将交换突变应用于基于二进制或整数的染色体时,将随机选择两个基因并交换其值:

交换突变

此突变操作适用于有序列表的染色体,因为新染色体仍带有与原始染色体相同的基因。

3.3 反转突变 (Inversion mutation)

将反转突变应用于基于二进制或整数的染色体时,将选择一个随机的基因序列,并且该序列中的基因顺序颠倒:

反转突变

与交换突变类似,反转突变操作适用于有序列表的染色体。

3.4 倒换突变 (Scramble mutation)

适用于有序列表的染色体的另一种变异算子是倒换变异。应用后,将选择一个随机基因序列,并将该序列中的基因顺序打乱(或倒换):

倒换突变

4. 常用于实数编码染色体的遗传算子

到目前为止,已经看到了代表二进制或整数参数的染色体。遗传算子适合于处理这些类型的染色体。但是,我们经常遇到解空间连续的问题。换句话说,个体由实数(浮点数)组成。
遗传算法可以使用二进制串来表示整数和实数,但是使用二进制串表示的实数的精度受串长度(位数)的限制。由于需要提前确定该长度,因此最终可能由于二进制串太短导致精度不足或编码过长。
使用实数值数组代替二进制串是一种更简单,更好的方法。例如,如果遇到涉及三个实值参数的问题,则染色体可以设计为 [x1,x2,x3],其中 x1x2x3 表示实数,如 [1.23,7.2134,-25.309][-30.10,100.2,42.424]
前述选择方法对于实数编码的染色体同样起作用,因为它们仅取决于个体的适应度,而不取决于其表现形式。
但是,之前介绍的交叉和突变方法不适用于实数编码的染色体,因此需要使用专门的方法。需要记住的重要一点是,这些交叉和突变操作是分别应用于构成实编码染色体的阵列的每个维度的。例如,如果为交叉操作选择了 [1.23,7.213,-25.39][-30.10,100.2,42.42] 作为亲本,则将对以下对分别进行交叉:

  • 1.23-30.10 (第一维度)
  • 7.213100.2 (第二维度)
  • -25.3942.42 (第三维度)

如下图所示:

交叉

同样,当将突变算子应用于实数编码染色体时,它也分别应用于每个维度。

4.1 混合交叉 (blend crossover)

在混合交叉中,每个后代都是从其父代创建的以下区间中随机选择的:

[ p a r e n t 1 − α ( p a r e n t 2 − p a r e n t 1 ) , p a r e n t 2 + α ( p a r e n t 2 − p a r e n t 1 ) ] [parent_1-α(parent_2-parent_1),parent_2+α(parent_2-parent_1)] [parent1α(parent2parent1),parent2+α(parent2parent1)]

参数 α α α 是一个常数,其值在 01 之间, α α α 值越大,区间就越大。例如,如果双亲的值是 1.335.72,则:

  • α = 0 α=0 α=0,将产生区间 [1.33,5.72]
  • α = 0.5 α=0.5 α=0.5,将产生区间 [-0.865,7.915]
  • α = 1.0 α=1.0 α=1.0,将产生区间 [-3.06,10.11]

下图说明了这些示例,其中双亲分别用 p1p2 标记,交叉间隔被标记为黄色:

混合交叉

4.2 模拟二进制交叉 (simulated binary crossover)

模拟二进制交叉 (simulated binary crossover, SBX) 背后的想法是模仿二进制编码染色体通常使用的单点交叉的特性。其中特性之一是双亲平均值等于后代的平均值。应用 SBX 时,两个后代是使用以下公式从双亲创建的:

o f f s p r i n g 1 = 1 2 [ ( 1 + β ) p a r e n t 1 + ( 1 − β ) p a r e n t 2 ] o f f s p r i n g 2 = 1 2 [ ( 1 − β ) p a r e n t 1 + ( 1 + β ) p a r e n t 2 ] offspring_1=\frac 1 2 [(1+\beta)parent_1+(1-\beta)parent_2] \\ offspring_2=\frac 1 2 [(1-\beta)parent_1+(1+\beta)parent_2] offspring1=21[(1+β)parent1+(1β)parent2]offspring2=21[(1β)parent1+(1+β)parent2]

其中 β β β 是被称为扩展因子的随机数。该公式具有以下显着特性:

  • 不管 β β β 的值如何,两个后代的平均值等于父母的平均值
  • β β β 值为 1 时,后代是双亲的副本
  • β β β 值小于 1 时,后代间的距离比亲代间的距离更短
  • β β β 值大于 1 时,后代间的距离比双亲间的距离更远

例如,如果双亲的值是 1.335.72,则:

  • β = 0.8 β=0.8 β=0.8,产生后代 1.7695.281
  • β = 1.0 β=1.0 β=1.0,产生后代 1.335.72
  • β = 1.2 β=1.2 β=1.2,产生后代 0.8916.159

下图说明了这些情况,其中双亲用 p1p2 标记,后代用 o1o2 标记:

模拟二进制

在上述每种情况下,两个后代的平均值为 3.525,等于亲本的平均值。
二进制单点交叉的另一个属性是后代与父代之间的相似性。为此将 β β β 值的转化为随机分布。对于 1 左右的值, β β β 的概率应该更高,因为后代与父母相似。为此,使用另一个以 u u u 表示的随机值计算 β β β 值,该值均匀分布在 [0,1] 上。选定 u u u 的值后,将按以下方式计算 β β β
f ( n ) = { β = ( 2 u ) 1 η + 1 , if  n  ≤ 0.5 β = [ 1 2 ( 1 − u ) ] 1 η + 1 , Otherwise f(n) = \begin{cases} \beta=(2u)^{\frac {1} {\eta + 1} }, & \text{if $n$ ≤ 0.5} \\ \beta=[\frac 1 {2(1-u)}]^{\frac {1} {\eta + 1} }, & \text{Otherwise} \end{cases} f(n)={β=(2u)η+11,β=[2(1u)1]η+11,if n ≤ 0.5Otherwise

其中 η η η (eta) 是代表分布指数的常数。当 η η η 值较大时,后代将更倾向于与其父母相似。 η η η 的常用值为 1020

4.3 实数突变

在实数编码的遗传算法中应用变异的一种选择是用随机产生的新值代替原有实数值。但是,这可能导致与原始个体没有任何关系的变异个体。
另一种方法是生成一个位于原始个体附近的随机实数。这种方法的一个例子是正态分布(或高斯)突变:使用均值为零和预定标准差的正态分布生成随机数,如下图所示:

正态分布

小结

进化计算与其他人工智能或机器学习一样,提供了许多用于调整算法的超参数和选项,遗传算法同样提供了各种超参数和遗传算子选项。在本节中,我们探索并更深入的了解了常用的遗传算子及其选项。

系列链接

遗传算法与深度学习实战(1)——进化深度学习
遗传算法与深度学习实战(2)——生命模拟及其应用
遗传算法与深度学习实战(3)——生命模拟与进化论
遗传算法与深度学习实战(4)——遗传算法详解与实现
遗传算法与深度学习实战(6)——遗传算法框架DEAP
遗传算法与深度学习实战(7)——DEAP框架初体验
遗传算法与深度学习实战(8)——使用遗传算法解决N皇后问题
遗传算法与深度学习实战(9)——使用遗传算法解决旅行商问题
遗传算法与深度学习实战(10)——使用遗传算法重建图像
遗传算法与深度学习实战(11)——遗传编程详解与实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络 谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网…

软件测试学习笔记丨接口测试用例设计

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32078 一、简介 接口测试在需求分析完成之后,即可设计对应的接口测试用例,然后根据用例进行接口测试。接口测试用例的设计,也需要用到黑盒测试用例的设计方…

​数据链路层——流量控制可靠传输机制 ​

https://www.cnblogs.com/nekodream/p/18048072 数据链路层的流量控制 较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。 数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。 数据链路层流量控制…

UEFI——Variable的使用

一、Variable简介 Variable Services是Runtime Services的一部分,提供关于variable的一些服务,Variable被定义为键值对,由标识信息加上属性(键)和任意数据(值)组成。用在固件部内部和固件与操作…

JAVA工具----自动化API文档APIFOX

前言:想必大家在后端开发的过程过,最烦的就是写接口文档了。然而如果是对接前写,就更加烦躁,可能之前写好的接口文档全都要改,还会占用大量的时间,一般的小团队也耗不起这样的费时。那么使用Swagger和侵入式…

如何查询小红书、抖音等多平台品牌声量数据?

现在很多企业都需要掌握小红书、抖音、公众号、微博等各个社媒平台上,企业品牌声量趋势情况,行业内容占有率如何,搜索指数高低等等,借此来判断企业的品牌影响力、行业地位以及最近的活动/事件等营销效果。那么跨平台查询是比较麻烦…

一篇清楚的明白什么是场外个股期权?

今天带你了解一篇清楚的明白什么是场外个股期权?场外个股期权是一种非标准化的期权合约,在金融机构和投资者之间定制进行。它具有更大的灵活性,但也伴随着较高的信用风险和复杂性。适用于对冲风险、增强收益和设计结构性产品等多种策略。 场…

提取音频转mp3的工具哪个好?这六个新手必备

各位音乐爱好者们!是不是有时候你会听到一首歌,觉得它的中间伴奏简直太棒了,想要把它单独提取出来,却发现无从下手呢? 别担心,现在有了提取音频在线工具,这些难题都能迎刃而解。下面&#xff0…

Jmeter_循环获取请求接口的字段,并写入文件

通过JSON提取器、计数器、beanshell,循环读取邮箱接口的返回字段,筛选出flag为3的收件人,并写入csv文件。 1、调用接口,获取所有的邮件$.data.total.count; 2、beanshell后置处理total转换成页码,这里是227…

STM32 HAL freertos零基础(二)-通过STM32CubeMX配置Freertos后在程序中进行任务创建,便于任务管理与识别。

1、简介 通过STM32CubeMX配置Freertos后,建立的任务都在freertos.c文件中,不易于观察,并且每次生成新任务还需要打开STM32CubeMX,本次教程讲解一种通过STM32CubeMX配置Freertos后在程序中进行任务创建,起到类似添加传…

官宣:28家重点实验室,获5750万元资金支持!

【欧亚科睿学术】 点击关注:关注GZH【欧亚科睿学术】,第一时间了解科研最新动态! 根据省级财政专项资金管理办法有关规定,拟安排2024年省重点实验室28项,拟安排省财政资金5750万元。现予以公示: 本文来源…

企业如何治理“两高一弱”?

攻防演练已经落幕,“两高一弱”专项整治依旧如火如荼。针对高危端口、高危漏洞和弱口令这三大网络环境中最常见的关键安全挑战,公安机关及各行业主管部门高度重视,要求各级组织及时发现并消除网络和信息系统“两高一弱”问题,实现…

照片删除了怎么恢复回来?要学会这些数据恢复方法

在数字化时代,照片已经成为我们记录生活、珍藏回忆的重要载体。然而,有时由于误操作或其他原因,我们可能会不小心删除了重要的照片。面对这种情况,很多人会感到焦虑和无助。幸运的是,有多种方法可以帮助我们恢复删除的…

一次性了解Neo4j图形数据库

Neo4j高性能的NoSQL图形数据库 它将结构化数据存储在网络(从数学角度叫做图)上而不是传统的表格中。 Neo4j是一个嵌入式的、基于磁盘的、具备完全事务特性的Java持久化引擎。 但它在数据表示上采用了图形模型,即数据以节点(Nod…

Facebook与区块链的结合:推动社交平台的去中心化

随着区块链技术的崛起,全球各大科技公司纷纷探索其应用潜力。Facebook作为全球领先的社交媒体平台,也在区块链领域中迈出了关键一步,试图通过去中心化技术来提升用户体验并应对传统社交平台所面临的挑战。本文将探讨Facebook与区块链结合的潜…

vue elementUI更改Checkbox 多选框禁用状态下文本颜色

最近在做vue项目中,根据需求要改变CheckBox禁用状态下的文本颜色,原因是默认的文本颜色太浅,要自定义颜色 找了半天终于解决问题 记录一下 话不多说,上代码 希望能够帮到你~ 点赞加关注,下次再找不迷路~~~~

儿童自闭症康复:找到孩子的微小进步,看见希望

星贝育园的康复之旅 在自闭症儿童康复的漫长道路上,每一个微小的进步都是家长心中的巨大希望之光。星贝育园,作为全国领先的自闭症康复机构,以其独特的教育理念、专业的师资团队和显著的康复效果,为无数家庭带来了希望和改变。 …

ICC2:对指定信号线设置ndr rule

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接:

从程序员到外卖员,再到AI绘画大佬:我的逆袭之路

一、行业之卷,失业之痛 大家好,我是一名初代程序员。曾几何时,我也在互联网行业的光环下,享受着高薪和尊敬。然而,随着行业竞争加剧,就业环境变得越来越差,我最终没能逃脱被大厂裁员的命运。 …