强化学习:如何处理非法行为?

人工智能 强化学习 q学习 dqn
2021-11-09 11:54:01

我是 RL 的初学者,目前正在尝试制作可以在简单情况下发挥最佳作用的 DQN 代理。

在这种情况下,代理商应该决定以什么速率对电池进行充电或放电,这相当于购买或出售电能,以套利的方式赚钱。所以动作空间例如是 [-6, -4, -2, 0, 2, 4, 6]kW。负数表示放电,正数表示充电。

在电池没电的情况下,应禁止放电动作(-6, -4, -2)。否则在电池充满电的情况下,应禁止充电动作(2、4、6)。

为了解决这个问题,我尝试了两种方法:

  • 在每一步中,更新动作空间,这意味着掩盖了被禁止的动作。
  • 对选择禁止行为给予极端惩罚(在我的例子中,惩罚是 -9999)

但他们都没有工作。

对于第一种方法,训练曲线(累积奖励)没有收敛。

对于第二种方法,训练曲线收敛,但充电/放电结果不合理(几乎是随机结果)。我认为在第二种方法中,epsilon-greedy 策略随机选择了很多被禁止的动作,并将这些样本存储在经验内存中,这会对结果产生负面影响。

例如:

状态定义为 [p_t, e_t],其中 p_t 是出售(放电)电池的市场价格,e_t 是电池中剩余的能量。

当state = [p_t, e_t = 0],并且选择放电动作(-6),这是在该状态下的禁止动作,下一个状态是[p_t,e_t = -6]。然后选择下一个动作(2),然后下一个状态是[p_t,e_t = -4]等等。

在这种情况下,< s, a, r, s' > 样本是:

< [p_t, 0], -6, -9999, [p_t+1, -6] >

< [p_t, -6], 2, -9999, [p_t+1, -4] > ...

这些预计不会存储在体验记忆中,因为它们不是所需的样本(e_t 应该大于零)。我认为这就是为什么没有得到预期结果的原因。

所以我该怎么做?请帮忙。

2个回答

在我的项目中,我还遇到了一个问题,即每个环境状态的动作空间都不相同。我不喜欢以高负奖励惩罚禁止行为的方法,因为这感觉有点像作弊。但是它可能会起作用,我只是还没有尝试过。

我使用的方法(您也可以应用)是将附加功能集成到您的操作空间中。此函数会将动作映射到特定的 kW 量。因此,根据当前状态,该函数将操作映射到 kW 量,以对电池进行充电或放电。这样做的好处是您不必处理非法行为。

这可以按如下方式应用:您无需为每个操作定义充电/放电量,而是创建一组定义相应量的函数。这是一个包含五个操作的示例:

  1. 措施:将电池完全放电
  2. 行动。将电池放电,使其剩余一半容量,否则什么也不做
  3. 行动:什么都不做
  4. 行动:将面糊充电至其容量的一半,否则什么也不做
  5. 措施:将电池充电至最大容量

您可以将输出节点的数量设置为所有动作的数量,然后选择最高输出值,尝试执行该动作,如果不能,则移动到下一个最高输出值等等。唯一的问题是你必须知道有多少可能的动作