如何在设计 RL 状态时混合网格矩阵和显式值?
How to mix grid matrix and explicit values when designing RL state?
我正在尝试对网格世界导航任务进行多智能体强化学习,其中多个智能体试图共同实现多个目标,同时避免与固定障碍物和彼此发生碰撞。作为约束,每个智能体只能看到自己周围有限的范围。
所以在较高的层次上,每个代理的状态应该包含帮助它避免碰撞的信息和引导它实现目标的信息。我正在考虑通过在代理的状态中包含一个由代理周围的网格单元组成的矩阵来实现前者,这将向代理显示障碍所在的位置。但是,我不确定如何在此矩阵之上包含目标导航信息。目前我只是展平矩阵并在末尾附加所有相对目标位置,并将其用作状态。
例如,对于如下图所示的网格世界(0表示空单元格,1表示代理,2表示障碍物,3表示目标):
[[0 0 0 0 0 0 2 2 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 2 2 0 0 0 0 0 0]
[0 3 2 2 0 0 0 0 0 2]
[0 0 0 0 0 0 0 0 0 2]
[0 0 0 0 1 0 0 0 0 2]
[2 0 0 0 0 2 2 0 3 0]
[2 0 0 0 0 2 2 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 2 0 0 1 0 0 0 0]]
第 5 列第 4 行的代理看到以下在其周围 distance1 范围内的单元格:
[[0. 0. 0.]
[0. 1. 0.]
[0. 0. 2.]]
展平后,矩阵变为:
[0,0,0,0,1,0,0,0,2]
row3 col1 的目标相对于上述代理的位置是 (5-3=2, 4-1=3)
第 6 列第 8 行的目标相对于上述代理的位置是 (5-6=-1, 4-8=-4)
所以在附加相对位置之后,代理的状态变为:
[0,0,0,0,1,0,0,0,2,2,3,-1,-4]
(其他代理的过程类似)
这样设计状态是否合理?我主要担心的是 RL 可能无法分辨展平矩阵和相对距离之间的区别。如果我的顾虑成立,你能给我一些建议,我应该如何设计状态吗?
提前致谢!
编辑:为了验证我的担忧,我使用 PG REINFORCE 算法训练了一个代理。正如我担心的那样,代理学会了避开障碍物,但在其他方面只是随机移动而没有导航到目标。
我没有找到改进状态设计的方法,但我确实找到了使我的 PG 网络模块化的解决方法。
我简单地将我的 PG 网络分成两部分——一个只接受来自上述状态的扁平网格矩阵部分,另一个只接受相对目标位置。然后我将两个子网络的输出连接起来,并通过一个 softmax 层传递它们以获得最终的策略。
如果你想了解更多详情,可以查看我的代码here(相关代码在MARL_PolicyGradient.py
、MARL_env.py
和MARL_networks.py
中)。祝你好运!
我正在尝试对网格世界导航任务进行多智能体强化学习,其中多个智能体试图共同实现多个目标,同时避免与固定障碍物和彼此发生碰撞。作为约束,每个智能体只能看到自己周围有限的范围。
所以在较高的层次上,每个代理的状态应该包含帮助它避免碰撞的信息和引导它实现目标的信息。我正在考虑通过在代理的状态中包含一个由代理周围的网格单元组成的矩阵来实现前者,这将向代理显示障碍所在的位置。但是,我不确定如何在此矩阵之上包含目标导航信息。目前我只是展平矩阵并在末尾附加所有相对目标位置,并将其用作状态。
例如,对于如下图所示的网格世界(0表示空单元格,1表示代理,2表示障碍物,3表示目标):
[[0 0 0 0 0 0 2 2 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 2 2 0 0 0 0 0 0]
[0 3 2 2 0 0 0 0 0 2]
[0 0 0 0 0 0 0 0 0 2]
[0 0 0 0 1 0 0 0 0 2]
[2 0 0 0 0 2 2 0 3 0]
[2 0 0 0 0 2 2 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 2 0 0 1 0 0 0 0]]
第 5 列第 4 行的代理看到以下在其周围 distance1 范围内的单元格:
[[0. 0. 0.]
[0. 1. 0.]
[0. 0. 2.]]
展平后,矩阵变为:
[0,0,0,0,1,0,0,0,2]
row3 col1 的目标相对于上述代理的位置是 (5-3=2, 4-1=3)
第 6 列第 8 行的目标相对于上述代理的位置是 (5-6=-1, 4-8=-4)
所以在附加相对位置之后,代理的状态变为:
[0,0,0,0,1,0,0,0,2,2,3,-1,-4]
(其他代理的过程类似)
这样设计状态是否合理?我主要担心的是 RL 可能无法分辨展平矩阵和相对距离之间的区别。如果我的顾虑成立,你能给我一些建议,我应该如何设计状态吗?
提前致谢!
编辑:为了验证我的担忧,我使用 PG REINFORCE 算法训练了一个代理。正如我担心的那样,代理学会了避开障碍物,但在其他方面只是随机移动而没有导航到目标。
我没有找到改进状态设计的方法,但我确实找到了使我的 PG 网络模块化的解决方法。
我简单地将我的 PG 网络分成两部分——一个只接受来自上述状态的扁平网格矩阵部分,另一个只接受相对目标位置。然后我将两个子网络的输出连接起来,并通过一个 softmax 层传递它们以获得最终的策略。
如果你想了解更多详情,可以查看我的代码here(相关代码在MARL_PolicyGradient.py
、MARL_env.py
和MARL_networks.py
中)。祝你好运!