我想在 torchrl 中为 pettingzoo env 包装器定义
rewardsum()
实例。
这是我的环境的定义:
from torchrl.envs.libs.pettingzoo import PettingZooEnv
from torchrl.envs.utils import MarlGroupMapType
env = PettingZooEnv(
task="mpe/simple_spread_v3",
parallel=False,
use_mask=True, # Must use it since one player plays at a time
group_map=None # # Use default for AEC (one group per player)
)
我正在尝试做的事情:
env = TransformedEnv(
env,
RewardSum(),
)
check_env_specs(env)
这是我得到的错误(分成多行):
ValueError: Could not match the env reset_keys ['_reset'] with
the in_keys [('agent_0', 'reward'), ('agent_1', 'reward'),
('agent_2', 'reward')].
Please make sure that these have the same length.
我期望我的环境中所有代理的奖励总和可以通过
["next", "episode_reward"]
访问,这是 torchrl 定义的默认访问键。
基本上,问题在于环境具有全局完成状态,但每个组都有不同的奖励密钥。
RewardSum(reset_keys=["_reset"] * len(env.group_map.keys())
应该可以工作