使用强化学习,训练Snake以特定的步骤进食



这些天我在尝试强化/深度Q学习。我从一个基本的"蛇"游戏开始。借助本文:https://towardsdatascience.com/how-to-teach-an-ai-to-play-games-deep-reinforcement-learning-28f9b920440a我成功地训练它吃食物。现在我想让它按照特定的步骤进食,比如说"20",而不是更多,也不是更少。奖励制度和政策将如何改变?我尝试了很多事情,但收效甚微。例如,我尝试过这个:

def set_reward(self, player, crash):
self.reward = 0
if crash:
self.reward = -10
return self.reward
if player.eaten:
self.reward = 20-abs(player.steps - 20)-player.penalty
if (player.steps == 10):
self.reward += 10 #-abs(player.steps - 20)
else:
player.penalty+=1
print("Penalty:",player.penalty)

谢谢。以下是程序:https://github.com/maurock/snake-ga

我认为这种方法是有问题的,因为尽管更改了奖励函数,但您没有在观察空间中包含步骤数。代理需要观察空间中的信息,以便能够区分它应该在什么点撞向目标。就目前情况来看,如果你的经纪人在球门旁边,它所要做的就是右转,但到目前为止只做了五次移动,这与它做了19次移动完全相同。关键是,你不能给代理提供相同的状态,并期望它做出不同的动作,因为代理看不到你的奖励函数,它只会根据状态获得奖励。因此,你在反驳这些行为。

想想你什么时候来测试代理的性能。不再有奖励。您所做的只是向网络传递一个状态,并期望它为同一状态选择不同的操作。

我假设你的状态空间是某种2D阵列。更改代码以包含状态空间中的步骤数应该很简单。那么奖励函数将类似于观察[num_steps]=20:奖励=10。询问您是否需要更多帮助编码

相关内容

  • 没有找到相关文章

最新更新