所以我有一个简单的游戏,一个球可以跳跃,障碍物以常规方式出现,下面的图片可供参考。我的遗传算法提供100个随机网络,20个交叉(突变率为1%)和10个“模糊”网络(基本上是强制突变,速率约为20%)。
现在,如果我的周期性障碍物具有基本的非缩放移动速度,我的遗传算法将在大约1-2代中学习如何击败游戏(简直不会丢失并永远持续),因为这是x-> y的简单映射这是预料之中的。
但是,如果我决定改变我的速度缩放(对于跳跃/障碍物速度)来说
speed = speed * (1 + points/1000) #Where 1 point is passing 1 obstacle
我得到的是大量的网络无法在任何实时帧中优化输出。我确保将所有相关数据作为输入节点传递; ball.y(因为球不在x中移动),obstacle.x,obstacle.speed,ball.jumpspeed和输出是单节点1 /跳,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
发布于 2018-08-31 09:32:57
我想看看代码来检查发生了什么。你能把它上传到github或gist吗?
https://stackoverflow.com/questions/-100006086
复制相似问题