强化学习值函数与策略搜索两种方法对比和疑问解读

news/2025/11/4 17:04:36/文章来源:https://www.cnblogs.com/kaoyujiang/p/19190798

下面通过一个简单的“迷宫寻宝”例子,用伪代码和Python代码对比直接策略搜索(以PPO为例)和基于值函数的方法(以Q-Learning为例)的核心区别。

问题场景:迷宫寻宝

  • 环境:3x3网格迷宫,起点(0,0),宝藏在(2,2),障碍物在(1,1)
  • 动作:上下左右(离散动作空间)
  • 奖励:到达宝藏+100,撞墙(出界或碰障碍物)-10,其他情况0
  • 目标:学习从起点到宝藏的最短路径

一、核心区别对比(伪代码)

image

二、具体代码实现对比

1. 基于值函数的方法(Q-Learning)

import numpy as np# 1. 环境初始化
# 3x3网格:0=空,1=障碍物,2=宝藏;状态用(s_row, s_col)表示
obstacle = (1,1)
treasure = (2,2)
states = [(i,j) for i in range(3) for j in range(3) if (i,j)!=obstacle]
actions = [0,1,2,3]  # 0=上,1=下,2=左,3=右# 2. 初始化Q表(状态-动作价值表)
Q = {}
for s in states:Q[s] = {a:0.0 for a in actions}  # 初始价值均为0# 3. 超参数
alpha = 0.1  # 学习率(更新Q值的幅度)
gamma = 0.9  # 折现因子
epsilon = 0.1  # 探索率(10%概率随机选动作,90%选Q值最大的动作)
episodes = 1000  # 训练回合数# 4. Q-Learning训练
for _ in range(episodes):s = (0,0)  # 起点while s != treasure:  # 直到找到宝藏# 选动作:ε-贪婪策略(基于Q表选动作)if np.random.random() < epsilon:a = np.random.choice(actions)  # 随机探索else:a = max(Q[s], key=Q[s].get)  # 选Q值最大的动作(利用)# 执行动作,得到下一状态和奖励row, col = sif a==0: new_s = (row-1, col)  # 上elif a==1: new_s = (row+1, col)  # 下elif a==2: new_s = (row, col-1)  # 左else: new_s = (row, col+1)  # 右# 判断奖励和是否撞墙if new_s not in states:  # 出界或撞障碍物reward = -10new_s = s  # 留在原地elif new_s == treasure:reward = 100else:reward = 0# 更新Q值(核心:用TD误差修正价值)# TD目标 = 即时奖励 + 折现后的下一状态最大Q值td_target = reward + gamma * max(Q[new_s].values())# TD误差 = 目标与当前Q值的差距td_error = td_target - Q[s][a]# 更新当前Q值Q[s][a] += alpha * td_errors = new_s  # 进入下一状态# 5. 测试策略(基于Q表的贪婪策略)
print("Q-Learning学到的策略:")
s = (0,0)
path = [s]
while s != treasure:a = max(Q[s], key=Q[s].get)  # 直接选Q值最大的动作row, col = ss = [(row-1,col), (row+1,col), (row,col-1), (row,col+1)][a]path.append(s)
print("路径:", path)

2. 直接策略搜索(PPO简化版)

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim# 1. 环境初始化(同Q-Learning)
obstacle = (1,1)
treasure = (2,2)
states = [(i,j) for i in range(3) for j in range(3) if (i,j)!=obstacle]
actions = [0,1,2,3]  # 0=上,1=下,2=左,3=右
state2idx = {s:i for i,s in enumerate(states)}  # 状态转索引(用于网络输入)# 2. 定义策略网络(直接参数化策略)
class PolicyNet(nn.Module):def __init__(self):super().__init__()self.fc = nn.Linear(2, 4)  # 输入:状态坐标(s_row, s_col),输出:4个动作的对数概率def forward(self, s):# s是坐标 tuple,转换为张量x = torch.tensor(s, dtype=torch.float32)logits = self.fc(x)  # 未归一化的概率return torch.softmax(logits, dim=0)  # 输出动作概率分布(和为1)# 3. 初始化策略和优化器
policy = PolicyNet()
optimizer = optim.Adam(policy.parameters(), lr=0.01)  # 梯度上升(通过Adam优化器实现)# 4. 超参数
gamma = 0.9
episodes = 1000
epsilon_clip = 0.2  # PPO剪辑系数# 5. PPO训练
for _ in range(episodes):# 采样轨迹(用当前策略收集数据)trajectories = []s = (0,0)rewards = []actions_taken = []while s != treasure:# 选动作:从策略网络的概率分布中采样(直接依赖策略参数)action_probs = policy(s)  # 得到4个动作的概率a = torch.multinomial(action_probs, 1).item()  # 按概率采样动作# 执行动作(同Q-Learning)row, col = snew_s = [(row-1,col), (row+1,col), (row,col-1), (row,col+1)][a]if new_s not in states:reward = -10new_s = selif new_s == treasure:reward = 100else:reward = 0# 记录轨迹trajectories.append((s, a))rewards.append(reward)actions_taken.append(a)s = new_s# 计算优势函数(简化版:用累积奖励作为优势)G = 0advantages = []for r in reversed(rewards):  # 从后往前计算累积奖励G = r + gamma * Gadvantages.insert(0, G)advantages = torch.tensor(advantages, dtype=torch.float32)advantages = (advantages - advantages.mean()) / (advantages.std() + 1e-8)  # 中心化# PPO更新:限制策略更新幅度old_probs = []for s, a in trajectories:with torch.no_grad():  # 固定旧策略old_prob = policy(s)[a]  # 旧策略选该动作的概率old_probs.append(old_prob)old_probs = torch.tensor(old_probs)# 多轮优化(离线更新)for _ in range(3):new_probs = []for s, a in trajectories:new_prob = policy(s)[a]  # 新策略选该动作的概率new_probs.append(new_prob)new_probs = torch.tensor(new_probs)# 策略比率:新概率/旧概率ratio = new_probs / old_probs# 剪辑目标函数(PPO核心)surr1 = ratio * advantagessurr2 = torch.clamp(ratio, 1-epsilon_clip, 1+epsilon_clip) * advantagesloss = -torch.min(surr1, surr2).mean()  # 负号:因为优化器是梯度下降,转为最小化负损失# 梯度下降更新策略参数(等价于梯度上升最大化奖励)optimizer.zero_grad()loss.backward()optimizer.step()# 6. 测试策略(从策略网络采样动作)
print("PPO学到的策略:")
s = (0,0)
path = [s]
while s != treasure:with torch.no_grad():action_probs = policy(s)a = torch.argmax(action_probs).item()  # 选概率最大的动作row, col = ss = [(row-1,col), (row+1,col), (row,col-1), (row,col+1)][a]path.append(s)
print("路径:", path)

三、核心区别总结

  1. 优化对象不同

    • Q-Learning优化的是“状态-动作价值表”,通过修正价值来间接指导策略;
    • PPO优化的是“策略网络参数”,直接调整选动作的概率分布。
  2. 策略生成方式不同

    • Q-Learning的策略是“确定性”的(选Q值最大的动作);
    • 直接策略搜索的策略是“随机性”的(按概率分布采样动作,后期概率会集中到最优动作)。
  3. 更新逻辑不同

    • Q-Learning用“TD误差”(目标价值与当前价值的差距)更新价值;
    • 直接策略搜索用“策略梯度”(奖励对参数的导数)更新参数,本质是让高奖励的动作被选中的概率增加(梯度上升)。
  4. 适用场景不同

    • Q-Learning适合离散动作空间(如迷宫寻宝的上下左右);
    • 直接策略搜索适合连续动作空间(如机器人关节角度控制)。

通过代码可以直观看到:Q-Learning的核心是一张记录“动作好不好”的表,而直接策略搜索的核心是一个直接决定“选哪个动作”的概率模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把 1 GHz 做成一粒米”——成都恒利泰科技 HT-LFCG-1000+

把 1 GHz 做成一粒米”——成都恒利泰科技 HT-LFCG-1000+LTCC 低通滤波器,DC-1000 MHz 全段驻波≤1.2,插损≤0.9 dB,4Pad 贴片只有 2 mm1.25 mm,比回形针的弯钩还小;5G 小基站、Wi-Fi 7、车载数传直接“贴脸”安放…

中文分词手艺全解析

中文分词手艺全解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

2025qwb 线上赛wp

2025qwb 线上赛wp好长时间不碰ctf了有快两年了吧。谍影重重 6.0 是一个流量文件看一下data包头80007651995957c3884819ee 这段数据(因为之前基本没接触过流量,我直接问ai,ai也没有分析出是什么协议最后看了一下别人…

2025年钢带波纹管批发厂家权威推荐榜单:hdpe钢带波纹管/钢带管/钢带增强聚乙烯螺旋波纹管源头厂家精选

随着城镇化建设加速和市政工程标准提升,钢带波纹管市场需求持续增长。行业数据显示,2024年我国塑料管道年产量突破1800万吨,其中钢带增强HDPE螺旋波纹管在市政排水领域占比达35%,年均增长率稳定在12%。本文将基于企…

11.4每日总结

今天主要的课程有软件构造,软件企业文化,软件案例分析,完成了软件设计实验五和实验六。借助ai做好了企业文化的ppt,同时软考在即,网课已经全部看完了,难度很大压力也不小,加油!

深入解析:探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年聚氨酯预聚体公司新排行榜,浇注聚氨酯原材料企业推荐

2025年聚氨酯工业持续向高性能、定制化、绿色化方向升级,聚氨酯预聚体、浇注型聚氨酯及浇注聚氨酯原材料作为下游制造的核心基础,其性能稳定性、工艺适配性与定制化能力,直接决定矿用筛板、胶辊、密封件、新能源配件…

2025年乐博智家保鲜盒直销厂家权威推荐榜单:乐博智家冰沙杯/乐博智家炒冰机/乐博智家刨冰机源头厂家精选

随着家居生活品质升级与健康意识提升,保鲜盒市场呈现高速增长态势。行业数据显示,2024年中国保鲜盒市场规模已突破180亿元,其中智能密封与环保材质产品增速达25%,厨房收纳系统化解决方案需求提升30%。本文将基于企…

2025 年打标机厂家最新推荐排行榜:结合协会测评权威数据,聚焦技术创新与行业适配的优质品牌全解析手持/点阵/金属/铭牌打标机公司推荐

引言 随着智能制造产业持续升级,打标机作为产品标识与追溯管理的核心设备,市场需求呈稳步增长态势,但行业内产品质量差异显著、技术水平参差不齐的问题仍较为突出。为给企业选购提供权威参考,本次榜单由专业机械制…

2025年注射成型烧结炉生产厂商新排行榜,碳化硅反应烧结炉厂家推荐

2025年新材料加工行业加速升级,注射成型烧结炉、碳化硅反应烧结炉及高温真空烧结炉等专用设备,已成为新型导热材料、特种陶瓷、碳材料、电池负极材料等领域的核心生产支撑,其温度控制精度、气氛稳定性、自动化程度直…

多项式学习小记

多项式 FFT 和 NTT 以后再补。 FFT 单位根,复数,乱推 NTT 将单位根变成原根,但模数要满足对于 \(\log_2(\text{序列长度})<n\) ,\(p=2^nx+1\) MTT 即任意模数。 这时 NTT 使用不了,FFT 会被卡精度。 方法1 使用…

Oracle Exadata存储节点主动替换磁盘最佳实践

Oracle Exadata存储节点主动替换磁盘最佳实践我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大…

2025年度口碑好值得选的阀门涂装供应商,推荐一下阀门涂装供应商

2024年,石油、化工等行业稳健发展,对阀门涂装的需求持续增长。阀门涂装质量直接关乎设备在极端工况下的稳定性与使用寿命。然而,当前阀门涂装市场供应商众多,质量参差不齐,企业常面临诸多困扰。如在严苛工况下,涂…

2025 年清洗机源头厂家最新推荐排行榜:聚焦激光与超声波等类型设备,解析七大优质企业实力

引言 在工业制造快速发展的当下,清洗环节对产品质量与生产效率的影响愈发关键,然而清洗机市场却存在诸多问题。部分厂家缺乏核心技术,产品清洗精度不足、能耗高,难以满足精密加工需求;售后服务不完善,设备故障响…

2025年东北三省五大靠谱围挡提供商推荐,诚信的围挡品牌厂家全解析

在工程施工与活动筹备中,围挡是保障安全、规范现场的关键设施,而选择可靠的围挡提供商直接影响项目效率与成本控制。面对市场上良莠不齐的围挡供应企业,如何找到诚信的围挡品牌厂家?以下聚焦东北三省及内蒙古地区,…

2025年磁沉淀污水处理设备制造企业权威推荐榜单:磁沉淀水处理设备/磁沉淀技术/磁沉淀污水处理一体化设备源头厂家精选

在环保政策趋严与水资源循环利用需求提升的双重驱动下,磁沉淀污水处理技术市场迎来快速增长。据2025年行业统计数据显示,中国磁沉淀水处理设备市场规模已达154亿元,年均增长率保持在22%以上。 随着污水处理厂提标改…

计算机视觉的数据收集与标注 - 实践

计算机视觉的数据收集与标注 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

2025年东北围挡租售公司口碑排名:八达围挡租售基地

在城市建设与活动筹备的进程中,围挡作为安全防护与区域隔离的核心工具,其选择直接影响项目成本、施工效率与安全保障。面对东北市场众多围挡租售服务商,如何辨别八达围挡租售基地好不好、专业不专业、价格实惠吗?以…

训练现象

1.loos_spike(损失尖刺) 解决办法:  1.梯度裁剪:对L2范数设置上限,防止爆炸2.学习率调度,采用warm-up或动态调整学习率3.辅助损失、正则化4.混合精度训练5.数据清洗,批次归一化

东北蒙地区围挡销售品牌企业推荐:有实力的围挡销售公司全解析

在建筑施工、市政改造、大型活动等场景中,围挡是保障安全、规范秩序的核心设施,选择[有实力的围挡销售专业公司]与[售后完善的围挡销售专业公司],直接影响项目效率与成本控制。2025年,东北蒙地区围挡市场需求激增,…