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

从石头剪刀布到Nim游戏:用Python代码理解博弈论里的必胜策略

从石头剪刀布到Nim游戏用Python代码理解博弈论里的必胜策略博弈论并非遥不可及的数学理论它隐藏在我们熟知的童年游戏里。想象一下当你和朋友玩石头剪刀布时是否曾思考过是否存在必胜策略或者在井字棋游戏中先手是否真的占据绝对优势这些日常游戏背后都蕴含着博弈论的深刻原理。1. 博弈论基础概念博弈论研究的是理性决策者之间的策略互动。在组合游戏中我们需要理解几个核心概念必胜态N-position当前玩家可以采取策略使对手处于必败态必败态P-position无论当前玩家如何操作对手都能获胜的状态SG函数用于量化游戏状态的数学工具让我们用Python实现一个简单的状态判断函数def is_winning_position(n, moves): 判断当前是否为必胜态 if n 0: return False # 游戏结束当前玩家输 return any(not is_winning_position(n - move, moves) for move in moves if move n)2. 经典游戏实例分析2.1 巴什博弈Bash Game游戏规则有一堆n个物品两人轮流取走1到m个取走最后一个者胜。必胜策略保持对手面对的物品数总是(m1)的倍数def bash_game(n, m): 巴什博弈胜负判断 return 先手胜 if n % (m 1) ! 0 else 后手胜 # 示例17个物品每次可取1-3个 print(bash_game(17, 3)) # 输出先手胜2.2 尼姆游戏Nim Game游戏规则有若干堆石子玩家每次可从一堆取任意数量至少1个取最后一个者胜。必胜策略计算所有堆石子数的异或值Nim和import functools import operator def nim_game(piles): 尼姆游戏胜负判断 nim_sum functools.reduce(operator.xor, piles) return 先手胜 if nim_sum ! 0 else 后手胜 # 示例三堆石子分别为3,4,5 print(nim_game([3, 4, 5])) # 输出先手胜3. SG函数与游戏组合SG函数是分析博弈论问题的强大工具它能为每个游戏状态分配一个非负整数值SG值为0必败态SG值非0必胜态def calculate_sg(max_n, moves): 计算SG函数值 sg [0] * (max_n 1) for i in range(1, max_n 1): reachable set() for move in moves: if i move: reachable.add(sg[i - move]) # mex运算找最小的未出现非负整数 mex 0 while mex in reachable: mex 1 sg[i] mex return sg # 示例计算取1,3,4个石子时的SG值 sg_values calculate_sg(10, [1, 3, 4]) print(SG值表:, sg_values)4. 从简单游戏到复杂策略4.1 石头剪刀布的博弈论视角虽然石头剪刀布看似随机但可以通过博弈矩阵分析石头剪刀布石头01-1剪刀-101布1-10import random from collections import defaultdict def rps_strategy(n1000): 石头剪刀布策略模拟 counter defaultdict(int) choices [石头, 剪刀, 布] for _ in range(n): # 简单策略检测对手偏好后调整 if counter[石头] counter[剪刀] counter[布]: my_choice 布 elif counter[剪刀] counter[布] counter[石头]: my_choice 石头 elif counter[布] counter[石头] counter[剪刀]: my_choice 剪刀 else: my_choice random.choice(choices) opponent random.choice(choices) # 模拟随机对手 counter[opponent] 1 # 判断胜负 if (my_choice 石头 and opponent 剪刀) or \ (my_choice 剪刀 and opponent 布) or \ (my_choice 布 and opponent 石头): pass # 获胜 return counter4.2 井字棋的必胜策略分析井字棋作为有限步数的游戏可以通过博弈树完全分析def is_win(board, player): 检查当前玩家是否获胜 wins [(0,1,2),(3,4,5),(6,7,8),(0,3,6), (1,4,7),(2,5,8),(0,4,8),(2,4,6)] return any(all(board[i] player for i in line) for line in wins) def evaluate_tic_tac_toe(board, player): 评估井字棋局面 if is_win(board, X): return 1 if is_win(board, O): return -1 if not in board: return 0 # 递归评估所有可能走法 best_val -float(inf) if player X else float(inf) for i in range(9): if board[i] : board[i] player val evaluate_tic_tac_toe(board, O if player X else X) board[i] if player X: best_val max(best_val, val) else: best_val min(best_val, val) return best_val5. 博弈论在算法竞赛中的应用ACM/ICPC等编程竞赛中常出现博弈论题目掌握SG函数和经典模型能显著提升解题效率。以下是常见解题框架判断游戏类型公平组合游戏/非公平游戏分析游戏状态转移图计算SG函数或寻找模式处理游戏组合情况Nim和def solve_game_problem(piles, k): 解决一般博弈问题的框架 # 步骤1预处理特殊情况 if all(p 0 for p in piles): return False # 步骤2计算SG函数或应用已知定理 if k 1: # 巴什博弈变种 return sum(piles) % 2 1 else: # Nim游戏变种 return functools.reduce(operator.xor, piles) ! 0 # 示例使用 piles [3, 4, 5] print(游戏结果:, 先手胜 if solve_game_problem(piles, 2) else 后手胜)理解这些基础博弈模型后可以尝试解决更复杂的问题如威佐夫博弈Wythoffs Game斐波那契博弈Fibonacci Nim图游戏与SG定理的应用在实际编码练习中建议从简单游戏入手逐步构建对博弈论的直观理解再过渡到数学证明和算法实现。记住博弈论的精髓在于逆向思维——要想获胜必须让对手处于必败的位置。

相关文章:

从石头剪刀布到Nim游戏:用Python代码理解博弈论里的必胜策略

从石头剪刀布到Nim游戏:用Python代码理解博弈论里的必胜策略 博弈论并非遥不可及的数学理论,它隐藏在我们熟知的童年游戏里。想象一下,当你和朋友玩石头剪刀布时,是否曾思考过是否存在必胜策略?或者在井字棋游戏中&…...

HeyGem数字人系统批量处理教程:高效制作企业宣传视频

HeyGem数字人系统批量处理教程:高效制作企业宣传视频 1. 系统介绍与核心功能 HeyGem数字人视频生成系统是一款基于AI技术的智能视频合成工具,能够将音频与视频完美结合,生成口型同步的数字人视频。这个批量版WebUI版本经过二次开发&#xf…...

internlm2-chat-1.8b效果惊艳:中文古籍标点自动添加+白话翻译对比展示

internlm2-chat-1.8b效果惊艳:中文古籍标点自动添加白话翻译对比展示 你是不是也对那些没有标点的古文感到头疼?竖排、繁体、无句读,读起来磕磕绊绊,意思全靠猜。最近,我在体验一个轻量级的AI模型——InternLM2-Chat-…...

告别枯燥配置!用Odin的ValidateInput和ValueDropdown为你的Unity游戏数据加上“智能校验”

告别枯燥配置!用Odin的ValidateInput和ValueDropdown为你的Unity游戏数据加上“智能校验” 在游戏开发中,数据配置往往是策划与程序员之间最频繁的"战场"。想象这样一个场景:策划正在为RPG游戏设计一个复杂的技能系统,需…...

PyTorch 2.6镜像保姆级教程:3步完成GPU加速环境配置

PyTorch 2.6镜像保姆级教程:3步完成GPU加速环境配置 你是不是刚拿到一台新服务器,想快速搭建一个能跑深度学习的GPU环境,结果被各种驱动、CUDA版本、环境依赖搞得头大?或者你只是想快速验证一个PyTorch模型,却花了大半…...

REX-UniNLU与Typora文档智能分析

REX-UniNLU与Typora文档智能分析 1. 引言 在日常工作中,我们经常需要处理大量的Markdown文档。无论是技术文档、项目报告还是学习笔记,如何快速理解和分析这些文档内容一直是个挑战。传统的文档分析需要人工阅读和整理,费时费力且容易出错。…...

Phi-4-mini-reasoning实战教程:3步部署数学与逻辑推理Web服务

Phi-4-mini-reasoning实战教程:3步部署数学与逻辑推理Web服务 1. 认识Phi-4-mini-reasoning推理模型 Phi-4-mini-reasoning是一款专为推理任务优化的文本生成模型,特别擅长处理数学题、逻辑题等需要多步分析和精确结论输出的场景。与通用聊天模型不同&…...

HunyuanVideo-Foley 开发环境搭建:使用MobaXterm高效管理远程Linux服务器

HunyuanVideo-Foley 开发环境搭建:使用MobaXterm高效管理远程Linux服务器 1. 为什么选择MobaXterm 对于Windows开发者来说,管理远程Linux服务器一直是个头疼的问题。传统的PuTTY虽然能用,但功能单一;Xshell虽然强大,…...

Java 面试题精讲:在分布式系统中集成 Stable Yogi 模型的设计思路

Java 面试题精讲:在分布式系统中集成 Stable Yogi 模型的设计思路 最近在面试高级Java工程师时,我特别喜欢问一个开放性的架构设计题:“假设我们要在一个大型电商平台的微服务架构里,集成一个类似Stable Diffusion的AI图像生成模…...

告别死板界面!Nanbeige 4.1-3B Streamlit WebUI极简版,一键搭建二次元对话助手

告别死板界面!Nanbeige 4.1-3B Streamlit WebUI极简版,一键搭建二次元对话助手 1. 引言:当极简设计遇上AI对话 如果你曾经尝试过本地部署大语言模型的Web界面,可能会被那些拥挤的侧边栏、死板的方形头像和单调的聊天气泡劝退。传…...

次元画室Python入门实践:用10行代码实现你的第一张AI绘画

次元画室Python入门实践:用10行代码实现你的第一张AI绘画 你是不是也刷到过那些酷炫的AI绘画作品,心里痒痒的,觉得这技术真神奇,但又感觉离自己很远?是不是觉得要玩转AI绘画,得先学会复杂的软件操作&#…...

SDMatte在移动端App的集成方案:云端推理与本地缓存的平衡

SDMatte在移动端App的集成方案:云端推理与本地缓存的平衡 1. 移动端图像处理的新挑战 最近几年,移动端图像处理需求呈现爆发式增长。从简单的滤镜应用到复杂的背景替换、人像美化,用户对实时性和效果质量的要求越来越高。SDMatte作为一种先…...

MPU6050的DMP采样率到底怎么调?从200Hz到5ms延迟的配置避坑指南

MPU6050的DMP采样率到底怎么调?从200Hz到5ms延迟的配置避坑指南 当你在手势识别项目中配置MPU6050时,是否遇到过这样的困惑:明明在代码里设置了mpu_set_sample_rate(200),但用示波器测量中断引脚却发现间隔忽长忽短?或…...

别再只调sklearn默认参数了!手把手教你优化SVR回归模型的5个关键步骤

突破SVR模型性能瓶颈:5个被低估的调参实战策略 当你的支持向量回归(SVR)模型表现平平,准确率卡在某个阈值无法突破时,可能正陷入"默认参数陷阱"。许多机器学习实践者习惯直接调用sklearn的SVR()默认设置&…...

避坑指南:在PlatformIO上为ESP32-S3移植LVGL、AI语音和摄像头时,我遇到的5个典型问题

ESP32-S3多功能开发实战:从LVGL优化到AI语音集成的避坑指南 在物联网和嵌入式开发领域,ESP32-S3凭借其强大的双核处理能力和丰富的外设接口,成为智能终端设备的首选平台之一。但当我们将LVGL图形库、AI语音交互和摄像头功能集成到同一个项目中…...

Python测试代码如何实现自解释_使用pytest描述性命名规范

测试函数名须以test_开头并用下划线连接完整动宾短语,如test_calculate_total_returns_zero_for_empty_cart;参数化用pytest.mark.parametrize替代重复函数;断言需具体明确;fixture应以名词命名,体现被构建对象而非构建…...

AI写代码真的比人类快3.7倍?2026奇点大会闭门测试数据首次公开:12类真实业务场景下代码正确率、可维护性、安全漏洞率三维对比

第一章:2026奇点智能技术大会:AI代码对比 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生编码”专项评测赛道,聚焦大模型在真实工程场景中生成、理解与优化代码的能力。评测覆盖Python、Go、Rust三类主流语言&…...

如何高效备份QQ空间历史说说的完整指南

如何高效备份QQ空间历史说说的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字信息时代,个人数据的安全备份变得日益重要。GetQzonehistory作为一款开源工具&…...

Sketch Measure终极指南:3分钟掌握高效设计标注与规范生成

Sketch Measure终极指南:3分钟掌握高效设计标注与规范生成 【免费下载链接】sketch-measure Make it a fun to create spec for developers and teammates 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-measure 你是否厌倦了在Sketch中手动标注设计尺…...

如何在5分钟内免费部署本地AI写作助手:KoboldAI完全指南

如何在5分钟内免费部署本地AI写作助手:KoboldAI完全指南 【免费下载链接】KoboldAI-Client For GGUF support, see KoboldCPP: https://github.com/LostRuins/koboldcpp 项目地址: https://gitcode.com/gh_mirrors/ko/KoboldAI-Client 你是否渴望拥有一个完全…...

Calibre中文路径保护插件:终极解决方案告别拼音路径困扰

Calibre中文路径保护插件:终极解决方案告别拼音路径困扰 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址:…...

Zephyr测试实战:从ztest用例编写到twister自动化验证

1. Zephyr测试框架概述 第一次接触Zephyr测试框架时,我完全被它强大的功能震撼到了。作为一个嵌入式开发者,我们经常需要在资源受限的环境下进行代码验证,而Zephyr提供的ztest单元测试框架和twister自动化测试工具,简直就是为嵌入…...

告别复制卡!手把手教你用92HID623CPU V5.00系统给小区门禁卡加密发卡(附防锁卡指南)

92HID623CPU V5.00系统实战:打造防复制门禁卡的完整指南 最近不少物业管理员都在头疼一个问题——传统IC卡太容易被复制了。随便找个街边小店,花个十块钱就能复制一张门禁卡,小区的安全性形同虚设。我去年接手的一个高端小区就遇到过这种情况…...

别再让FIN_WAIT_2拖垮你的服务器:Linux内核参数调优实战(附完整sysctl.conf配置)

从线上故障到根治方案:FIN_WAIT_2状态深度调优指南 凌晨3点,服务器监控大屏突然亮起刺眼的红色警报——某电商平台核心服务器的TCP连接数在15分钟内暴涨300%,内存占用突破90%阈值。运维团队紧急登录服务器,当netstat -ant | grep …...

告别手敲代码!这10个Dynamo节点包,让你的Revit建模效率翻倍(附保姆级安装指南)

10个Dynamo节点包:让Revit建模效率提升300%的实战指南 在BIM工程师的日常工作中,Revit建模往往伴随着大量重复性操作和数据处理任务。传统的手动操作不仅效率低下,还容易出错。而Dynamo作为Revit的可视化编程插件,正逐渐成为提升工…...

告别环境报错!手把手教你为《深入理解计算机系统》第三版(CSAPP 3e)在Ubuntu 20.04/WSL2下编译专属库

告别环境报错!手把手教你为《深入理解计算机系统》第三版(CSAPP 3e)在Ubuntu 20.04/WSL2下编译专属库 最近在WSL2环境下学习《深入理解计算机系统》(CSAPP)时,发现官方代码包直接编译总会报错。经过多次尝试…...

MinerU智能文档服务部署避坑指南:常见问题解决与性能优化技巧

MinerU智能文档服务部署避坑指南:常见问题解决与性能优化技巧 1. 部署前的关键准备 1.1 硬件环境选择 MinerU智能文档服务对硬件要求极为友好,但在实际部署中仍需注意以下细节: CPU选择:优先选择支持AVX2指令集的处理器&#…...

Arm处理器文档版本管理与工程实践解析

1. Arm产品文档状态管理解析在半导体和嵌入式系统开发领域,产品文档的精确性直接影响着芯片设计、驱动开发和系统集成的每个环节。Arm作为全球领先的处理器架构提供商,其文档管理体系经过多年迭代已形成一套严谨的工业级标准。以最新发布的C1-Nano Core&…...

Phi-4-Reasoning-Vision企业实操:构建内部知识图谱的图像语义注入系统

Phi-4-Reasoning-Vision企业实操:构建内部知识图谱的图像语义注入系统 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为企业级知识图谱构建和图像语义分析场景设计。该系统通过双卡…...

AI手势识别极速CPU版:无需GPU,上传图片秒出彩虹骨骼图

AI手势识别极速CPU版:无需GPU,上传图片秒出彩虹骨骼图 1. 项目背景与核心价值 手势识别技术正在改变我们与数字世界的交互方式。从智能家居控制到虚拟现实操作,再到无障碍交互设计,这项技术展现出广阔的应用前景。然而&#xff…...