【问题标题】:Crossover operator for permutations用于排列的交叉运算符
【发布时间】:2013-01-03 10:21:44
【问题描述】:

我正在尝试解决我的排列中遗传算法中的交叉问题。 假设我有两个 20 个整数的排列。我想交叉他们生两个孩子。父母里面有相同的整数,但顺序不同。

例子:

Parent1: 
 5 12 60 50 42 21 530 999 112 234 15 152 601 750 442 221 30 969 113 134
Parent2: 
 12 750 42 113 530 112 5 23415 60 152 601 999 442 221 50 30 969  134 21

就这样吧 - 我怎样才能得到这两个孩子?

【问题讨论】:

  • 因为我想用遗传学解决这个问题。
  • 每个遗传算法都有一个适应度测试,您可以在其中定义一组规则来决定哪些孩子会存活,哪些孩子会死。这就是我想知道的。
  • 哇,不知道:] 我选择了父母,他们是“最好的” - 我现在只是想有一种有效的方法来计算没有重复元素的孩子。
  • 这与在 Parent1 或 Parent2 上运行简单排列有何不同?

标签: algorithm genetic-algorithm crossover


【解决方案1】:

您正在寻找的是ordered crossover。旅行推销员问题有一个解释here

这是实现部分映射交叉 (PMX) 变体的some Java code

【讨论】:

  • 似乎 TSP 示例链接已失效。
【解决方案2】:

根据我对遗传算子的研究和实现。顺序编码存在许多类型的交叉运算符(即不允许重复基因,如TSP)。总的来说,我喜欢认为有两个主要的家庭:

ERX 系列

邻域列表用于存储双亲中每个节点的邻居。然后,仅使用列表生成孩子。众所周知ERX更多的是respectful and alleles transmitting,这基本上意味着基因之间的联系不太可能被打破。

类似 ERX 的算子示例包括: 边缘重组 (ERX)、Edge-2、Edge-3、Edge-4 和广义分区交叉 (GPX)。

类似OX的分频器

选择了两个交叉点。然后,点之间的基因在两个父母之间交换。由于不允许重复,因此每个交叉都提出了一种避免/消除重复的技术。这些交叉运算符比 ERX 更具破坏性。

类似 OX 的交叉示例: 阶交叉 (OX)、最大保留交叉 (MPX) 和部分映射交叉 (PMX)。

第一族 (ERX) 在普通遗传算法中表现更好。而第二类更适合混合遗传算法或模因算法(使用局部搜索)。 This paper详细解释。

【讨论】:

  • “Maximal Preservative Crossover (CX)”,你的意思是 MPX 而不是 CX,就我进入主题而言,CX 代表 Cycle Crossover
【解决方案3】:

在旅行销售代表问题 (TSP) 中,您希望订单访问城市列表,并且您希望每个城市仅访问一次。如果您直接在基因组中对城市进行编码,那么简单的交叉或突变通常会生成无效的行程。

我曾经想出一个解决这个问题的新方法:我没有直接在基因组中编码解决方案,而是编码了一个可以重新排序规范值列表的转换。

给定基因组 [1, 2, 4, 3, 2, 4, 1, 3],您可以从任意顺序的城市列表开始,比如按字母顺序:

  1. 亚特兰大
  2. 波士顿
  3. 芝加哥
  4. 丹佛

然后你会从基因组中获取每一对值并交换这些位置的城市。所以,对于上面的基因组,你会交换 1 和 2 中的那些,然后是 4 和 3 中的那些,然后是 2 和 4 中的那些,最后是 1 和 3 中的那些。你最终会得到:

  1. 丹佛
  2. 芝加哥
  3. 波士顿
  4. 亚特兰大

使用这种技术,您可以使用任何类型的交叉或变异操作,并且始终获得有效的游览。如果基因组足够长,则可以探索整个解空间。

我已将它用于 TSP 和其他优化问题,并取得了很大的成功。

【讨论】:

    【解决方案4】:

    交叉的选择取决于整数的顺序或绝对位置对适应度是否重要。在HeuristicLab(C#)中,我们实现了文献中的几个流行的,包括:OrderCrossover(2 个变体)、OrderBasedCrossover、PartiallyMatchedCrossover、CyclicCrossover(2 个变体)、EdgeRecombinationCrossover (ERX)、MaximalPreservativeCrossover、PositionBasedCrossover 和 UniformLikeCrossover。它们的实现可以参考 HeuristicLab.Encodings.PermutationEncoding 插件中的科学资源一起找到。 ERX 仅对 TSP 或类似 TSP 的问题有意义。 CX 是基于位置的,PMX 部分是位置部分是基于顺序的,但更倾向于位置。 OX 完全基于订单。

    请注意,我们的实现假定使用从 0 到 N-1 的整数的连续编号排列。您必须首先将它们映射到此范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多