当前位置: 首页 > 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)) 如果你不想通过上面的官方网址下载本章的笔记,还可以在本篇博文的…...

ESC固件底层开发:寄存器级驱动与无传感器换相实现

1. ESC固件底层技术解析:电子调速器固件架构与驱动实现电子调速器(Electronic Speed Controller, ESC)是无人机、电动航模、机器人驱动系统中的核心执行单元,其本质是一个高动态响应的三相逆变器控制器。ESC固件并非简单的PWM输出…...

流图与地平线图

1. 流图:数据的河流如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整体…...

论文写作“智多星”:书匠策AI,开启期刊论文新纪元

在学术的广袤天地里,论文写作宛如一场充满挑战的冒险之旅。尤其是期刊论文,它不仅是学者研究成果的集中展现,更是学术交流与进步的重要桥梁。但面对选题迷茫、资料繁杂、结构搭建困难等诸多难题,许多学者常常感到力不从心。别担心…...

嵌入式软件缺陷预防与设计规范实战指南

1. 嵌入式软件缺陷预防与设计规范作为一名在嵌入式领域摸爬滚打多年的工程师,我见过太多因为软件缺陷导致的灾难性后果。从航天器失联到医疗设备故障,这些事故背后往往都隐藏着本可以在设计阶段就规避的代码问题。今天我想分享的是:为什么一个…...

MentorBit红外驱动库:裸机与RTOS下的精准时序控制

1. MentorBit-DetectorIR 库概述MentorBit-DetectorIR 是一款专为 MentorBit 红外发射/接收模块设计的嵌入式底层驱动库,其核心定位并非通用红外协议栈(如 NEC、RC5 解码),而是面向硬件验证、模块级功能测试与快速原型开发的轻量级…...

OpenClaw+Phi-3-vision-128k-instruct图文处理实战:本地部署与多模态任务自动化

OpenClawPhi-3-vision-128k-instruct图文处理实战:本地部署与多模态任务自动化 1. 为什么选择这个技术组合? 去年我开始尝试用AI处理日常工作中的图文混合内容时,遇到了一个典型困境:现有的云端多模态服务要么价格昂贵&#xff…...

WordPress用Linux服务器还是Windows服务器更好?

对于绝大多数 WordPress 用户来说,Linux 服务器是更好的选择。 WordPress 本身是用 PHP 编写的,最初就是为 Linux 环境(特别是 LAMP/LEMP 架构)设计的。虽然它也可以在 Windows 上运行,但在性能、成本、生态支持和安全…...

医疗AI实战:如何用NLP技术从电子病历中提取科研特征(附Python代码)

医疗AI实战:从电子病历中挖掘科研金矿的NLP技术指南 在医疗健康领域,电子病历(EMR)是一座尚未充分开发的数据金矿。据统计,医疗机构产生的数据中超过70%是非结构化文本信息,包括医生记录、检查报告和病程描…...

保姆级教程:在若依框架里给你的系统加个AI客服(通义千问+流式响应)

企业级智能客服系统集成实战:若依框架与通义千问的完美结合 1. 智能客服系统架构设计 在当今数字化转型浪潮中,智能客服已成为企业提升服务效率、降低人力成本的关键工具。基于若依框架与通义千问构建的智能客服系统,能够无缝集成到现有企业应…...

如何用Dify API和GPT-4o高效识别图片?附避坑指南

如何用Dify API和GPT-4o高效识别图片?附避坑指南 在当今数字化时代,图片识别技术已成为众多应用场景中的核心需求。从电商平台的商品自动分类到社交媒体内容审核,再到医疗影像分析,高效准确的图片识别能力正变得越来越重要。Dify作…...