快捷方式

GymWrapper

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

OpenAI Gym 環境封裝器。

適用於 gymnasiumOpenAI/gym

引數:
  • env (gym.Env) – 要封裝的環境。支援批處理環境(VecEnvgym.VectorEnv),環境的批大小將反映並行執行的環境數量。

  • categorical_action_encoding (bool, optional) – 如果為 True,分類規範 (specs) 將轉換為對應的 TorchRL 型別(torchrl.data.Categorical),否則將使用獨熱編碼 (one-hot encoding)(torchrl.data.OneHot)。預設為 False

關鍵字引數:
  • from_pixels (bool, optional) – 如果為 True,將嘗試從環境中返回畫素觀測值。預設情況下,這些觀測值將寫入 "pixels" 條目下。使用的方法因 gym 版本而異,可能涉及 wrappers.pixel_observation.PixelObservationWrapper。預設為 False

  • pixels_only (bool, optional) – 如果為 True,將只返回畫素觀測值(預設寫入輸出 tensordict 的 "pixels" 條目下)。如果為 False,當 from_pixels=True 時,將同時返回觀測值(例如,狀態)和畫素。預設為 True

  • frame_skip (int, optional) – 如果提供,表示同一動作將重複執行多少步。返回的觀測值將是序列中的最後一個觀測值,而獎勵將是所有步驟獎勵的總和。

  • device (torch.device, optional) – 如果提供,表示資料將被轉換到的裝置。預設為 torch.device("cpu")

  • batch_size (torch.Size, optional) – 環境的批大小。應與所有觀測值、完成狀態 (done states)、獎勵、動作和資訊 (infos) 的主維度匹配。預設為 torch.Size([])

  • allow_done_after_reset (bool, optional) – 如果為 True,則允許環境在呼叫 reset() 後立即處於完成狀態 (done)。預設為 False

  • convert_actions_to_numpy (bool, optional) – 如果為 True,在傳遞給環境的步進函式 (step function) 之前,動作將從張量轉換為 numpy 陣列並移動到 CPU。如果在 GPU 上評估環境(例如 IsaacLab),請將此設定為 False。預設為 True

變數:

available_envs (List[str]) – 要構建的環境列表。

注意

如果找不到某個屬性,此類將嘗試從巢狀環境中檢索它

>>> from torchrl.envs import GymWrapper
>>> import gymnasium as gym
>>> env = GymWrapper(gym.make("Pendulum-v1"))
>>> print(env.spec.max_episode_steps)
200

示例

>>> import gymnasium as gym
>>> from torchrl.envs import GymWrapper
>>> base_env = gym.make("Pendulum-v1")
>>> env = GymWrapper(base_env)
>>> td = env.rand_step()
>>> print(td)
TensorDict(
    fields={
        action: Tensor(shape=torch.Size([1]), device=cpu, dtype=torch.float32, is_shared=False),
        next: TensorDict(
            fields={
                done: Tensor(shape=torch.Size([1]), device=cpu, dtype=torch.bool, is_shared=False),
                observation: Tensor(shape=torch.Size([3]), device=cpu, dtype=torch.float32, is_shared=False),
                reward: Tensor(shape=torch.Size([1]), device=cpu, dtype=torch.float32, is_shared=False),
                terminated: Tensor(shape=torch.Size([1]), device=cpu, dtype=torch.bool, is_shared=False),
                truncated: Tensor(shape=torch.Size([1]), device=cpu, dtype=torch.bool, is_shared=False)},
            batch_size=torch.Size([]),
            device=cpu,
            is_shared=False)},
    batch_size=torch.Size([]),
    device=cpu,
    is_shared=False)
>>> print(env.available_envs)
['ALE/Adventure-ram-v5', 'ALE/Adventure-v5', 'ALE/AirRaid-ram-v5', 'ALE/AirRaid-v5', 'ALE/Alien-ram-v5', 'ALE/Alien-v5',

注意

如果沒有提供其他讀取器,資訊字典 (info dictionaries) 將使用 default_info_dict_reader 讀取。要提供另一個讀取器,請參閱 set_info_dict_reader()。要自動註冊資訊字典 (info_dict) 內容,請參閱 torchrl.envs.GymLikeEnv.auto_register_info_dict()。對於並行 (Vectorized) 環境,資訊字典讀取器會自動設定,不應手動設定。

注意

Gym 空間並未完全覆蓋。只要以下空間可以表示為 torch.Tensor、巢狀張量 (nested tensor) 和/或包含在 tensordict 中,本類都可以處理:

  • spaces.Box

  • spaces.Sequence

  • spaces.Tuple

  • spaces.Discrete

  • spaces.MultiBinary

  • spaces.MultiDiscrete

  • spaces.Dict

使用 gym 空間時需要考慮一些事項。例如,只有當空間語義一致(相同的 dtype 和相同的維度數量)時,才能支援空間的元組 (tuple)。不規則維度 (Ragged dimension) 可以透過 nested_tensor() 支援,但此時只能有一個元組層級,並且資料應沿第一個維度堆疊(因為巢狀張量只能沿第一個維度堆疊)。

查閱 examples/envs/gym_conversion_examples.py 中的示例瞭解更多資訊!

文件

獲取 PyTorch 的完整開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源