当前位置: 首页 > news >正文

基础博弈论(你输则我赢,我输则你赢)

博弈

  • 巴什博弈
  • 质数次方取石子问题
  • 尼姆博弈
  • 反尼姆博弈
  • SG函数

要让自己赢,不一定非要自己处于最佳状态,我们可以考虑置对方于死地,让对面处于必输的状态,那么剩下就是我赢了!

巴什博弈

一共n颗石头,两个人轮流拿,每次可以拿1m颗石头,拿到最后一颗石头的人获胜。根据nm判断谁获胜。

结论

  • 当前石子的数量可以整除m+1---->> 必输态
  • 当前石子的数量不可以整除m+1------->> 必胜态

制胜策略

每次将状态调整为可以被m+1整除(即平衡态),让对方无法一次性取完,从而确保自己最终能取到最后一颗石头。


质数次方取石子问题

一共n颗石头,两个人轮流拿,每一轮可以拿走pk次方颗石头。当前选手可以随意决定pk,但p必须是质数,k是自然数。拿到最后一棵石头获胜。

结论

  • 可以被6整除的状态 ----> 必输态
  • 不可以被6整除的状态 ----> 必胜态

制胜策略

利用1, 2, 3, 4, 5这五个数可以直接取走的特性,将6的倍数作为平衡态。在平衡态下,对方无法一次性取完所有石头,因为6是两个质数23的乘积,必须被分解。因此,问题可以转化为m=5的巴什博弈问题。


尼姆博弈

一共有n堆石头,两个人轮流进行游戏。在每个回合中,玩家需要选择任何一个非空的石头堆,并从这堆石头中移除任意数量的石头(至少一个)。谁先拿走最后的石头就获胜。

结论

所有石头堆的数量进行异或运算,结果为0则为必败态,不为0则为必胜态。

策略

将异或结果为0的状态称为平衡态。在不平衡态下,玩家应该选择一个非空的石头堆,并移除一定数量的石头,使得剩余石头堆的数量异或结果为0。这可以通过将异或结果中不为0的位对应的石头堆进行调整来实现。

例如:
策略:将异或为0的结果为平衡态,在不平衡态,我们始终可以将一个数字降低,使得所有数字异或结果为0,也就是平衡态,为了便于理解,我们将所有数字转为二进制,比如001010010111010110100110,比如这三个数字代表3堆石头,异或后发现,显然不为平衡态,那么如何将其转为平衡态呢,其实不难,我们先把所有数字异或的结果拿出来==>11111010,只需要控制最大的数变成一个确定的更小的数一定可以使其变为平衡态,(实际上将最大的数和异或结果再次异或,获得的结果就是这最大石头堆应该变成的数量,实际上他的意思就是消消乐)将10100110变成11111010^10100110=01011100

  • 初始状态:0010 1001(第一堆),0111 0101(第二堆),1010 0110(第三堆)
  • 异或结果:1111 1010(不为0,不平衡态)
  • 调整策略:选择第三堆,移除1010 0110 - 0101 1100 = 0100 1010个石头
  • 调整后状态:0010 1001(第一堆),0111 0101(第二堆),0101 1100(第三堆)
  • 异或结果:00000000(平衡态)

对于另外一种情况是,001100000011000000001010,前两个数异或完了为0,只剩下最后一个数,我们只将最后一堆取完即可。
这样,玩家就可以通过不断调整石头堆的数量,使游戏进入平衡态,从而确保自己最终能取到最后一颗石头。

反尼姆博弈

一共有n堆石头,两人轮流进行游戏
在每个玩家的回合中,玩家需要选择任何一个非空的石头堆,并且从这堆石头移除任何正数的石头数量,谁先拿走最后的石头就失败,返回最后谁会获胜。

与尼姆博弈不同的是,反尼姆是最后取走者输。

结论: 全部异或不为0为必胜态,否则为必败态
策略:依旧是一直转让平衡态,直到只剩下一堆石头的数量是大于1的(这必定是一个失衡态,也必定会在你的手上假如一直转让平衡态的情况下),此时根据其他剩余一颗石头的堆数决定,是将这大于1个石头的堆取完还是留下一个,比如:

  • 例一1(第一堆) 1(第二堆) 5(第三堆)
  • 是不是直观的看出,当我从5取出4,也就赢了呢。
  • 例二1(第二堆) 5(第三堆)
  • 同样直观看出,当我直接把5取完,也就赢了。
  • 例三5(第三堆)
  • 直观看出,当我从5中取出4,也就赢了。
    以上举得例子已经代表了所有情况

SG函数

如果在理解了巴什和尼姆博弈后,再理解这个就不难理解了

  • 我们可以利用SG函数来分析ICG游戏的胜负情况。首先,我们计算出每个状态的SG值:
  • SG(0)=0(终止状态,无法移动,必败)
  • 对于非终止状态n(n>0),其SG值G(n)等于所有可以从n转移到的状态m(m=n-1, n-2, …, n-m,且m>0)的SG函数值集合中不包含的最小非负整数。
    然后,我们根据SG值判断胜负:
  • 如果SG(n)=0,则先手必败;
    如果SG(n)≠0,则先手必胜。
    对于多组独立的游戏,分别计算各组的sg值,最后异或所有sg值,如果结果不为0,则为必胜态,否则为必败态,典型例子:尼姆博弈

sg()===> 对于sg(i)的计算,首先有一个之前(对于所有小于i的j,取sg(j)的值)记录的所有sg结果的表,对于i状态所有可到达的状态k,取表里不是sg(k)的值且最小的那个值,就是s(j)值。
例:现在有n堆石头,轮流取石头,每次不得超过2颗石头,计算sg值。
sg(0) = 0;
sg(1) = 1; 由于1可以到达sg(0),所以这里只能取1;
sg(2) = 2; 2可以到达1 和 0的状态,这里取当前石头数2;
sg(3) = 0; 由于3只能到达2 和 1,那么出现过最小的值且3不可到达的sg值为sg(0)=0;
sg(4) = 1; 以此类推,观察sg表的结果是符合巴什博弈的结论的。
sg(5) = 2;
sg(6) = 0;
这类博弈问题,一般要么为暴力依次求出sg值,求解答案,要么观察前n个数据的sg值,找出sg的规律求解

http://www.jsqmd.com/news/670052/

相关文章:

  • MegaLinter最佳实践:10个技巧提升团队代码质量
  • 终极百度网盘直连解析指南:3步告别龟速下载
  • Wan2.2-I2V-A14B性能实测:GPU利用率提升40%,显存占用降低35%优化报告
  • 如何通过smol-macros获得Rust异步编程的终极快速编译优势
  • 2026年比较好的程控平面磨床/精密成型平面磨床/二轴数控平面磨床/立式平面磨床源头工厂推荐 - 行业平台推荐
  • YOLOv5训练翻车?从零排查:你的自定义数据集可能犯了这5个错
  • Spring Batch 2.2.0.M1 是 Spring Batch 项目的**里程碑版本(Milestone 1)
  • Chandra OCR镜像免配置:预装CUDA/cuDNN/vLLM/chandra-ocr,开箱即用
  • RexUniNLUGPU算力优化:INT8量化无损部署,在T4上实现192 QPS@95ms P99
  • 如何在Express.js中快速实现数据安全加密:JavaScript-MD5实用指南
  • 任阅BookReader性能监控与调试终极指南:提升阅读体验的10个技巧
  • 造相-Z-Image参数详解:Z-Image原生支持的长提示词截断策略与语义保持机制
  • awesome-engineering-team-management职业晋升攻略:如何在技术组织中向上发展的完整指南
  • 聊聊C语言那些事儿之数据和C
  • 服务器双机热备软件推荐
  • 支付宝N5C碰一下终端研究笔记
  • 7个Git工作流最佳实践:提升GitHub_Trending/ba/basic团队协作效率的完整指南
  • 告别玄学调参:用STM32F103C8T6和增量式PID,5分钟搞定直流电机速度环
  • ta4j数据源集成实战:从Yahoo Finance到Coinbase的完整解决方案
  • C/C++编程笔记:C++入门知识,C++类和对象详解
  • 题解:洛谷 P1272 重建道路
  • PyTorch 2.8镜像实操手册:htop+nvtop双工具协同监控GPU资源使用
  • SnapRAID开发架构分析:从代码层面理解备份原理
  • CLIP-GmP-ViT-L-14业务场景:短视频封面图与标题关键词匹配优化
  • 解决ImHex在macOS上频繁崩溃的终极指南:从原理到修复
  • Wifi-Hacking开发者手册:如何扩展新功能和攻击向量
  • Kook Zimage 真实幻想 Turbo 本地部署:Clawdbot集成指南
  • RexUniNLU在客户服务工单自动分类中的实战应用
  • 告别printf调试!在STM32CubeIDE里玩转串口打印与浮点数输出(最新版实测)
  • 【AGI供应链革命】:3大颠覆性能力如何让企业库存成本直降40%?