快捷方式

PettingZooEnv

torchrl.envs.PettingZooEnv(*args, **kwargs)[source]

PettingZoo 環境。

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

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

讓我們進一步詳細瞭解

要封裝 pettingzoo.ParallelEnv,請提供您的 petting zoo 任務名稱(在 task 引數中),並指定 parallel=True。這將構建該任務的 pettingzoo.ParallelEnv 版本(如果在 pettingzoo 中支援),並將其封裝供 torchrl 使用。在封裝的 pettingzoo.ParallelEnv 中,所有智慧體將在每個環境步中進行操作。如果在任務期間智慧體數量發生變化,請設定 use_mask=True"mask" 將作為每個組的輸出提供,應用於遮蔽已完成/失效的智慧體。環境將在任一智慧體完成後重置(除非 done_on_anyFalse)。

要封裝 pettingzoo.AECEnv,請提供您的 petting zoo 任務名稱(在 task 引數中),並指定 parallel=False。這將構建該任務的 pettingzoo.AECEnv 版本,並將其封裝供 torchrl 使用。在封裝的 pettingzoo.AECEnv 中,每一步只有一個智慧體行動。因此,對於這類環境,必須設定 use_mask=True"mask" 將作為每個組的輸出提供,可用於遮蔽非行動智慧體。環境僅在所有智慧體都完成後重置(除非 done_on_anyTrue)。

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

作為 torchrl 多智慧體的一個特性,您可以控制環境中智慧體的分組。您可以將智慧體分組(堆疊它們的張量),以便在透過同一神經網路時利用向量化。您可以將異構或應由不同神經網路處理的智慧體分成不同的組。要進行分組,您只需在環境構建時傳遞一個 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)。

分組對於在資料透過同一神經網路的智慧體之間利用向量化很有用。

引數:
  • task (str) – 要建立的 pettingzoo 任務名稱,格式為“/”(例如,“sisl/multiwalker_v9”)或“”(例如,“multiwalker_v9”)。

  • parallel (bool) – 是否構建任務的 pettingzoo.ParallelEnv 版本或 pettingzoo.AECEnv 版本。

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

  • group_map (MarlGroupMapType or Dict[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 PettingZooEnv
>>> kwargs = {"n_pistons": 21, "continuous": True}
>>> env = PettingZooEnv(
...     task="pistonball_v6",
...     parallel=True,
...     return_state=True,
...     group_map=None, # Use default (all pistons grouped together)
...     **kwargs,
... )
>>> print(env.group_map)
... {'piston': ['piston_0', 'piston_1', ..., 'piston_20']}
>>> env.rollout(10)
>>> # AEC env
>>> from torchrl.envs.libs.pettingzoo import PettingZooEnv
>>> from torchrl.envs.utils import MarlGroupMapType
>>> env = PettingZooEnv(
...     task="tictactoe_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)
... )
>>> print(env.group_map)
... {'player_1': ['player_1'], 'player_2': ['player_2']}
>>> env.rollout(10)

文件

訪問 PyTorch 的完整開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得解答

檢視資源