簡體   English   中英

q學習計算中的大量狀態

[英]The huge amount of states in q-learning calculation

我通過q-learning實現了3x3 OX游戲(在AI vs AI和AI vs Human上都可以完美運行),但是我無法再前進到4x4 OX游戲,因為它將耗盡我所有的PC內存並崩潰。

這是我當前的問題:大量訪問沖突?

以我的理解,一個3x3 OX游戲共有3(空格,白色,黑色)^ 9 = 19683個可能的狀態。 (相同圖案不同角度仍算)

對於4x4 OX游戲,總狀態為3 ^ 16 = 43,046,721

對於15x15的常規圍棋游戲,總狀態為3 ^ 225〜2.5 x 10 ^ 107

Q1。 我想知道我的計算是否正確。 (對於4x4 OX游戲,我需要3 ^ 16數組嗎?)

Q2。 由於我需要計算每個Q值(針對每個狀態,每個動作),因此我需要大量的數組,這是預期的嗎? 有什么辦法避免呢?

考慮對稱性。 實際可能的配置數量比3x3板上的9 ^ 3小得多。 例如,基本上只有3種不同的配置,且板上只有一個x

旋轉

有許多電路板配置都應導致AI做出相同的決定,因為它們在對稱性上相同。 例如:

x - -    - - x    - - -    - - -  
- - -    - - -    - - -    - - - 
- - -    - - -    - - x    x - - 

這些都是相同的配置。 如果單獨對待它們,則會浪費訓練時間。

鏡像

不僅存在旋轉對稱性,而且還可以在不更改實際情況的情況下對板進行鏡像。 以下基本上是相同的:

0 - x    x - 0    - - -    - - -  
- - -    - - -    - - -    - - - 
- - -    - - -    0 - x    x - 0

排除“無法發生”配置

接下來考慮當一名玩家獲勝時游戲結束。 例如,您有3 ^ 3個配置,看起來都像這樣

x 0 ?
x 0 ?    // cannot happen
x 0 ?

他們永遠不會出現在正常比賽中。 您不必為它們保留空間,因為它們根本不可能發生。

排除更多“無法發生”

此外,由於玩家輪流交替進行游戲,因此您以9^3大大高估了配置空間的大小。 例如,您無法達到以下配置:

x x -
x - -    // cannot happen
- - - 

如何獲得所有需要的配置?

簡而言之,這就是我要解決的問題:

  • 為您的董事會定義一個operator<
  • 使用<關系可以選擇一個代表對每一組的“相似的”配置(例如,一個是<比組中的所有其他)
  • 編寫一個函數,以給定的配置返回給您代表性的配置
  • 蠻力迭代所有可能的動作(僅可能的動作!,即僅在玩家獲勝之前交替輪流玩家)。 在這樣做的時候
    • 計算您遇到的每種配置的代表
    • 記住所有具有代表性的配置(請注意,由於對稱,它們出現了幾次)

現在,您將獲得所有對稱模配置的列表。 在實際游戲中,您只需要將棋盤轉換為其代表,然后進行移動即可。 如果您記得如何旋轉/鏡像它,則可以在之后轉換回實際配置。

這是蠻力的。 我的數學有點生疏,否則我將嘗試直接獲取代表名單。 但是,對於每種尺寸的電路板,您只需要做一次。

如果您跳過重新發明輪子的方法,那么可以解決以下問題:

該模型是一個卷積神經網絡,它經過Q學習的變體訓練,其輸入為原始像素,其輸出為估計未來回報的價值函數。 我們將我們的方法應用於Arcade學習環境中的七個Atari 2600游戲,而無需調整體系結構或學習算法。

https://arxiv.org/pdf/1312.5602v1.pdf

我們可以用神經網絡表示Q函數,該神經網絡將狀態(四個游戲屏幕)和動作作為輸入並輸出相應的Q值。 或者,我們可以僅將游戲屏幕作為輸入,並輸出每個可能動作的Q值。 這種方法的優勢在於,如果我們要執行Q值更新或選擇具有最高Q值的動作,則只需通過網絡進行一次前向傳遞,即可立即獲得所有動作的所有Q值。

https://neuro.cs.ut.ee/demystifying-deep-reinforcement-learning/

我有一個枚舉方案,但它需要一個整數數組。 如果您可以將整數數組壓縮為單個Q值(然后壓縮),則可能會起作用。

首先是N,表示棋盤上的棋子數。

然后是ceil(N / 2)個項的數組,X個。 每個數字都是從上一個X片段(或板開始)開始的空白有效空間的數量。 重要說明:如果空格將導致游戲結束,則該空格無效。 這是連續5個結束規則可以幫助我們縮小域的地方。

然后是Floor(N / 2)個項目的數組,O個。 邏輯與X數組相同。

因此,對於該板和3條規則:

XX.
X.O
..O

我們有以下數組:

N:5
X:0(從棋盤開始),0(從先前的X開始),0(對X無效,因為X會結束游戲)
O:2(從木板開始,減去前面的所有X),2(從先前的O開始)

那就是數組[5,0,0,0,2,2]。 給定這個數組,我們可以重新創建上面的板。 小數字的發生比大數字的可能性更大。 在具有19x19棋盤的常規游戲中,棋子大部分會組合在一起,因此下一行將有很多零,一,二,並以“大”號分隔。

現在,您必須使用較小的數字比較大的數字出現更多的事實來壓縮該數組。 通用壓縮算法可能會有所幫助,但某些專門的壓縮算法可能會有所幫助。

我對q學習一無所知,但是這里所有這些都要求q值可以具有可變大小。 如果必須將q值的大小保持不變,則該大小必須考慮最差的板,並且該大小可能太大,以至於無法實現首先進行枚舉/壓縮的目的。

我們使用從左到右和從上到下的方法來枚舉片段,但是我們也可以使用一些螺旋方法來產生更好的小到大數字比率。 我們只需要為螺旋中心選擇最佳起點。 但這可能會使算法復雜化,並最終浪費更多的CPU時間。

另外,我們實際上並不需要數組中的第一個數字N。數組的長度提供了此信息。

暫無
暫無

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

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