Frozen Lake (冷凍湖)

../../../_images/frozen_lake.gif

此環境是 Toy Text (玩具文字) 環境的一部分,其中包含關於環境的通用資訊。

動作空間

Discrete(4) (離散(4))

觀察空間

Discrete(16) (離散(16))

import (導入)

gymnasium.make("FrozenLake-v1")

Frozen Lake (冷凍湖) 涉及穿越冷凍湖從起點到終點,同時避免掉入冰洞。由於冷凍湖的滑溜特性,玩家可能不會總是朝預期的方向移動。

Description (描述)

遊戲開始時,玩家位於冷凍湖網格世界的 [0,0] 位置,目標位於世界的遠端,例如 4x4 環境的 [3,3]。

當使用預先確定的地圖時,冰洞分佈在設定的位置;當生成隨機地圖時,冰洞則分佈在隨機位置。

玩家持續移動直到抵達目標或掉入冰洞。

湖面是滑溜的(除非禁用),因此玩家有時可能會垂直於預期方向移動(請參閱 is_slippery)。

隨機生成的世界將始終有一條通往目標的路徑。

Elf (精靈) 和 stool (凳子) 來自 https://franuka.itch.io/rpg-snow-tileset。所有其他素材由 Mel Tillery 提供 http://www.cyaneus.com/

Action Space (動作空間)

動作形狀為 (1,),範圍在 {0, 3} 之間,表示玩家移動的方向。

  • 0:向左移動

  • 1:向下移動

  • 2:向右移動

  • 3:向上移動

Observation Space (觀察空間)

觀察值是一個代表玩家目前位置的值,計算方式為 current_row * ncols + current_col (其中 row 和 col 都從 0 開始)。

例如,4x4 地圖中的目標位置可以計算如下:3 * 4 + 3 = 15。可能的觀察數量取決於地圖的大小。

觀察值以 int() 形式回傳。

Starting State (起始狀態)

回合開始時,玩家位於狀態 [0] (位置 [0, 0])。

Rewards (獎勵)

獎勵方案

  • 抵達目標:+1

  • 掉入冰洞:0

  • 踩到冰面:0

Episode End (回合結束)

在以下情況下,回合會結束

  • Termination (終止)

    1. 玩家移動到冰洞中。

    2. 玩家抵達目標,位置在 max(nrow) * max(ncol) - 1 (位置 [max(nrow)-1, max(ncol)-1])。

  • Truncation (截斷) (當使用 time_limit wrapper (時間限制封裝器) 時)

    1. 對於 4x4 環境,回合長度為 100;對於 FrozenLake8x8-v1 環境,回合長度為 200。

Information (資訊)

step()reset() 回傳一個 dict (字典),包含以下鍵

  • p - 狀態的轉移機率。

有關轉移機率的資訊,請參閱 is_slippery

Arguments (參數)

import gymnasium as gym
gym.make('FrozenLake-v1', desc=None, map_name="4x4", is_slippery=True)

desc=None:用於指定非預載地圖。

指定自訂地圖。

    desc=["SFFF", "FHFH", "FFFH", "HFFG"].

圖塊字母表示

  • “S” 代表 Start tile (起點圖塊)

  • “G” 代表 Goal tile (目標圖塊)

  • “F” 代表 frozen tile (冷凍圖塊)

  • “H” 代表 tile with a hole (有冰洞的圖塊)

可以透過呼叫函數 generate_random_map 來指定隨機生成的地圖。

from gymnasium.envs.toy_text.frozen_lake import generate_random_map

gym.make('FrozenLake-v1', desc=generate_random_map(size=8))

map_name="4x4":ID 用於使用任何預載地圖。

    "4x4":[
        "SFFF",
        "FHFH",
        "FFFH",
        "HFFG"
        ]

    "8x8": [
        "SFFFFFFF",
        "FFFFFFFF",
        "FFFHFFFF",
        "FFFFFHFF",
        "FFFHFFFF",
        "FHHFFFHF",
        "FHFFHFHF",
        "FFFHFFFG",
    ]

如果 desc=None,則將使用 map_name。如果 descmap_name 均為 None,則將生成一個隨機的 8x8 地圖,其中 80% 的位置為冷凍。

is_slippery=True:如果為 true,則玩家將以 1/3 的機率朝預期方向移動,否則將以相等的 1/3 機率朝任一垂直方向移動。

例如,如果動作是向左移動且 is_slippery 為 True,則

  • P(向左移動)=1/3

  • P(向上移動)=1/3

  • P(向下移動)=1/3

Version History (版本歷史)

  • v1:修復了獎勵的錯誤

  • v0:初始版本發布