幾種簡單的博弈問題詳解

2021-06-21 21:28:20 字數 2659 閱讀 2306

一.巴什博奕(bash game

):

首先我們來玩乙個比較古老的報數遊戲。a和b一起報數,每個人每次最少報乙個,最多報4個。輪流報數,看誰先報到30.

如果不知道巴什博弈的可能會覺得這個是個有運氣成分的問題,但是如果知道的人一定知道怎樣一定可以贏。

比如a先報數的話,那麼b一定可以贏(這裡假定b知道怎麼正確的報數)

b可以這樣報數,每次報5-k(a)個數,其中k(a)是a報數的個數這樣的話沒一次

兩人報完數之後會變成5 10 15 20 25 30這樣是不是b一定會贏呢?是不是有一種被欺騙的感覺呢?好吧下面我們來看看這個原理。我們先看下乙個一眼就能看出答案的例子 比如說我們報到5(4+1),每次報最多報4個,最少報1個.那麼是不是後者一定可以贏呢?答案是肯定的。好了到這巴什博弈的精髓基本就ok了。

那麼如果我們要報到n+1,每次最多報n個,最少報1個的話,後者一定能夠贏。

現在我們需要報數到n,而每次最多報數m個,最少報數1個.我們可以化成這樣

n = k*(1+m)+r(0 <= r <= m)這樣的話如果r不等於0那麼先手一定會贏,為什麼呢?首先先手報r個,那麼剩下k倍(1+m)個數,那麼我們每次報數1+m-k(b)個數就一定能保證最後剩下1+m個,那麼就到了上面我們說的那個了,先手就一定會贏,如果r=0那麼後手一定會贏,道理一樣的。

到這巴什博弈也就介紹完了,知道這個道理之後我們也可以去騙小朋友了。-_-//

二.威佐夫博奕(wythoff game

):

這種博弈比前面一種要稍微複雜一點。我們來看下下面這個遊戲。

有兩堆火柴棍,每次可以從某一堆取至少1根火柴棍(無上限),或者從兩堆取相同的火柴棍數。最後取完的是勝利者。好了,如果你不知道這個博弈定理,對於小數目的火柴棍數,可能還能推出來,但是如果火柴棍數一多,就不行了。看了下面的這個介紹,你也會有一種被騙的感覺。

首先我們知道兩堆火柴是沒有差別的,也就是說第一堆有a根,第二堆有b根和第一堆有b根,第二堆有a根是一樣的結果。

我們用乙個二維的狀態(a,b)來記錄當前剩下的火柴數,表示第一堆剩下a根火柴,第二堆剩下b根火柴。同樣我們假設兩個人的編號是a和b,且a先取。

那麼如果某個人遇到了這樣的狀態(0,0)那麼也就是說這個人輸了。這樣的狀態我們叫做奇異狀態,也可以叫做失敗態。

那麼接下來的幾個失敗態為(1,2),(3,5),(4,7),(6,10),(8,13)……

我們用a[i]表示失敗態中的第乙個,b[i]表示失敗態中的第二個.(i從0開始).

那麼我們可以看到b[i] = a[i]+i;(i >= 0),a[i]是前面的失敗態中沒有出現過的最小的整數

下面我們可以得到三個基本的結論。

1.每個數僅包含在乙個失敗態中

首先我們知道a[k]是不可能和前面的失敗態中的a[i],b[i]重複的(這點由a[i]的得到可以知道)

b[k] = a[k]+k > a[k-1]+k>a[k-1]+k-1+1>a[k-1]+(k-1) = b[k-1]>a[k-1]這樣我們知道每個數僅在乙個失敗態中。

2.每個失敗態可以轉到非失敗態。

加入當前的失敗態為(a,b),那麼如果我們只在一堆中取的話,肯定會變成非失敗態(這點由第一點可以保證),如果從兩堆同時取的話,由於每個失敗態的差是不一樣的,所以也不可能得到乙個失敗態。也就是說乙個失敗態不管你怎麼取,都會得到乙個非失敗態。

3.每個非失敗態都可以轉到乙個失敗態

對於這個結論,首先我們要知到每個狀態(a,b)要麼a = a[i],要麼b = b[i].(每個數都出現在乙個失敗態中),下面我們分兩種情況來討論

i.a = a[i].如果b = a的話那麼一次取完就變成了(0,0).如果b > b[i]的話,那麼我們從第二堆中取走b-b[i]就變成了乙個失敗態。如果b < b[i].那麼我們從兩堆中同時取走a-a[b-a[i]]這樣得到失敗態(a[b-a[i]],a[b-a[i]]+b-a[i])(a[i] = a)

ii.b = b[i].如果a > a[i]那麼我們從第一堆中取走a-a[i]根火柴.

如果a < a[i].這裡又分兩種情況。第一是a = a[k](k < i)

那麼我們從第二堆取走b - b[k]就行了。

第二是a = b[k]這樣的話由於兩堆火柴是沒有區別的,所以我們把b變成a[k]就行了,也即是從第二堆火柴中取走b - a[k]就變成了失敗態

至於怎麼判斷乙個狀態是否是失敗態.我們可以用下面的方法來判斷(本人暫時還不會證明)

a[i] = [i*(1+√5)/2](這裡的中括號表示向下取整)   b[i] = a[i]+i;

那麼這就是乙個失敗態,

看了這之後可以去找poj1067練練手

三.尼姆博奕(nimm game

):

這個已經變成了三堆火柴了。每次只能從某一堆取任意個(至少為1),最後取完的為勝利者。

這個博弈我們用三維的狀態來表示(a,b,c).對於每個失敗態我們有a^b^c = 0至於為什麼我暫時不會證(記得陳景潤的一本組合數學中有證明,後面要是懂了再來補吧)

對於乙個非失敗態我們可以通過轉換得到乙個失敗態,也就是說(a,b,c)我們可以通過如下的操作得到乙個失敗態,如果a^b < c那麼我們從第三堆中取走c-a^b根,如果a^c < b那麼我們從第二堆中取走b - a^c根.如果b^c < a那麼我們從第一堆中取走a - b^c根。這樣就變成了乙個失敗態。

由於水平有限,暫時只能寫這麼多了

幾種常見的博弈模型

首先考慮乙個簡單的例子 a和b一起報數,每個人每次最少報乙個,最多報4個。輪流報數,看誰先報到30.因為最多可以報4,最少報1,如果對方開始報,那麼我開始總是可以報5的。依次類推,我都可以想法兒報5的倍數。所以,結論就是,先手必輸。可以將例子抽象一下 如果最多可以報n,最少可以報m個,看誰先報到a ...

博弈 一些簡單的博弈

下面總結了一些簡單的博弈題目 1 有一堆石子共有n個,a和b輪流取,a先,每次最少取1個,最多取m個,先取完者勝 a,b足夠聰明,問誰先勝?巴什博奕 思路 顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的...

0056 簡單的博弈

簡單的博弈 難度級別 b 執行時間限制 1000ms 執行空間限制 51200kb 長度限制 2000000b 試題描述 簡單的博弈遊戲 兩個人只玩乙個棋子,棋子開始時在棋盤的右上角,棋盤的大小為 m 行 n 列。即棋子待在的位置是 1,n 在這個棋盤上,棋子只能夠向左 左下 斜線 和下方移動。作為...