Uniform Crossover(p = 0.5)和Shuffle Crossover之间有什么区别?

时间:2013-10-04 15:37:00

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

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

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

2 个答案:

答案 0 :(得分:1)

对于均匀交叉,可以有许多交叉点。交叉点的数量基本上变成二项分布。使用p(c)=0.5,您可以在K/2位长的遗传字符串中获得大约K个交叉点。

另一方面,随机播放交叉选择一个,只有一个,随机选择作为交叉点。

答案 1 :(得分:1)

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

  • 统一交叉
    我们从其他交换中选择一个与概率 p independent 进行交换的基因,即伯努利实验 我们执行此伯努利实验,整个染色体,即让我们说 n个基因,所以掉期数量将遵循二项分布

  • shuffle-cross-over
    我们首先随机地改变染色体(这主要是为了避免位置偏差,即将概率交换与染色体中基因的位置分离 - 我们确实在制服中注意这种偏差情况也是如此。与统一案例相比,不同是我们只选择一个交叉点,以及此交叉一侧的所有元素点将被交换,因此我们以1/2的相等概率交换任意数量的基因。因此我们也避免了所谓的分布偏差,即交换数量的概率不同。