zoukankan      html  css  js  c++  java
  • 博弈论-从入门到放弃

    持续更新中……

    最近学习了一下博弈论,发现好玩之余,很考验智商。

    首先,我们要讨论一些看似显然但是十分有用的定义(公理)

    我们这里讲的都是公平组合游戏(两个人轮流操作,可以操作的东西只跟状态有关,跟哪个人无关,最后一个不能操作的人/最后一个操作的人输,不存在平局(或者平局判某一方输)……这些定义可以随便百度到,这里就不讲了)

    我们定义先手必败态为P,先手必胜态为N,任何一个状态不是N就是P,不是P就是N,没有别的选择。

    • 终止状态(在转移的有向图上没有出边的点)肯定是P
    • 假如P有出边,那么P的任意一个出点都是N(你所有能到的地方都是敌人可以赢的地方,你是不是死翘翘了?)
    • N状态只有有一个出点是P(能赢的人,一定有一个转移,可以给对手制造必败的状态,让对手掉坑里,那他就死定了)

    有了上面的三条公理,我们就可以进行很多的思考了。

    当然还有SG函数这个神器。

    一个状态的SG函数是评估一个点胜负的指标,假如算出来SG值为0,那么必败,否则必胜。

    (SG_x=mex{SG_y|yin out status_x})

    也就是x可以转移到的状态y的sg值的mex就是当前的sg值,mex定义为这个集合内的数的最小没有出现过的自然数,也就是自然数集意义下的补集的最小值。其中终止状态的sg为0,可以用这个作为边界递推。

    还要知道一个(SG)定理:

    (SG=SG_1 igoplus SG_2 igoplus SG_3 igoplus dots igoplus 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]中的某个数个的相邻的石子(原来的环上相邻),谁不能操作谁输,问谁赢?

    分几类来讨论

    1. (kgeq n),显然肯定是先手胜。
    2. (k=1),也就是一颗一颗取,显然,n是偶数的时候先手胜。
    3. (k ot=1)(k<n),一定是后手赢,因为先手取哪里你就对称地取哪里,你不行了的时候,他肯定比你早不行的。

    这就是对称博弈,不算特别难。

    (quad)

    博弈思想(杂题)

    棋盘类:HDU 2147

    数字类:HDU 1525

    日期类:HDU 1079

  • 相关阅读:
    行内块 块级元素 行内元素
    3种飞翼布局
    emmit
    Linux基础命令
    关于微信小程序下拉出现三个小点
    关于vue,angularjs1,react之间的对比
    微信小程序开发遇见的问题之一
    关于微信小程序的尺寸关系
    关于微信小程序的开发步骤
    关于前端基础知识的一些总结
  • 原文地址:https://www.cnblogs.com/Ronald-MOK1426/p/12765813.html
Copyright © 2011-2022 走看看