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

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

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

可能的原因是:

  • 该算法有错误(暂时排除!)
  • 人口很少
  • 变异率很高
  • 配偶率可能会更好
  • 算法如下所示:

  • 首先创建最初的人口
  • 每个成员的初始常量被分配(根据我的偏差乘以0.75和1.25之间的随机因子)
  • 每一代人都配对参加比赛
  • 获胜者被克隆两次,如果两个都被克隆一次
  • 如果random()小于mutate rate,则克隆会突变一个基因
  • 突变将随机常数与0.75和1.25之间的随机因子相乘
  • 在固定的时间间隔内,取决于配偶率,成员是成对的,基因是混合的
  • 我目前的设置:

  • 人口:40(至低)
  • 变异率0.10(10%)
  • 配偶率0.20(每隔5代)
  • 什么是更好的人口规模,变异率和配偶率?

    猜测是值得欢迎的,预计不会有确切的值! 此外,如果您有类似的遗传算法的见解,您会喜欢分享,请这样做。

    PS:有问题的游戏比赛,如果有人感兴趣:http://ai-contest.com/


    你的突变规模惊人地高。 它也有一些固有的偏见 - 当前值越大,突变就越大。

    你可以考虑

  • 有一个(很多!)更小的突变
  • 给突变一个固定的范围
  • 以不同的方式分配您的突变尺寸 - 例如,您可以使用平均值为1的正态分布。
  • RA Fisher曾将突变尺寸与显微镜聚焦进行了比较。 如果你改变了重点,你可能会朝着正确的方向或错误的方向前进。 但是,如果你相当接近最佳状态并将其转化为很多 - 要么你会走错方向,否则你会超出目标。 所以更微妙的调整通常更好!


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

    通常他们使用高交叉和低突变。 既然你想创造力我建议你高突变和低交叉。 = RSS

    在你的变异函数中真正小心,留在你的空间搜索(在0.75,1.25内)。 使用GAUL随机函数,如random_double(min,max)。 他们设计得很好。 建立你自己的变异功能。 确保父母死亡!

    那么你可能希望将它与一个包含在GAUL中的单形(Nelder-Mead)相结合,因为具有低交叉的遗传编程将找到一个非最优解。

    链接地址: http://www.djcxy.com/p/48863.html

    上一篇: Optimal population size, mutate rate and mate rate in genetic algorithm

    下一篇: Convert an entire String into an Integer in JavaScript