wangchuanli de44825e21 feat: 添加石头剪刀布预测辅助系统
实现基于马尔可夫转移、频率统计和周期检测的融合预测算法,包含主程序、回测评估脚本、README 文档、MIT 许可证及 .gitignore 配置。
2026-08-24 10:53:03 +08:00

猜拳预测辅助系统 (Rock-Paper-Scissors Predictor)

一个基于序列预测的「石头剪刀布」辅助 AI。它通过分析对手的历史出手习惯, 融合多种预测模型,给出下一局克制对手的推荐出手。

⚠️ 说明:若对手完全随机出拳,任何算法胜率都趋近于 33.3%,无法被预测。 本系统的价值在于识别有习惯 / 有模式的对手(如偏好某手、固定循环、受上一手影响)。

原理

系统同时使用三种互补的预测模型,并对它们融合投票:

模型 思路 适用场景
马尔可夫一阶转移 统计「上一手 → 这一手」的转移频率,预测下一手 对手受上一手影响
频率统计 预测对手最常出的手 对手有固定偏好
周期检测 检测对手是否按固定长度循环出拳 对手按循环模式

融合策略:三模型投票(少数服从多数);平票时按置信度加权选择。 最终根据预测的对手出手,推荐能克制它的一手(win_map)。

转移矩阵使用 拉普拉斯平滑(np.ones((3,3)) 初始化),避免未见过的转移概率为 0。

安装

pip install -r requirements.txt

使用

python rock-paper-scissors.py

按提示输入对手的出手:

  • 1 = 拳头
  • 2 = 剪刀
  • 3 = 布
  • q = 退出

每局程序会输出:本局胜负、AI 预测的对手下一手、推荐的出手,以及累积统计。 历史记录会持久化到 rps_history.json。

评估 / 回测

evaluate.py 用多种模拟对手(随机、偏好、循环、马尔可夫依赖)对算法做回测, 报告胜率,验证算法在「有模式」的对手上显著优于随机基线(约 33.3% 的随机胜率)。

python evaluate.py

示例输出(seed=42, 各 2000 局):

对手类型 预测AI胜率 随机基线 说明
完全随机 ~33.6% ~33.3% 无模式,算法不占优(符合预期)
偏好出布(60%) ~66.8% ~33.3% 频率模型生效
固定循环(拳头→剪刀→布) ~99.8% ~33.3% 周期检测完美工作
一阶马尔可夫依赖 ~47.9% ~33.3% 转移矩阵学习生效

结论:算法只在对手存在可学习模式时显著优于随机;面对完全随机的对手, 胜率收敛到理论值,不会过拟合或作弊。

文件结构

rock-paper-scissors.py   主程序(人机交互 + 预测核心)
evaluate.py              回测/评估脚本
rps_history.json         对局历史记录(自动生成)
requirements.txt         依赖
README.md                说明文档

License

MIT

S
描述
一个基于序列预测的「石头剪刀布」辅助 AI。它通过分析对手的历史出手习惯, 融合多种预测模型,给出下一局克制对手的推荐出手。
自述文档 MIT
32 KiB
语言
Python 100%