冰凍湖

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

此環境是玩具文字環境的一部分,其中包含有關環境的一般資訊。

動作空間

離散(4)

觀察空間

離散(16)

import

gymnasium.make("FrozenLake-v1")

冰凍湖涉及從起點穿過冰凍的湖泊到達目標,而不會因在冰凍的湖面上行走而掉入任何洞中。由於冰凍湖的濕滑性質,玩家可能無法始終朝著預期的方向移動。

描述

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

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

玩家會移動,直到他們到達目標或掉入洞中。

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

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

來自https://franuka.itch.io/rpg-snow-tileset的精靈和凳子。所有其他資產均由 Mel Tillery 提供http://www.cyaneus.com/

動作空間

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

  • 0:向左移動

  • 1:向下移動

  • 2:向右移動

  • 3:向上移動

觀察空間

觀察值是一個值,表示玩家當前位置為 current_row * ncols + current_col(其中行和列都從 0 開始)。

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

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

起始狀態

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

獎勵

獎勵時間表

  • 到達目標:+1

  • 到達洞:0

  • 到達冰凍:0

回合結束

如果發生以下情況,回合將結束

  • 終止

    1. 玩家移動到洞中。

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

  • 截斷(使用 time_limit 包裝器時)

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

資訊

step()reset()傳回包含以下鍵的字典

  • p - 狀態的轉換機率。

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

參數

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

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

指定自訂地圖。

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

可以透過呼叫函數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,則將生成具有 80% 位置冰凍的隨機 8x8 地圖。

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

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

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

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

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

版本歷史

  • v1:修復了獎勵的錯誤

  • v0:初始版本發布