圍棋博弈程式的實現與思考(6)——博弈樹的構建

來源:互聯網
上載者:User

        為了實現UCT演算法,需要在記憶體中構建一棵博弈樹,博弈樹的每個節點是博弈過程中的一個局面。

        一個顯而易見的方法是——構建樹形的資料結構,每個節點儲存3類資訊:1)該節點所代表的局面。2)局面資訊(當前收益值與被嘗試次數)。3)子節點的索引。

        出於以下兩個考慮,我並沒有用這個方法。

        1)儘可能地減少記憶體佔用。

        2)細究之,圍棋博弈過程中產生的拓撲結構並非樹,而是圖——不同分支下的局面亦可能重合,儘管這種菱形重合的頻率是很小的。

        我用了一個雜湊表來儲存必要的資訊,而只在邏輯上存在樹形(包含少量的菱形重合)的資料結構。雜湊表的表項儲存兩類資訊:1)雜湊值。2)局面資訊。由於採用的雜湊演算法重合率極低,我假定不同局面的雜湊值是不會重合的——即使有重合,在UCT這樣的機率演算法中亦無傷大雅。在這個雜湊表中,雜湊值不但是局面的索引資訊,而且是局面的唯一標記。

        兩種方法優劣不明。

        這裡貼一下前文中所述的UCT演算法:

1)      從博弈樹的根點開始向下搜尋,執行2)。

2)     遇到節點a後,若a存在從未評估過的子節點,執行3),否則執行4)。

3)      通過MonteCarlo方法評估該子節點,得到收益值後更新該子節點至根節點路徑上所有節點的平均收益值,執行1)。

4)      計算每個子節點的UCB值,將UCB值最高的子節點作為節點a,執行2)。

5)      演算法可隨時終止,通常達到給定時間或嘗試次數後終止。

根節點下平均收益值最高的子節點作為演算法的輸出。

        在步驟2)中,也就是要判斷子節點存不存在於雜湊表中。在步驟3)和4)中,則需要更新雜湊表中的局面資訊。

最後提一下我採用的雜湊演算法——zobrist hashing,這個真是雜湊棋類遊戲局面的利器啊,維基百科zobrist hashing詞條:zobrist hashing。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.