我是强化学习的新手。我有一个问题,其中一个动作由订单(具有所需长度的杆)和仓库中的物品(具有一定长度的现有杆,将被切割成所需长度,其余部分放回仓库)组成)。
我把我的状态想象成两个定义大小的列表:订单和仓库,我的动作作为第一个列表的索引和第二个列表的索引。但是,我只使用了只能选择单个操作的环境,并且我不确定如何处理两个索引。我不确定 DQN 架构应该如何给我这样的操作。
任何人都可以验证我的总体想法并帮助我找到解决方案吗?或者也许只是指出一些描述类似问题的论文?
我是强化学习的新手。我有一个问题,其中一个动作由订单(具有所需长度的杆)和仓库中的物品(具有一定长度的现有杆,将被切割成所需长度,其余部分放回仓库)组成)。
我把我的状态想象成两个定义大小的列表:订单和仓库,我的动作作为第一个列表的索引和第二个列表的索引。但是,我只使用了只能选择单个操作的环境,并且我不确定如何处理两个索引。我不确定 DQN 架构应该如何给我这样的操作。
任何人都可以验证我的总体想法并帮助我找到解决方案吗?或者也许只是指出一些描述类似问题的论文?
你仍然会选择一个动作。你的行动空间现在我选择的地方成为您的问题的一组可能的顺序,并且成为可能项的集合。
如果这两个集合都是有限的,那么您仍然应该能够使用 DQN 解决这个问题。从理论上讲,这应该很容易看出,因为任何元素仍然是一个元素,只是碰巧这个元素现在是一个元组。
从编程的角度来看,让我们考虑一下 cartpole 的简单示例,其中可能的动作是左和右。你的-function 显然不会知道'left'和'right'的含义,你只需将它分配给向量的一个元素,即你的-function 将输出一个向量例如,第一个元素对应于“左”的分数,第二个元素对应于“右”的分数。在您的问题表述中仍然是这种情况,您将只有一个- 输出向量的函数在哪里- 你只需要确保你知道哪个元素对应哪个动作。
此外,这种方法可能会给您留下大维向量输出,我想这可能意味着您需要更多的模拟来正确探索动作空间。
希望这可以帮助。