algorithm - 遗传算法中多个 child 的育种 parent

标签 algorithm artificial-intelligence genetic-algorithm

我正在使用一系列教程在 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/

相关文章:

c++ - O(log n) 算法在预排序列表的 union 中查找具有等级 i 的元素

algorithm - 局部波束搜索和随机波束搜索有什么区别?

java - 将手写笔记的图像转换为文本

c - 格雷码到二进制的转换

python函数正在改变一个全局变量

java - 三重 for 循环的时间复杂度

算法 - 找到数组的起始索引,使元素之和保持 >= 0

java - 分析单词文本的算法

compiler-construction - 如果我想从事人工智能和机器学习工作,我必须了解编译器理论吗

python - 简单游戏的遗传编程,对非专家可行吗?