首页 > 其他分享 >博弈论小记

博弈论小记

时间:2024-06-20 16:24:48浏览次数:20  
标签:箱子 博弈论 游戏 格子 Nim 石子 SG 小记

博弈论

目录

博弈论小记 - command_block 的博客 - 洛谷博客 (luogu.com.cn)

公平组合游戏

有个游戏状态 \(G\) ,玩家可以把状态转移成 \(G'\) ,满足转化关系没有环

有一些状态为终止状态,走到终止状态为负

  • 两个玩家面对同一个状态 \(G\) ,其可能的目标状态集合是相同的。(决策公平)
  • 两个玩家都知道有关游戏的所有信息。(无隐藏信息)
  • 不包含随机成分。(无随机过程)
  • 只有赢或输,没有平局。(无平局)

\(N/P\)

终止态是必败态(记为P),转移中有一个必败态的为必胜态(记为N)

\(SG\)函数

约定终止态的 \(SG\) 函数值为 \(0\)。

定义 \({\rm mex}(S)\) 为集合 \(S\) 中最小的未出现的自然数。(要求 \(S\subseteq N\) )

设 \(G\) 能转移到状态集合 \(T_G\) (转移关系可以看成 \(DAG\) ),那么定义

\[SG(G)={\rm mex}\big\{SG(V):V\in T_G\big\} \]

人话就是 : 能转移到的状态集合的 \(SG\) 函数值的 \(\rm mex\)。

注: \(SG(S)=0\) 是必败态的充要

\(SG\) 和

\[SG(A+B)=SG(A)\ {\rm xor}\ SG(B) \]

表示两个并列的博弈的 \(SG\)

Nim游戏

Easy Game

有 \(N\) 堆石子,两个人轮流操作,每次可以把某一堆石子拿去若干。没有石子定义为终止态。

定义 \(SG(0)=0\) ,由于\(SG(k)\) 可以转移到 \(SG(0)...SG(k-1)\) ,可知 \(SG(k)=k\)

那么用 \(SG\) 和,即是把全部数量异或起来

Take Away

有 \(m\) 个石堆,每堆有包含 \(a_i\) 个石子,每一轮可以从某堆取走 \(1 ... k\) 个石子,不能操作者负。

当 \(x\le k\) , \(SG(x)=x\)

当 \(x=k+1\) , \(SG(k+1)=0\)

手模可得 \(SG(n)=n\mod (k+1)\)

然后求 \(SG\) 和即可

Hungergame

有 \(m\) 个箱子,每个箱子中都有若干石子,双人博弈,每一轮可以采取下列操作之一:

  • 打开若干个箱子
  • 将某个箱子中的石子取出若干。

一次可以打开多个箱子,所以游戏不独立

如果所有箱子都打开了,就是esay game了

考虑先手打开了异或和为0的箱子(且为最大的,即无法再打开异或和为0的箱子),那么对手只能回P态的Nim+箱子,只要把P态的Nim改为N态,先手就必胜了

所以用线性基维护一下,如果有异或和为0的集合,先手必胜

Staircase

有 \(n\) 层阶梯,编号 \(1 ...n\) ,每层阶梯上有一些石子。

两个玩家轮流操作,每次操作可以将第 \(i\) 层阶梯上若干(至少一个)石头放到 \(i-1\) 层阶梯上,第 0 层阶梯即为地板。

无法移动的玩家失败

考虑偶数层的石头,先手操作了,后手可以再次操作,不影响先后手关系

而奇数层只要一步就可以移动到偶数层,所以等价于只有奇数层的Nim

Lasker's Nim

每次可以从一堆中拿走若干石子,或者将一堆分裂成两个非空石堆。

朴素的 \(n^2\) 求出 \(SG\) 函数

翻硬币问题

博弈论 · 翻硬币游戏 - 知乎 (zhihu.com)

例题

P4363[九省联考2018]一双木棋chess

题目描述

棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束

落子的规则是:一个格子可以落子当且仅当这个格子内没有棋子且这个格子的左侧及上方的所有格子内都有棋子

每个格子有 \(a_{i,j},b_{i,j}\) ,分别表示先手和后手放在这个格子的得分

两人都希望自己的得分减对手得分尽可能大,问最后的分数

solution

可以发现落子的状态是一个轮廓线,所以考虑用01表示,于是就是 \(\binom{n+m}{n}\) 的状态表示出轮廓线,然后记搜即可

P5363 [SDOI2019] 移动金币

题目大意

现在长度为 \(n\) 的数轴,上面有 \(m\) 颗棋子(每个位置最多一颗棋子),每次可以选择一个左边为空的棋子向左移动若干个格(经过的格子都是空),两人轮流操作,不能操作者为负。问有多少种开局,有先手必胜策略

solution

可以想到转化成阶梯Nim,把每个点右边的空位数看作石子数,那么向右移动 \(x\) 格就是把 \(x\) 个石头扔到左边一堆里,所以就是 \(n-m\) 个石头,放在 \(m+1\) 个堆里,使得偶数堆的异或和不为0的方案数(因为最右边可以有一个堆直接在地板,它是第一堆)

然后就是计数题了,非0的不好算,于是考虑总方案-为0的方案

从二进制的高到低位考虑,设 \(f_{i,j}\) 表示到二进制下第 \(i\) 位,用了 \(j\) 个石头的方案数,转移我们就枚举当前位有 \(k(k \% 2=0)\) 个位置填了 \(2^i\) 那么转移就是(令 \(q=\lfloor \frac {m+1}2 \rfloor\))

\[f_{i,j}=\sum_{k\%2=0} f_{i+1,j-k2^i}\binom{q}{k} \]

\[ans=\binom{n}{m}-\sum f_{q,i}\binom{n-i-q}{m-q} \]

最后的组合数是插板法

P3185 [HNOI2007] 分裂游戏

题目大意

有 \(n\) 堆石子,每堆有 \(a_i\) 个石子,每次操作一次选定 \(i<j\le k\) 且第 \(i\) 堆有石子,从第 \(i\) 堆拿出一个石子,再向第 \(j\) 和 \(k\) 堆各放一个石子(若 \(j=k\) 就放两个),无法操作为负,问必胜策略的第一步和方案数

solution

可以想到把每堆石子并不是独立游戏,但每颗石子是独立游戏。考虑一个在第 \(i\) 堆的石子,它会分裂成两个编号比它大的石子。于是考虑反过来,在第 \(i\) 堆的石子编号为 \(n-i\) ,那么它将分类成两个编号比他更小的的石子

所以我们可以 \(n^3\) 预处理 \(SG\) 函数,然后直接 \(n^3\) 算方案数

标签:箱子,博弈论,游戏,格子,Nim,石子,SG,小记
From: https://www.cnblogs.com/zhy114514/p/18258894

相关文章

  • CF VP小记
    目录CF1956FNeneandthePassingGame题目大意solutionCF1942EFarmGame题目大意solutionCF1942GBessieandCards题目大意solutiontipsCF1943D2题目大意solutionE3.Trails题目大意solutionCF1956FNeneandthePassingGame题目大意给定\(n\)个点,每个点有两个系数\([......
  • java小记-随机数、数组
    练习4:①随机数:类似scanner键盘录入的三步:答:(只能猜一次)如果继续猜呢:添加循环:注意:添加新的功能:保底,抽的次数到某个时刻,直接猜中,不管结果几何。②数组:......
  • QEMU + Vscode + Arm Arch's Linux调试小记
    QEMU+Vscode+ArmArch'sLinux调试小记​ 前几天看到了一篇讲授如何调试ARMLinux内核的文章,这里现在记录一下调试ARMLinux内核的办法下载QEMU​ 对于ArchLinux用户而言,没有必要自己编译,直接上AUR源下载就行。我自己有打算研究和调试多个架构,所以我自己下载了:yay-Sqem......
  • git submodule小记
    这是一篇记录gitsubmodule中存在的坑的文档引用一个模块的命令gitsubmoduleaddhttp://your-submodule-url.com/local/path这个命令可以将一个子模块添加到当前的主仓库中(注意,这样添加的是最新版的) 这个gitsubmodule有一些坑爹的地方当你本地添加了一个子模块后,一旦......
  • React小记(二)_组件通信、生命周期、hooks等
    10、组件通信(父=>子)10.1基本使用1、传递方式与函数组件一致2、接收时通过this.props.mes获取importReactfrom'react'classSonextendsReact.PureComponent{render(){return(<><h3>子组件</h3>{/*2、接收*/}......
  • 开源组件小记
    分布式ID生成服务:leaf监控:cat实时应用监控平台配置中心:apolloJAVA诊断工具:arthas数据库连接池:druid消息中间件:rocketmq服务注册中心:nacos动态服务发现、配置和服务管理而设计。它可以帮助您轻松构建云原生应用程序和微服务平台服务治理:S......
  • java小记-三元运算符
    ①三元运算符:之前之后:格式:范例:......
  • 纳什均衡:博弈论中的运作方式、示例以及囚徒困境
    文章目录一、说明二、什么是纳什均衡?2.1基本概念2.2关键要点三、理解纳什均衡四、纳什均衡与主导策略五、纳什均衡的例子六、囚徒困境七、如何原理和应用7.1博弈论中的纳什均衡是什么?7.2如何找到纳什均衡?7.3为什么纳什均衡很重要?7.4如何计算纳什均衡?7.5纳什均衡......
  • java小记-scanner
    不想打字也是我的罪过吗?作业2:老师的代码:结果我的代码看起来冗余:想说的:我的本意是以为scanner只能记录一个数,然后就想着输入两次就能算两个数了,但没想到人家只是让你输就完了。不要管那么多。而且和值只是输出打印就可以了,不需要另外存储,只是当它如果要用在某个地方......
  • Cobalt Strike使用小记
    环境设置攻击机KaliLinux:172.24.4.7跳板机Windows10:172.24.4.22目标机Windows7:172.24.4.35Windows7作为目标机。启动CS服务端首先在Kali服务端启动CS,配置如下:IP:Kali的IP密码:demo(可以随意,但要记住)连接CS服务端在Windows10上启动CS客户端并连接......