是否可以直接告诉强化学习代理一些规则而没有任何限制?

人工智能 强化学习
2021-10-27 05:49:35

我尝试将 RL 应用于控制问题,我打算使用 Deep Q-Learning 或 SARSA。

我有两个蓄热系统,一个加热装置,RL剂每个时隙只允许加热1个。我怎样才能做到这一点?

我有两个连续变量x(t)y(t), 在哪里x(t)量化用于加热存储 1 的最大功率程度和y(t)量化用于加热存储 2 的最大功率程度。

现在,如果x(t)>0, 然后y(t)必须0, 反之亦然x(t)y(t)元素0或者[0.25,1]. 我怎么能告诉代理?

一种方法是在 RL 代理做出决定后使用单独的控制算法来调整操作,该算法会否决 RL 代理的操作。我想知道这是否以及如何也可以直接完成?我会感谢每一条评论。

更新:当然我可以使用奖励功能来做到这一点。但是没有直接的方法吗?因为这实际上是一个所谓的硬约束。代理人根本不允许违反这一点,因为这在技术上是不可行的。所以最好直接告诉代理不要这样做(如果可能的话)。

提醒:谁能告诉我更多关于这个问题的信息?我将非常感谢任何进一步的评论,并将非常感谢您的帮助。我也会奖励一个好的答案。

3个回答

您可以调整您的奖励功能以包含此限制。

在最简单的情况下,您可以奖励您的代理 -1,如果x(t)>0y(t)0.

当然,负奖励的规模取决于你的一般奖励规模。

我不是专家,但据我了解,您应该使用非策略算法,两者之间的区别是:

On-Policy:代理根据当前正在使用的策略派生的当前动作学习价值函数。Off-Policy:代理根据从另一个策略派生的动作来学习价值函数。

这意味着您可以使用其他策略进行探索。例如,如果您使用 Q-Learning(不是您的情况,因为您的问题的连续值)这是一种脱离策略的方法,您可以使用特定策略进行探索以获取操作(您只能选择有效操作)然后您可以使用 Q-Learning 方程更新您的 q-table。

在您的情况下,您可以使用脱离策略的深度方法。我建议使用 DDPG/TD3,您可以在这里简要了解其中的一些

这个想法是使用一种探索策略,您将其限制为仅选择有效值(硬约束),并将 State、Action、Reward、State' 集成到回放缓冲区中。Stable_Baseline 库不允许这样做,但您可以查看 TD3 的原始源代码。

编辑1:

如果你在 Q 学习算法中看到,e-greedy 包括以概率选择ϵ aany action, 与1ϵamaxaQ(s,a). any action是您使用此“控制器”仅选择随机(但有效)操作的代码部分。这是因为您想探索但仅使用有效操作进行探索。然后 Q 学习可以“利用”从您之前进行的探索中选择最佳动作。现在,对于连续动作的情况,您可以使用 DDPG/TD3 执行类似的操作,但您将这些有效动作存储在重放缓冲区中,因此您的神经网络可以学习仅包含有效动作的“数据”。

Q学习

编辑2:

在您的自定义环境中,您可以定义您的操作空间,例如:

self.action_space = gym.spaces.Box(low=-1, high=1, shape=(1,))

现在,正如您所说,在您的环境的阶跃函数中,您可以建立 x(t) 和 y(t)

maxX=10 #Depends on the maximum value of your x(t), I assigned a 10
maxY=10 #Depends on the maximum value of your y(t), I assigned a 10
x=0
y=0
if action>0:
    y=0
    x=action*maxX
elif action<0:
    x = 0
    # you need to multiply by -1 because your action is negative
    y = -1*action * maxY 
# do the rest of the code of your controler with x and y

这样,您的 RL 代理将了解哪个动作(介于 -1 和 1 之间)将获得最佳奖励,但在阶跃函数中,您将动作 [-1 +1] 映射到您的真实值。

当您在 DQL 流程中迈出一步时,您会根据每个可能操作的估计质量对移动进行采样。在该步骤中,您可以将采样方法限制为选择禁止操作的概率为 0。