【问题标题】:How to perform crossover in a 2-dimensional array - genetic algorithm如何在二维数组中执行交叉 - 遗传算法
【发布时间】:2020-04-24 08:32:42
【问题描述】:

我有以下两条染色体,它们表示为二维数组。

// 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
]

这是在二维染色体阵列上执行突变的正确方法,哪些行必须保持不变?如果是这样,此方法是否有特定名称?或者这会属于One-point 交叉?

【问题讨论】:

  • 这非常依赖于您正在解决的问题。没有这些信息就很难说。

标签: algorithm multidimensional-array genetic-algorithm mutation crossover


【解决方案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]

这允许染色体长度开始增长。根据具体问题,它可能是一个要求或只是膨胀(在这两种情况下,您可能需要在适应度函数中考虑这一点)。

这是在二维染色体阵列上执行突变的正确方法,哪些行必须保持不变?

这是一种简单的方法(非常好)。 Uniform crossover 是另一种简单的方法。

Synapsing Variable-Length Crossover: Meaningful Crossover for Variable-Length Genomes(Benjamin Hutt 和 Kevin Warwick,IEEE Transactions on Evolutionary Computation,第 11 卷,第 1 期,2007 年 2 月)描述了其他有趣(更复杂)的可能性。

最好的分频器非常针对具体问题

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2014-08-12
    • 2014-02-07
    • 2020-11-21
    • 2016-08-31
    • 1970-01-01
    • 2012-02-13
    • 2015-07-03
    相关资源
    最近更新 更多