【问题标题】:What's the difference between Uniform Crossover (with p=0.5) and Shuffle CrossoverUniform Crossover(p=0.5)和 Shuffle Crossover 有什么区别
【发布时间】:2013-10-04 15:37:00
【问题描述】:

在进化/遗传算法中有多种重组方法。它们中的大多数都存在与染色体长度相关的偏差(也称为位置偏差)。

Uniform crossovershuffle crossover 可以解决这个问题。但是,我不明白两者的区别,如果在统一交叉的情况下p(c)=0.5

解释

  • 通过与p(c)=0.5 的统一交叉,每个基因都是可能的 交叉点。
  • 使用 shuffle crossover,染色体序列首先被打乱 (统一),然后分配一个交叉点,最后 原始染色体序列被恢复 - 这实际上意味着尽管只发生了一次交叉,但它可能会独立影响染色体中的每个位置。

由于这两种方法都涉及完全随机化,我看不出结果应该不同的原因。


我想确切地知道,因此我编写了一个小脚本来测试这两种机制。这里有一些 R 代码,如果你想自己尝试一下

parent1 <- rep(0, 10000) # 10.000 genes in the chromosome - change at will
parent2 <- rep(1, length(parent1))

# Uniform crossover
offspring1_unif <- rep(-1, length(parent1)) # initialize offspring1_unif
offspring2_unif <- rep(-1, length(parent1)) # initialize offspring2_unif

for(i in 1:length(parent1)) {
  if (runif(1) < 0.5) {
    offspring1_unif[i] <- parent1[i]
    offspring2_unif[i] <- parent2[i]
  } else {
    offspring1_unif[i] <- parent2[i]
    offspring2_unif[i] <- parent1[i]
  }
}

# Shuffle crossover

## Shuffle
shuffler <- seq(1, length(parent1))
shuffler <- sample(shuffler, length(parent1))

## perform the crossover
crossover_point <- sample(1:length(parent1), 1)

offspring1_shuffle <- rep(-1, length(parent1)) # initialize offspring1_shuffle
offspring2_shuffle <- rep(-1, length(parent1)) # initialize offspring2_shuffle

for(i in 1:length(shuffler)) {
  if (i < crossover_point) {
    offspring1_shuffle[shuffler[i]] <- parent1[shuffler[i]]
    offspring2_shuffle[shuffler[i]] <- parent2[shuffler[i]]
  } else {
    offspring1_shuffle[shuffler[i]] <- parent2[shuffler[i]]
    offspring2_shuffle[shuffler[i]] <- parent1[shuffler[i]]

  }
}

mean(offspring1_unif) # 0.493
mean(offspring1_shuffle) # 0.3295

mean(offspring2_unif) # 0.507
mean(offspring2_shuffle) # 0.6705

sd(offspring1_unif) # 0.499976
sd(offspring1_shuffle) # 0.4700552

sd(offspring2_unif) # 0.499976
sd(offspring2_shuffle) # 0.4700552

【问题讨论】:

    标签: artificial-intelligence genetic-algorithm evolutionary-algorithm


    【解决方案1】:

    区别在于两种方法中交换次数分布

    • 统一交叉
      我们选择一个基因以 p 独立于其他交换的概率进行交换,即 伯努利实验 并且我们执行这个伯努利实验,对于整个染色体,即假设为 n 个基因,因此交换的数量将遵循 二项式分布

    • 随机交叉
      我们首先随机打乱染色体(这样做主要是为了避免位置偏差,即将概率交换与染色体中基因的位置分离——我们确实在制服中处理了这种偏差case 也一样。与uniform case 不同的是,我们只选择一个交叉点,并且该交叉点一侧的所有元素都将被交换,因此我们以 1/2 的等概率交换任意数量的基因。因此我们也避免了所谓的分布偏差,即交换次数不同的概率。

    【讨论】:

      【解决方案2】:

      对于统一的交叉点,可以有很多交叉点。交叉点的数量本质上变成了二项分布。使用p(c)=0.5,您可以期望在K 位长的遗传字符串中有大约K/2 交叉点。

      另一方面,Shuffle crossover 会选择一个,并且只有一个,随机位作为交叉点。

      【讨论】:

      • ...但是关于洗牌交叉,据我所知,在交叉之前洗牌染色体之后也会期望每个亲本的K/2基因在随机位置。
      • 从您问题中的示例中:“然后分配 一个 交叉点”
      猜你喜欢
      • 2019-12-21
      • 2016-06-19
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多