博弈论学习笔记
我们夏令营要每人讲一个知识点,然后就有了这篇文章。
0. 前置知识
纳什均衡(Nash equilibrium):任何一位玩家在此策略组合下单方面改变自己的策略(其他玩家策略不变)都不会提高自身的收益。
帕累托最优(Pareto Optimality):是指资源分配的一种理想状态,假定固有的一群人和可分配的资源,从一种分配状态到另一种状态的变化中,在没有使任何人境况变坏的前提下,使得至少一个人变得更好。
本次题目网址,密码 114514。
1. 博弈论
在生活中,我们常见几种游戏:
- 31 点(每个人说一个
1\sim m 之间的数字,数字和率先达到31 的玩家获胜) - 取石子游戏(几堆数量
\geq1 的石子,每个人轮流取1\sim m 个,率先取完的人获胜)
这几种游戏属于博弈游戏,属于博弈论(Game Theory),是经济学的一个分支。它主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。通俗地,它所研究的是在一个游戏中,进行游戏的多位玩家的策略。
上面列举的几个例子属于公平组合游戏(Impartial Game),一般具有以下特点:
- 游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息。
- 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。
- 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。
当然还存在非公平组合游戏(Partizan Game),即游戏者在某一确定状态可以做出的决策集合与游戏者有关,信息不对等。大部分的棋类都属于非公平组合游戏,如五子棋、象棋、围棋等,以及一些卡牌游戏。
和公平组合游戏相反的,还有反常游戏(Misère Game),其获胜规则与公平组合游戏相反。如 Nim 游戏中取走最后一颗石子的为胜者,而反常 Nim 游戏中取走最后一刻石子的为败者。
本节讲述生活中最常见的博弈类型。当你没写作业的时候,你需要与老师对赌,猜老师会不会仔细检查你的作业;我们常用的最古老的游戏石头剪刀布也是一种博弈。但现在我们考虑一种比较困难的情况:囚徒困境博弈(Prisoner's Dilemma)。
现在有两个小偷 A 和 B 联合犯事、私入民宅被警察抓住。警方将两人分别置于不同的两个房间内进行审讯,对每一个犯罪嫌疑人,警方给出的政策是:如果两个犯罪嫌疑人都坦白了罪行,交出了赃物,于是证据确凿,两人都被判有罪,各被判刑
画表:
| 决策 | A 坦白 | A 抵赖 |
|---|---|---|
| B 坦白 | ||
| B 抵赖 |
从数学角度分析:
- 对 A 来说,尽管他不知道 B 作何选择,但他知道无论 B 选择什么,他选择“坦白”总是最优的。显然,根据对称性,B 也会选择“坦白”,这是纳什均衡。结果是两人都被判刑
8 年。 - 但是,倘若他们都选择“抵赖”,每人只被判刑
1 年。在四种行动选择组合中,【抵赖,抵赖】是较优的,属于帕累托最优,因为偏离这个行动选择组合的任何其他行动选择组合都至少会使一个人的境况变差。 - 但是,“坦白”是任一犯罪嫌疑人的占优战略,而 【坦白,坦白】是一个占优战略均衡。不难看出,此处与纳什均衡存在冲突。
然而人的行为活动错综复杂,所以囚徒困境只能作为简化模型参考,具体决策还得具体分析。
2. 巴什博弈
巴什博弈(Bash Game)是一个经典的博弈模型,其基本问题为:有一堆总数为
引入策梅洛定理(Zermelo’s Theorem):二人的有限游戏中,如果双方皆拥有完全的资讯,并且运气因素并不牵涉在游戏中,那先行或后行者当中必有一方有必胜/必不败的策略。由此可得巴什博弈属于一种公平组合游戏。
巴什博弈的必胜策略:在先取完者胜的巴什博弈中,若
证:可以采用 DP 思想,以数学归纳法证明。
首先考虑两种简单情形,我们称某一
- 我们先考虑
n<m+1 的简单情形。此时先手方行动,由于物品数量<m+1 ,故至多为m 件物品,先手方一次性拿完所有物品即可胜利。即n = 1,2,\ldots,m 是先手方的制胜位置。 - 我们再考虑
n=m+1 的简单情形。此时先手方行动,他只能拿取1 至m 件物品,这意味着他无法一次将物品拿完,只能给后手方留下1 至m 件物品,而这一数量的物品恰好可被后手方一次性拿完。故后手方胜利。即n=m+1 是后手方的制胜位置。
下面我们考虑所有的
整理得证。
另外,当先手有必胜策略时,第一轮拿取的石子数一定,为
3. Nim 博弈
Nim 博弈(Nim Game)是一种经典的博弈游戏,其基本形式如下:地上有
根据策梅洛定理,这是一个公平组合游戏,因此存在必胜方和必败方。先引出其获胜条件:当
证:我们把每一轮博弈视作树上的一个节点,形成一棵博弈树(Game Tree)。每个节点的后继表示该节点的递归方式。例如:
易见
注意,必胜是对于当前这个状态是必胜的,与是谁无关,赢的人只是处于一个胜的状态而已。
现在看实际问题:我们要得到
考虑子问题,当
现在扩展到
如何,你不断的将异或和变成
整理得证。
4. 推荐题目
CodeForces 533C:Board Game
题目大意:A 和 B 各执一枚棋子,位置分别是
题解:热身题,没有涉及任何博弈论知识,纯手推。A 可以往左或下走,而 B 能往左,下或左下走。可以分类讨论:
-
A 的
x 和y 加起来没有 B 的x 大,A 赢。 -
A 的
x 和y 加起来没有 B 的y 大,A 赢。 -
A 的
x 和y 没有对手的x 和y 大,A 赢。 -
其余 B 赢。
HDU 1846:Brave Game
题目大意:两个人轮流取
题解:巴什博弈板子题,不多说。上代码:
if(n % (m + 1) == 0) cout << "second";
else cout << "first";
HDU 4764:Stone
题目大意:两人在白板上写数字,若一个人写了数字
题解:转换一下,有
POJ 2368:Buttons
题目大意:给定一堆石头共
题解:典型的巴什博弈。首先想让后手胜,就必须把
洛谷 P2197:Nim 游戏
题目大意:地上有
题解:Nim 博弈板子题,不多说。上代码:
int ans = 0;
for(int i = 1;i <= n;i++){
int t; cin >> t;
ans ^= t;
}
if(ans) cout << "Yes\n";
else cout << "No\n";
POJ 2975:Nim
题目大意:给定
题解:求出异或值
CodeForces 731E:Funny Game
题目大意:一个长度为
题解:我们不关心谁是先手谁是后手,只关注分差。令
计算前缀和,
5. 应试技巧
对于博弈问题,常见几个字眼:
- 石子游戏
- 取数游戏
Alice 和 Bob
博弈论常与以下知识点联考:
- 动态规划 DP
- 贪心