这一切都在标题中,但对于任何对进化算法感兴趣的人来说,这是一个细分:

在EA中,基本前提是你随机生成一定数量的生物(实际上只是一组参数),针对一个问题运行它们,然后让顶级表演者活下来。

然后你将幸存者的杂交组合,幸存者的突变以及一定数量的新随机生物重新组合起来。

这样做几千次,就会产生有效的生物。

有些人也会做一些事情,例如引入多个“岛屿”。生物体,它们是分开的种群,允许偶尔杂交一次。

所以,我的问题是:什么是最佳的再增殖百分比?

我一直保持前10%的表现,并且重新种植30%的杂交种和30%的突变。剩余的30%用于新生物。

我也尝试了多岛理论,我也对你的结果感兴趣。

对我而言,这绝不是EA可以解决的问题类型。你知道有人在尝试吗?

提前致谢!

有帮助吗?

解决方案

我最初试图模拟我认为有机系统的样子。最终决定不好,并且更加积极,保持10%,变异20%,杂交60%,随机10%。

然后我注意到我的前10%大致相同。所以我将随机数增加到30%。这对一些人有所帮助,但并不多。

我确实尝试了多个岛屿,一代跳绳和再播种,这给出了更好的结果,但仍然非常不令人满意,前10%的几乎没有变化,为了获得任何结果。大部分代码都学会了如何破解我的健康评估。

获得最佳表现者真的很容易,所以不要担心会留下太多的表现。杂交种有助于减少积极和消极的特性,因此它们很有用,但实际上你想得到的是很多好的随机繁殖。专注于突变和新的randoms来引入特征,并让杂交和表现最好的只需跟踪最佳状态并更慢地完善它们。 IE:基于上一代的东西只是找到一个更好的局部最大值,randoms找到更好的全局最大值。

我仍然相信你的问题的最佳答案可以通过观察自然现象来找到,例如最近一篇关于果蝇飞行路径随机性的文章,这样就可以解决。

可能最好的答案就是运行它并调整它,不要害怕相当大的调整,人口是强大的。确保您实现了一种保存和继续的方式。

其他提示

我在GA和EA上遇到的最佳资源是John Koza关于遗传编程的书籍。他深入讨论了这一主题 - 编码基因组的技术,随机变异,育种,调整适应度函数。

就我个人而言,我只为教学目的编写了一小部分模拟器。我发现,我如何调整这些百分比与我正在使用的适应度函数的细节,我引入了多少随机突变以及我如何“聪明”地尝试进行突变和繁殖有关 - 我发现'聪明'我试图制作变异器和交叉逻辑,人口提高其健康得分的速度越快 - 我也发现我在变异的概率上过于保守 - 我的初始运行达到局部最大值并且有一个很难摆脱它们。

这些都没有给你具体的答案,但我认为没有具体的答案,GA的性质无法预测,调整这些参数可能仍然是一种艺术。当然,你总是可以尝试使用这些参数作为染色体的meta-GA,搜索能够在你正在运行的基础GA中产生更快速适应性的设置。

取决于你想要的'meta'。

这是一个激烈辩论(在文献和 Melanie等人的书主题似乎是特定领域的。对于具有n个参数的一种类型的一个问题,什么有效,对于另一个问题,另一个域或另一个参数集几乎不起作用。

所以,正如TraumaPony建议的那样,自己调整一下你正在解决的每个问题,或者写一些东西来为你优化它。你可以做的最好的事情就是跟踪你所有的“旋钮 - 旋转”。和微调实验,以便您可以绘制出解决方案的地形,并了解如何在该空间内快速优化。还可以尝试其他技术,例如登山,这样你就可以有一个基线来打败。

@Kyle Burton:每个班级的不断辩论的交叉与突变率将问题移交给GAs和GP。

假设您有一种量化表现最高的X%百分比的方法,我建议您不要使用硬编码阈值,而是分析性能分布,并在第一次主要性能下降范围内的某个位置进行截止,然后调整你的crossbreads,突变和新的生物来填补空白。这种方式,如果你有一个非常“富有成效”的在很多变种成功的情况下,你不会投入大量的高绩效者。此外,如果你有一个“非生产性”的你可以废弃更多的现有生物,转而使用更多的新生物。

通过设置来自父染色体的几个基因的突变和交叉,我已经取得了一些成功,从而增加了种群的多样性。

这一直有效,直到突变率降至零;因为这可能会产生周期性的进化压力,所以你应该尝试确保这些基因的最低比率。

在实践中,我选择了多染色体基因型。一条染色体编码另一条生殖功能。较小的“繁殖染色体”具有明显的突变和交叉固定率。

我发现这会阻止经典的高原和人口的融合。

顺便说一句,我倾向于为每个孩子做交叉和变异。

对于世代的GAs,我试图完全避开精英主义,但是在多个岛屿居住的地方,我保留着每个岛屿的顶级精英。当群岛聚集在一起时,精英们就可以一起繁殖。

似乎有一些答案建议使用第二个GA来确定第一个GA的最佳参数,而没有提到如何确定第二个GA的最佳参数。我不禁怀疑那些提出这种方法的人的宗教信仰......

正如其他人所提到的,最佳组合将取决于您的具体问题和其他特定问题因素,例如解决方案空间的大小。

在我们讨论从一代到下一代的演变细分之前,考虑每一代的规模是很重要的。一般来说,我的方法是从相当多的人口(约10万至50万人)开始,他们是相当多样化的人,这是Koza在他的一些工作中所建议的。要从一开始就获得这种多样性,您可以将解决方案空间划分为多个桶,然后确保每个桶中至少有一定数量的个体。 (E.G.如果你有每个人的树表示,确保创建了相等的深度2,3,...,max_depth)

就你的实际问题而言,没有明确的方法来处理它,但根据你的问题,你可能想要强调随机性或不再强调它。当你想强调它时,你应该保持较少的个体不变,并引入更多的新随机个体。如果解决方案领域中存在许多本地最大值并且您希望进行更广泛的搜索,则通常希望这样做。

当你获得分解时,有一些事情需要考虑......对于一个,重复(在最近的近亲繁殖中有很多相同或新近相同的个体)。为了减少这种情况,您可能希望在不同代之间扫描您的人口,并用新的随机个体或杂交个体替换重复。

也就是说,我目前的方法是保持前1%,将前20%杂交到新的20%,将前40%杂交到接下来的20%,杂交前90%以产生接下来的20% ,并随机生成其余的(39%)。如果有重复项,我会删除它们并用新的随机个体替换它们。

我不使用突变,因为大量的随机个体应该注意添加“突变”。在下面的杂交中。

你知道你能做什么......你可以写一个遗传算法来确定最佳分布。

但是,通常我保持前12%和28%的杂交种;其他人各占30%。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top