9

我在大学里做了一点 GP(注意:很少)工作,最近一直在玩它。我的问题是关于初始运行设置(种群大小、世代数、树的最小/最大深度、初始树的最小/最大深度、用于不同复制操作的百分比等)。设置这些参数的正常做法是什么?人们将哪些论文/网站用作良好的指南?

4

5 回答 5

3

你会发现这在很大程度上取决于你的问题领域——尤其是适应度函数的性质、你的实现 DSL 等。

一些个人经验:

  • 当你有一个嘈杂的适应度函数时,大的人口规模似乎效果更好,我认为这是因为人口中子群在连续几代中的增长起到了对适应度函数的更多采样的作用。我通常使用 100 来表示噪音较小/确定性的功能,1000+ 来表示噪音。
  • 对于代数,最好测量适应度函数的改进,并在它满足您的目标标准时停止。我通常会运行几百代,看看会出现什么样的答案,如果它没有显示出任何改进,那么你可能在其他地方遇到了问题。
  • 树深度要求实际上取决于您的 DSL。我有时会尝试在没有明确限制的情况下进行实现,但会惩罚或消除运行时间过长的程序(这可能是您真正关心的......)。我还发现 ~1000 的总节点数是非常有用的硬限制。
  • 不同突变/重组算子的百分比似乎并不那么重要。只要你有一套全面的突变,任何合理平衡的分布通常都会起作用。我认为这样做的原因是您基本上是在寻找有利的改进,因此主要目标只是确保试验改进合理地分布在所有可能性中。
于 2010-05-15T14:59:49.883 回答
2

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

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

——大卫·J·惠勒

于 2010-05-15T17:19:36.627 回答
1

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

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

一旦我开始更深入地了解 GA,我就意识到考虑到大量的变量,这是一项艰巨的任务,并且泛化非常困难。

从我的(有限的)经验来看,如果你决定简化问题并使用固定的方式来实现交叉、选择,并且只是玩弄人口规模和突变率(以给定的方式实现)试图得出一般结果你'很快就会意识到仍然有太多的变量在起作用,因为在一天结束时,在统计上你会得到一个体面的结果(无论你想如何定义体面)显然仍然主要取决于你遇到的问题解决并因此影响基因组大小(以不同的方式表示相同的问题显然会在给定的 GA 参数的影响方面导致不同的结果!)。

当然可以起草一套指导方针——正如(罕见但很好的)文献所证明的那样——但只有当手头的问题可以以完全相同的方式编码并且适应性以某种等效的方式进行评估(这通常意味着您正在解决非常相似的问题)。

于 2010-05-11T22:40:32.293 回答
0

看看 Koza关于这些问题的大量著作。

于 2010-05-06T15:56:35.077 回答
0

即使在 GP 社区中也有非常不同的思想流派——有些人认为(低)数千人就足够了,而 Koza 和其他人通常不认为是否值得在 GP 人口中少于 100 万人的情况下开始 GP 运行;-)

如前所述,这取决于您的个人品味和经验、资源以及可能使用的 GP 系统!

干杯,简

于 2011-12-11T12:46:56.283 回答