这是一个使用纯 C++ 开发的经典 1A2B (猜数字) 游戏,其最大的亮点在于内置了一个从零开始搭建的神经网络(Neural Network)。该 AI 能够通过自我对弈进行学习,并在游戏过程中为你提供逻辑建议。
- 纯 C++ 实现:不依赖任何第三方 AI 框架(如 PyTorch 或 TensorFlow),完全手写矩阵运算、反向传播和激活函数。
- 自研神经网络引擎:
- 架构:全连接多层感知机 (210 -> 128 -> 40)。
- 激活函数:隐藏层使用 Leaky ReLU,输出层使用 Categorical Softmax。
- 学习算法:支持标准的反向传播 (Backpropagation) 与梯度下降。
- 高性能计算:
- 内存优化:采用一维连续内存布局(Memory Flattening),最大化 CPU 缓存命中率。
- 多核加速:利用 OpenMP 并行化矩阵运算,大幅提升训练速度。
- 持久化进化:支持模型参数的保存 (
model.txt) 与加载,AI 的“智慧”可以跨会话累积。 - 交互式 AI 助手:在游戏输入
h即可调用 AI 自动进行逻辑推理并给出最优猜测。
- 支持 C++17 的编译器(如 GCC, Clang)
- CMake (3.10+)
- OpenMP (可选,用于加速)
mkdir -p build && cd build
cmake ..
cmake --build .- 系统随机生成 4 个不重复的数字(0-9)。
- 玩家输入 4 个数字进行猜测:
- A 代表数字正确且位置正确。
- B 代表数字正确但位置错误。
- 目标:得到 4A0B。
[4位数字]:提交你的猜测(如1234)。h:调用 AI 助手。AI 会分析当前所有历史线索,自动填入它认为概率最高的组合。r:重新开始游戏(AI 也会清空当前局的短时记忆)。q:退出游戏并保存 AI 模型。
AI 观察最近 5 轮的对局历史。每轮包含:
- 40 维:猜测数字的 One-hot 编码。
- 2 维:该次猜测得到的 A 和 B 的归一化结果。 总计 210 维 的浮点向量作为神经网络输入。
输出层为 40 维,分为 4 组(对应 4 个位置)。每组 10 个神经元通过 Softmax 给出该位置出现数字 0-9 的概率分布。
项目采用“自监督模拟实战”:
- AI 在后台进行数万局虚拟对弈。
- 每一回合,AI 尝试根据现有线索预测答案。
- 系统根据真实答案纠正 AI,通过反向传播微调数万个权重参数。
- 增量学习:即使在玩家进行游戏时,AI 也会在每局结束后学习玩家的成功经验。
├── AI/
│ ├── Matrix.h/cpp # 基础矩阵引擎(带多核并行)
│ └── NeuralNetwork.h/cpp # 神经网络核心、反向传播、Softmax
├── src/
│ ├── Game.h/cpp # 游戏主逻辑、训练循环
│ ├── Result.h/cpp # 1A2B 结果计算
│ └── main.cpp # 程序入口
└── CMakeLists.txt # 构建配置文件
如果你希望 AI 变得更聪明:
- 启动时输入更高的训练轮数(如
50000)。 - 在
AI/NeuralNetwork.h中尝试调整learning_rate。 - 保持
model.txt不被删除,AI 将会随着你的每一次对局不断进化。