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

博弈论1:拿走游戏(take-away game)

假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭....

你们面前有21个筹码,放成一堆每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆中最后的一个的人赢得游戏。

是不是摩拳擦掌可以开始玩啦?你拿了两个,小红拿了三个...作为观众的我开始记录你们每轮交替拿走后,筹码堆中剩余筹码的数量(黑色代表你拿走之后的筹码剩余数,红色则代表小红拿走之后的):

19;16;15;12;11;8;6;4;2;0

omg,小红拿走了最后一个筹码(她拿完后剩余筹码数变成0)。小红完美获胜!

输了游戏的你得请吃饭了....(顺便请下我)bushi)

下次还玩吗?

我偷偷告诉你,这个游戏有“必胜策略”。

请带着耐心往下看。

(碎碎念:第一部分“无偏组合游戏”的定义会有些枯燥,如果只想看制胜策略的话,可以跳过第一部分,直接看第二部分

目录

一、无偏组合游戏(impartial combinational games)

1.组合游戏特点:

2.无偏游戏特点

3.组合游戏定义

二、拿走游戏的“制胜策略” 

1.逆向推理(反向归纳法)(难推)

2.P&N positions解法(推荐)


一、无偏组合游戏(impartial combinational games)

拿走游戏属于一种无偏组合游戏,所以下面先介绍无偏组合游戏。

1.组合游戏特点:

设定如下:

  • 两个玩家,I与II
  • 完整信息(perfect information)
  • 没有随机性(no chance move)
  • 要么赢,要么输

比如开头的拿走游戏,就是你与小红两个玩家,你们都能看到场上的筹码和对方每轮的动作,你们一旦确定拿走几个筹码,就一定能拿走几个筹码;最后不可能平局,总会有个人拿走最后一个筹码,成为赢家,而另一个人成为输家。

2.无偏游戏特点

要求:

  • 在每个位置,对于玩家I和玩家II的行动是同等的。也就是说,两个玩家的可选策略是相同的,且游戏的状态仅依赖于当前配置,而与玩家的身份无关。(比如上面提到的拿走游戏,不会因为你是小红还是小明,你是玩家I还是玩家II而影响策略)

有偏游戏则与无偏游戏的要求相反。(比如一些英雄游戏,你们的角色会影响你们的策略)

3.组合游戏定义

同时满足下列条件的游戏称作组合游戏:

  • 两个玩家,I与II
  • 一套通常有限的可能位置(positions)
  • 游戏规则指定了两个玩家的合法行动;若规则对于两个玩家没有差别,则为无偏游戏,反之为有偏游戏。
  • 玩家I和II交替行动
  • 抵达其中一个位置时,游戏结束,同时下一个玩家无法行动。一般(normal)游戏规则是,最后一个完成行动的玩家获胜;misère(不幸)游戏规则相反,最后一个完成行动的玩家输掉游戏。
  • 如果游戏永远不结束,陷入了平局(draw),必须要增加额外条件(也就是增加Ending Condition),来终结平局,评出胜负。
  • 无论两个玩家怎么行动,最终游戏都能在有限步内结束

二、拿走游戏的“制胜策略” 

1.逆向推理(反向归纳法)(难推)

19;16;15;12;11;8;6;4;..

回顾最开始你与小红的游戏过程,其实小红把筹码拿到只剩4个的时候,你就能意识到无论如何自己都输了。如果自己拿走1个,那么还剩3个;拿走2个剩2个;拿走3个剩1个。而无论自己拿走多少,剩的1/2/3个小红都能一次性全部拿走,取得游戏胜利。

于是逆向推理一下,如果自己想要赢,需要走到“4”的位置,也就是拿完筹码还剩4个。

我们要想拿完筹码还剩4个,出发点就得是5/6/7(也就是小红拿完后剩余的筹码数量)。

为了让小红拿完后还剩5/6/7,小红开始拿的时候就还得剩8个.....

我们把拿完就必胜的位置定义成“P-positions”,可以发现P-positions有:4,8,12,16,20.也就是说,只要你拿完了还剩4个或8个或其他P位置,只要你按制胜策略继续走下去,就一定能赢。

2.P&N positions解法(推荐)

P位置,即positions that are winning for the Previous player (the player who just moved),拿完走到这个位置的玩家获胜。

N位置,即 winning for the Next player to move,拿完之后走到这个位置,你的对手玩家(也就是下一轮行动的玩家)会获胜。

要想赢拿走游戏,我们只需要四个步骤:

 1)标记终点为P位置。(本游戏中,0为P位置)

2)有路径可以抵达P位置的标记为N位置。(1,2,3都可以抵达0,故1,2,3都为N)

3)只能到达N位置的标记为P位置。(4只能到达1,2,3,故4为P)

4)重复2)3)直至游戏中所有有限可达位置都被标记为P&N。

本游戏标记下来就是:

位置:0  1  2  3  4  5  6  7  8  9  10  11  12 13 14  15  16  17  18  19  20  21

P/N:    P N N  N  N  N N   N  N   N    N   N    N    P  N   N    N    P    

于是你可以总结规律(注意,不同游戏规则下这个规律不一样):

P位置是4k;N位置是4k+1, 4k+2,4k+3.你需要努力走到4k的位置。

怎么证明你找到的规律是正确的?

1)证明终点是P点(即走到终点一定能获胜)

2)证明任何N点都能走到P点(对应4k+1, 4k+2,4k+3,我们拿走1/2/3个筹码一定能走到4k) 

3) 证明任何P点都只能走到N点(对于4k,走不到4k的位置,只能走到4k+1或4k+2或4k+3的N位置)

学会了吗~学会了拿14个筹码,每次只能拿走1/3/4个筹码试一试哟~

相关文章:

博弈论1:拿走游戏(take-away game)

假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭.... 你们面前有21个筹码,放成一堆;每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆…...

Debezium OracleValueConverters 分析

Debezium OracleValueConverters 分析 目录 1. 概述2. 核心功能3. 数据类型映射4. 特殊场景处理5. 最佳实践6. 使用示例7. 常见问题8. 扩展建议9. 总结1. 概述 OracleValueConverters 是 Debezium Oracle 连接器中负责数据类型转换的核心类,它继承自 JdbcValueConverters。主…...

WPF 消息循环(二)

们已经知道,win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher ,哪里来的消息循环? WPF 启动运行堆栈: > WpfApp1.…...

ubuntu上更改ext4格式的硬盘为 windows的 NTFS 格式参考

1. ubuntu上安装 sudo apt-get install gparted 2. 参考如下,下面是转换后的样例。 3.windows上添加识别新硬盘参考 先在设备管理器中 找到下面 磁盘管理 如下:找到类似下面的磁盘2 查看相关信息 右键可以新建卷和格式化,下面是已经新建…...

Fastapi教程:使用 aioredis 连接池执行Redis 的高效异步操作

在构建高性能的 Web 应用时,缓存系统是一个至关重要的组成部分。Redis 是最常见的缓存系统之一,它提供了高效的存储与读取机制。然而,在与 Redis 进行频繁交互时,创建和销毁连接可能会成为瓶颈。为了优化这一问题,我们…...

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)

目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…...

docker 容器相互访问

目前采用 network 方式 1. 创建自定义网络 docker network create network-group 如下 2. 相互访问的容器更改(目前演示redis 以及netcore api 访问redis ) //redis 原有容器删除 跟之前区别就是加入 --network network-group docker run \ -p 6379:…...

算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

问题: 给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。 输入:head 1 -> 2 -> 3 -> 4 -> 5 -> null, n 2 输出:1 -> 2 -> 3 -> 5 -> null输入:head 1 ->…...

【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器

文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...

AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用 1. 人工智能生成模型:解密 GPT 的工作原理 目录 引言 1.1 背景介绍 1.2 人工智能生成模型的兴起 1.3 GPT 系列模型的地位与影响 GPT 模型概述 2.1 什么是 GPT 2.2 GPT 的发展历程 2.3 GPT 与其…...

Python面试常见问题及答案4

一、内存管理相关 问题:Python中的垃圾回收机制是如何工作的? 答案:Python主要使用引用计数来进行垃圾回收,当对象的引用计数为0时,该对象就会被垃圾回收器回收。此外,Python还有一个循环垃圾收集器来处理循…...

开启第二阶段---蓝桥杯

一、12.10--数据类型的范围及转化 今天是刚开始,一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型,如果数值超出了 int 的范围,就会发生溢出错误。为了避免这个问题,可以将数字表示为 long 类型,方法…...

npm内存溢出

项目过大运行项目内存溢出 报错代码 运行内存溢出 increase-memory-limit ‘“node --max-old-space-size8192”’ 不是内部或外部命令,也不是可运行的程序 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of m…...

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…...

Android系统卡启动问题排查

Android系统启动正常来说会涉及到如下几个过程: 引导加载程序(Bootloader)Linux内核(Kernel),负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件,用于启动各…...

STP(生成树协议)

STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动…...

【前端面试】随机、结构赋值、博弈题

解构赋值(Destructuring Assignment)是 JavaScript ES6 引入的一项非常有用的特性,它允许我们快速地从数组或对象中提取值,并将它们赋给变量。这种方式使得代码更加简洁、易读,并且能够减少重复的访问和赋值操作。 1.…...

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器,旨在简化 Node.js 和其他工具的安装和管理,在 2019 年出世,仍在积极开发中。Volta 采用了与 nvm 不同的方法:它不是管理 Node.js 的多个版本,而是管理项目及其依赖项。当…...

ubuntu 磁盘空间满,找不到占用文件的目录

解决方法: 检查磁盘空间: 执行 df -h 查看各分区磁盘使用情况。 查找大文件或目录: 执行 du -sh /* 2>/dev/null 查找根目录下的大文件或目录,再逐一进入子目录使用相同命令查找。 清理缓存和临时文件: 清理 /t…...

1. 机器学习基本知识(5)——练习题(参考答案)

20.🔗本章代码笔记📓链接(需要🪜):(01_the_machine_learning_landscape.ipynb - Colab (google.com)) 如果你不想通过上面的官方网址下载本章的笔记,还可以在本篇博文的…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...