博弈——五分鐘知悉如何用線性規劃做棋牌博弈
摘要
運籌學無所不包括,無所不能!alpha-go所面對的問題根本上是屬於博弈的,當然屬於運籌學。博弈發展到凌駕於AI之上,那麼有什麼能凌駕於博弈呢,也許是運籌學裡的看家技術——線形規劃——呢。在作者之前博文中,已經介紹過了如何用+Leapms線性規劃做排序,這裡介紹如何用+Leapms線性規劃做博弈,附程式碼。本博文及所有本作者博文裡的文字、模型、程式碼、結果均為+Leapms原創!
一個簡單的博弈問題
以一個簡單的火柴問題為例:火柴問題出現在Wayne L. Winston著名的教科書Operations Research: Applications and Algorithms[1][2]中的靜態動態規劃一章。
首先需要理解博弈問題之所以出現在動態規劃裡的原因——絕大多數博弈問題其實很容易被轉化為遞迴問題,而所有遞迴問題都可以用動態規劃這樣一種帶有禁忌節算核心的列舉演算法所求解。
所謂博弈問題是指論域之中有一個敵對的智慧體,其目標與博弈主體的目標衝突,問題的目的是對博弈的主體(以及敵對智慧體)給出最佳決策,以使得博弈主體(以及敵對智慧體)能夠獲取各自的利益最大化。
回到火柴問題:在桌在上有 n 根火柴,“我”(博弈主體)和“對手”(敵對智慧體)依次拿1-3根火柴,不許多拿也不許少拿,誰拿到最後一根誰輸掉此次遊戲。
這個火柴問題可以通過觀察知道,如果桌面上有五根火柴,則無論我方如何拿幾根火柴,對手都能在下一次使得我方輸掉,而且任何4k+5 (k為大於等於0的整數)根火柴的情況都會使得當前將要拿火柴的人輸掉。依據這個觀察即可做出一個簡單的遞推程式。但這個不是本博文的目標,本博文的目的是把博弈的核心邏輯用模型的方法“描述性地”“描述”給計算機,讓計算機自己推出結果。
博弈的邏輯其實是遞迴(當有遞迴原點時)。例如火柴問題可以這樣被描述給計算機,當一方拿去1~3根火柴時,就等同於把 n-1 ~ n-3 的情形遞迴地推給了另一方。這個遞迴是有原點的,因為所需考慮的火柴數目是逐步減少的,且最終n=3,2,1的情形非常簡單,可以直接給出結果。
對這樣的問題,可以用(+Leapms)線性規劃描述性地建模,並求解。
火柴問題的線型規劃建模
設0-1變數 F[i], i=1,...,n 表示當桌面上有i根火柴時候的博弈獲利。F[i]=1時表示獲益為贏,f[i]=0時表示獲益為輸。用一般變數x[i]表示當桌面上有i根火柴時候的最優決策,x[i]的含義由其二進位制表達來表示,當它的2進位制第1位為1時表示可拿1根或查,第2位為1時表示可拿2根或查,第3位為1時表示可拿3根或火柴,當有多個二進位制位為1時表示可選擇一種情況拿火柴(例如1、2位都為1,表示拿1根或2根都會贏),當x[i]=0時表示此時無論拿1-3根中任意情況對方都有方法使我方輸掉。
模型的目標是極大化所有f[i] ( 即:在博弈裡叫做敵對智慧體是理性智慧體,是非常聰明的對手,它總能做出最優決策):
max sum{i=1,...,n} F[i]
定義遞迴原點的約束,顯然:
F[1]=0
F[2]=1
F[3]=1
x[1]=0
x[2]=1
x[3]=2
遞迴邏輯約束——當我方拿1-3根的三種情況都會導致敵手贏得遊戲,則我方最優盈利為0。
3-F[i-1]-F[i-2]-F[i-3] >= F[i] | i = 4,...,n //(1)
上面的約束邏輯是:如果我方拿1-3根的三種情況都使得敵方盈利為1,則左側為零,於是右側我方獲利被約束為0。
下面的約束用來保證正確的決策,即如果我方拿k根火柴導致地方獲利為0,則使得d[i]的第k二進位制位為1,否則為0。
x[i]=(1-F[i-1])+2(1-F[i-2])+4(1-F[i-3])|i=4,...,n //(2)
完整+Leapms模型及其求解
完整+Leapms模型如下(替換資料區的n=20可獲得更大n值得解,比如n=1000):
max sum{i=1,...,n}F[i] subject to 3-F[i-1]-F[i-2]-F[i-3]>=F[i]| i=4,...,n//(1) x[i]=(1-F[i-1])+2(1-F[i-2])+4(1-F[i-3])|i=4,...,n//(2) F[1]=0 F[2]=1 F[3]=1 x[1]=0 x[2]=1 x[3]=2 where n is a number F[i] is a variable of binary|i=1,...,n x[i] is a variable of number|i=1,...,n data n=20
求解過程(使用load, mip兩個命令):
+Leapms>load Current directory is "ROOT". ......... match.leap tictac.leap ......... please input the filename:match ================================================================ 1:max sum{i=1,...,n}F[i] 2:subject to 3: 4:3-F[i-1]-F[i-2]-F[i-3]>=F[i]| i=4,...,n 5:x[i]=(1-F[i-1])+2(1-F[i-2])+4(1-F[i-3])|i=4,...,n 6: 7:F[1]=0 8:F[2]=1 9:F[3]=1 10: 11:x[1]=0 12:x[2]=1 13:x[3]=2 14: 15:where 16:n is a number 17:F[i] is a variable of binary|i=1,...,n 18:x[i] is a variable of number|i=1,...,n 19: 20:data 21:n=20 22: ================================================================ >>end of the file. Parsing model: 1D 2R 3V 4O 5C 6S 7End. .................................. number of variables=40 number of constraints=40 .................................. +Leapms>mip relexed_solution=15; number_of_nodes_branched=0; memindex=(2,2) The Problem is solved to optimal as an MIP. 找到整數規劃的最優解.非零變數值和最優目標值如下: ......... F2* =1 F3* =1 F4* =1 F6* =1 F7* =1 F8* =1 F10* =1 F11* =1 F12* =1 F14* =1 F15* =1 F16* =1 F18* =1 F19* =1 F20* =1 x2* =1 x3* =2 x4* =4 x6* =1 x7* =2 x8* =4 x10* =1 x11* =2 x12* =4 x14* =1 x15* =2 x16* =4 x18* =1 x19* =2 x20* =4 ......... Objective*=15 ......... +Leapms>
上面的結果表示,當n=20時,我方一定會贏,最優決策是取2根火柴。
討論
本文給出了火柴博弈問題的線型規劃方法,不難看出這種遞迴建模思路可以被推廣到很多棋牌博弈問題以及其他動態規劃問題。但是受問題複雜程度不同,模型複雜度會不同。作者稍後考慮給出用+Leapms描述的其他動態規劃問題的線性規劃模型的例子。
參考文獻
[1] Wayne L. Winston. Operations Research: Applications and Algorithms. Duxbury press, boston, 1997