我为比赛编写了一个游戏程序,它依赖于大约16个浮点“常量”。改变常数可以并将对比赛风格和成功率产生巨大影响。
我还编写了一个简单的遗传算法来生成常数的最佳值。但是,该算法不会生成“最佳”常数。
可能的原因:
算法如下:
我目前的设置:
人口规模,变异率和配偶率的更好价值是什么?
欢迎猜测,不要求准确的值! 此外,如果你有类似遗传算法的见解,你想分享,请这样做。
P.S。:有问题的比赛,如果有人有兴趣:http://ai-contest.com/
答案 0 :(得分:2)
你的突变大小令人惊讶地高。其中还有一些固有的偏见 - 当前值越大,突变就越大。
您可以考虑
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)结合起来,因为低交叉的遗传编程会找到一个非最佳解决方案。