博弈论-从入门到放弃
持续更新中……
最近学习了一下博弈论,发现好玩之余,很考验智商。
首先,我们要讨论一些看似显然但是十分有用的定义(公理)
我们这里讲的都是公平组合游戏(两个人轮流操作,可以操作的东西只跟状态有关,跟哪个人无关,最后一个不能操作的人/最后一个操作的人输,不存在平局(或者平局判某一方输)……这些定义可以随便百度到,这里就不讲了)
我们定义先手必败态为P,先手必胜态为N,任何一个状态不是N就是P,不是P就是N,没有别的选择。
- 终止状态(在转移的有向图上没有出边的点)肯定是P
- 假如P有出边,那么P的任意一个出点都是N(你所有能到的地方都是敌人可以赢的地方,你是不是死翘翘了?)
- N状态只有有一个出点是P(能赢的人,一定有一个转移,可以给对手制造必败的状态,让对手掉坑里,那他就死定了)
有了上面的三条公理,我们就可以进行很多的思考了。
当然还有SG函数这个神器。
一个状态的SG函数是评估一个点胜负的指标,假如算出来SG值为0,那么必败,否则必胜。
\(SG_x=mex\{SG_y|y\in out status_x\}\)
也就是x可以转移到的状态y的sg值的mex就是当前的sg值,mex定义为这个集合内的数的最小没有出现过的自然数,也就是自然数集意义下的补集的最小值。其中终止状态的sg为0,可以用这个作为边界递推。
还要知道一个\(SG\)定理:
\(SG=SG_1 \bigoplus SG_2 \bigoplus SG_3 \bigoplus \dots \bigoplus SG_n\)
什么意思呢?这个就是说,假如一个游戏可以拆分成若干个互不影响的子游戏时,这个游戏的SG值就等于各个游戏的SG值的异或和,可以用这个来快速计算很多可以拆分的局面。经常设好SG之后就用这个来打表猜结论(结合SG函数和三大公理)。
下面来具体讲一下各种的游戏,其中以Nim游戏最为重要。之后还会讲一下各类博弈问题的处理方法(对抗搜索(也就是博弈搜索),二分图博弈……)。
\(\quad\)
\(\quad\)
巴什博奕 Bash Game
最基础的题:Bash V1
变形:另外一种问法
小变形:Bash V2
再变形:Bash V3
斐波那契博弈:Bash V4
有下界的bash博弈:Bash V5
\(\quad\)
威佐夫博弈 Wythoff Game
最基础的题:Wythoff V1
\(\quad\)
尼姆博弈 Nim Game
最基础的题:Nim Game
\(\quad\)
对称博弈
个人认为,环形博弈是对称博弈的一种特殊情况,所以都归在这里讲。
这个对称博弈指的是:有n个石子围成的一个环,a和b轮流取石子,每次可以取[1,k]中的某个数个的相邻的石子(原来的环上相邻),谁不能操作谁输,问谁赢?
分几类来讨论
- \(k\geq n\),显然肯定是先手胜。
- \(k=1\),也就是一颗一颗取,显然,n是偶数的时候先手胜。
- \(k\not=1\)且\(k<n\),一定是后手赢,因为先手取哪里你就对称地取哪里,你不行了的时候,他肯定比你早不行的。
这就是对称博弈,不算特别难。
\(\quad\)
博弈思想(杂题)
棋盘类:HDU 2147
数字类:HDU 1525
日期类:HDU 1079