如何给 RL 中的动作奖励?

数据挖掘 机器学习 Python 深度学习 强化学习 dqn
2022-03-05 04:30:00

我正在研究以下强化学习问题:我有一瓶固定容量(比如 5 升)。在瓶子的底部有公鸡去除水。去除水的分布不固定。我们可以从瓶子中取出任意数量的水,即 [0, 5] 之间的任意连续值。

在瓶子的顶部安装了一个水龙头,用于将水注入瓶子中。RL 剂可以在瓶子中填充 [0, 1, 2, 3, 4] 升。初始瓶液位是 [0, 5] 之间的任何值。

我想在这种环境中训练代理以获得最佳的动作顺序,这样瓶子就不会变空和溢出,这意味着需要持续供应水。

动作空间 = [0, 1, 2, 3, 4] 离散空间

观察空间 = [0, 瓶子容量] 即 [0, 5] 连续空间

奖励逻辑=如果瓶子因动作空了给予负奖励;如果由于行动导致瓶子溢出,则给予负面奖励

我决定使用python来创建一个环境。

我是 RL 的新手。我不知道我必须在哪种情况下给予奖励。我的奖励逻辑是正确的还是我必须改变它?

1个回答

我不知道我必须在哪种情况下给予奖励。我的奖励逻辑是正确的还是我必须改变它?

强化学习中的奖励结构有点灵活,只要它表达了你的代理的目标。

在您的情况下,您希望避免在连续问题中出现两种糟糕的情况。还有一个很好的场景——提供足够的水——这与不按需提供水的负面后果重叠,但可能略有不同。

您建议对溢出的水给予负奖励,对不可用的水给予负奖励似乎很合理。您有一些选择可能会对最佳代理的行为产生影响。鉴于您到目前为止的问题描述,我认为这些是您的自由选择:

  • 您可以决定错误的固定成本,例如1奖励,或根据需要时溢出或丢失的水量来计算成本。

  • 您可以在需要时对溢出的水与丢失的水不同的奖励进行加权。这可能是一种商业决策,基于不同类型错误的不同成本。如果溢水成本低、需求高且分配失败的影响高,那么最优策略可能涉及过度填充水箱和故意溢水。

  • 您可以获得对供水量的积极奖励。这类似于因供应失败而获得负奖励,但在业务场景中的权重可能会有所不同。如果您正在向付费客户供水,那么您会关心这里的利润,并有 3 种类型的奖励,包括出售水的利润、浪费水的损失和清理费用,以及(可能更模糊,但仍然估计) 在供应不足时未能满足客户需求而造成的损失。

您应该记住,结合环境行为,这些决策可能会改变最优策略。在您定义这些值之前,没有单一的最优策略。由于您的问题很简单,因此最优策略之间可能存在很多重叠,但是您在奖励函数和环境行为方面所做的选择将导致代理在某些情况下冒过度填充风险的意愿可能存在差异。

由于问题是连续的,您想要优化的长期回报可能会变得无限。为避免这种情况并使问题易于处理,您需要做出以下选择之一:

  • 使用折扣系数,γ,可以从01(但对于连续问题实际上不是 1)

  • 将您的目标制定为最大化平均奖励

在您的情况下,我建议使用较高的折扣系数,例如γ=0.99,因为大多数基于价值的代理的 RL 文献都使用折扣因子。

最后,您可能在这里遇到问题:

去除水的分布不固定。我们可以从瓶子中取出任意量的水,即 [0, 5] 之间的任意连续值

RL 依赖于表现为马尔可夫决策过程的环境。这意味着如果这里有一个固定的分布,该理论最有效。这可能是一个平坦的分布[0,5],或者它可以从复杂的现实世界场景中得出,但理论的假设是状态变化的分布是最近状态和动作加上随机元素的函数。

当您模拟您的问题以训练代理时,您将不得不使用实际分布。然后,代理将针对其遇到的场景进行优化。根据您模拟的内容,它在其他情况下可能表现不佳。但是,如果您不采取极端措施,代理应该学习在广泛的状态范围内进行优化,以及去除水的许多合理分布。