不平等博弈问题学习记录(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhouyuheng2003/article/details/78939235

听到博弈问题,第一个想到的想必是用SG函数做的博弈题,就比如Nim游戏

Nim游戏:有N堆石子,每次选一堆石子,拿走若干石子(不能不取),先不能取的人输

定义个SG函数
对于SG函数,大致就记录两个东西吧

定义SG函数g(x)=mex{ g(y) | y是x的后继 }
游戏的和的SG函数值是它的所有子游戏的SG函数值的异或

SG函数能解决很多问题,但是它并不是万能的(我今天才知道,逃~)他只适用于两个玩家家能进行的操作完全相同的情况(平等博弈)
今天上午做清华集训2017day3T2,一开始以为SG就可以做,后来因为T1、T3比较好打,所以就没打T2,下午讲题的时候听讲题的时候才知道这是不平等博弈题,所以不能使用SG函数
那么怎么做呢,听高三同学讲完了一遍,我仿佛还是在云里雾里,于是去找了2009的集训队论文方展鹏《浅谈如何解决不平等博弈问题》感觉这篇论文还是讲的挺好的,但是呢,为了让我更好的记忆,我就开始写这一系列的学习记录了
不平等博弈问题(Partizan Games)有一个很好的解决方法是用 超实数(Surreal Number,高届的同学戏称其为super real number),具体的用处会在后面写到
话不多说,对于不平等博弈问题,先定义状态,当然这里先讨论只有每个玩家操作后只有一种后继状态的情况

如果没有人能操作,那么状态为0
如果当前状态到结束状态只有第一个玩家能进行操作,那么状态为x(x为第一个玩家能再走的步数)
如果当前状态到结束状态只有第二个玩家能进行操作,那么状态为x(x为第二个玩家能再走的步数)
如果当前状态到结束状态两个玩家都能进行操作,那么状态为x-y(x为第一个玩家能再走的步数,y为第二个玩家能再走的步数)(为什么能这么定义呢,我也不会证)

上面定义较为简单,那么,如果某个玩家的后继不止一个怎么办,这个时候就要用一个运算来概括所有的情况了
类似与SG函数,定义一个运算{X|Y},X是第一个玩家能执行操作的后继状态的集合,Y是第二个玩家能执行操作的后继状态的集合(可以是空集,这个之后会讨论),结果为当前的状态
若X,Y都是有限集,那么{L|R}={max(L)|min(R)}
对于一个状态{l|r},如果l < r那么{l,r}的结果:
若l、r之间有整数,{l|r}=x(l < x < r且x是所有满足的数中离0最近的整数)
若l、r之间无整数,{l|r}=x/y(l < x/y < r且y=2^k(k是正整数)且y是所有满足条件的数中最小的数,x是在满足前面的条件下的可取值中离0最近的整数)
这有点麻烦,先不用想为什么这么定义,灵活运用才是最重要的
在下一篇文章中我会讲述{l|r}中的特殊情况的运算结果,记录(一)到这里就结束了

猜你喜欢

转载自blog.csdn.net/zhouyuheng2003/article/details/78939235

相关文章