zoukankan      html  css  js  c++  java
  • 博弈论基础入门

    扩展

    读完本篇 blog 后,您还可以继续阅读:

    公平组合游戏 ICG

    一个游戏满足以下条件时被叫做公平组合IGC游戏

    • 两名玩家交替行动。
    • 游戏进程的任意时刻,可以执行的操作和操作者本人无关。
    • 不能行动的玩家判负,不存在平局。

    本蒟蒻的理解:公平组合游戏都可以转化为博弈论问题来解决。例如经典的 “NIM游戏”“有向图游戏” 都是公平组合游戏。类型的问题也可以转化成前两种模型解决。

    NIM游戏

    洛谷 题目地址

    定理:

    • NIM游戏先手必赢,当且仅当 (A_1 mathrm{xor} A_2 mathrm{xor} ... mathrm{xor} A_n ≠ 0)

    证明:
    最后所有石子都取完是必败态,此时 (mathrm{xor}) 和为 (0)
    由此可以推得必败态的上一个状态 (mathrm{xor}) 和不为 (0)
    对于一个任意 (mathrm{xor}) 不为 (0) 的状态,令 (x=sum{mathrm{xor}} A_i),假设 (x) 的最高位为 (k),那么一定存在 (A_j) 的第 (k) 也为 (1),在 (A_i) 中取走 (A_i-A_i mathrm{xor} x) 颗石子(即剩下 (A_i mathrm{xor} x) 颗石子),则操作后的状态异或和为 (0)
    对于任意一个 (mathrm{xor}) 和为 (0) 的状态,无论怎么选取,下一个的状态的异或和必定不为 (0)
    重复以上操作,根据数学归纳法,初始状态 (mathrm{xor}) 和不为 (0),先手必胜。
    证毕。

    有向图游戏

    给定一张有向无环图,初始在起点 (s) 处放一枚棋子。每一回合玩家可以向出边移动一步,不能移动者失败。问是否有先手必赢策略?

    想要解决这个问题,我们首先要引入 (mathrm{mex}) 运算(SG) 函数

    (mathrm{mex}) 运算

    (mathrm{mex}) 运算是求一个集合里面没有的最小非负整数,用数学语言表达即((N) 是自然数集):

    [mathrm{mex}(S) = min{x,x otin S,x in N} ]

    (SG) 函数

    (特指有向图游戏)在有向图游戏中,对于每个结点 (x),其 (SG) 函数为:

    [SG(x) = mathrm{mex} { SG(y_1),SG(y_2),...,SG(y_k) } ]

    (y_i,1 le i le k)(x)(k) 条出边的第 (i) 条出边所指向的点)

    可以发现,(SG) 函数是递归定义的。(SG) 函数的终点即为不可移动的点,因为没有出边,所以不可移动的点的 (SG) 函数等于 (0)

    特别的,一个有向图游戏 (G)(SG) 函数是该有向图的起点 (s)(SG) 函数,即 (SG(G) = SG(s))


    回到有向图游戏,对于这个游戏,有一个定理。

    定理:

    • 有向图游戏先手必赢,当且仅当 (SG(G) eq 0)

    对于该定理的证明,可以结合 (SG) 函数意义数学归纳法进行证明。过程比较简单,留给读者自行证明。

    多个有向图游戏

    (并不知道有什么专业名称) 类似于NIM游戏与有向图游戏的相结合。

    定义多个有向图游戏 (G_1,G_2,...,G_n),每一回合玩家可以在任意一个有向图游戏 ((G_i,1 le i le n)) 上移动一步,不可移动者失败。问先手是否有必赢策略?

    定理

    • 多个有向图游戏先手必赢,当且仅当 (SG(G_1) mathrm{xor} SG(G_2) mathrm{xor} ... mathrm{xor} SG(G_n) eq 0)

    关于该定理的证明,读者可以在自主完成上一定理的证明后,结合NIM游戏定理的证明,感性理解一下。(因为我也不会呀qwq)

    题目

    更多博弈论基础入门好题:

    POJ2311 剪纸游戏

    变形

    每次取 ([1,x]) 的 NIM 游戏

    题目大意: (n) 堆石子,第 (i) 堆石子有 (a_i) 个,给定 (x),每次可以取 ([1,x]) 个石子,问先手是否必胜。

    结论:(igopluslimits_{i=1}^n (a_i \% (x+1)) ot = 0) 则先手必胜,否则先手必败。

    感性理解一下:对于某一堆石子 (a_i),当 (a_i>(x+1)),后手取掉一个数 (y in [1,x+1)),先手可以取一个数 (z),满足 (z=x+1-y)(z) 一定是可以取到的(也就是说(zin [1,x+1))),则 (a_i) 变为了 (a_i - (x+1)),以此类推,该堆石子变为 (a_i\%(x+1)) 时,这堆石子就可以取任意数了。推广到每一堆石子,就转化成了 NIM 游戏。

  • 相关阅读:
    opacity兼容性以及存在问题处理
    删除节点方法要注意的区别
    java基础-常见面试题(一)
    第04次作业-树
    第03次作业-栈和队列
    第02次作业-线性表
    Data_Structure-绪论作业
    C语言第二次实验报告
    C语言第一实验报告
    mysql 查询优化
  • 原文地址:https://www.cnblogs.com/BaseAI/p/12283568.html
Copyright © 2011-2022 走看看