Programming

[2010] 瀏覽 “How i built a working online poker bot?"心得(上)


瀏覽 “How i built a working online poker bot?"心得

作者:NDark
時間:20100113
參考網站:
http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot

前言

我會去看這頁面是由於一位朋友(這邊稱L先生)對這個有興趣,但又技術不足,
因此我總共花了4個晚上(不含文章撰寫)
把James Devlin這一系列相關的文章大致上看過一遍。

所謂大致上就是我沒有每段都去仔細看。因此本篇文章只能說是一個心得報告。
對於有興趣的人只能說是個導讀。
我認為這篇文章應該屬於AI應用的部分,因此應該適合本版。

James Devlin先生是一個視窗程式程式設計工作者與撲克玩家,
他在完成自己的線上撲克機器人後在2008年初開始發布這一系列文章。
主要說明你要怎麼建置自己的線上撲克機器人。

  • 很重要的第一點是

Devlin說到: “為了能贏,你必須讓你的機器人不能贏"。
因為這個機器人是在現實世界賺真實的錢,一旦賺的太凶可能會把地球玩垮XD。
(他的意思大概是這樣沒錯,原意複利與倍數的級數會導致賺錢的速度高過你的想像,
以至於到最後你沒辦法獲利[不管是被盯上或是錢都賺光了]。)

  • 很重要的第二點是

線上撲克的客戶端程式基本上都是間諜程式-
“online poker client are basically spyware"
是為了紀錄你瀏覽過哪些網頁,是否開啟什麼程式。

  • 很重要的第三點是

透過線上撲克機器人,你還是不可能看透對手的牌。(對手的資料沒有存在客戶端)

  • 很重要的第四點是

建議不要使用非原生語言來撰寫,因為你要處理的東西是視窗程式,
因此越能靠近它的語言是最好的,如C++。
“C# and other managed code is not suitable for this case"

L先生曾經找過程試設計的工作者來估價這個系統,結果是30萬。原本我以為太貴,
但是等我全部把這一系列文章都看完,我覺得確實值這個價錢(甚至更高)。

短時間之內,我並不想投入這個金錢遊戲,
因為我還不覺得這個工作可以讓我長久專心投入。

系統

簡單來講,要完成一個線上撲克機器人你會需要建置一個系統

以架構來說,你會有
1.虛擬的bot程式或PC若干。
2.一個主控伺服器控制各PC上的bot程式喚起或結束,收集資訊。
3.資料伺服器:bot的歷史資料。
4.收集伺服器:收集線上的各種資料庫。

以流程來論

input processing output
擷取資訊 處理資料 輸出驅動

擷取資訊-從線上撲克的程式擷取資料的系統,這裡牽涉比較多的視窗底層運作。
處理資料-從目前牌桌狀況決定要作什麼的系統,這裡則是AI與撲克理論。
輸出驅動-按下線上撲克程式的控制項並真正反應的系統。

所謂簡單來講是指你已經有下列這些背景知識之後會較為簡單,
如果你沒有這些背景知識(像我一樣),那麼整個工程會變的相當大,
幸運地,作者釋出了他部分的程式碼,你可以照抄照改。

會需要學習的程式技巧(What skills will I need to write a bot?)

  • Windowing & GDI
  • Windows Hooks
  • Kernel objects
  • DLL Injection (in general: the injecting of code into other processes)
  • API Instrumentation (via Detours or similar libraries)
  • Inter-process Communication (IPC)
  • Multithreading & synchronization
  • Simulating user input
  • Regular expressions (probably through Boost)
  • Spy++

會需要學習的技術領域

  • Artificial Intelligence.
  • Poker Strategy.
  • Input Simulation.
  • Operating Systems.
  • Reverse Engineering.
  • Probability and Statistics.

建議讀物(Recommended Reading)-程式設計類

  • Windows via C/C++. Jeffrey Richter.
  • Exploiting Online Games: Cheating Massively Distributed Systems (Addison-Wesley Software Security Series).
  • Exploiting Software: How to Break Code (Addison-Wesley Software Security Series). Greg Hoglund and Gary McGraw.

建議讀物(Recommended Reading)-牌局類

  • The Theory of Poker. David Sklansky.
  • The Mathematics of Poker. Bill Chen and Jerrod Ankenman.
  • Professional No-Limit Hold ’em: Volume I. Matt Flynn, Sunny Mehta, and Ed Miller.
  • No Limit Hold’em: Theory and Practice. David Sklansky and Ed Miller.
  • Gambling Theory and Other Topics. Mason Malmuth.
  • Getting Started in Hold ’em. Ed Miller.

作者有釋出的程式

  • XPokerBot
  • XMonitorBot
  • XFileMonitor

作者收集到的算牌函式庫

  • Poker Hand Evaluators : collect open-source poker code
  • The Pokersource Poker-Eval library
  • The Java enumeration library built on top of Pokersource
  • Keith Rule’s C# port of the Poker-Eval library
  • Cactus Kev’s 5-Card Evaluator
  • Paul Senzee’s Improved 5-Card Evaluator
  • Paul Senzee’s 7-Card Evaluator
  • Moritz Hammer’s Directed Acyclic Graph-based 7-Card Evaluator
  • Steve Brecher’s HandEval routines
  • The Two Plus Two 7-Card Evaluator

(未完待續)

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s