初始遗传编程参数

9

我在大学里做过一点GP(注:非常少),最近也一直在尝试。我的问题是关于初始运行设置(种群大小、世代数、树的最小/最大深度、初始树的最小/最大深度、不同繁殖操作所使用的百分比等)。设置这些参数的正常做法是什么?人们使用哪些论文/网站作为良好指南?

5个回答

3
您会发现这在很大程度上取决于您的问题领域 - 特别是适应度函数的性质、实现DSL等等。
一些个人经验:
- 当您有一个嘈杂的适应度函数时,较大的种群大小似乎效果更好。我认为这是因为种群中子组的增长在连续的几代中起到更多的采样适应度函数作用。我通常会使用100个种群进行较少噪音/确定性函数的处理,使用1000+进行嘈杂处理。 - 对于世代数,最好测量改进适应度函数并在满足目标标准时停止。我通常运行几百代,并观察输出了什么样的答案。如果没有显示出任何改进,那么您可能在其他方面存在问题。 - 树深要求确实取决于您的DSL。有时我会尝试一种没有明确限制的实现,但惩罚或消除运行时间过长的程序(这可能是您真正关心的问题...)。我还发现总节点数约为1000个非常有用的硬性限制。 - 不同突变/重组算子的百分比似乎并不重要。只要您拥有全面的突变集合,任何合理平衡的分布通常都可以工作。我认为这是因为您基本上正在寻找有利的改进,因此主要目标只是确保试验性的改进在所有可能性中合理分布。

2

为什么不尝试使用遗传算法来优化这些参数呢? :)

计算机科学中的任何问题都可以通过添加另一层间接性来解决(除了过多的间接性)。

-David J. Wheeler


不要点赞,因为这不是一个正式的答案,但它确实让我笑了。 :-) - Donal Fellows

1

当我开始研究遗传算法时,我也有同样的问题。

我想收集在一个非常简单的问题上变化参数的数据,并将给定的运算符和参数值(例如突变率等)与人口大小等相关结果联系起来。

一旦我更深入地了解了GA,我就意识到由于变量数量巨大,这是一项巨大的任务,而且泛化极其困难。

从我的(有限的)经验来看,如果您决定简化问题并使用固定的方法来实现交叉、选择,并仅通过人口大小和突变率(以给定方式实现)尝试得出一般结果,您很快就会意识到仍然有太多的变量在发挥作用,因为无论如何,在统计上获得合理结果(无论您想如何定义“合理”)之后的代数数量显然仍然主要取决于您正在解决的问题,因此取决于基因组大小(以不同方式表示相同问题显然会导致不同的结果,涉及给定的GA参数的影响!)。

当然可以起草一套指南 - 如(虽然很少但好的)文献所证明的那样 - 但只有当手头的问题可以以完全相同的方式进行编码并且适应度以某种等效的方式进行评估时,您才能有效地用统计术语概括结果(这往往意味着您正在处理非常相似的问题)。


0

我已经阅读了Koza关于这个问题的第一本书。我想自从1992年以来,已经有更多的研究针对适当的起始人口、哪种繁殖方法表现更好等方面展开了。 - cmptrer

0

即使在遗传编程社区内部,也存在非常不同的思想流派 - 有些人认为数千个个体足以构成一个种群,而Koza和其他人则经常认为只有在GP种群中拥有超过一百万个体时才值得开始运行GP ;-)

正如之前提到的,这取决于您的个人口味和经验、资源以及可能使用的GP系统!

祝好, Jan


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接