遗传算法中的最优种群大小,变异率和配合率

时间:2010-11-12 10:12:31

标签: genetic-algorithm genetic-programming

我为比赛编写了一个游戏程序,它依赖于大约16个浮点“常量”。改变常数可以并将对比赛风格和成功率产生巨大影响。

我还编写了一个简单的遗传算法来生成常数的最佳值。但是,该算法不会生成“最佳”常数。

可能的原因:

  • 算法有错误(暂时将其排除在外!)
  • 人口很少
  • 变异率很高
  • 配合率可能更好

算法如下:

  • 首先创建初始人口
  • 分配每个成员的初始常量(基于我的偏差乘以0.75和1.25之间的随机因子)
  • 每一代人都配对进行一场比赛
  • 胜利者被克隆两次,如果抽签都克隆一次
  • 如果random()小于mutate rate
  • ,则克隆会突变一个基因
  • 突变将随机常数乘以0.75和1.25之间的随机因子
  • 以固定的间隔,依赖于配偶率,成员配对并且基因混合

我目前的设置:

  • 人口:40(至低)
  • 突变率0.10(10%)
  • 配对率0.20(每5代)

人口规模,变异率和配偶率的更好价值是什么?

欢迎猜测,不要求准确的值! 此外,如果你有类似遗传算法的见解,你想分享,请这样做。

P.S。:有问题的比赛,如果有人有兴趣:http://ai-contest.com/

2 个答案:

答案 0 :(得分:2)

你的突变大小令人惊讶地高。其中还有一些固有的偏见 - 当前值越大,突变就越大。

您可以考虑

  1. 有一个(很多!)较小的突变
  2. 将变异赋予固定范围
  3. 以不同方式分发您的突变大小 - 例如你可以使用平均值为1的正态分布。
  4. R.A。 Fisher曾将突变大小与聚焦显微镜进行比较。如果改变焦点,可能会朝着正确的方向或错误的方向前进。但是,如果你非常接近最佳状态并且转动很多 - 要么你走向错误的方向,要么超过目标。因此,更微妙的调整通常更好!

答案 1 :(得分:2)

使用GAUL框架,它非常简单,因此您可以提取目标函数以将其插入GAUL。如果你有一台多核机器,那么你需要在编译时使用omp(openMP)来并行化你的评估(我认为这是时间的消耗)。这样你就可以拥有更大的人口规模。 http://gaul.sourceforge.net/

通常他们使用高交叉和低突变。既然你想要创造力,我建议你高突变和低交叉。http://games.slashdot.org/story/10/11/02/0211249/Developing-emStarCraft-2em-Build-Orders-With-Genetic-Algorithms?from=rss

要非常小心你的突变功能以保持你的太空搜索(在0.75,1.25之内)。使用GAUL随机函数,例如random_double(min,max)。他们的设计非常好。建立自己的变异功能。确保父母去世!

然后你可能希望将它与GAUL中包含的单纯形(Nelder-Mead)结合起来,因为低交叉的遗传编程会找到一个非最佳解决方案。