TFAgents:如何考虑无效操作

TFAgents: how to take into account invalid actions

我正在使用 TF-Agents 库进行强化学习, 我想考虑到,对于一个给定的状态, 部分操作无效。

如何实施?

我应该定义一个“observation_and_action_constraint_splitter”函数吗? 创建 DqnAgent?

如果是:你知道这方面的教程吗?

是的,您需要定义函数,将其传递给代理,并适当更改环境输出,以便函数可以使用它。我不知道关于这方面的任何教程,但是您可以查看我一直在处理的 this 回购协议。

请注意,它非常混乱,其中的很多文件实际上没有被使用,文档字符串很糟糕,而且经常出错(我分叉了这个,没有费心整理所有东西)。但是,它绝对可以正常工作。与您的问题相关的部分是:

  • rl_env.pyHanabiEnv.__init___observation_spec 定义为 ArraySpecs (here) 的字典。您可以忽略 game_obshand_obsknowledge_obs,它们用于 运行 环境,它们 而不是 提供给代理.

  • rl_env.py in the HanabiEnv._reset at line 110 给出了如何构建时间步长观测值并从环境返回的概念。 legal_moves 通过 np.logical_not 传递,因为我的特定环境将 legal_moves 标记为 0,非法标记为 -inf;而 TF-Agents 期望 合法 移动为 1/True。因此,我的向量在转换为 bool 时会导致与 TF-agents 应该是完全相反的结果。

  • 这些观察结果将被馈送到 utility.py (here) 中的 observation_and_action_constraint_splitter,其中返回包含观察结果和动作约束的元组。请注意,game_obshand_obsknowledge_obs 被隐式丢弃(而不是如前所述提供给代理。

  • 最后,这个 observation_and_action_constraint_splittercreate_agent 函数 line 198 中被馈送到 utility.py 中的代理。