小結 基礎博弈

2022-07-18 23:27:17 字數 3244 閱讀 5177

小結一下基礎博弈,因為暫時對博弈的理解還不是很深,只能說一下我對這段時間對博弈的認識。

博弈論的簡介

博弈論是二人或多人在平等的對局中各自利用對方的策略變換自己的對抗策略,達到取勝目標的理論。博弈論是研究互動決策的理論。博弈可以分析自己與對手的利弊關係,從而確立自己在博弈中的優勢,因此有不少博弈理論,可以幫助對弈者分析局勢,從而採取相應策略,最終達到取勝的目的。博弈的型別分為:合作博弈、非合作博弈、完全資訊博弈、非完全資訊博弈、靜態博弈、動態博弈,等等。

基礎概念

必勝態:通過某一步可以轉移到必敗態的局面。 也就是說,對於乙個處於必勝態的玩家,他總能找到一種合法操作,將當前局面變成乙個必敗態然後交給對方,如果中途不出現意外的話,最終自己就會得到勝利。但是處於必勝態並不意味著任意的操作都能將當前局面變成必敗態。

必敗態:通過某一步只能轉移到必勝態的局面。 也就是說,處於必敗態的玩家無論做什麼操作,都只會將當前的局面變成必勝態,然後交給對方,只要對方足夠聰明,那麼該玩家將輸掉比賽。

對於足夠聰明的兩個博弈者來說,遊戲的勝負在比賽前就已經知道(當然,我這裡只是說在題目裡,在現實中如果是稍微複雜一點的博弈遊戲,單憑人腦是很難達到那種水平),也就是說勝利的一方總能找到勝利的路徑,而輸掉的那一方無論怎樣走,勝利的一方都能找到對應的方法。也就是說先後手以及起始局面可以決定整場博弈的勝負。

巴什博弈

只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。

求r=n%(1+m),判斷r是否等於0,如果r不等於0,先手必勝,否則後手必勝。為什麼?

我們可以分析一下,對於n=(1+m)*r+s,如果s不等於0的話,先手取走s,那麼總的物品數剩下(1+m)*r,然後後手取走k的話,先手只要取走1+m-k的物品,就可以保持n=(1+m)的倍數的局面交給對方,這意味著什麼?意味著n=0的局面最終會被後手得到,那樣後手就輸了。而如果s等於0的話,那麼對於先手取k的物品,後手只要取1+m-k個物品就可以將n=0的局面轉給先手,先手就輸了。

所以這裡的必敗態是(1+m)的倍數。有沒有發現,對於一場博弈來說,所有的必敗態都會有相似的地方,就像這裡,必敗態一定是(1+m)的倍數。

然後再說深一點的巴什博奕:只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取p個,最多取q個,如果剩下的物品數小於p的話需要一次取完。最後取光者得勝。

這個又怎樣求?按照上面的思路,我們可以得到公式n=(p+q)*r+s。

那麼這裡的s有兩種情況①s>=p,②s。

對於①很容易分析,只要先手取走s的話,對於後手去k,先手只要取p+q-k即可保證先手必勝。

對於②,分析起來沒有①那麼簡單,所以這可能就一定需要用後面講到的用sg值來判斷了。

然後在講一下乙個問題。如果條件和基本的巴什博奕基本一樣,但是說的是最後誰是無法再取物品的是贏家的話,那該怎麼處理呢?

既然是這樣,先手只要判斷一下能不能將最後一步留給自己就可以了。而最後一步最少也要保留乙個物品,所以我們可以將這個問題轉化為基本的巴什博奕,只是終點變成乙個物品,而不是零個物品。所以判斷的條件是(n-1)%(1+m)!=0 ? 先手贏 : 後手贏。

nim和模型

有若干堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。

假設這裡有n堆物品,每一堆的數量分辨是a1,a2,a3,```,an。

那麼如果ans=a1^a2^a3^```^an!=0,那麼就是先手必勝,否則就是後手必勝。

這裡我們需要用到二進位制的思想。首先我們用必勝態和必敗態的定義來證明一下。

首先,根據題意,只要還有物品,玩家就一定要取,而且每一次操作以後,物品的數目必定會減少。

對於必敗態,也就是ans=0,那就說明a1^a2^a3^```^an=0,令a1,a2,a3```,an中,ai為某一堆物品的數量,ai^m=a1^a2^a3```^ai^```^an=0。我們從ai裡面取走物品,那麼ai-->ai'最終ai'^m必然不等於零,即轉為必勝態,符合必敗態的定義。(感覺證明不算很嚴謹······)

對於必勝態,如果此時的狀態為aj^p=q(p等於除了aj以外的其他a的異或和),假設我們從aj上面取一定數目的物品使得aj-->aj',最終使aj'^p=0的話,那麼我們可以得到:

aj'^p^q=q     --->    aj^aj'^p^p=q       --->   aj^aj'=q

這意味著什麼,因為我們是從aj那裡取走一定的物品以後變成aj'的,這裡取走的個數可能有很多種方法,但是,如果我們取走的個數是二的次冪這麼多呢?很明顯q就是我們需要從aj上面取走的個數了。只要當前的玩家從某一堆物品個數比q大的堆上取走q個物品,那麼就可以將當前狀態轉化為必敗態,並且轉個對方。所以要保證先手必勝的條件就是a1^a2^a3^``````^an!=0。

sg函式(引用一下別人的ppt上面的解釋)

定義mex(minimal excludant)運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex=3、mex=0、mex{}=0。

對於乙個給定的有向無環圖,定義關於圖的每個頂點的sg函式g如下:g(x)=mex。

當g(x)=k時,表明對於任意乙個0<=i之所以引用別人ppt上的解釋,主要是現在我對sg函式的認識還不是非常深刻,只能算大概是怎麼回事,如果要用的話,大概要怎麼用而已。這裡比較有用的除了對sg的解釋以外,還有就是乙個遊戲的sg函式等於它的若干個遊戲的sg值的異或和。個人認為這所以可以這樣使用是因為子遊戲與子遊戲之間斌沒有相互影響,而這些子遊戲就是乙個大的nim模型裡面的不同堆物品。為什麼可以比喻成nim模型?因為這和sg函式的定義基本上可以等價,在sg函式的定義裡,對於每乙個x它都有其後繼(除了x=0),所以sg[x]=k的含義就是對於sg=0~k-1的不同局面,x都可以到達,當然x還有可能可以到達比k還要大的局面,但是這裡只需要考慮0~k-1的局面即可。正因為我們據需要考慮比k還要大的局面,所以我們才可以將sg函式用nim的思想來計算。

關於怎樣求sg值,這裡給出乙個大致的流程:

int sg[max];                              //

儲存sg值的陣列

bool f[max]; //

用於標記可轉移到的後繼的陣列

void solve(int

n) }

}}

關於博弈的題目,因為做的還不算太多,當前大部分做過的題目都在該部落格關於博弈的分類上面,在對博弈有更深了解以後再在這裡補充。

博弈基礎小結

巴什博弈 一堆n個物品,兩個人輪流取1 m個,最後乙個取光的人勝利 if n m 1 return false else return true wythoff博弈 兩堆各若干個物品,兩人輪流從一堆中取走至少乙個,或者從兩堆中取走相同數量的物品,最後乙個取光的人勝利 差值 分割比 最小值時後手贏,否...

博弈論小結

博弈論,今天算是告一段落了。博弈模型為兩個人輪流決定的非合作博弈,即兩個人輪流進行決策,並且每次都會採用最優策略。博弈模型必須是有限布可以完成的。對兩個人的規則是公平的。p狀態 必敗態 前乙個選手 previous player 將取勝的位置稱為必敗點。n狀態 必勝態 下乙個選手 next play...

博弈論小結

孤單堆的根數異或只會影響二進位制的最後一位,但充裕堆會影響高位 非最後一位 乙個充裕堆,高位必有一位不為0,則所有根數異或不為0。故不會是t態。定理5 s0態,即僅有奇數個孤單堆,必敗。t0態必勝。證明 s0態,其實就是每次只能取一根。每次第奇數根都由己取,第偶數根都由對 方取,所以最後一根必己取。...