强化学习与Q-Learning算法原理及Python迷宫导航实战:从MDP到Deep Q-Learning的完整指南
强化学习(Reinforcement Learning, RL)是机器学习的一个重要分支,它专注于研究智能体(Agent)如何通过与环境进行试错交互来学习最优决策策略,其核心目标是最大化累积奖励信号。
成为新会员获取本项目完整教程资料
与依赖标注数据的监督学习不同,RL智能体通过执行动作并接收环境反馈(奖励或惩罚)来学习,这种学习范式更接近人类和动物的自然学习过程。
图:强化学习核心概念示意
RL的核心思想围绕一个闭环交互展开:智能体观察环境的当前状态,根据其策略选择一个动作执行,环境随之转换到一个新的状态并返回一个即时的奖励。智能体的目标是学习一个最优策略,使得其在长期交互过程中获得的累积奖励总和最大。本文将通过一个具体的“迷宫寻路”案例,从零开始构建一个强化学习智能体,并深入讲解Q-Learning算法及其扩展——Deep Q-Learning。
本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群获取完整代码数据及更多最新AI见解、行业洞察,可与900+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路;遇代码运行问题,更能享24小时调试支持。
研究流程脉络图
│
├─ 问题定义 → 智能体如何在迷宫中通过试错学习找到终点?
├─ 环境建模 → 定义状态(位置)、动作(上下左右)、奖励(撞墙-10,终点+50,每步-1)
├─ 算法选择 → Q-Learning (离线策略、时序差分)
├─ 代码实现 → Python + NumPy,ε-贪婪策略,Q表更新
├─ 结果分析 → 最优路径可视化、奖励曲线收敛性
└─ 优化扩展 → 超参数调优、Deep Q-Learning应对高维状态
本项目完整教程资料
本研究自建一个10×10网格迷宫作为环境。迷宫由NumPy数组表示(0为通路,1为墙壁)。起始点为(0,0),目标点为(9,9)。状态空间共100个离散状态,动作空间包含上下左右四个动作。奖励函数设计如下:撞墙-10,到达终点+50,普通步数-1(鼓励最短路径)。
3.1 Q-Learning算法原理
Q-Learning是一种离线策略的时序差分学习方法,通过维护Q表来学习最优动作价值函数。核心更新公式(Bellman方程简化形式):Q(s,a) ← Q(s,a) + α [ r + γ * max_a' Q(s', a') - Q(s,a) ]
其中α为学习率,γ为折扣因子。
3.2 环境与参数初始化
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# 迷宫地图 (0=通路, 1=墙壁)
maze_grid = np.array([
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
# ......(省略部分迷宫行以简化篇幅,完整代码见社群)
[1, 1, 1, 0, 1, 1, 1, 1, 0, 0]
])
start_pos = (0, 0)
goal_pos = (9, 9)
# 超参数设置
total_episodes = 5000
alpha = 0.1 # 学习率
gamma = 0.9 # 折扣因子
epsilon = 0.5 # 初始探索率
reward_wall = -10
reward_goal = 50
reward_step = -1
actions = [(0,-1), (0,1), (-1,0), (1,0)] # 左、右、上、下
Q_table = np.zeros(maze_grid.shape + (len(actions),))
3.3 辅助函数与训练循环
def is_valid_cell(pos, grid):
r, c = pos
if r < 0 or r >= grid.shape[0]: return False
if c < 0 or c >= grid.shape[1]: return False
if grid[r, c] == 1: return False
return True
def choose_action(state, q_tbl, eps, num_acts):
if np.random.random() < eps:
return np.random.randint(num_acts)
else:
return np.argmax(q_tbl[state])
rewards_per_episode = []
for ep in range(total_episodes):
state = start_pos
total_reward = 0
done = False
while not done:
act_idx = choose_action(state, Q_table, epsilon, len(actions))
move = actions[act_idx]
next_state = (state[0] + move[0], state[1] + move[1])
if not is_valid_cell(next_state, maze_grid):
reward = reward_wall
done = True
elif next_state == goal_pos:
reward = reward_goal
done = True
else:
reward = reward_step
old_val = Q_table[state][act_idx]
if done and next_state != goal_pos:
max_next_q = 0
else:
max_next_q = np.max(Q_table[next_state])
new_val = old_val + alpha * (reward + gamma * max_next_q - old_val)
Q_table[state][act_idx] = new_val
if not done:
state = next_state
total_reward += reward
epsilon = max(0.01, epsilon * 0.995)
rewards_per_episode.append(total_reward)
4.1 提取最优路径
def get_best_path(q_tbl, start, goal, acts, grid, max_steps=200):
path = [start]
cur = start
visited = set()
for _ in range(max_steps):
if cur == goal: break
visited.add(cur)
best_a = None
best_val = -float('inf')
for i, mv in enumerate(acts):
nxt = (cur[0]+mv[0], cur[1]+mv[1])
if (0 <= nxt[0] < grid.shape[0] and 0 <= nxt[1] < grid.shape[1]
and grid[nxt] == 0 and nxt not in visited):
if q_tbl[cur][i] > best_val:
best_val = q_tbl[cur][i]
best_a = i
if best_a is None: break
move = acts[best_a]
cur = (cur[0]+move[0], cur[1]+move[1])
path.append(cur)
return path
optimal_path = get_best_path(Q_table, start_pos, goal_pos, actions, maze_grid)
4.2 迷宫路径可视化
def plot_maze_path(path, grid):
cmap = ListedColormap(['#eef8ea', '#a8c79c'])
plt.figure(figsize=(8,8))
plt.imshow(grid, cmap=cmap)
plt.scatter(start_pos[1], start_pos[0], marker='o', color='#81c784', s=200, label='起点')
plt.scatter(goal_pos[1], goal_pos[0], marker='*', color='#388e3c', s=300, label='终点')
if path:
rows, cols = zip(*path)
plt.plot(cols, rows, color='#60b37a', linewidth=4, label='最优路径')
plt.title('强化学习:机器人迷宫导航')
plt.gca().invert_yaxis()
plt.legend()
plt.show()
plot_maze_path(optimal_path, maze_grid)

图:智能体学习到的最优路径
4.3 训练奖励曲线
def plot_rewards_curve(rewards):
plt.figure(figsize=(10,5))
plt.plot(rewards)
plt.title('每轮总奖励变化')
plt.xlabel('训练轮次')
plt.ylabel('总奖励')
plt.grid(True)
plt.show()
plot_rewards_curve(rewards_per_episode)

图:训练过程中每轮获得的总奖励,呈现收敛趋势
最受欢迎的见解
- Python员工数据人力流失预测:ADASYN采样CatBoost算法、LASSO特征选择与动态不平衡处理及多模型对比研究
- R分布式滞后非线性模型DLNM分析某城市空气污染与健康数据:多维度可视化优化滞后效应解读
- Python古代文物成分分析与鉴别研究:灰色关联度、岭回归、K-means聚类、决策树分析
- Python TensorFlow OpenCV的卷积神经网络CNN人脸识别系统构建与应用实践
- Python用Transformer、SARIMAX、RNN、LSTM、Prophet时间序列预测对比分析用电量、零售销售、公共安全、交通事故数据
- MATLAB贝叶斯超参数优化LSTM预测设备寿命应用——以航空发动机退化数据为例
- Python谷歌商店Google Play APP评分预测:LASSO、多元线性回归、岭回归模型对比研究
- Python+AI提示词糖尿病预测模型融合构建:伯努利朴素贝叶斯、逻辑回归、决策树、随机森林、支持向量机SVM应用
5. 在线与离线学习、Q-Learning细节、MDP与Bellman方程
5.1 在线学习与离线学习对比
强化学习方法可根据数据获取方式分为在线学习和离线学习。

图:在线RL与离线RL对比
在线学习中,智能体通过实时与环境交互收集数据并同时学习;离线学习则基于预先收集的静态数据集进行训练,不与环境交互。
5.2 Q-Learning深入解析
Q-Learning的核心是构建Q表,存储每个状态-动作对的期望累积奖励估计值。

图:Q-Learning概念示意
Q-Learning工作流程:

图:Q-Learning算法流程图
Q表输出示例(4×4网格环境训练后):

图:各状态最大Q值热力图

图:学习到的Q表示例(状态0-15,动作左、右、上、下)
5.3 深度Q-Learning
当状态空间高维连续时,传统Q表不可行,此时使用深度神经网络近似Q函数,即Deep Q-Learning。

图:Deep Q-Learning概念
DQN架构:

图:深度Q网络架构
关键技术包括:经验回放(Experience Replay)和目标网络(Target Network)。
5.4 马尔可夫决策过程
MDP是RL的数学框架,由状态、动作、转移概率、奖励、折扣因子五元组定义。

图:MDP核心组件
MDP示例:3×4网格世界:

图:网格世界问题示意图
5.5 Bellman方程
Bellman方程是RL的数学基础,表达状态价值与后续状态价值之间的递归关系。

图:不使用Bellman方程时的价值回溯

图:使用Bellman方程进行动态更新
6. 研究结论
本文系统介绍了强化学习的基本原理,通过Q-Learning算法在迷宫导航任务中的完整实现,验证了该算法在离散状态空间下学习最优策略的有效性。训练奖励曲线的收敛趋势和最终提取的最优路径均证明了智能体成功学会了从起点到终点的无碰壁路径。进一步,本文讨论了Q-Learning的局限性(高维状态空间下的维度灾难),并引出Deep Q-Learning作为解决方案,同时阐述了MDP框架和Bellman方程的理论基础。本研究为后续将RL应用于更复杂实际场景(如机器人控制、自动驾驶)提供了可复现的代码基准和理论参考。
DeepSeek、LangGraph和Python融合LSTM、RF、XGBoost、LR多模型预测NFLX股票涨跌|附完整代码数据
本文介绍了使用多种深度学习与机器学习模型对NFLX股票进行涨跌预测的方法,包含完整代码数据实践。
探索观点阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。
本文配套的论文建模可直接套用的完整代码包、实证分析,可加小助手微信:tecdat_cn领取,我们可提供全流程的辅助学术合规辅导、1v1建模陪跑服务,助力顺利完成科研、通过答辩。

每日分享最新报告和数据资料至会员群
关于会员群
- 本会员社群以垂直产业数据研究、深度行业报告分享、AI数据工具实操交流为核心定位;
- 入群即可解锁全行业数据内容免费阅读与下载权限,同步更新海内外一手优质研究报告文档与产业数据;
- 会员老用户享受专属 9 折续费优惠,可长期锁定社群全部权益;
- 为会员提供一对一免费 PDF 报告专属代找服务。
非常感谢您阅读本文,如需帮助请联系我们!

居民健康调查数据|高血压慢性病影响因素识别:Python逻辑回归LR多层感知器MLP预测|附数据代码
多模态与推理模型高效压缩:自适应感知、KV缓存优化与Token容量扩展方法研究及Python复现|附数据代码
DeepSeek高维城市经济与宜居度面板数据分析——PGSA寻优、聚类、CNN、ARIMA、GM(1,1)与智能交互|附代码数据
RAG与Python的智能编程教程问答系统:DeepSeek大模型驱动、LangChain流程构建、FAISS向量检索与语义相似度匹配技术实现|附教程文档


