快捷方式

PettingZooWrapper

torchrl.envs.PettingZooWrapper(*args, **kwargs)[原始碼]

PettingZoo 環境包裝器。

要安裝 petting zoo,請遵循此處 <https://github.com/Farama-Foundation/PettingZoo#installation>__ 的指南。

此類是所有 PettingZoo 環境的通用 torchrl 包裝器。它可以包裝 pettingzoo.AECEnvpettingzoo.ParallelEnv

讓我們更詳細地看一下

在包裝的 pettingzoo.ParallelEnv 中,所有代理將在每個環境步驟中執行動作。如果任務期間的代理數量發生變化,請設定 use_mask=True"mask" 將作為每個組的輸出提供,並應用於遮蔽掉死亡的代理。環境將在一個代理完成後立即重置(除非 done_on_any 設定為 False)。

在包裝的 pettingzoo.AECEnv 中,每個步驟只有一個代理會行動。因此,對於這種型別的環境,必須設定 use_mask=True"mask" 將作為每個組的輸出提供,並可用於遮蔽掉不行動的代理。環境僅在所有代理都完成後才重置(除非 done_on_any 設定為 True)。

如果某個代理有任何不可用動作,環境還將自動更新其 action_spec 的掩碼,併為每個組輸出一個 "action_mask",以反映最新的可用動作。這應在訓練期間傳遞給掩碼分佈。

作為 torchrl 多代理功能的一項特性,您可以控制環境中代理的 agrupamento。您可以將代理分組(堆疊它們的張量)以在將它們透過相同的神經網路時利用向量化。您可以將代理分割成不同的組,其中它們是異構的或應該由不同的神經網路處理。要進行分組,您只需在環境構造時傳遞一個 group_map

預設情況下,pettingzoo 中的代理將按名稱分組。例如,對於代理 ["agent_0","agent_1","agent_2","adversary_0"],tensordicts 將如下所示:

>>> print(env.rand_action(env.reset()))
TensorDict(
    fields={
        agent: TensorDict(
            fields={
                action: Tensor(shape=torch.Size([3, 9]), device=cpu, dtype=torch.int64, is_shared=False),
                action_mask: Tensor(shape=torch.Size([3, 9]), device=cpu, dtype=torch.bool, is_shared=False),
                done: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
                observation: Tensor(shape=torch.Size([3, 3, 3, 2]), device=cpu, dtype=torch.int8, is_shared=False),
                terminated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
                truncated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False)},
            batch_size=torch.Size([3]))},
        adversary: TensorDict(
            fields={
                action: Tensor(shape=torch.Size([1, 9]), device=cpu, dtype=torch.int64, is_shared=False),
                action_mask: Tensor(shape=torch.Size([1, 9]), device=cpu, dtype=torch.bool, is_shared=False),
                done: Tensor(shape=torch.Size([1, 1]), device=cpu, dtype=torch.bool, is_shared=False),
                observation: Tensor(shape=torch.Size([1, 3, 3, 2]), device=cpu, dtype=torch.int8, is_shared=False),
                terminated: Tensor(shape=torch.Size([1, 1]), device=cpu, dtype=torch.bool, is_shared=False),
                truncated: Tensor(shape=torch.Size([1, 1]), device=cpu, dtype=torch.bool, is_shared=False)},
            batch_size=torch.Size([1]))},
    batch_size=torch.Size([]))
>>> print(env.group_map)
{"agent": ["agent_0", "agent_1", "agent_2"], "adversary": ["adversary_0"]}

否則,可以指定組對映或從一些預製選項中選擇。有關更多資訊,請參閱 torchrl.envs.utils.MarlGroupMapType。例如,您可以提供 MarlGroupMapType.ONE_GROUP_PER_AGENT,表示每個代理都應該有自己的 tensordict(類似於 pettingzoo parallel API)。

分組有助於利用資料透過相同神經網路的代理之間的向量化。

引數:
  • env (pettingzoo.utils.env.ParallelEnvpettingzoo.utils.env.AECEnv) – 要包裝的 pettingzoo 環境。

  • return_state (bool, optional) – 是否從 pettingzoo 返回全域性狀態(並非所有環境都可用)。預設為 False

  • group_map (MarlGroupMapTypeDict[str, List[str]], optional) – 如何在 tensordicts 中對代理進行分組以進行輸入/輸出。預設情況下,代理將按其名稱分組。否則,可以指定組對映或從一些預製選項中選擇。有關更多資訊,請參閱 torchrl.envs.utils.MarlGroupMapType

  • use_mask (bool, optional) – 環境是否應輸出 "mask"。這對於包裝的 pettingzoo.AECEnv 以遮蔽掉不行動的代理是強制性的,並且對於代理數量可變的 pettingzoo.ParallelEnv 也應該使用。預設為 False

  • categorical_actions (bool, optional) – 如果環境動作是離散的,則是否將其轉換為分類或獨熱編碼。

  • seed (int, optional) – 種子。預設為 None

  • done_on_any (bool, optional) – 環境的 done 鍵是使用 any()(當 True 時)還是 all()(當 False 時)聚合代理鍵來設定的。預設值(None)是為並行環境使用 any(),為 AEC 環境使用 all()

示例

>>> # Parallel env
>>> from torchrl.envs.libs.pettingzoo import PettingZooWrapper
>>> from pettingzoo.butterfly import pistonball_v6
>>> kwargs = {"n_pistons": 21, "continuous": True}
>>> env = PettingZooWrapper(
...     env=pistonball_v6.parallel_env(**kwargs),
...     return_state=True,
...     group_map=None, # Use default for parallel (all pistons grouped together)
... )
>>> print(env.group_map)
... {'piston': ['piston_0', 'piston_1', ..., 'piston_20']}
>>> env.rollout(10)
>>> # AEC env
>>> from pettingzoo.classic import tictactoe_v3
>>> from torchrl.envs.libs.pettingzoo import PettingZooWrapper
>>> from torchrl.envs.utils import MarlGroupMapType
>>> env = PettingZooWrapper(
...     env=tictactoe_v3.env(),
...     use_mask=True, # Must use it since one player plays at a time
...     group_map=None # # Use default for AEC (one group per player)
... )
>>> print(env.group_map)
... {'player_1': ['player_1'], 'player_2': ['player_2']}
>>> env.rollout(10)

文件

訪問全面的 PyTorch 開發者文件

檢視文件

教程

為初學者和高階開發者提供深入的教程

檢視教程

資源

查詢開發資源並讓您的問題得到解答

檢視資源