Warning: session_start(): open(/tmp/sess_c94d3b92acdb4391786d7218fbdabd3d, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: mkdir(): No space left on device in /data/wiki/lib/plugins/dw2pdf/vendor/mpdf/mpdf/src/Cache.php on line 19
Temporary files directory "/data/wiki/data/tmp/dwpdf/911/" is not writable
Writing /data/wiki/data/cache/d/de2edb2fcb553ea79b79c722a4e13dbc.captchaip failed

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:legal_string:王智彪:博弈论 [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:legal_string:王智彪:博弈论

博弈论

博弈图

定理1:没有后继状态的状态是必败状态

定理2:一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态

定理3:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态

如果博弈图是一个有向无环图,则我们在绘制出博弈图的情况下用 $O(N+M)$ 的时间得出每个状态是必胜状态还是必败状态。其中, $N$ 为状态种数, $M$ 为边数。

对于 $nim$ 游戏,当异或和为 $0$ 时,状态为必败状态,否则为必胜状态。显然对于异或和为 $0$ 的局面,一定不存在某一种移动让异或和仍然为 $0$ 。而对于异或和不为 $0$ 的局面,我们总有某种移动让异或和变为 $0$ 。如果能证明这个,我们就能证明最终结论。

比如现在所有石子异或和为 $t$ ,我们显然要对 $t$ 做二进制分解,取出最高位,所以原来的石子中,一定有奇数堆石子二进制这一位为 $1$ ,我们任选一堆,取这一堆,让最高位为 $0$ ,之后对于原来的 $t$ ,哪一位为 $1$ ,就让取的这一堆剩余的二进制和原来的二进制相反就可以了,可以知道这个数一定存在,且一定比原来少(因为刚才的最高位被取没了,且更高的位没动,所以一定变少)。所以小定理得证,大定理也就得证。其实设取的这一堆原来是 $a_{i}$ ,则 $a_{i}'=a_{i}$ ^ $t$ 。

有向图游戏与 $SG$ 函数

在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家可以沿着有向边,轮流移动棋子,不能移动的玩家判负。

定义 $mex$ 函数的值为不属于集合 $S$ 中的最小非负整数。

对于状态 $x$ 和它的所有 $k$ 个后继状态 $y_{1},y_{2},…,y_{k}$ ,定义 $SG$ 函数:

$SG(x)=mex\{SG(y_{1}),SG(y_{2}),…,SG(y_{k})\}$

对于由 $n$ 个有向图游戏组成的游戏,设起点分别为 $s_{1},s_{2},…,s_{n}$ ,则有定理,当且仅当 $SG(s_{1})$ ^ $SG(s_{2})$ ^ $…$ ^ $SG(s_{n})≠0$ 时,先手必胜,同时这是组合游戏状态 $x$ 的 $SG$ 值。

此证明省去。

对于 $nim$ 游戏,一个堆取走任意不为 $0$ 的数量,都会变成后继状态,所以 $SG(x)=x$ 即可满足题意,也就验证了上面的结论。

$Anti-SG$ 游戏

$Anti-SG$ 游戏规定,决策集合为空的游戏者赢。

$Anti-SG$ 游戏其他规则与 $SG$ 游戏相同。

$Anti-Nim$ 游戏

现在我们把取完石子定为失败状态。

显然当每堆只有一个石子时,石子为偶数堆也就是异或和为 $0$ 时,先手必胜,奇数堆时先手必败。

当有一堆石子不为 $1$ 时,显然先手可以控制将这堆石子取剩下 $1$ 或者 $0$ ,来控制 $1$ 的堆数,根据上面的推论,先手必胜。

当至少有两堆石子数大于 $1$ 时,还是考虑异或和,举了两个特例,提出异或和为 $0$ 时,先手必败,不为 $0$ 时,先手必胜的猜想。不为 $0$ 的情况先手必胜和为 $0$ 先手必败可以看成等价,所以只证明后者即可。

注意到当剩余大于 $1$ 的石子堆数为 $1$ 时,异或和不可能为 $0$ 。当后手面对异或和为 $0$ 的情况,只要他操作之后大于 $1$ 的石子堆数大于 $1$ ,只需要将异或和还原为 $0$ 即可。步数有限,后手早晚要面对到大于 $1$ 的石子堆数等于 $2$ ,且不得不将其中一堆石子变为 $1$ 的情况,这时根据情况 $2$ ,先手必胜,证毕。

$SJ$ 定理

对于任意一个 $Anti-SG$ 游戏,如果我们规定当局面中所有的单一游戏的 $SG$ 值为 $0$ 时,游戏结束,则先手必胜当且仅当:

1.游戏的 $SG$ 函数不为 $0$ 且游戏中某个单一游戏的 $SG$ 函数大于 $1$ (对应 $Anti-Nim$ 游戏中的石子数大于 $1$ 的堆数只有一堆的情况,和有至少两堆石子数大于 $1$ ,且石子异或和不为 $0$ )

2.游戏的 $SG$ 函数为 $0$ 且游戏中没有单一游戏的 $SG$ 函数大于 $1$ (所有石子堆均为 $1$ 个石子,这时候偶数堆必胜)

2020-2021/teams/legal_string/王智彪/博弈论.1628650358.txt.gz · 最后更改: 2021/08/11 10:52 由 王智彪