这是一条使用神经网络作为 aq 函数逼近器的 q-learning 蛇,我在这里失去了理智,目前的模型比最初的模型更糟糕。
当前模型使用来自 scikit-learn 的 32x32x32 MLPRegressor,使用 relu 作为激活函数和 adam 求解器。
奖励函数如下:
- 死亡奖励 = -100.0
- 活着的奖励 = -10.0
- 苹果奖励 = 100.0
从每个状态中提取的特征如下:
- 蛇头前面是什么(苹果,空,蛇)
- 蛇头左边是什么
- 蛇头右边是什么
- 头到苹果的欧几里得距离
- 从头到苹果的方向以弧度测量
- 蛇的长度
一个情节包括蛇一直玩直到它死,我还在训练一个概率 epsilon,它表示如果不满足,蛇将采取随机行动的概率,蛇将采取神经网络所采取的行动给出最大的分数,这个 epsilon 概率在每次迭代后逐渐递减。
情节是由回归者以相反的顺序一次学习一个状态动作。
然而,神经网络无法过于接近 q 函数,无论蛇对任何状态采取相同的动作多少次迭代。
我尝试过的事情:
- 改变神经网络的结构
- 改变奖励函数
- 更改提取的特征,我什至尝试将整个地图传递给网络
代码(python):https ://pastebin.com/57qLbjQZ
