1. 程式人生 > >德州撲克AI簡介——2015華為軟體精英賽小結

德州撲克AI簡介——2015華為軟體精英賽小結

       2015華為軟體精英挑戰賽的比賽目的是設計德州撲克比賽的牌手程式,採用的是無限注的比賽規則。具體比賽規則見下面連結。在接到這個賽題之初,我們做的第一件事情是熟悉德州撲克的比賽規則,並儘可能去尋找現有的開源專案或者程式。具體來說,著手點主要有四點:維基、論文、比賽和開源專案。
       首先閱讀的是維基,這裡參考的主要是英文的維基百科。通過維基百科,大致瞭解了德州撲克的發展歷史和現狀,並且得知在現在每年的都會有人與機器的德州撲克比賽和機器與機器之間的德州撲克比賽。此外,通過維基百科,還了解到當前主流學術界對於德州撲克AI的研究情況以及在設計德州撲克AI中遇到的主要難點。
       具體來說,與德州撲克相關的比較出名,且被我們重點關注的比賽主要有:Association for the Advancement of Artificial Intelligence(AAAI)每年舉辦的賽事;Annual Computer Poker Competition 每年的機器對機器的比賽。AAAI 的比賽找不到原始碼,因此對於我們的幫助不是很大;而 Annual Computer Poker Competition 比賽在2014年之前是不提供原始碼,只是提供比賽的資料,到了2014年之後,比賽要求參賽的成員提供牌手程式程式碼,並且在其官方網站上也提供來參賽選手比賽程式的下載連結。相對來說,這是一個很考的資料參考網站。除此之阿外,還有人與AI的Poker比賽等等,由於時間和精力有限,就不再關注了!
       在維基中瞭解的另外一個內容是知道了一些有名的Poker機器人,比如:

  • Claudico,由卡耐基梅龍大學的教授 Tuomas Sandholm 與其學生研發。不過,這個程式需要超級計算機和16T的記憶體才能執行,根本不適用於本次比賽;
  • Polaris,也是 University of Alberta 開發Poker AI,不過主要針對的是 heads-up有限注的情況,對於我們的比賽參考價值不大
  • Cepheus,由 University of Alberta 開發的針對 Head-up limit Poker 比賽的 AI。能夠找到相應的演算法原始碼,並且有專門介紹這個 AI 網站。並且開發這個AI的大學也是業內專門研究Poker的最出名學府。我麼在比賽的過程中花費了大量的時間研究它的演算法 CFR+ 演算法。不過此AI應用於2人有限注的情況,因此對於本次比賽的參考價值有限
  • Tartanian7 獲取 Computer Poker Competition 的多個Poker專案的冠軍,也能夠找到牌手程式的原始碼,就應用來說,對於我們的程式有很高的參考價值。不過,這個比賽針對的是非無限注的情況,且比賽的人數不多,最多隻有三個人,這也點也或多或少有些限制;

           在介紹Poker的論文中,更多的提及是採用機器學習的方法,解決Poker中的模型設計引數求解問題。其中提及的演算法多種多樣,根據自己看到的論文,提及最多的演算法當屬CFR、神經網路演算法。其餘一些演算法也有所提及,但是由於不瞭解相關演算法,沒有能夠理解論文內容;且不提供原始碼,具體靠個人在一個月內復現出來難度太高,因此,這方面也沒多大收穫。但是,對於論文來說,其主要思想是通過構建Poker的策略模型,然後通過設計演算法,來求解納什均衡的引數。
           為此,需要首先對納什均衡的概念有一定的瞭解。具體來說,納什均衡是一種策略的組合,使得每個參與人對於其他參與人策略的最優反應。假設在博弈中,如果某種情況下無一個參與者可以獨自行動而增加收益(即為了自身利益最大化,沒有一方願意改變其策略),則此策略組合被稱為納什均衡。所有局中人的策略構成一個策略組合。
           因此,對於德州撲克牌手程式的設計問題轉化為建立德州撲克牌手模型,並求取納什均衡條件下的模型引數問題。可惜的是,在當時比賽的時候,意識到的比較晚。
           此外,在資料搜尋的過程中,也涉及到了一些開源專案,並且獲得了非常不錯的借鑑效果。小結一下,一些覺得有用的Poker開源專案主要如下:

    • PokerTH
      PokerTH 是一個開源的跨平臺德州撲克專案,提供德州撲克的聯網、本機比賽,能夠獲取原始碼。此原始碼採用的是C++編寫,我們參賽隊伍的程式主要參考此專案的原始碼,並在此基礎上改進而得到
      PokerTH連結:http://www.pokerth.net/download.html
    • PokerAI
      PokerAI 是一個能夠智慧打德州撲克的程式。由於其為一個商業程式,因此,並沒有能夠在網際網路上找到其原始碼,也是比較可惜吧。
    • OpenHoldem
      OpenHoldem 是谷歌維護的一個開源的德州撲克策略核心吧(可能有些不對),此專案內容多,功能龐大。同樣,存在閱讀、理解困難的問題。因此,雖然可以免費獲取原始碼,但我們隊伍並沒有能夠從中獲取多少參考內容。
      OpenHoldem連結:https://github.com/OpenHoldem/openholdembot
    • Pokekr-Engine
      由 University of Alberta 的一個人用 Java 寫的Poker引擎,主要作用是判斷、比較手牌大小、手牌強度等,功能較為分散。我們隊伍當時急於需找一個完整的Poker牌手程式系統,因此,也沒有過多參考這個程式
      Poker-Engine連結: https://github.com/bubuntux/poker-engine

       以上就是在做了7天左右的背景資源尋找之後得出的結論,足夠給設計Poker比賽獲取一個背景資訊了。