我在尝试使用轮盘选择法实现遗传算法,我想知道如果在尝试繁殖子代时选择了相同的父本,会发生什么?尽管结果子代与父本相同,我们是否仍然进行交叉操作?
breedChild: function() { //blah blah blah //blah blah blah //blah blah blah var mom = this.rouletteWheelSelection(), dad = this.rouletteWheelSelection();}rouletteWheelSelection: function() { var total = 0, //totalFitnessScore是预先计算的,表示当前种群中所有适应度得分的总和 threshold = totalFitnessScore * Math.random(); for (var i = 0; i < genomesArr.length; i++) { total += genomesArr[i].fitnessScore; if (total >= threshold) break; }; return genomesArr[i];}
回答:
交叉操作不会产生差异,但选择相同父本的情况应该非常罕见,以至于每次生成子代时检查父本是否相同所需的计算成本会比在这种情况下进行交叉操作的成本更高——如果不是这样的话,你的基因库将太小,无法产生有效的结果。顺便提一下,如果引入变异,子代仍然可能与父本不同。