GymWrapper¶
- torchrl.envs.GymWrapper(*args, **kwargs)[原始碼]¶
OpenAI Gym 環境封裝器。
適用於 gymnasium 和 OpenAI/gym。
- 引數:
env (gym.Env) – 要封裝的環境。支援批處理環境(
VecEnv或gym.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 中的示例瞭解更多資訊!