當前位置: 華文星空 > 財經

雙人回合制智力競技遊戲是否都存在先手優勢?

2017-10-25財經
@morpheus

說的動態賽局我並沒有專門學過,而

@龍洋

所說的,應該是 Finite Impartial Two-player Strategy Game of Perfect Information ,對此我有過一些了解,我來大致說一下。首先,先來解釋一下這個這麽長的詞是什麽意思:

Finite:這是指,遊戲是在 有限 步數之內可以分出勝負的,比如Nim遊戲。Nim遊戲我稍後會介紹。

Impartial:這個意思是,對於同一個遊戲局面,下一步無論誰走,可做出的移動是 一樣的 。這是什麽意思呢?比如

@龍洋

所說的遊戲,現在如果已經數到了3,無論接下來輪到紅方還是藍方,他們都可以選擇查4或4,5。那什麽遊戲是不是Impartial的呢?比如象棋。在同一個局面下,考查下一步。一方只能動紅子,一方只能動黑子。也就是說, 一方能做出的移動另一方做不了 ,所以象棋不是Impartial的。

Two-player:這個很容易理解,就是兩個人之間玩的遊戲。

Strategy Game:這也就是題主所說的『智力競技遊戲』的意思,而不是靠運氣。

of:唔,這是個介詞。

Perfect Information:譯為完全資訊。這是指每個參與者都可以了解到其他參與者的 一切資訊 ,還用

@龍洋

的例子,對於每一個局面,玩家都可以知道對方接下來所有可能的移動,所以這個遊戲是完全資訊的。而很多撲克牌遊戲並不是完全資訊,因為每個玩家 不知道其他玩家手上有什麽牌

好的,接下來介紹一個典型的Finite Impartial Two-player Strategy Game of Perfect Information,那就是 Nim遊戲 。Nim遊戲很類似與

@龍洋

的例子,不過我這裏介紹原版:

有若幹堆有限數量的石子,兩人輪流取,每次必須且只能從其中一堆石子裏取走若幹(至少取一個,最多可以把整堆全部拿走),拿走最後一個石子的人獲勝。

這是不是很有小學奧數的即視感!

先上結論:

如果兩個知道Nim遊戲策略的人要一起玩這個遊戲,那麽他們只需要看一下桌上石子擺放的狀態,就可以知道誰會贏誰會輸了。

接下來介紹幾個名詞:

Position :Position是指遊戲目前的局面(State),並透過最精簡的語言敘述出來。

P position :走上一步的玩家 可以確保勝利 的局面。(P指Previous)

N position :走下一步的玩家 可以確保勝利 的局面。(N指Next)

所以, 玩家都希望把遊戲變為P position ,這樣自己對於P position來說,就是走了上一步的玩家。

註意,在Finite Impartial Two-player Strategy Game of Perfect Information中, 每一個position要麽是P position,要麽是N position

P position和N position有這麽幾個性質:

1. The winning position (or final position) is a P position.

2. Every P position can not be transferred from another P position within one move.

3. Every N position can be transferred into a P position within one move.

本想偷懶,直接把課上的內容搬上來……還是來轉譯一下吧。

1. 遊戲最後的局面是一個P position ,因為上一個玩家把最後一個石子拿走了,上一個玩家贏了。

2. 每一個P position在一步之內無法轉換為另一個P position 。這個也很好理解,如果我拿完石子之後是個P position,那麽我應該可以保證遊戲的勝利,如果你走完下一步,又變成了P position,那麽你也可以保證勝利。不可能兩方同時取勝,矛盾,哼唧。

3. 每個N position都可以在一步之內變為P position 。這也不難理解,因為如果現在是N position,就意味著走下一步的玩家可以保證獲勝,怎麽保證獲勝呢?就是把遊戲變為P position。所以只要是N position,那麽它都可以在一步之內變為P position。

這麽說有些抽象,我們來看一個具體的Nim遊戲的例子。比如一開始桌上有兩堆石子,一堆14個,一堆57個,記為(14,57),玩家是你和我。其中,我對Nim遊戲有了解,而你沒有,所以,嘿嘿。【各位先看,遊戲結束之後再分析為什麽。】

我一看(14,57),呀,這是個N position,我得先走,把它變成一個P position。於是我提出要先走,你很大度地點了點頭。

我從57個石子的那一堆中拿走了43個石子,還剩下14個石子。於是現在的position是(14,14),P position。

你完全不知道該怎麽辦,嗯,反正都是14個,我隨便選一堆拿走一半好了。於是變為(7,14)。

我一看,嗯,果不其然是N position,好,我從另一堆裏也拿7個。(7,7),P position。

你打算矜持一點,拿走了一個,變為(6,7)。

我從另一堆裏拿了一個,變為(6,6)。

你拿走三個,(3,6)。

我拿走三個,(3,3)。

你大喊:「你幹嘛學我!」一氣之下把一堆全拿光了,(0,3)。

我大喊:「我就學你!」一氣之下把另一堆也拿光了,(0,0)。【這不是顏文字啊!這是數學啊數學!!】

我贏了,yay~!

各位應該已經發現了,我一開始把兩堆石子變成一樣多,然後只需要學你就行了,這樣就可以一直保證我拿完之後兩堆一樣多,直到(0,0)。

所以,在這個遊戲中, (n,n)是P position,其余都是N position

那如果一開始有三堆棋子怎麽辦呢?n堆呢?美國數學家Charles L. Bouton發明了Nim遊戲的通解。

1.把每一堆石子的數量都換成二進制。

2.把這些二進制數位 不進位地豎式相加 (其實是 異或 ,這裏為了通俗易懂一點),比如1+1=0,1+1+1=1,得到一個新的數m。如果這個數是0,那麽目前的遊戲處於P Position。若不是0,繼續。

3.把m 從左數第一位不是0的數位 (是1)圈出來,然後在 豎式中的這一列 數位中找一個1。一定有1,否則最後加起來是0,而不是1。

4.找到1之後,把1改為0,然後把包含這個改動的數記為s。

5.接下來, 只要m的其中一個數位上是1,就把s對應數位的數位改掉 ,即0改為1或者1改為0。

6.把二進制換回十進制,按照結果取石子。

好的,我知道這個很抽象,我們來舉例子。

比如一開始的position是(27,25,12),那麽我接下來要做這樣的事情。

11011 (27)

11001 (25)

+1100 (12)

----------(不進位的豎式加法)

01110 (m)

m 從左數第一位不是0的數 是1。噗,廢話。是從左數第二位上的那個1啦。

好的,我們在那個1所在的一列(第二列)中找一個1。哎?都是1。那就隨便找一個,比如第一行第二列的1。並且把第一個數記為s。

11011 (s)

11001 (25)

+1100 (12)

----------(不進位的豎式加法)

01110 (m)

把第一行第二列的1改為0,並且 把s的每一個m是1的數位都改掉 。這個例子中,m的第2、3、4位元是1,所以把s的2、3、4位元改掉。

10101 (s)

11001 (25)

+1100 (12)

----------

01110 (m)

把s換回十進制,得21。所以,我下一步要把(27,25,12)變為(21,25,12)。

接下來無論你怎麽走,我都用這個方法,就 可以確保勝利 了。

回過頭看兩堆石子的情況,其實也是如此。因為兩個一樣的數換為二進制後,進行不進位的加法,0+0=0,1+1=0,得到的就是0。所以(n,n)對應了每一個P position。

好的,現在大家都是Nim遊戲小王子了!

那對於其他類似的遊戲,我們怎麽來找P position和N position呢?方法如下:

1.找 已知最小的 P position。(正如之前所說,勝利的position一定是P position)

2.把每一個能 一步走到 這個P position的position都列出來,這些都是N position。

3.沒有列出來的 最小的 position就是一個P position。

4.返回1。

其實這就是利用了之前所說的P position和N position的性質。

空說無憑,我們再來看看

@龍洋

所使用的例子。方便起見,我換一個規則:

兩人輪流報數,從28開始依次遞減,每人每次最少報1個數,最多報4個數,報到0的人獲勝。

最小的P position是0,因為報到了0的那個人獲勝。

所有能報到0的局面是1,2,3,4。沒有列出來的最小的數是5,所以5是下一個P position。

所有能報到5的局面是6,7,8,9。沒有列出來的最小的數是10,所以10是下一個P position。

…………

可以看出,所有5的倍數都是P position。所以在遊戲中,我只需要不斷把數報到5的倍數,就可以確保勝利了。

現在增加一點難度,其他規則不變,但每次每個人只能報1個、2個或4個數呢?方法一樣。

最小的P position是0,因為報到了0的那個人獲勝。

所有能報到0的局面是1,2,4。沒有列出來的最小的數是3,所以3是下一個P position。

所有能報到3的局面是4,5,7。沒有列出來的最小的數是6,所以6是下一個P position。

所有能報到6的局面是7,8,10。沒有列出來的最小的數是9,所以9是下一個P position。

…………

這回,P position是3n。

當然,P position不會每次都如此工整,但都是 有規律可循的

好的,我們再增加一點難度,其他規則不變,即,兩人輪流報數,每人每次最少報1個數,最多報4個數。但我們有兩個數,16和28,每次只能選擇一個數,報完之後兩個數都為0的人獲勝。

等一下,是不是有種 似曾相識 的感覺?對了! Nim遊戲! 但是又不完全一樣,因為Nim遊戲從一堆裏拿石子的個數是沒有限制的。 也就是說,這個遊戲裏的(16,28)與Nim遊戲裏的(16,28)是不一樣的。

那有沒有什麽辦法讓它們變得等價呢?有!這就牽涉到一個新的概念, Nimber 。嗯,我沒拼錯,Nimber。這是個合成詞,Nim+Number,是不是很萌!

這個遊戲中,每一個5的倍數的Nimber都是0,以此類推:(5n+1)的Nimber是1,(5n+2)的Nimber是2,(5n+3)的Nimber是3,(5n+4)的Nimber是4。

於是,(16,28)的Nimber就是(1,3)。

此時,這個遊戲裏的(16,28)與Nim遊戲裏的(1,3)是等價的!

別激動,聽我說。當Nim遊戲的position是(1,3)的時候,我應該把其變為(1,1),對吧?那(1,1)在這個遊戲中對應的是啥呢?是(5n+1,5n+1)。其中能從(16,28)一步轉化的position是(16,26)。所以,我應該選擇28,然後報到26。

註意,當這個遊戲的Nimber是(0,0)的時候, 並不意味著已經獲勝 。比如(15,25)。此時,對手隨便走一步,都會使得遊戲的Nimber變為(0,n)或者(n,0),此時依然按照我們的Nim策略,再把position變回(0,0)就可以了。

其實這就相當於一個可以往回放石子的Nim。就是說,有若幹堆有限數量的石子,每次必須且只能從其中一堆石子裏取走若幹石子, 或者放入若幹自己之前取走的石子 。拿走最後一個石子的人獲勝。

這個遊戲叫 Poker Nim ,策略與Nim完全一樣。當然了,如果引入負數,那麽這兩個遊戲實際上就是同一個遊戲了。

接下來我來介紹一個非常牛逼的定理:

每一個Finite Impartial Two-player Strategy Game of Perfect Information都等價於Nim或者Poker Nim。

這就是 Sprague-Grundy Theorem ,是由R. P. Sprague和P. M. Carmelo Grundy兩位數學家分別獨立發現的。

這個定理,也許能夠部份回答題主的問題。

當然了,為了保證答案的可讀性,我的表述不是很嚴謹。有興趣的可以看

Sprague-Grundy Theorem

關於計算Nimber的方法,有一個 Minimum-Excluded Rule ,簡稱 MEx Rule ,可以看

Nimber

MEx (mathematics)

嗯,早就想寫關於Nim的文章了,一直拖啊拖,這回直接寫知乎裏了。希望對題主有所幫助。