zoukankan      html  css  js  c++  java
  • 不平等博弈的Q & A(科普)

    众所周知,平等博弈中,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:爬

  • 相关阅读:
    Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.
    旋转二维数组
    replace empty char with new string,unsafe method和native implementation的性能比较
    判断一字符串是否可以另一字符串重新排列而成
    移除重复字符的几个算法简单比较
    也来纠结一下字符串翻转
    判断重复字符存在:更有意义一点
    程序员常去网站汇总
    sublime
    针对程序集 'SqlServerTime' 的 ALTER ASSEMBLY 失败,因为程序集 'SqlServerTime' 未获授权(PERMISSION_SET = EXTERNAL_ACCESS)
  • 原文地址:https://www.cnblogs.com/axiomofchoice/p/13580577.html
Copyright © 2011-2022 走看看