强化学习入门:环境搭建与首个案例实战

强化学习入门:环境搭建与首个案例实战 从零开始强化学习新手入门与环境搭建实战指南强化学习Reinforcement Learning, RL不同于监督学习它不依赖静态数据集而是让智能体Agent通过与环境Environment的持续交互利用“试错”机制最大化累积奖励来学习策略 。本文将带你完成从理论认知到本地环境搭建再到运行第一个“走迷宫”案例的全过程。以下内容仅为本人早期的学习过程和ai创作使用若有问题请及时指出。一、核心概念极简认知框架在动手写代码前需明确强化学习的五大核心要素这是理解后续代码逻辑的基础核心要素英文标识通俗解释类比案例走迷宫智能体Agent学习的主体做出决策的角色迷宫中的小方块环境Environment智能体所处的外部世界5x5 的迷宫地图含墙壁、终点状态State当前时刻环境的快照小方块当前的坐标位置 (x, y)动作Action智能体可以执行的操作上、下、左、右移动奖励Reward执行动作后获得的即时反馈到达终点 10撞墙 -5每步 -0.1注强化学习的目标是找到一个策略Policy使得智能体在长期互动中获得的累积奖励最大这与有监督学习中最小化预测误差的逻辑截然不同 。二、环境搭建本地开发环境配置对于新手而言版本兼容性是最大的拦路虎。推荐使用Anaconda管理虚拟环境并固定关键库的版本以避免报错。1. 创建虚拟环境打开终端Terminal或命令提示符CMD执行以下命令创建名为rl_env的独立环境指定 Python 版本为 3.8兼容性最佳# 创建名为 rl_env 的虚拟环境指定 Python 3.8 conda create -n rl_env python3.8 -y # 激活环境 conda activate rl_env2. 安装核心依赖库我们需要安装gym提供标准测试环境、numpy数值计算和matplotlib可视化绘图。为防止网络问题导致安装失败建议指定国内镜像源并锁定gym版本为0.26.2以规避高版本的接口变动问题 # 使用清华源安装指定版本的 gym 及基础库 pip install gym0.26.2 numpy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple若需进阶物理模拟如机器人控制可后续安装 Mujoco但入门阶段上述库已足够 。三、实战演练Q-Learning 走迷宫案例我们将实现一个经典的表格型 Q-Learning 算法让智能体在一个 5x5 的迷宫中学习从起点走到终点。1. 案例逻辑设计奖励机制到达终点奖励 10撞墙惩罚 -5每走一步消耗 -0.1鼓励最短路径。算法核心维护一个 Q 表Q-Table记录在每种状态下采取每个动作的预期收益通过不断更新 Q 值来优化策略。2. 完整代码实现新建文件maze_ql.py将以下代码复制进去。该代码包含了环境定义、Q-Learning 训练循环及结果可视化。import numpy as np import gym import matplotlib.pyplot as plt # --- 1. 自定义简单的迷宫环境 (基于 Gym 接口简化版) --- class MazeEnv: def __init__(self, size5): self.size size self.start_pos (0, 0) self.end_pos (4, 4) self.walls [(1, 1), (1, 2), (2, 2), (3, 1)] # 障碍物坐标 self.reset() self.action_space [0, 1, 2, 3] # 0:上1:下2:左3:右 def reset(self): self.agent_pos list(self.start_pos) return tuple(self.agent_pos) def step(self, action): # 根据动作更新位置 if action 0: self.agent_pos[0] - 1 # 上 elif action 1: self.agent_pos[0] 1 # 下 elif action 2: self.agent_pos[1] - 1 # 左 elif action 3: self.agent_pos[1] 1 # 右 # 边界检查 self.agent_pos[0] max(0, min(self.size-1, self.agent_pos[0])) self.agent_pos[1] max(0, min(self.size-1, self.agent_pos[1])) pos_tuple tuple(self.agent_pos) # 奖励逻辑 if pos_tuple in self.walls: reward -5 done False # 撞墙后退回原位简化处理 if action 0: self.agent_pos[0] 1 elif action 1: self.agent_pos[0] - 1 elif action 2: self.agent_pos[1] 1 elif action 3: self.agent_pos[1] - 1 elif pos_tuple self.end_pos: reward 10 done True else: reward -0.1 # 每一步的惩罚鼓励快速到达 done False return tuple(self.agent_pos), reward, done # --- 2. Q-Learning 算法核心 --- class QLearningAgent: def __init__(self, actions, learning_rate0.1, discount_factor0.9, epsilon0.9): self.q_table {} self.actions actions self.lr learning_rate self.gamma discount_factor self.epsilon epsilon def get_q_value(self, state, action): if state not in self.q_table: self.q_table[state] np.zeros(len(self.actions)) return self.q_table[state][action] def choose_action(self, state): # epsilon-greedy 策略大部分时间选最优偶尔随机探索 if np.random.uniform() self.epsilon: if state not in self.q_table: self.q_table[state] np.zeros(len(self.actions)) # 选择 Q 值最大的动作 return int(np.argmax(self.q_table[state])) else: return np.random.choice(self.actions) def learn(self, state, action, reward, next_state, done): if state not in self.q_table: self.q_table[state] np.zeros(len(self.actions)) if next_state not in self.q_table: self.q_table[next_state] np.zeros(len(self.actions)) q_predict self.get_q_value(state, action) if done: q_target reward else: q_target reward self.gamma * np.max(self.q_table[next_state]) # 更新公式Q(s,a) Q(s,a) lr * (target - predict) self.q_table[state][action] self.lr * (q_target - q_predict) # --- 3. 训练与可视化主流程 --- def train_and_plot(): env MazeEnv() agent QLearningAgent(actionsenv.action_space) episodes 500 # 训练回合数 rewards_per_episode [] print(开始训练...) for ep in range(episodes): state env.reset() total_reward 0 done False while not done: action agent.choose_action(state) next_state, reward, done env.step(action) agent.learn(state, action, reward, next_state, done) state next_state total_reward reward rewards_per_episode.append(total_reward) if (ep 1) % 100 0: print(f回合 {ep1}, 平均奖励{np.mean(rewards_per_episode[-100:]):.2f}) # 绘制学习曲线 plt.figure(figsize(10, 6)) plt.plot(rewards_per_episode) plt.title(Q-Learning Training Process (Maze)) plt.xlabel(Episode) plt.ylabel(Total Reward) plt.grid(True) plt.show() print(训练完成窗口显示学习曲线。) if __name__ __main__: train_and_plot()3. 运行与结果解读在终端运行python maze_ql.py。你将看到一张折线图初期奖励值波动大且多为负数智能体在随机乱撞。后期曲线逐渐上升并稳定在较高正值智能体学会了避开墙壁并直达终点。四、进阶路线与资源推荐掌握基础表格型方法后可按以下路径深入1.深度学习结合 (Deep RL)当状态空间过大如图像输入无法使用 Q 表时需引入神经网络。推荐从DQN(Deep Q-Network) 开始尝试玩 Atari 游戏 。2.主流算法逐步学习PPO(近端策略优化)、SAC等更强大的策略梯度算法这些是目前工业界的主流 。3.工具升级*Stable Baselines3封装好的高质量 RL 算法库适合快速实验 。*Google Colab若本地显卡性能不足可利用其免费 GPU 资源运行深度强化学习项目 。推荐学习资料 经典教材《Reinforcement Learning: An Introduction》(Sutton Barto) 视频课程李宏毅教授强化学习公开课中文讲解深入浅出、吴恩达 Coursera 课程 。 实践指南OpenAI Spinning Up (官方最佳实践文档) 。引用来源本文内容综合参考了 CSDN 关于《动手学强化学习》的实战指南 、华为云关于 Mujoco 及环境配置的详细教程 、博客园提供的走迷宫代码实例 、Bilibili 关于强化学习基础定义的解析 以及 CSDN 关于入门路径与资源推荐的综述文章 。参考来源[通俗易懂]《动手学强化学习》实战指南1-第1章 强化学习初体验-CSDN博客强化学习环境配置指南Mujoco、Mujoco_py、D4RL、gym、d3rlpy及Pycharm远程连接配置详解强化学习入门教程 - wangya216 - 博客园强化学习1基础入门篇强化学习怎么入门从零开始入门强化学习看这篇就够了_强化学习怎么学-CSDN博客