DoodleJump Q学习,如何奖励以及哪些投入?

时间:2020-04-20 13:54:20

标签: python tensorflow reinforcement-learning q-learning

我已经实现了DoodleJump,并希望AI通过Q-Learning学习它。人工神经网络和整个Q学习过程也已经实现。

但是到目前为止,它似乎无法正常工作。我非常确定,其原因在于奖励系统或输入要素工程(也许两者都有)。

所以我的问题是:奖励代理商的一种好方法是什么?我应该给人工神经网络哪些输入?


我的方法是:

奖励系统:

  • 当代理人过低时奖励-5,以至于他输了
  • 击中平台时奖励1
  • 否则奖励始终为0

输入:

  • 玩家朝8个方向看(上,右,右,右下,下,左下,左,左上)
  • 如果某个方向上有平台,则选择最近的平台并计算距离
  • 假设距离为d。那么此方向的输入为:1.0/d
  • 这样,如果平台距离更近,则输入会更大。并且总是小于1
  • 如果在某个方向上没有平台,则对应的输入为0
  • 第一个参数是代理的上升速度(也可以为负)(也已归一化,因此始终在-1和1之间)

整个输入数组:

input = [velocity, distance first direction, distance second direction, …, distance 8. direction]

所以我经常有这样的输入:

[-0.2   0.    0.    0.    0.    0.    0.25  0.    0.  ]
[0.4 0.  0.  0.  0.  0.  0.  1.  0. ]
[0.6        0.14285714 0.         0.         0.         0.11111111        0.         0.         0.        ]

但是,就像我说的那样,它不起作用。

(为防止NaN,我在这里将y设置为0,所以问题不在于Q值升至无穷大)

这是我的模特:

model = Sequential()

model.add(Dense(9))
model.add(Activation('relu'))
model.add(Dense(6))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('linear'))

model.compile(loss='mse',
              optimizer=Adam(),
              metrics=['mae'])

1 个答案:

答案 0 :(得分:0)

不是直接的解决方案,而是一种解决方法:

我现在尝试了一种不同的方法,在有监督的学习下进行了尝试-绝对成功。这就像一种魅力。