算法笔记:博弈问题

算法中博弈问题只关注ICG(公平组合游戏),有以下特点:

1.双方轮流行动,且规则公平

2.在有限步骤内一定能分胜负

3.两个玩家都是理性人,即对当前局面所有可能性都做了考虑

4.每次博弈从最一开始就决定了输赢。

下面是常见的博弈:

1.巴什博奕

描述:总共n个石子,两个每次可以拿m个,拿到最后一个石子的人获胜。

判断方法:n%(m+1) != 0,先手必胜

策略:总是让后手操作时,将石子数变为(m+1)倍数。最后后手拿到(m+1),先手一定获胜。

2.尼姆博弈:

描述:共n堆石头(每堆石头数量>=1,如果==0删去这个组),每个人拿一堆石头中任意石子数(至少拿一个,至多全拿走),拿到最后一个石子的人获胜。

判断方法:所有石子堆数量XOR结果 != 0,先手必胜。

(后面将所有石子堆数量XOR结果简称XOR)

策略:先手XOR!=0,一定能找到一种方法使得XOR==0;而后手无论如何都一定会将XOR结果!=0。最后后手是全0状态(每堆石子数都为0),即先手获胜(先手先拿到最后一个石子)。


原理:
1.当任意一方在面对XOR==0的情况时,无论怎么拿,一定会使XOR结果变成!=0 :

用二进制表示,XOR==0时每位1数量都为偶数,至少拿一个必然会使某些位1的数量变成奇数。


2.当任意一方在面对XOR!=0的情况时,一定至少有一种方法,让XOR==0:

先找到XOR最高位1(即前面的所有位都为0),找所有堆数量的二进制位包含这位1(至少有一个,因为是奇数),将除这个数的其余均XOR,结果一定<这个数(设该位1为第x位,那么XOR结果前x位都为0,而这个数第x位为1),因此通过调整这个数,可以使得(这个数)XOR(其余数XOR结果)==0。

ICG问题的通解:SG函数

SG图:每个局面对应图上一个节点,当前可进行的若干行动对应每个结点的若干后继结点。

SG函数:设必败点SG(0)== 0。SG函数表示从0开始,除该结点的所有后继结点的SG值的最小数。

若SG(x)== 0,表示当前局面必败;SG(x)!= 0,表示当前局面必胜。

原理:
如果SG(x)==0,说明所有后继节点SG值均>0,即无论做哪种操作,敌方都会掉入到必胜态(SG(x)!= 0);
如果SG(x)!=0,说明后继节点至少有一个SG值==0,通过选择这个后继操作,敌方会掉到必败态(SG(x)== 0)。

这个是一个循环论证(两个假设相互依赖)。
而这个循环论证之所以有效,是因为从一个确定的结果开始(SG(0)== 0,必败),所以之后也都成立。

SG定理:

原理:
还是有必败点SG(0)== 0,设SG(x)== 0,表示当前局面必败;SG(x)!= 0,表示当前局面必胜。
之后每次行动我可以选择在所有小的ICG游戏中玩一个。
如果所有ICG小游戏的SG值XOR的值!=0,那么我一定可以通过玩一个小ICG游戏,使得总XOR值==0,即将敌方掉入必输局面(XOR==0,即SG总(x)== 0)。(原理见尼姆博弈)
如果当前ICG小游戏的SG值XOR==0,那么无论我玩哪一个小ICG游戏,都会把总XOR值!=0,即敌方必定进入必赢局面(XOR!= 0,即SG总(x)!= 0)(原理见尼姆博弈)


还是一个循环论证,从确定的必输局面SG(0)==0开始,推出每个局面的确定结果。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值