RL 问题的状态空间、动作空间和奖励系统的表示

数据挖掘 机器学习 强化学习 dqn 执行
2022-02-15 16:53:02

我正在尝试解决代理动态发现(从没有关于环境的信息开始)环境的问题,并在不撞到障碍物的情况下尽可能多地探索环境我有以下环境:

在此处输入图像描述

其中环境是一个矩阵。在此,障碍物用 0 表示,自由空间用 1 表示。代理的位置由矩阵中的 0.8 等标签给出。

代理环境的初始内部表示与代理位置类似。 在此处输入图像描述

每次它探索环境时,它都会不断更新自己的地图:

在此处输入图像描述

单一状态表示只是包含 -

  • 0 表示障碍物
  • 1 未开发区域
  • 0.8 代表位置
  • 0.5 去过一次的地方
  • 0.2 对于它去过不止一次的地方

我希望代理不会碰到障碍物并绕过它们。

代理也不应该卡在一个位置,并尝试尽快完成探索。

这是我打算做的:

为了防止agent卡在一个地方,如果agent多次访问一个地方,我想惩罚它。我想将代理访问过一次的地点标记为 0.5,如果多次访问过该地点,则标记为 0.2

我将一个只去过一次的地方标记为 0.5 的原因是因为如果存在这样一种情况,即在环境中只有一种方法可以进入某个区域,而只有一种方法可以离开该区域,我不希望严惩此事。

鉴于这个问题,我正在考虑使用以下奖励系统-

  • 每次采取导致未探索区域的行动时+1
  • -1 表示当它采取行动撞到障碍物时
  • 如果它访问该地方两次,则为 0(即 0.5 场景)
  • -0.75 是否访问一个地方超过两次

行动空间只是-

  • 向上
  • 向下
  • 剩下

我以这种方式解决问题是否正确?强化学习是解决这个问题的方法吗?

我对状态、动作、奖励系统的表示是否正确?

我认为 DQN 不是正确的方法,因为在这个问题中终端状态的定义很难,我应该使用什么方法来解决这个问题?

1个回答

我建议您使用 Deep Q 或 A2C(我个人使用 A2C)。作为最终状态,您可以考虑每个图块都被访问过一次的状态,除非您想让您的代理永远想知道。我创建了 OpenAI 健身房网格世界,因此我可以使用它们的一些非常有用的包装器(例如 TimeLimit 包装器,其中一个情节在达到一定数量的步数时终止)。

对于您的州代表,我建议您遵循完善的做法。我假设您想将 CNN 用作感知模块而不是 MLP。您可以为每个实体使用具有不同颜色的网格世界图像,也可以使用我们所说的特征图像层作为输入。这些只是图像的体积,每个图像的尺寸都与您的网格图相同,并且除了实体的位置将具有值 1 之外,到处都是 0。换句话说,这是一种单热编码,但在空间中地图的尺寸​​。

行动对我来说似乎很好,你的奖励功能值得一试,但我不会严重惩罚(可能是 -0.1 而不是 -0.75)。当您的代理探索时,该问题最初会出现。如果受到重罚,它会试图维持其奖励并故意崩溃。

如果最初它不学习,不要感到沮丧。除了正确的特征表示(我建议图像)之外,设计正确的奖励函数是一项艰巨的任务。