博弈论

7. 博弈论

信息学一般关注的是组合博弈,组合博弈论主要关注以下类型:两人轮流行动的、完美信息、无随机因素的博弈

组合博弈一般分为 公平组合博弈非公平组合博弈

还可以按照是最后一个行动的人胜利/失败 划分为 正常博弈反常博弈

7.1 公平组合博弈

一个游戏是公平组合游戏,通常满足:

  1. 两名玩家轮流操作。
  2. 当前玩家可做的操作只取决于当前局面,与是谁无关。
  3. 游戏有限,不存在无限循环

这是识别出这是公平组合游戏的重要方法。

公平组合游戏里,最常用的工具是 SG 函数和 SG 定理(Sprague–Grundy 定理)。

在说这两个之前,我们先说一下 N-position(先手必胜态) 和 P-position(先手必败态)。

注意,这里的先手和后手指的是面对当前状态,先操作的人和后操作的人,与全局的先手后手无关。

若一个状态是 N-position,当且仅当它存在一个后继状态是 P 态。

若一个状态是 P-position,当且仅当它所有后继状态都是 N 态。

但是有的题目,他的后继太多,难以刻画,所以就发明了 \(SG\) 函数。

SG函数,定义 $SG(S)=\mathrm{mex}_{T是S的后继状态} SG(T) $

在正常博弈中:

  • \(SG(S)=0\) 时,是必败态。
  • \(SG(S) \ne 0\) 时,是必胜态。

你可能会说,这也没有优化什么啊,还是要找完他的后继。

但是其实,很多时候 \(SG\) 可以观察规律。而且当一个游戏由若干个独立子游戏组成,是难以用 NP 状态直接分析的,这个时候只能尝试用 \(SG\) 分析,因为 \(SG\) 函数有一个重要的性质:

\[SG(整体)=\oplus _{i=1}^n SG(i) \]

也就是整体的 \(SG\) 值就是所有独立游戏的 SG 的异或和。

\[\text{先手必胜} \iff \text{整体 SG 值} \neq 0 \]

证明好像不太重要,记结论即可。

反常博弈中,并不是直接把全部反过来就行了,他有不同的博弈逻辑。

7.2 零和博弈

在算法竞赛中常见的零和游戏大致可分为两类:序贯零和游戏与同时零和游戏。

零和博弈有两个人,称为 A人 和 B人,他们两个人交替行动,A人要自己收益最大,B人也要自己收益最大,但是 A人 和 B人 的总收益是固定的,所以 A人吃的越多,B人吃的越少。

表示成:

\[v_A(s)+v_B(s)=T \]

所以 B人 要自己收益最大,肯定要让 A人 收益最小。A人 对 B人 同理。

两人对称,我们钦定 A人先手。

Minimax 和 alpha-beta 剪枝:

从游戏结束开始往前推,令 \(S_0\) 为结束状态集合,\(S_1\) 为A人行动状态集合,\(S_2\) 为B人行动状态集合。

\(V(s)\) 是当前局面的 值函数

\[V(s) = \begin{cases} v(s), & s \in S_0, \\ \max_{t \in s} V(t), & s \in S_1, \\ \min_{t \in s} V(t), & s \in S_2. \end{cases} \]

放到博弈树上就是:

(图片摘自oiwiki。)

在奇数层(从上往下的),是A人操作,他要最大化自己收益,在偶数层,是B人操作,他要最小化 A人的收益。

朴素的 Minimax 可以直接用大力搜索。

显然这个复杂度我们无法接受。

所以就有了 Alpha-Beta 剪枝,这个东西其实很简单,听的比较高级,本质上就是最优性剪枝。

对于取 \(\max\) 的节点,我们在搜索的时候令 \(\alpha\) 表示当前找到的最大值。

对于取 \(\min\) 的节点,我们在搜索的时候令 \(\beta\) 表示当前找到的最小值。

实际上在不进行剪枝的情况下,整个博弈树跑完,取 \(\max\) 的节点上的权值就等于他自己的 \(\alpha\)。而取 \(\min\) 的节点上的权值就等于他自己的 \(\beta\)

如果对于一个取 \(\min\) 的节点 \(u\),他有一个儿子 \(v\),若 \(\alpha_v > \beta_u\) 这个儿子就不用再搜下去了,因为B人在 \(u\) 节点(状态)下肯定不会走到 \(v\) 节点了。他有一个可以让 A人获得更少的做法,在之前遍历到了。

posted @ 2026-09-15 21:01  kingho_zjh  阅读(7)  评论(0)    收藏  举报