众所周知,平等博弈中,SG函数简直就是神器(我还想写一篇SG函数的科普作为前传)。但是与平等博弈不同的是,不平等博弈中的两个玩家的操作有着不一样的约束,比如左玩家只能拿正面朝上的硬币,右玩家只能拿反面朝上的硬币。因此,超现实数出现了,它就是解决不平等博弈问题的神器
Q:超现实数是什么?
A:超现实数(surreal number)是一个船新的数学概念,名字含义为“超越实数的数”。而事实上超现实数不仅包含了所有实数,还引入了“无穷大”(即“无穷大”是一个超现实数),是一个最大的兼容四则运算的全序集合
Q:啥是全序集合?啥是兼容?还有你讲了这么多,超现实数的定义呢?
A:啊这,不要在意这些细节。你只要知道,超现实数和实数一样,是可以比较大小的(就是定义了“小于号”),也可以加减乘除啥的(严格定义的话我也不是专业的我也做不到)
A:超现实数的定义啊,这太硬核了,这里我只能简单介绍一下。(感兴趣的小伙伴可以网上搜索一下“surreal number”,我就是这么学废的)每个超现实数都有一个左集合和右集合,(我们研究的)超现实数都可以用实数表达
Q:不是说还有“无穷大”等超越实数的存在吗?
A:因为我们探讨的博弈是有限的所以的确不需要无穷大
Q:怎么通过左、右集合计算超现实数的对应实数呢?
A:这是一个重要的操作(并不)。如果 (L) 是左集合中的最大值,(R) 是右集合中的最小值。如果 (L,R) 之间存在整数,那么超现实数 (G) 为 (L,R) 之间绝对值最小的整数;如果 (L,R) 之间没有整数,那么超现实数 (G) 是一个整数除以 (2) 的整数次幂,这个值要在 (L,R) 之间,并且要让 (2) 的幂次尽可能小。(即 (G=dfrac A {2^B},L<G<R),且 (B) 尽可能小)特别地,如果左集合为空集,那么 (L) 视为负无穷大,右集合为空集则 (R) 视为无穷大
- 比如,({-1,0 | 3}),(L,R) 之间有 (1,2) 两个整数,选绝对值小的那个,(G=1)
- 比如,({-1,0 | 1}),(L,R) 之间没有整数,那么 (G=dfrac 1 2),因为这个数分母最小
- 比如,({dfrac 1 4 | dfrac 1 2}),那么 (G=dfrac 3 8)
- 特殊情况比如,({dfrac 1 2 | }),那么 (G=1)。最特殊的情况,({ | }),那么 (G=0)
Q:那 (dfrac 1 3) 不能用这个方法生成吗?
A:我们研究的超现实数不包含 (dfrac 1 3) 这样的数,(dfrac 1 3) 和“无穷大”一样,需要涉及无穷才能搞出来
Q:说了那么多超现实数,但是它和博弈有什么关系?
A:介绍博弈之前,先看一个博弈问题Blue-Red Hackenbush string
- 若干个字符串,每个字符要么是 L 要么是 R,左玩家只能拿 L,右玩家只能拿 R,每次拿走一个字符后其后缀也会消失,最先不能操作的玩家输
A:假如我们简化一下问题,所有字符串都长这样:LLL...或者RRR...,那么左右玩家各自的策略应该是什么样的?
Q:(OS:反了反了,我才是Q好不)很显然,因为最先不能操作的玩家失败,所以左玩家尽量让 L 串存在的时间久一点,右玩家就尽量让 R 串存在的时间久一点
A:对,因此最终比较的其实就是字符 L 的个数和字符 R 的个数。对于L串,我们认为它的surreal number就是它的长度,对于R串,它的surreal number就是它长度的相反数。对每个串的surreal number求和(超现实数当然能做加法),得到的数就是整个局面的值。如果值大于 0,那么左玩家必胜,小于 0 右玩家必胜,等于 0 就是后手必胜。这个规则也适用于其他的不平等博弈(除了一些存在先手必胜的局面的博弈,这时候就要引入Irregular surreal number,就很复杂了,其实Nim Game就是2333)
Q:但是LR交错的字符串,一看就不简单
A:因此需要引入一个规则:对于一个博弈局面超现实数的左集合,就是左玩家进行一次操作后的所有可能的博弈局面;右集合就是右玩家进行一次操作后的所有可能的博弈局面
- 比如LR,左玩家可以把它变成空串(值为0),右玩家可以把它变成L(值为1),那么LR的值就是 ({0 | 1}),就是 (dfrac 1 2)
- 比如LRL,左玩家有两种操作方式即空串和LR(值为 (0,dfrac 1 2))(为什么 LR 的值是 (dfrac 1 2)?因为这是上一行的结论鸭),右玩家只能把它变成L(值为 (1)),那么LRL的值就是 ({0,dfrac 1 2 | 1}),就是 (dfrac 3 4)
A:同样,引入了分数后,博弈局面的值大于 0 左玩家必胜、小于 0 右玩家必胜、等于 0 后手必胜的结论还是使用的。你可以试试看 LR,R(值为 (-dfrac 1 2)),看是不是右玩家必胜,然后试试看 LR,LR,R(值为 (0)),看是不是后手必胜
Q:确实,6啊
A:其实超现实数的值,其实可以认为是左玩家比右玩家可以多操作的次数。只不过,这个值会有分数出现,就很神奇
A:刚刚那个问题其实有简化的方法求surreal number。字符串第 (i) 位如果是L,记 (a[i]=1),否则记 (a[i]=-1)。如果字符串是L开始的,我们把第一个R的位置记作p,那么 (a[p]) 乘以 (2^{-1}),加上 (a[p+1]) 乘以 (2^{-2}),以此类推,这个数字再加开始一连串L的个数就是surreal number了。如果开头是R那正好相反
- 比如,字符串LLRL,开头2个L,因此surreal number的整数部分为2。小数部分为 (-2^{-1}+2^{-2}=-dfrac 1 4),因此surreal number为 (2+(-dfrac 1 4)=dfrac {7} 4)
Q:感觉这个计算方法表明了很多时候都是无视字符串最后的字符,直接删前面的
A:是的,但是由于作者太菜所以我也无法解释其中的精妙之处,甚至连怎么操作都没明白
Q:太强了
A:爬