所以我有一个简单的游戏,球可以跳跃并且障碍物经常出现,下面是图片供参考。我的遗传算法提供了100个随机网络,20个交叉(变异率为1%)和10个“模糊”网络(本质上是强迫变异,大约为20%)。 现在,如果我对周期性障碍物具有基本的非缩放移动速度,那么我的遗传算法将学习如何在大约1-2代内击败游戏(不会输掉并永远永远继续下去),因为这是x-> y的简单映射这是意料之中的。
但是,如果我决定将速度缩放比例(对于跳跃/障碍速度)改为
speed = speed * (1 + points/1000) #Where 1 point is passing 1 obstacle
我得到的是大量无法在任何实时范围内优化输出的网络。我确保将所有相关数据作为输入节点传递; ball.y(因为球不会在x中移动),障碍物x,障碍物速度,ball.jumpspeed,并且输出是一个单个节点,表示1 / jump,0 /不执行任何操作。
这里有一些适合健身的示例输出
Generation 1 HIGH: 0.425 LOW: 0.000 AVG:0.1724547451001511
Generation 2 HIGH: 0.425 LOW: 0.165 AVG:0.17874677670683908
Generation 3 HIGH: 1.396 LOW: 0.165 AVG:0.19673599387987226
Generation 4 HIGH: 2.549 LOW: 0.165 AVG:0.2383717001862799
Generation 5 HIGH: 2.549 LOW: 0.166 AVG:0.236279356056333
Generation 6 HIGH: 2.549 LOW: 0.166 AVG:0.2173996155501196
Generation 7 HIGH: 2.549 LOW: 0.167 AVG:0.20148711858181925
Generation 8 HIGH: 2.549 LOW: 0.167 AVG:0.1985246675827307
...
Generation 69 HIGH: 2.549 LOW: 0.167 AVG:0.31935190938788394
Generation 70 HIGH: 2.549 LOW: 0.167 AVG:0.22603314425367058
Generation 71 HIGH: 2.549 LOW: 0.167 AVG:0.21650311863741362
Generation 72 HIGH: 2.549 LOW: 0.166 AVG:0.2258790184428012
我确实了解遗传算法本质上依赖于随机改进,但是我想知道在这种“简单”问题上长时间停滞是否正常?我可能只是在开枪,我是从头开始编写整个网络/游戏的,我很确定它可以正常工作,但是我对结果有些怀疑,有人在这种事情上有更多的背景吗?我的结果很标准?
还要显示一个代码示例至少需要大约500行,所以我认为发布它可能不是一个好主意。
编辑: 在发布此代码后,我的后代又获得了可观的增长,我正在积极运行这段代码,以尝试查看我的模型是否可以在此过程中变得“完美”。
Generation 83 HIGH: 2.549 LOW: 0.841 AVG:0.908536733716079
Generation 84 HIGH: 2.549 LOW: 0.839 AVG:0.9262430139422534
Generation 85 HIGH: 8.784 LOW: 0.842 AVG:0.9670151588313797
编辑:这里是指向github上托管的基本版本的链接,在我上传的版本中,如果您阅读testdata.txt,您会看到输入是二进制字符串,它们只是试图乘以2作为预期输出。我不明白为什么它目前无法弄清楚确切的输出是什么,而请注意,一旦进入实际测试,代码就会变得非常丑陋,所有内容都需要重新构造。< / em> https://github.com/TylerJohnson44/PyNN
如果有人可以告诉我我的代码在使用适当的GA的情况下不能成为适当的NN,我将不胜感激。