# kaiwu **Repository Path**: he-benjiu/kaiwu ## Basic Information - **Project Name**: kaiwu - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 峡谷漫步 V2 (Gorge Walk V2) - 强化学习算法演示项目 ## 项目简介 这是一个**强化学习算法演示项目**,基于峡谷漫步游戏环境,实现了多种经典强化学习算法。项目分为简化版(不依赖框架)和完整版(依赖 kaiwudrl 框架)。 ### 项目特点 - **多种算法实现**:包含 Q-Learning、SARSA、Monte Carlo 等经典强化学习算法 - **简化版本**:不依赖任何外部框架,可以直接在本地运行 - **完整版本**:基于腾讯开悟平台的 kaiwudrl 框架 - **交互式训练**:提供菜单式选择界面,方便用户选择算法进行训练 - **可视化展示**:训练过程中可以查看智能体的行为 - **模型保存**:支持训练模型的保存和加载 ## 项目结构 ``` ├── agent_diy/ # 自定义智能体实现 ├── agent_dynamic_programming/ # 动态规划算法实现 ├── agent_monte_carlo/ # 蒙特卡洛算法实现 ├── agent_q_learning/ # Q-Learning 算法实现 ├── agent_sarsa/ # SARSA 算法实现 ├── conf/ # 配置文件 ├── README_SIMPLIFIED.md # 简化版使用指南 ├── README.md # 本文件 ├── monte_carlo_simplified.py # 简化版蒙特卡洛训练脚本 ├── q_learning_model.npy # 训练好的 Q-Learning 模型 ├── sarsa_simplified.py # 简化版 SARSA 训练脚本 ├── simplified_env.py # 简化的游戏环境 ├── train_all.py # 综合训练入口 ├── train_simplified.py # 简化版 Q-Learning 训练脚本 ├── train_test.py # 完整版训练脚本 ├── train_all.py # 综合训练入口 └── 运行结果.md # 运行结果记录 ``` ## 快速开始 ### 环境要求 - Python 3.8 或更高版本 - numpy 库 ### 安装依赖 ```bash pip install numpy ``` ### 运行方式 #### 方法 1: 交互式训练菜单(推荐) ```bash python train_all.py ``` 然后根据菜单选择要训练的算法: ``` ============================================================ 峡谷漫步 V2 - 简化版训练系统 Gorge Walk V2 - Simplified Training System ============================================================ 请选择算法 / Select Algorithm: 1. Q-Learning 2. SARSA 3. Monte Carlo (蒙特卡洛) 4. 全部训练 (All Algorithms) 0. 退出 (Exit) ============================================================ ``` #### 方法 2: 命令行参数 ```bash # Q-Learning python train_all.py q # SARSA python train_all.py sarsa # 蒙特卡洛 python train_all.py mc # 全部训练 python train_all.py all ``` #### 方法 3: 直接运行单个脚本 ```bash # Q-Learning python train_simplified.py # SARSA python sarsa_simplified.py # 蒙特卡洛 python monte_carlo_simplified.py ``` ## 游戏环境说明 ### 游戏目标 - 智能体(A)从起点(S)走到终点(G) - 收集宝箱(T)获得额外奖励 - 最小化步数完成目标 ### 动作空间 - 0: 向上移动 - 1: 向下移动 - 2: 向左移动 - 3: 向右移动 ### 奖励设置 - 到达终点:+100 - 收集宝箱:+10 - 每步惩罚:-0.1(鼓励快速完成) - 撞墙:-5 ### 环境渲染 ``` ----------------- |S|.|.|.|.|.|.|G| |.|T|.|.|.|.|.|.| |.|.|A|.|.|T|.|.| |.|.|.|.|.|.|.|.| |T|.|.|.|.|.|.|.| |.|.|.|T|.|.|.|.| |.|.|.|.|.|.|T|.| |.|.|.|.|.|.|.|.| ----------------- Step: 3, Treasures: 0/5 ``` ## 算法实现 ### Q-Learning - **类型**:离线策略 (Off-policy) - **更新方式**:使用最大 Q 值进行更新 - **特点**:收敛速度快,策略较激进 ### SARSA - **类型**:在线策略 (On-policy) - **更新方式**:使用实际动作的 Q 值进行更新 - **特点**:收敛速度较慢,策略较保守 ### Monte Carlo - **类型**:基于采样的方法 - **更新时机**:回合结束后 - **特点**:无偏估计,但方差较高 ## 核心算法实现 ### Q-Learning 更新公式 ```python # Q(s,a) := Q(s,a) + lr * [R(s,a) + gamma * max Q(s',a') - Q(s,a)] target = reward + self.gamma * np.max(self.Q[next_state, :]) td_error = target - self.Q[state, action] self.Q[state, action] += self.learning_rate * td_error ``` ### SARSA 更新公式 ```python # Q(s,a) := Q(s,a) + lr * [R(s,a) + gamma * Q(s',a') - Q(s,a)] target = reward + self.gamma * self.Q[next_state, next_action] td_error = target - self.Q[state, action] self.Q[state, action] += self.learning_rate * td_error ``` ### Monte Carlo 学习 ```python # 反向遍历轨迹计算回报 for state, action, reward in reversed(trajectory): G = self.gamma * G + reward # 首次访问时更新 if (state, action) not in returns_map: self.Q[state, action] = returns_sum / returns_count ``` ## 训练结果示例 ``` ============================================================ 训练完成!Training Complete! ============================================================ 总回合数 Total Episodes: 1000 总时间 Total Time: 2.61 秒 成功率 Success Rate: 71.40% 平均奖励 Average Reward: 73.94 最后 100 回合平均 Last 100 Avg Reward: 98.14 [OK] Model saved to q_learning_model.npy ``` ## 超参数调整 在训练脚本中可以调整以下超参数: - `learning_rate`:学习率(默认 0.8) - `gamma`:折扣因子(默认 0.9) - `epsilon`:探索率(默认 0.1) ## 模型管理 ### 保存模型 训练完成后会自动保存模型到 `.npy` 文件: - Q-Learning: `q_learning_model.npy` - SARSA: `sarsa_model.npy` - Monte Carlo: `monte_carlo_model.npy` ### 加载模型 ```python agent = QLearningAgent(state_size, action_size) agent.load_model("q_learning_model.npy") ``` ## 测试训练结果 训练完成后,可以选择测试智能体的表现: ```python # 测试智能体 test(agent, episodes=3, render=True) ``` ## 完整版本使用 如果想运行完整版本,需要: 1. 访问腾讯开悟平台获取 kaiwudrl 框架 2. 在支持的环境中运行 `train_test.py` ## 算法对比 | 算法 | 策略类型 | 收敛速度 | 稳定性 | 适用场景 | |------|---------|---------|--------|----------| | Q-Learning | 离线策略 | 快 | 较激进 | 希望快速收敛的场景 | | SARSA | 在线策略 | 慢 | 较保守 | 需要安全策略的场景 | | Monte Carlo | 离线策略 | 慢 | 稳定 | 状态空间小的场景 | ## 常见问题 ### Q: 为什么成功率不是 100%? A: 简化版本使用了较小的状态空间和简化的特征表示。原始版本有更复杂的状态编码。 ### Q: 如何提高训练效果? A: 可以尝试调整超参数,增加训练回合数,或者使用更复杂的特征表示。 ### Q: 如何扩展这个项目? A: 可以添加新的算法实现,修改环境规则,或者增加可视化效果。 ## 技术支持 如有问题,请检查: 1. Python 版本 >= 3.8 2. 已安装 numpy: `pip install numpy` 3. 在正确的目录下运行命令 ## 许可证 本项目仅供学习和研究使用。 ## 贡献 欢迎提交问题和改进建议!