我正在使用 OpenAI gym for Diplomacy 制作一个环境,并为它制作一个 AI。
在外交中,玩家有许多单位,每个单位都有许多可用的动作。
因此,玩家的行动空间是每个单位动作的乘积,减去没有意义的组合。
我正在做的是为代理构建所有可用操作的列表,如下所示:
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris -> Burgundy)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris -> Brest)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris -> Picardy)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris -> Gascony)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris -> Paris)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Burgundy, France: TROOP Paris Supports TROOP Marseilles -> Burgundy)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris -> Burgundy)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris -> Brest)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris -> Picardy)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris -> Gascony)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris -> Paris)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Gascony, France: TROOP Paris Supports TROOP Marseilles -> Gascony)
(France: FLEET Brest Coast -> English Channel, France: TROOP Marseilles -> Spain, France: TROOP Paris -> Burgundy)
... (many hundred more)
并且使动作空间比我遇到过的这些列表中最大的更大——现在是 2024 年。
以前,我在观察空间中表示了整个列表,但这大大减慢了学习速度——当我不在观察空间中表示这个列表时,我的 fps 会高几个数量级。
代理选择一个动作,它只是这个列表的一个索引。
如果索引太大:
action = action % len(all_possible_actions)
这样代理总是选择一个有效的动作。
我的想法是代理会学习这个列表的结构(列表是环境的一个函数,所以代理应该能够重现它的一些表示)。
然而,我的印象是,强迫智能体学习这个列表是如何产生的、索引和游戏规则会大大减慢学习速度。
有没有人处理过类似的问题并解决了它?在不爆炸观察空间的情况下,向网络提供有关此列表结构的“提示”的好方法是什么?