我正在使用一系列教程在 javascript 中构建我的第一个遗传算法。
我正在为这个调度教程构建一个稍微简单的结构 http://www.codeproject.com/KB/recipes/GaClassSchedule.aspx#Chromosome8 ,但我遇到了繁殖问题。
我有 60 个个体,现在我选择前两个个体进行繁殖,然后随机选择一些其他个体与前两个个体进行繁殖,我不会最终得到一个相当小的个体吗? parent 的数量相当快?
我认为如果我将前两个结果与接下来的 20 个结果中的每一个进行繁殖,我将不会在解决方案中取得太大进展。
这样对吗?是否有普遍接受的方法来执行此操作?
最佳答案
我有一个 Javascript 遗传算法样本 here .
您的方法的一个问题是,您总是通过与前 2 名个体交配来杀死种群的多样性。这永远不会很好地工作,因为它太贪婪,而且您实际上首先会破坏拥有遗传算法的目的。
这就是我实现与精英主义交配的方式(这意味着我保留了一定比例的未改变的最适合个体并随机交配所有其他人),我会让代码来说话:
// save best guys as elite population and shove into temp array for the new generation
for(var e = 0; e < ELITE; e++) {
tempGenerationHolder.push(fitnessScores[e].chromosome);
}
// randomly select a mate (including elite) for all of the remaining ones
// using double-point crossover should suffice for this silly problem
// note: this should create INITIAL_POP_SIZE - ELITE new individualz
for(var s = 0; s < INITIAL_POP_SIZE - ELITE; s++) {
// generate random number between 0 and INITIAL_POP_SIZE - ELITE - 1
var randInd = Math.floor(Math.random()*(INITIAL_POP_SIZE - ELITE));
// mate the individual at index s with indivudal at random index
var child = mate(fitnessScores[s].chromosome, fitnessScores[randInd].chromosome);
// push the result in the new generation holder
tempGenerationHolder.push(child);
}
评论相当不错,但如果您需要任何进一步的指导,请询问(here 是 github 存储库,或者您可以在上面的 url 上查看源代码)。我多次使用这种方法(精英主义),对于基本场景,它通常效果很好。
希望这对您有所帮助。
关于algorithm - 遗传算法中多个 child 的育种 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173962/