提问者:小点点

如何在二维数组中执行交叉-遗传算法


我有以下两条染色体,它们被表示为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染色体阵列上执行突变的正确方法吗?哪些行必须保持完整?如果是,此方法是否具有特定名称?或者这是否属于一点交叉?


共1个答案

匿名用户

此方法是否有特定的名称?或者这会属于单点交叉?

在许多关于变长遗传算法的论文中,它被称为一点交叉。

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

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

C2 = [ B1, B2, B3, B4]

C1选择交叉点1,为C2选择3,您会得到:

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染色体阵列上执行突变的正确方法吗?

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

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

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