温馨提示:本文翻译自stackoverflow.com,查看原文请点击:How to perform crossover in a 2-dimensional array - genetic algorithm
algorithm multidimensional-array genetic-algorithm mutation crossover

How to perform crossover in a 2-dimensional array - 遗传算法

发布于 2020-03-29 13:17:06

我有以下两个以2D阵列表示的染色体。

// First chromosome
[
  [ 12 45 23 ]
  [ 34 01 89 ]
  [ 33 90 82 ]
]

// Second chromosome
[
  [00 45 89 ]
  [00 00 34 ]
]

对染色体的约束是染色体阵列中的每个阵列必须保持在一起。例如在第一个染色体[ 12 45 23 ]必须保持在一起。考虑到这一点,我相信与上述染色体结构进行交叉的方法是随机选择一个水平交叉点。例如以下内容:

// First produced off-spring
[
  [ 12 45 23 ] // First chromosome
  [ 00 00 34 ] // Second chromosome
]

// Second produced off-spring
[
  [ 00 45 89 ] // Second chromosome
  [ 34 01 89 ] // First chromosome
  [ 33 90 82 ] // First chromosome
]

这是对必须保留完整行的2D染色体阵列进行突变的正确方法吗?如果是这样,此方法是否有特定名称?还是会One-point交叉?

查看更多

查看更多

提问者
Corbuk
被浏览
157
manlio 2020-01-31 17:52

此方法有特定名称吗?还是会发生单点交叉?

在有关可变长度遗传算法的各种论文中,将其称为单点交叉

对于可变长度的染色体,通常以更通用的方式提出一个点交叉:您可以为每个染色体选择一个不同的交叉点。例如

C1 = [ A1, A2, A3, A4, A5, A6]

C2 = [ B1, B2, B3, B4]

选择交叉点1进行C1,并3C2你:

C1 = [ A1 | A2, A3, A4, A5, A6]

C2 = [ B1, B2, B3 | B4]


C1' = [A1 B4]
C2' = [B1, B2, B3, A2, A3, A4, A5, A6]

这使染色体长度开始增长。根据特定的问题,这可能是必要条件,或者只是膨胀(在两种情况下,您都可能需要在适应性功能中加以考虑)。

这是对必须保留完整行的2D染色体阵列进行突变的正确方法吗?

这是一种简单的方法(很好)。均匀交叉是另一种简单的方法。

突触可变长度交叉:可变长度基因组的有意义的交叉(Benjamin Hutt和Kevin Warwick,IEEE进化计算学报,第11卷,第1期,2007年2月)描述了其他有趣的(更复杂的)可能性。

最好的交叉非常问题的具体