博弈论 笔记
前言&简介
博弈论太大了,全都要考的话,竞赛生涯就结束罢
那么,什么是博弈?我们研究什么样的博弈?
博弈论,是经济学的一个分支,主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。
通俗地讲,博弈论主要研究的是:在一个游戏中,进行游戏的多位玩家的策略。
—— OI WIKI
现在我们知道,博弈论差不多就是van♂游♂戏。但是我们显然不会真的研究玩大型电脑游戏的策略,不然就是电子竞技了。我们(大概率)也不会去研究象棋,围棋的策略,不然就是棋类竞赛了。OI中研究的多数是 公平组合游戏。
它需要满足一些条件:
- 某一个动作,一方可以做,那另一方也可以做
- 双方都知道完整的游戏信息,也不存在平局
- 同一个状态不能到达多次
- 游戏能够在有限步内结束,不能动的那一方输
比如,围棋不是公平组合游戏,因为黑方不能动白棋,白方也不能动黑棋。同理,象棋也不是。当然,打扑克、麻将等游戏也不是,因为你不能知道别人手里是什么牌。、
有向图游戏
这是一种公平组合游戏。有一张有向图,上面有一个棋子。双方轮流移动棋子走一条边,走不了的输。
对于一个有向图游戏,我们可以用拓扑排序,根据以下三条原则,来求出从每个点开始的胜负情况。称先手必胜的为“胜点”,否则为“负点”。
- 如果一个点没有后继,那么它是负点
- 如果一个点的后继里有一个负点,那么它是胜点
- 如果一个点的后继里全是胜点,那么它是负点
还挺显然的,不需要证明吧。
SG函数与SG定理
SG,即Sprague和Grundy,是这个定理的发现者(两人)的名字。
我们来考虑一个情况,现在有 个有向图游戏,游戏双方轮流移动;每次可以任意选择其中一个游戏,并移动棋子走一条边;不能动的人输。
那怎么解决?当然,你可以把每个有向图中的点放在一起,形成一个数组,然后把这个数组作为游戏的状态,合并成一个大的有向图。那当然可以,就是复杂度有一小点高。
那怎么优化复杂度?别想了,你要是能自己独立想出来,Sprague和Grundy就自闭了。
他俩提出了这个以下东西
SG函数
对于一个有向图上的点 ,
其中,集合 表示终止节点; 表示 的后继状态;而 函数,表示一个集合中没有出现的,最小的 自然数。mex 是 minimum excluded 的缩写 (据wikipedia)
SG定理
对于一个 个有向图组成的游戏,设其起点为 ,令 ,那么:
- 当 时,先手必输
- 否则先手必赢
其中 表示按位异或。
应用
- Nim 游戏
- 各种题 (假如能看出是个公平组合游戏模型,并写出SG函数)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】