簡體   English   中英

q 帶健身房的桌子(使用盒子觀察空間)

[英]q table with gym (using box observation space)

我正在嘗試使用此觀察空間運行 q-learning 算法:

self.observation_space = spaces.Box(low=np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), high=np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]), dtype=np.flo

當我嘗試訪問 q 表時,如下所示:

q_value = q_table[state][action]

我收到此錯誤:

IndexError: arrays used as indices must be of integer (or boolean) type

所以我的問題是:當我的觀察空間是使用 space.box 定義的時,我應該如何訪問 q 表?

如果需要,這就是定義 q_table 的方式(它是我從互聯網上獲取的代碼,試圖將其調整為我的項目):

num_box = tuple((env.observation_space.high + np.ones(env.observation_space.shape)).astype(int))
q_table = np.zeros(num_box + (env.action_space.n,))

你不是說 q_table 是什么類型。 我假設它是一個 numpy 數組,在OpenAI Gym 和 Python 中定義為 Q-learning 設置

action_space_size = env.action_space.n
state_space_size = env.observation_space.n

q_table = np.zeros((state_space_size, action_space_size))

您收到此錯誤是因為您沒有使用 integer 索引 numpy 數組的元素。 同樣,我還沒有看到您的代碼,但我相信您正在嘗試使用元組獲取 Q 表的特定行。

無論如何,在使用 Q-learning 時不應使用 Box 觀察空間,而應使用 Discrete 觀察空間。 使用 Q-learning 時,需要提前知道狀態數,才能初始化 Q-table。 盒子空間用於實數值,空間的維數不定義狀態數。 例如,如果您像這樣創建一個 Box 空間:

spaces.Box(low=0, high=1, shape=(2, 2), dtype=np.float16)

你不會有 4 個狀態,但可能是無限狀態。 參數 low=0 和 high=1 表示 Box 空間中四個變量的最小值和最大值,但在 0 和 1 之間可能有多個值(0.1、0.2 等)。 因此,您無法預先估計狀態數。

如果您使用 np.uint8 (或任何 integer 類型)作為 dtype,您可能會計算狀態數,但使用 Box 空間而不是 Discrete 空間仍然是一個延伸。 此外,即使使用 integer 值,以下值也不起作用:

num_box = tuple((env.observation_space.high + np.ones(env.observation_space.shape)).astype(int))
q_table = np.zeros(num_box + (env.action_space.n,))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM