具有不可重复动作的强化学习
Reinforcement learning with non repeatable actions
我对 RL 很陌生,想知道 RL 的功能。在我的理解中,RL 是一种神经网络,它输入状态并输出每个动作的概率。训练过程是为了减轻预测值和真实奖励值之间的差异(这里可能是错误的)。
但是,我的问题很棘手。一开始有一个动作space [x1, x2, x3, x4,..,x5],每一步之后,动作不能重复。换句话说,动作 space 在每次迭代后都在缩小。当动作space为0时,'game'完成。这个游戏的目标是获得最高的累积奖励。
我在网上做了一些搜索,但没有找到任何有用的信息。非常感谢!
添加:
对不起,不清楚的问题。对于经典的 RL,例如 CartPole 游戏。该动作是可重复的,因此代理正在学习每个状态下每个动作的奖励。目标是获得奖励“1”而不是“0”。但对于我的问题,由于游戏无论如何都会完成(因为动作 space 每次迭代都在减少并且当动作 space 为空时游戏完成),我希望代理可以执行动作先是最高奖励,然后是次高奖励.....
所以我相信这是某种优化问题。但是我不知道如何针对这个问题修改RL学习的经典架构?或者谁能帮我找到一些相关的资源或教程?
再次补充:
目前,我的解决方案是更改选择动作的部分。我提供了一份以前的行动清单。并避免这些动作被再次拾取。例如,如果动作是由神经网络选择的,我将神经网络的输出设为
with torch.no_grade():
action_from_nn = nn(state)
action_from_nn[actions_already_taken] = 0
action = torch.max(action_from_nn,1)[1]
如果随机值小于epsilon,动作只是随机选择的,它将是:
action = random.sample([i for i in action_space if i not in actions_already_taken], 1)[0]
可以看出,我只是强制代理不选择重复动作。但我并没有真正改变神经网络的输出。我想知道这样可以吗?或者以后有什么space可以改进的吗?
在整个 运行 训练过程中,您的行动和观察 space 需要大小相同。
解决这个问题的方法是让任何已经执行的动作不再对游戏或观察产生影响 space。已执行的操作可以存储在一维数组中,单热编码,这也可以包含在您的观察中 space 因此您的代理将学会不选择它已经执行的操作。
我对 RL 很陌生,想知道 RL 的功能。在我的理解中,RL 是一种神经网络,它输入状态并输出每个动作的概率。训练过程是为了减轻预测值和真实奖励值之间的差异(这里可能是错误的)。
但是,我的问题很棘手。一开始有一个动作space [x1, x2, x3, x4,..,x5],每一步之后,动作不能重复。换句话说,动作 space 在每次迭代后都在缩小。当动作space为0时,'game'完成。这个游戏的目标是获得最高的累积奖励。
我在网上做了一些搜索,但没有找到任何有用的信息。非常感谢!
添加: 对不起,不清楚的问题。对于经典的 RL,例如 CartPole 游戏。该动作是可重复的,因此代理正在学习每个状态下每个动作的奖励。目标是获得奖励“1”而不是“0”。但对于我的问题,由于游戏无论如何都会完成(因为动作 space 每次迭代都在减少并且当动作 space 为空时游戏完成),我希望代理可以执行动作先是最高奖励,然后是次高奖励.....
所以我相信这是某种优化问题。但是我不知道如何针对这个问题修改RL学习的经典架构?或者谁能帮我找到一些相关的资源或教程?
再次补充: 目前,我的解决方案是更改选择动作的部分。我提供了一份以前的行动清单。并避免这些动作被再次拾取。例如,如果动作是由神经网络选择的,我将神经网络的输出设为
with torch.no_grade():
action_from_nn = nn(state)
action_from_nn[actions_already_taken] = 0
action = torch.max(action_from_nn,1)[1]
如果随机值小于epsilon,动作只是随机选择的,它将是:
action = random.sample([i for i in action_space if i not in actions_already_taken], 1)[0]
可以看出,我只是强制代理不选择重复动作。但我并没有真正改变神经网络的输出。我想知道这样可以吗?或者以后有什么space可以改进的吗?
在整个 运行 训练过程中,您的行动和观察 space 需要大小相同。 解决这个问题的方法是让任何已经执行的动作不再对游戏或观察产生影响 space。已执行的操作可以存储在一维数组中,单热编码,这也可以包含在您的观察中 space 因此您的代理将学会不选择它已经执行的操作。