Javascript 如果轮盘赌轮盘选择返回相同的父对象,该怎么办?

Javascript 如果轮盘赌轮盘选择返回相同的父对象,该怎么办?,javascript,artificial-intelligence,genetic-algorithm,Javascript,Artificial Intelligence,Genetic Algorithm,我正在尝试使用轮盘赌轮盘选择来实现一种遗传算法,我想知道——如果我们尝试繁殖一个孩子时,选择了同一个父母,会发生什么?由于生成的子对象与父对象相同,我们是否仍然进行交叉 breedChild: function() { //blah blah blah //blah blah blah //blah blah blah var mom = this.rouletteWheelSelection(), dad = this.rouletteWheelSelection(

我正在尝试使用轮盘赌轮盘选择来实现一种遗传算法,我想知道——如果我们尝试繁殖一个孩子时,选择了同一个父母,会发生什么?由于生成的子对象与父对象相同,我们是否仍然进行交叉

breedChild: function() {

  //blah blah blah
  //blah blah blah
  //blah blah blah

  var mom = this.rouletteWheelSelection(),
    dad = this.rouletteWheelSelection();
}



rouletteWheelSelection: function() {
  var total = 0,
    //totalFitnessScore is precalculated, and represents the sum of all the fitness scores in current population
    threshold = totalFitnessScore * Math.random();

  for (var i = 0; i < genomesArr.length; i++) {
    total += genomesArr[i].fitnessScore;

    if (total >= threshold) break;
  };

  return genomesArr[i];
}
breedChild:function(){
//废话废话
//废话废话
//废话废话
var mom=this.rouletteWheelSelection(),
dad=this.rouletteWheelSelection();
}
轮盘赌轮选择:函数(){
var总计=0,
//totalFitnessScore是预先计算的,代表当前人群中所有健康分数的总和
阈值=totalFitnessScore*Math.random();
对于(变量i=0;i=阈值)中断;
};
返回genomesArr[i];
}

交叉不会有什么不同,但是选择相同的父母应该非常少,以至于在这种情况下,检查每个孩子的父母是否相同比执行交叉在计算上更昂贵——如果不是,那么你的基因库将太小,无法产生有效的结果。另一方面,如果引入突变,孩子仍然可能与父母不同

这不是编程问题。您的问题与编程行为或用于编程的工具无关。@meagar这是一个要求澄清算法的问题。这是一个话题。值得补充的是,有一种气体可以使用某种形式的乱伦预防措施来防止父母在相同甚至太相似的情况下交配。CHC也许是最著名的此类方法。因此,尽管不必担心两次选择同一个父代的特殊情况,但作为更大的多样性保护方案的一部分,构建一种算法来防止这种情况可能是值得的。