TFAgents:如何考虑无效操作
TFAgents: how to take into account invalid actions
我正在使用 TF-Agents 库进行强化学习,
我想考虑到,对于一个给定的状态,
部分操作无效。
如何实施?
我应该定义一个“observation_and_action_constraint_splitter”函数吗?
创建 DqnAgent?
如果是:你知道这方面的教程吗?
是的,您需要定义函数,将其传递给代理,并适当更改环境输出,以便函数可以使用它。我不知道关于这方面的任何教程,但是您可以查看我一直在处理的 this 回购协议。
请注意,它非常混乱,其中的很多文件实际上没有被使用,文档字符串很糟糕,而且经常出错(我分叉了这个,没有费心整理所有东西)。但是,它绝对可以正常工作。与您的问题相关的部分是:
rl_env.py
在 HanabiEnv.__init__
中 _observation_spec
定义为 ArraySpecs
(here) 的字典。您可以忽略 game_obs
、hand_obs
和 knowledge_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_obs
、hand_obs
和 knowledge_obs
被隐式丢弃(而不是如前所述提供给代理。
最后,这个 observation_and_action_constraint_splitter
在 create_agent
函数 line 198 中被馈送到 utility.py
中的代理。
我正在使用 TF-Agents 库进行强化学习, 我想考虑到,对于一个给定的状态, 部分操作无效。
如何实施?
我应该定义一个“observation_and_action_constraint_splitter”函数吗? 创建 DqnAgent?
如果是:你知道这方面的教程吗?
是的,您需要定义函数,将其传递给代理,并适当更改环境输出,以便函数可以使用它。我不知道关于这方面的任何教程,但是您可以查看我一直在处理的 this 回购协议。
请注意,它非常混乱,其中的很多文件实际上没有被使用,文档字符串很糟糕,而且经常出错(我分叉了这个,没有费心整理所有东西)。但是,它绝对可以正常工作。与您的问题相关的部分是:
rl_env.py
在HanabiEnv.__init__
中_observation_spec
定义为ArraySpecs
(here) 的字典。您可以忽略game_obs
、hand_obs
和knowledge_obs
,它们用于 运行 环境,它们 而不是 提供给代理.rl_env.py
in theHanabiEnv._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_obs
、hand_obs
和knowledge_obs
被隐式丢弃(而不是如前所述提供给代理。最后,这个
observation_and_action_constraint_splitter
在create_agent
函数 line 198 中被馈送到utility.py
中的代理。