日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

博弈论

發(fā)布時(shí)間:2023/12/25 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 博弈论 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

博弈論

oi中的博弈論

oi中的博弈論主要研究博弈游戲,本質(zhì)上是平等組合游戲

什么是“平等組合游戲”

兩人游戲

有一個(gè)狀態(tài)集,通常是有限的

規(guī)定哪些狀態(tài)的轉(zhuǎn)移是允許的

所有的規(guī)定對(duì)兩個(gè)人來(lái)說(shuō)是一樣的

兩個(gè)人輪流走步

有一個(gè)終止?fàn)顟B(tài),到達(dá)終止?fàn)顟B(tài)后游戲即告終止

游戲可以在有限的步內(nèi)終止

開頭及一些基本的性質(zhì)

一.必勝點(diǎn)與必?cái)↑c(diǎn)

P點(diǎn):必?cái)↑c(diǎn),在雙方都聰明無(wú)比的情況下(比如zsyzsy和pplppl在玩游戲),當(dāng)前先手的人必?cái)〉那闆r。
N點(diǎn):必勝點(diǎn),在雙方操作都正確的情況下先手必勝的位置。

幾個(gè)性質(zhì)

所有的終止位置都是必?cái)↑c(diǎn)P(我們認(rèn)為這個(gè)是公理,即所有推導(dǎo)都在這個(gè)性質(zhì)成立的基礎(chǔ)上進(jìn)行)。
從任何一個(gè)必勝點(diǎn)N操作,至少有一種方法可以達(dá)到一個(gè)必?cái)↑c(diǎn)P。
從一個(gè)必?cái)↑c(diǎn)P出發(fā),只能夠到達(dá)一個(gè)必勝點(diǎn)N。

我們要明白這樣一件事,所有的選擇都是為了最大化自己的利益,所以,當(dāng)有讓對(duì)方失敗的機(jī)會(huì)時(shí),自己肯定會(huì)選擇這樣做

二.無(wú)偏博弈

無(wú)偏博弈是一類任意局勢(shì)對(duì)于游戲雙方都是平等的回合制雙人游戲。平等的含義是當(dāng)前的所有可行的走法僅僅只依賴與當(dāng)前的局勢(shì),而與當(dāng)前誰(shuí)移動(dòng)無(wú)關(guān)。換而言之,兩個(gè)人除了先后手的區(qū)別之外就不存在任何區(qū)別。除此之外,還需要滿足一下性質(zhì):

完全信息,任何一個(gè)游戲者都能夠知曉整個(gè)游戲狀態(tài)。
無(wú)隨機(jī)行動(dòng),所有的行動(dòng)都會(huì)轉(zhuǎn)移到一個(gè)唯一確定的狀態(tài)。
在有限步內(nèi)游戲會(huì)終止,此時(shí)有唯一的勝者。

常見的模型

巴什博奕(Bash GameBash Game)
威佐夫博弈(Wythoff GameWythoff Game)
尼姆游戲(Nim GameNim Game)
Anti?SGAnti?SG游戲
Multi?SGMulti?SG游戲
Every?SGEvery?SG游戲
翻硬幣游戲
樹上刪邊游戲

巴什博弈

基本問(wèn)題

有一堆石子,總個(gè)數(shù)是nn,兩名玩家輪流在石子堆中拿石子,每次至少取11個(gè),至多取mm個(gè)。取走最后一個(gè)石子的玩家為勝者。判定先手和后手誰(shuí)勝。

解決辦法

如果((m+1)|n)則先手必?cái)。駝t先手必勝

證明

假設(shè)(m+1)|n,那么假設(shè)先手拿走了x個(gè),那么后手必定可以拿走(m+1)?x個(gè),這樣子無(wú)論怎么拿,剩下的石頭個(gè)數(shù)都將是m+1的倍數(shù)。那么最后一次取的時(shí)候石頭個(gè)數(shù)必定還剩m+1個(gè),無(wú)論先手拿多少個(gè),都會(huì)剩下石頭,此時(shí)后手必定可以將剩下的所有石頭取光從而獲勝。

威佐夫博弈(Wythoff GameWythoff Game)

基本問(wèn)題

有兩堆石子,石子數(shù)可以不同。兩人輪流取石子,每次可以在一堆中取,或者從兩堆中取走相同個(gè)數(shù)的石子,數(shù)量不限,取走最后一個(gè)石頭的人獲勝。判定先手是否必勝。

解決辦法

這個(gè)東西意義不是很大,打表找規(guī)律之后可以發(fā)現(xiàn)先手必?cái)〉臓顟B(tài)一定形如(([i×?],[i×?2])中?=√{5+1}/2),表示不大于x的最大整數(shù)。一些證明可以參考

尼姆博弈(Nim GameNim Game)

基本問(wèn)題

有三堆石子,兩人輪流取,每次可以從一堆中取走任意數(shù)量個(gè)石子,至少取走一個(gè),問(wèn)先后手誰(shuí)勝。一般推廣:有nn堆石子x1,x2,x3,...,xnx1,x2,x3,...,xn,兩人輪流取,每次可以從任意一堆石子中取走至少一個(gè)石子,問(wèn)先后手誰(shuí)勝。

解決方法

方法很簡(jiǎn)單,直接求所有xixi的異或和,如果異或和為00則先手必?cái)。駝t先手必勝。形式化的表達(dá)即當(dāng)且僅當(dāng)x1⊕x2⊕x3⊕...⊕xn=0時(shí),先手必?cái) M恚簿褪撬援惢蚝蜑?的狀態(tài)是P狀態(tài),所有異或和非0的是N狀態(tài)。

證明

首先當(dāng)沒(méi)有石子的時(shí)候,先手必?cái)。藭r(shí)所有石子的異或和為0,這個(gè)是P狀態(tài)。(必?cái)↑c(diǎn))

接下來(lái)我們證明任意一個(gè)N狀態(tài)至少能夠達(dá)到一個(gè)P狀態(tài)。

假設(shè)當(dāng)前所有石子個(gè)數(shù)的異或和為k,即(⊕_{i=1}^n)xi=k,那么,必定存在一個(gè)xi滿足xi二進(jìn)制位上存在kk的最高位,并且不難證明xi⊕k<xi,那么,將xi異或上k之后,剩下所有的數(shù)的異或和恰好為0,又回到了一個(gè)P狀態(tài)。

而一個(gè)P狀態(tài)的異或和為0,任何一個(gè)數(shù)減小之后異或和一定不為0,所以可以證明任何一個(gè)P狀態(tài)的后繼狀態(tài)都是N狀態(tài)。

綜上,異或和為0的狀態(tài)先手必?cái)。渌闆r先手必勝。

拓展模式

每次取的石子數(shù)存在上界m

這個(gè)是Bash Game+Nim Game,只需要把所有石子按照m+1取模再考慮Nim游戲就好了。

每次允許從k堆石子中取((Nim_k))

我們一般考慮的情況是(Nim_1),我們的解法是考慮2進(jìn)制下的異或和是否為0,而異或和是不進(jìn)位的加法,同理,對(duì)于(Nim_k)的情況,我們考慮k+1進(jìn)制下每一位不進(jìn)位加法的結(jié)果,如果每一位都是0的話就是P局面,否則是N局面。

階梯博弈:博弈在階梯上進(jìn)行,每次可以將一堆的若干式子移動(dòng)到上一階去,不可操作者輸。

忽略所有的偶數(shù)階梯,只留下奇數(shù)階梯,轉(zhuǎn)化為普通的Nim游戲。大致的思路是這樣的:首先終止?fàn)顟B(tài)一定是所有石子都在0號(hào)階梯,即一個(gè)偶數(shù)階梯。那么如果對(duì)方移動(dòng)了一個(gè)偶數(shù)階梯上的石子,那么你可以在移動(dòng)結(jié)束的那個(gè)奇數(shù)階梯,直接把等數(shù)量的石子繼續(xù)向前移動(dòng),這樣子可以保證偶數(shù)階梯上的石子對(duì)于結(jié)果沒(méi)有任何影響。那么如果移動(dòng)的是一個(gè)奇數(shù)階梯,因?yàn)榕紨?shù)階梯是沒(méi)有影響的,所以你可以認(rèn)為移動(dòng)奇數(shù)階梯就是直接被移走了,那么這就是一個(gè)普通的Nim游戲了。

階梯博弈的例題洛谷p2575

AKN玩游戲玩累了,于是他開始和同伴下棋了,玩的是跳棋!對(duì)手是wwx!這兩位上古神遇在一起下棋,使得棋局變得玄幻莫測(cè),高手過(guò)招,必有一贏,他們都將用最佳策略下棋,現(xiàn)在給你一個(gè)n*20的棋盤,以及棋盤上有若干個(gè)棋子,問(wèn)誰(shuí)贏?akn先手!

游戲規(guī)則是這樣的:

對(duì)于一個(gè)棋子,能將它向右移動(dòng)一格,如果右邊有棋子,則向右跳到第一個(gè)空格,如果右邊沒(méi)有空格,則不能移動(dòng)這個(gè)棋子,如果所有棋子都不能移動(dòng),那么將輸?shù)暨@場(chǎng)比賽。

題目及模版

洛谷2197 Nim游戲裸題

BZOJ1299 Nim游戲變形

POJ1704 階梯博弈變形

SG定理及SG函數(shù)

Sprague?GrundySprague?Grundy定理:所有一般勝利下的無(wú)偏博弈(定義在上面)都能夠轉(zhuǎn)化成尼姆數(shù)表達(dá)的尼姆堆博弈,一個(gè)無(wú)偏博弈的尼姆值定義為這個(gè)博弈的等價(jià)尼姆數(shù)。(抄自YMDYMD課件)
SGSG函數(shù):對(duì)于每一個(gè)狀態(tài)的一個(gè)尼姆數(shù)的函數(shù)又被稱作Sprague?GrundySprague?Grundy函數(shù)。

翻譯成人話就是:對(duì)于當(dāng)前游戲X,它可以拆分成若干個(gè)子游戲x1,x2,x3,...,xn那么(SG(X)=SG(x1)⊕SG(x2)⊕...⊕SG(xn))。

接下來(lái)定義mex運(yùn)算,mex運(yùn)算是對(duì)于一個(gè)集合S而言的,mex(S)表示的是最小的、不屬于集合S的非負(fù)整數(shù)。例如mex{1,2,3}=0,mex{?}=0。那么我們有運(yùn)算SG(x)=mex{SG(y),<x,y>∈E},其中E是邊集。即對(duì)于當(dāng)前狀態(tài)x的SG函數(shù),它的值定義為所有的后繼狀態(tài)的mex值。對(duì)于SG函數(shù)為0的位置一定是P位置,SG函數(shù)非0的位置是N位置。

這里直接空說(shuō)很不好,我們舉個(gè)例子。

HDU1848 Fibonacci again and again,為了節(jié)約篇幅,直接戳鏈接看題目&題解&代碼。

事實(shí)上,注意"后繼"這個(gè)詞語(yǔ),我們不難發(fā)現(xiàn)上述的東西可以理解為一個(gè)DAG上的問(wèn)題。

(Anti?SG)游戲&(SJ)定理

基本問(wèn)題

決策集合為空者的操作者勝利。翻譯成Nim一點(diǎn)的問(wèn)題就是,給定n堆式子,每次每個(gè)人可以從任意一堆石子中拿走不少于一個(gè)的石子,拿走最后一個(gè)石子的人輸。

解決辦法

SJ定理:對(duì)于一個(gè)Anti?SG游戲,如果我們規(guī)定當(dāng)前局面中所有單一游戲的SG為0時(shí),游戲結(jié)束,則先手必勝的條件為:

游戲的SG值不為0,且存在一個(gè)單一游戲的SG值大于1
游戲的SG值為0,且不存在一個(gè)單一游戲的SG值大于1

題目及模版

BZOJ1022 Anti?SGAnti?SG模板題

(Multi?SG)游戲

基本模型

決策集合為空的操作者輸。一個(gè)單一游戲的后繼可以是多個(gè)單一游戲。還是寫成Nim一點(diǎn)的式子,給定你n堆石子,每次可以取走任意數(shù)量個(gè),或者將一堆式子拆分成兩堆(事實(shí)上更多也是可行的)非空石子,不能操作者輸,判定勝負(fù)。

解決辦法

還是可以使用SGSG函數(shù)解決,舉個(gè)例子,比如當(dāng)前存在一堆33個(gè)石子,那么可以直接走0,1,2,3個(gè)石子,也可以拆分成(1,2)兩堆,因此(SG(3)=mex{SG(0),SG(1),SG(2),SG(3),SG((1,2))=SG(1)⊕SG(2)})

那么這個(gè)問(wèn)題本質(zhì)上還是一個(gè)Nim游戲,可以直接用SG函數(shù)解決。

同時(shí),對(duì)于這樣每次可以拆分兩堆的Multi?SG游戲,打表后發(fā)現(xiàn)有這樣一個(gè)性質(zhì):

[SG(x)=left{ egin{aligned} x-1 & = & (x mod 4=0) \ x & = & (xmod 4=1&2) \ x+1 & = & (x mod 4=3) end{aligned} ight.
]

題目&模板

HDU3032 Multi?SGMulti?SG模板題

BZOJ2940 簡(jiǎn)單的Multi?SGMulti?SG題目

BZOJ1188 有些困難的Multi?SGMulti?SG模型

BZOJ3576 有點(diǎn)難度的Multi?SGMulti?SG變形

Every--SG游戲

基本模型

對(duì)于沒(méi)有結(jié)束的任何一個(gè)單一游戲,操作者必須對(duì)其進(jìn)行一步操作,無(wú)法操作者輸。

解決辦法

所有游戲都是獨(dú)立的,并且我們發(fā)現(xiàn)無(wú)法操作者輸,而同時(shí)又在進(jìn)行多個(gè)游戲。因此,我們知道勝負(fù)情況只與最后結(jié)束的游戲的勝負(fù)情況相關(guān)。既然只與最后結(jié)束的游戲相關(guān),那么我們這樣分析:首先對(duì)于一個(gè)能夠取得勝利的游戲,我們必定會(huì)取得勝利,這樣一定不會(huì)讓結(jié)果更差,因?yàn)橹灰A了,這局游戲就一定不會(huì)讓自己輸。那么對(duì)于所有單個(gè)游戲的勝負(fù)情況,我們一定可以判定,但是對(duì)于整個(gè)Every?SG的情況,我們只能夠通過(guò)最后結(jié)束的游戲判定。所以,對(duì)于一個(gè)我們必勝的游戲,我們一定會(huì)想辦法將其盡可能的向后拖,即我們期望它盡可能完的結(jié)束;反過(guò)來(lái),對(duì)于一個(gè)必?cái)〉挠螒颍覀円欢〞?huì)讓他盡可能早的結(jié)束。這幾句推論正確的理由都是所有游戲都是互相獨(dú)立的。

那么,我們首先可以判定出所有位置是N點(diǎn)還是P點(diǎn),然后根據(jù)必勝和必?cái)〉年P(guān)系,我們必定要決策步數(shù)最小還是步數(shù)最大,那么這個(gè)就非常類似于一個(gè)min?max搜索。至于NN點(diǎn)和PP點(diǎn)的判定我們可以很容易的用SGSG函數(shù)表示出來(lái)。我們定義step(x)為狀態(tài)xx時(shí)(在滿足N/P的條件下)的步數(shù),我們可以得到這樣一個(gè)轉(zhuǎn)移:

翻硬幣游戲

題目

有n枚硬幣排成一排,依次編號(hào)1到N,有的正面朝上,有的反面朝上。現(xiàn)在按照一定的規(guī)則翻硬幣(比如每次只能翻一枚或者兩枚,或者每次只能翻動(dòng)連續(xù)的幾枚),但是強(qiáng)制要求最靠右的硬幣必須從正面被翻到了反面。操作集合為空者負(fù)。

解決辦法

結(jié)論是這樣的:當(dāng)前局面的SG值是所有正面朝上的硬幣單獨(dú)存在時(shí)的SG值的異或和。

證明?我也不會(huì)啊。可以感性理解一下,無(wú)論如何最右邊的硬幣都要翻,它翻了之后必定改變前面的狀態(tài),但是前面的狀態(tài)是什么似乎和之前的狀態(tài)無(wú)關(guān)(假裝能夠說(shuō)服我自己),之和之前的狀態(tài)和現(xiàn)在狀態(tài)的差別(也就是看成01串后的異或和)相關(guān),所以你可以把游戲拆分成所有正面朝上的硬幣的子游戲。

鏈接中給出這么多游戲的主要目的是因?yàn)橹苯邮褂?strong>SG函數(shù)求解效率太低,很多時(shí)候利用SG函數(shù)打表找規(guī)律才是最好的方法。

總結(jié)

以上是生活随笔為你收集整理的博弈论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。