在所有奖励为 0(最佳奖励)或负数的情况下,还有哪些其他方法可以处理无效操作?

人工智能 强化学习 q学习 dqn 执行 奖励函数
2021-10-26 00:30:24

我创建了一个 OpenAI Gym 环境,我想通过OpenAI Baselines DQN 方法检查代理的性能。在我的环境中,代理的最佳结果是 0 - 机器人需要零非必要资源来完成任务。目标是最小化对资源的需求:对于每个需要的资源,惩罚为 -1。在许多州,只有特定的行为才具有物理意义。我该如何处理?

在AI StackExchange上已经有一个关于无效招式处理的问题,建议忽略无效招式。然而,忽略它们意味着返回相同的状态和 0 奖励,这是最好的结果,但显然不是这样。设置剧烈的负奖励似乎也不起作用,因为即使是有希望的处理路径也会受到无效动作和相应的剧烈负奖励的影响。

在所有奖励为 0(最佳)或负数的情况下,还有哪些其他方法可以处理无效操作?

我对OpenAI Baselines DQN 方法实施的想法/问题

  1. 有没有办法为动作设置初始 Q 值?我可以为无效操作设置 -infinity 。

  2. 有没有办法限制每个状态的有效操作集?当 env.step(action) 函数返回新状态后,我可以以某种方式定义哪些操作对其有效吗?

1个回答

1) 有没有办法为动作设置初始 Q 值?

您通常可以这样做,但您不能为特定状态下的特定操作指定特定权重。至少不是直接通过网络权重。这将破坏使用反向传播来优化权重并找到最佳参数和 Q 值的目的。

2)有没有办法限制每个状态的有效动作集?

同样,不是直接通过网络。这意味着不同状态的不同网络架构,这意味着优化几个不同的网络。除非您使用诸如 Net2Net 之类的复杂方法来保持网络同步。

但是,您可以绕过网络本身。

但是,您可以在网络之上过滤其输出。假设您有一组状态,在状态 X 中,所有 5 个动作中只有 2 个是有效的。在获取 DQN 中所有动作的 Q 值时,可以检测是否处于状态 X,而不是从所有动作中选择贪婪动作,而是从所有有效动作中选择贪婪动作。更好的是,让您的环境只为您所处的任何状态发送所有有效操作的列表。使这更通用,因为它消除了您对离散状态的需要,具有每个状态的有效操作列表等。

您也可以真正忽略无效操作。

你声称

然而,忽略它们意味着返回相同的状态和 0 奖励,这是最好的结果,但显然不是这样。

如果你的环境没有时间限制,那么最好的做法就是站着不动,避免浪费资源。但是,如果有时间限制,最终代理应该会因未完成任务而受到某种惩罚。否则,如果没有时间限制,你也可以给他完成任务的奖励。假设您有 10 个资源,而不是让您的奖励间隔从 开始,而是通过在游戏结束时奖励 10 点将[-10; 0]其转移到。[0, 10]这使您的代理有动力完成任务,而不是执行无用的操作,并且完全放弃了您对操作过滤的需求。