實用函式¶
種子設定¶
環境檢查¶
- gymnasium.utils.env_checker.check_env(env: Env, warn: bool = None, skip_render_check: bool = False, skip_close_check: bool = False)[源]¶
檢查環境是否遵循 Gymnasium 的 API。
為確保環境“正確”實現,
check_env會檢查observation_space和action_space是否正確。此外,該函式會使用各種值呼叫reset()、step()和render()函式。我們強烈建議使用者在環境構建後以及專案持續整合中呼叫此函式,以使環境與 Gymnasium 的 API 保持同步。
- 引數:
env – 將被檢查的 Gym 環境
warn – 已忽略,之前用於抑制特定警告
skip_render_check – 是否跳過渲染方法的檢查。預設為 False(對 CI 有用)
skip_close_check – 是否跳過關閉方法的檢查。預設為 False
視覺化¶
- gymnasium.utils.play.play(env: Env, transpose: bool | None = True, fps: int | None = None, zoom: float | None = None, callback: Callable | None = None, keys_to_action: dict[tuple[str | int, ...] | str | int, ActType] | None = None, seed: int | None = None, noop: ActType = 0, wait_on_player: bool = False)[源]¶
允許使用者使用鍵盤操作環境。
如果在回合制環境中操作,請將 wait_on_player 設定為 True。
- 引數:
env – 用於操作的環境。
transpose – 如果為
True,則觀察輸出會被轉置。預設為True。fps – 每秒執行環境的最大步數。如果為
None(預設值),則使用env.metadata["render_fps"](如果環境未指定“render_fps”,則為 30)。zoom – 放大觀察,
zoom量,應為正浮點數callback –
如果提供了回撥函式,它將在每一步之後執行。它接受以下輸入:
obs_t: 執行動作前的觀察
obs_tp1: 執行動作後的觀察
action: 執行的動作
rew: 獲得的獎勵
terminated: 環境是否已終止
truncated: 環境是否被截斷
info: 除錯資訊
keys_to_action –
按鍵到執行動作的對映。支援不同的格式:按鍵組合可以表示為鍵的 Unicode 碼點元組、字元元組,或者字串,其中字串的每個字元代表一個鍵。例如,如果同時按下‘w’和空格應觸發動作 2,則
key_to_action字典可能如下所示:>>> key_to_action = { ... # ... ... (ord('w'), ord(' ')): 2 ... # ... ... }
或者像這樣:
>>> key_to_action = { ... # ... ... ("w", " "): 2 ... # ... ... }
或者像這樣:
>>> key_to_action = { ... # ... ... "w ": 2 ... # ... ... }
如果為
None,則使用該環境的預設key_to_action對映(如果提供)。seed – 重置環境時使用的隨機種子。如果為 None,則不使用種子。
noop – 在沒有輸入按鍵或輸入的按鍵組合未知時使用的動作。
wait_on_player – 播放應等待使用者操作
示例
>>> import gymnasium as gym >>> import numpy as np >>> from gymnasium.utils.play import play >>> play(gym.make("CarRacing-v3", render_mode="rgb_array"), ... keys_to_action={ ... "w": np.array([0, 0.7, 0], dtype=np.float32), ... "a": np.array([-1, 0, 0], dtype=np.float32), ... "s": np.array([0, 0, 1], dtype=np.float32), ... "d": np.array([1, 0, 0], dtype=np.float32), ... "wa": np.array([-1, 0.7, 0], dtype=np.float32), ... "dw": np.array([1, 0.7, 0], dtype=np.float32), ... "ds": np.array([1, 0, 1], dtype=np.float32), ... "as": np.array([-1, 0, 1], dtype=np.float32), ... }, ... noop=np.array([0, 0, 0], dtype=np.float32) ... )
以上程式碼在環境被封裝時也有效,因此它在驗證幀級預處理不會導致遊戲無法進行方面特別有用。
如果您希望在操作時繪製即時統計資料,可以使用
PlayPlot。以下是繪製過去 150 步獎勵的示例程式碼。>>> from gymnasium.utils.play import PlayPlot, play >>> def callback(obs_t, obs_tp1, action, rew, terminated, truncated, info): ... return [rew,] >>> plotter = PlayPlot(callback, 150, ["reward"]) >>> play(gym.make("CartPole-v1"), callback=plotter.callback)
- class gymnasium.utils.play.PlayPlot(callback: Callable, horizon_timesteps: int, plot_names: list[str])[源]¶
提供一個回撥函式,在使用
play()時建立任意指標的即時圖表。- 該類透過一個函式例項化,該函式接受關於單個環境轉換的資訊
obs_t: 執行動作前的觀察
obs_tp1: 執行動作後的觀察
action: 執行的動作
rew: 獲得的獎勵
terminated: 環境是否已終止
truncated: 環境是否被截斷
info: 除錯資訊
它應該返回一個從此資料計算出的指標列表。例如,該函式可能如下所示:
>>> def compute_metrics(obs_t, obs_tp, action, reward, terminated, truncated, info): ... return [reward, info["cumulative_reward"], np.linalg.norm(action)]
PlayPlot提供callback()方法,該方法會將其引數傳遞給該函式,並使用返回的值更新指標的即時圖表。通常,此
callback()將與play()結合使用,以檢視操作時指標如何演變。>>> plotter = PlayPlot(compute_metrics, horizon_timesteps=200, ... plot_names=["Immediate Rew.", "Cumulative Rew.", "Action Magnitude"]) >>> play(your_env, callback=plotter.callback)
- 引數:
callback – 從環境轉換計算指標的函式
horizon_timesteps – 即時圖表使用的時間範圍
plot_names – 圖表標題列表
- 丟擲:
DependencyNotInstalled – 如果未安裝 matplotlib
環境序列化¶
- class gymnasium.utils.ezpickle.EzPickle(*args: Any, **kwargs: Any)[源]¶
透過其建構函式引數進行序列化和反序列化的物件。
示例
>>> class Animal: pass >>> class Dog(Animal, EzPickle): ... def __init__(self, furcolor, tailkind="bushy"): ... Animal.__init__(self) ... EzPickle.__init__(self, furcolor, tailkind)
當此物件被反序列化時,一個新的
Dog將透過將提供的 `furcolor` 和 `tailkind` 傳遞給建構函式來構建。然而,哲學家們仍然不確定它是否還是同一只狗。這通常只適用於封裝 C/C++ 程式碼的環境,例如 MuJoCo 和 Atari。
使用物件建構函式中的
args和kwargs進行序列化。
儲存渲染影片¶
- gymnasium.utils.save_video.save_video(frames: list, video_folder: str, episode_trigger: Callable[[int], bool] = None, step_trigger: Callable[[int], bool] = None, video_length: int | None = None, name_prefix: str = 'rl-video', episode_index: int = 0, step_starting_index: int = 0, save_logger: str | None = None, **kwargs)[源]¶
從渲染幀儲存影片。
此函式從渲染幀劇集列表中提取影片。
- 引數:
frames (List[RenderFrame]) – 用於組成影片的幀列表。
video_folder (str) – 錄製檔案將儲存的資料夾
episode_trigger – 接受整數並僅當應在此劇集開始錄製時返回
True的函式step_trigger – 接受整數並僅當應在此步驟開始錄製時返回
True的函式video_length (int) – 錄製劇集的長度。如果未指定,則錄製整個劇集。否則,會捕獲指定長度的片段。
name_prefix (str) – 將新增到錄製檔名的字首。
episode_index (int) – 當前劇集的索引。
step_starting_index (int) – 第一幀的步數索引。
save_logger – 是否記錄影片儲存進度,對於耗時較長的影片很有用,使用“bar”啟用。
**kwargs – 將傳遞給 moviepy 的 ImageSequenceClip 的關鍵字引數。您需要指定 fps 或 duration。
示例
>>> import gymnasium as gym >>> from gymnasium.utils.save_video import save_video >>> env = gym.make("FrozenLake-v1", render_mode="rgb_array_list") >>> _ = env.reset() >>> step_starting_index = 0 >>> episode_index = 0 >>> for step_index in range(199): ... action = env.action_space.sample() ... _, _, terminated, truncated, _ = env.step(action) ... ... if terminated or truncated: ... save_video( ... frames=env.render(), ... video_folder="videos", ... fps=env.metadata["render_fps"], ... step_starting_index=step_starting_index, ... episode_index=episode_index ... ) ... step_starting_index = step_index + 1 ... episode_index += 1 ... env.reset() >>> env.close()
舊步長 API 到新步長 API 相容性¶
- gymnasium.utils.step_api_compatibility.step_api_compatibility(step_returns: tuple[ObsType | ndarray, SupportsFloat | ndarray, bool | ndarray, bool | ndarray, dict | list] | tuple[ObsType | ndarray, SupportsFloat | ndarray, bool | ndarray, dict | list], output_truncation_bool: bool = True, is_vector_env: bool = False) tuple[ObsType | ndarray, SupportsFloat | ndarray, bool |ndarray, bool |ndarray, dict | list] | tuple[ObsType | ndarray, SupportsFloat | ndarray, bool |ndarray, dict | list][源]¶
根據
output_truncation_bool指定的 API 轉換步長返回值的功能。Done(舊)步長 API 指的是
step()方法返回(observation, reward, done, info)。Terminated Truncated(新)步長 API 指的是step()方法返回(observation, reward, terminated, truncated, info)(有關 API 更改的詳細資訊,請參閱文件)。- 引數:
step_returns (tuple) –
step()返回的項。可以是(obs, rew, done, info)或(obs, rew, terminated, truncated, info)output_truncation_bool (bool) – 輸出是返回兩個布林值(新 API)還是一個布林值(舊 API)(預設為
True)is_vector_env (bool) –
step_returns是否來自向量環境
- 返回:
step_returns (tuple) – 根據
output_truncation_bool,它可以返回(obs, rew, done, info)或(obs, rew, terminated, truncated, info)
示例
此函式可用於確保在具有衝突 API 的步長介面中的相容性。例如,如果環境是用舊 API 編寫的,封裝器是用新 API 編寫的,並且最終步長輸出需要是舊 API。
>>> import gymnasium as gym >>> env = gym.make("CartPole-v0") >>> _, _ = env.reset() >>> obs, reward, done, info = step_api_compatibility(env.step(0), output_truncation_bool=False) >>> obs, reward, terminated, truncated, info = step_api_compatibility(env.step(0), output_truncation_bool=True)
>>> vec_env = gym.make_vec("CartPole-v0", vectorization_mode="sync") >>> _, _ = vec_env.reset() >>> obs, rewards, dones, infos = step_api_compatibility(vec_env.step([0]), is_vector_env=True, output_truncation_bool=False) >>> obs, rewards, terminations, truncations, infos = step_api_compatibility(vec_env.step([0]), is_vector_env=True, output_truncation_bool=True)
- gymnasium.utils.step_api_compatibility.convert_to_terminated_truncated_step_api(step_returns: tuple[ObsType | ndarray, SupportsFloat | ndarray, bool | ndarray, dict | list] | tuple[ObsType | ndarray, SupportsFloat | ndarray, bool | ndarray, bool | ndarray, dict| list], is_vector_env=False) tuple[ObsType | ndarray, SupportsFloat | ndarray, bool |ndarray, bool | ndarray, dict | list][源]¶
無論輸入 API 是什麼,都將步長返回值轉換為新步長 API 的函式。
- 引數:
step_returns (tuple) –
step()返回的項。可以是(obs, rew, done, info)或(obs, rew, terminated, truncated, info)is_vector_env (bool) –
step_returns是否來自向量環境
- gymnasium.utils.step_api_compatibility.convert_to_done_step_api(step_returns: tuple[ObsType | ndarray, SupportsFloat | ndarray, bool | ndarray, bool | ndarray, dict | list] | tuple[ObsType | ndarray, SupportsFloat | ndarray, bool| ndarray, dict | list], is_vector_env: bool = False) tuple[ObsType | ndarray, SupportsFloat | ndarray, bool |ndarray, dict | list][源]¶
無論輸入 API 是什麼,都將步長返回值轉換為舊步長 API 的函式。
- 引數:
step_returns (tuple) –
step()返回的項。可以是(obs, rew, done, info)或(obs, rew, terminated, truncated, info)is_vector_env (bool) –
step_returns是否來自向量環境
執行時效能基準測試¶
有時需要測量環境的執行時效能,並確保沒有效能退化發生。這些測試需要手動檢查其輸出結果。
- gymnasium.utils.performance.benchmark_step(env: Env, target_duration: int = 5, seed=None) float[源]¶
衡量環境步長執行時效能的基準測試。
- 示例用法:
`py env_old = ... old_throughput = benchmark_step(env_old) env_new = ... new_throughput = benchmark_step(env_old) slowdown = old_throughput / new_throughput `
- 引數:
env – 要進行基準測試的環境。
target_duration – 基準測試的持續時間(以秒為單位)(注意:它會略微超出)。
seed – 對環境和取樣的動作進行種子設定。
返回:平均每秒步數。