作者NDark (溺於黑暗)
看板GameDesign
標題[心得] 瀏覽"How i built ... poker bot?"心得(上)
時間Wed Jan 13 19:37:39 2010
瀏覽"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
(未完待續)
--
"May the Balance be with U"(願平衡與你同在)
視窗介面遊戲設計教學(
http://0rz.tw/V28It ),討論,分享。歡迎來信。
視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework)
遊戲工具設計(Game App. Tool Design )
電腦圖學架構及研究(Computer Graphics)論文代讀(含投影片製作)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.77.176
推 ddavid:有個朋友才沒多久前也跟我提過一樣的事,該不會同一人吧XD 01/13 19:56
→ ddavid:我雖然會打TH也算有程式能力,不過特定必要技術上有所不足 01/13 19:57
→ ddavid:又一時沒空去學,所以我照實說暫時幫不上忙XD 01/13 19:58
→ rofellosx:那怎樣躲過間諜程式? 01/13 20:00
推 justben:spy++是真的有這東西嗎?XDDD 01/13 20:36
推 wangm4a1:推 01/13 21:09
推 etrexetrex:好像有道理喔 外掛直接賺現金 01/13 23:00
推 KanoLoa:推推 01/13 23:12
→ rofellosx:哪時開發機器人炒股 01/13 23:23
推 FSVDFS:好像看到攻殼機動隊的劇情了@@ 01/14 03:44
推 enthos:好文! 註: Spy++(Debug用)-Visual Studio Tools 01/14 10:32
推 yoco315:我曾經跟一位版友一起接過 poker bot 的 case... 01/15 00:46
→ yoco315:但是只作到一半,還好是分階段拿錢的 :D 業主後續沒動作 01/15 00:47