尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

强化学习Sarsa求最优策略

强化学习Sarsa求最优策略
📅 发布时间:2026/6/19 19:30:59

理论基础:

注意:

1. 超参数samples的设置:size of q_table = grid_size*grid_size*action_size,每个 Q(s,a) 至少要访问 t= 20~50 次,才能开始收敛,那么需要的总更新次数至少是(q_table)*t,如果每个episode平均走step步,那么sample大小至少为(q_table)*t / step。大概来说,episode 数至少是 Q‑table 大小的 50~200 倍。

2. alpha不能太小,否则学不动,GridWorld 这种小环境alpha取0.05~0.2差不多。但也不能太大,比如0.5就太大了,Q 值会剧烈震荡,策略不稳定。

代码可运行:

''' 区别:1. sarsa是从一个特定的开始状态出发,到达目标状态,只有这条episode是最优的,其他状态则不一定 2. sarsa是迭代式算法,每更新一次action value就要更新一次policy ''' import random import numpy as np from prometheus_client import samples from env import GridWorldEnv from utils import drow_policy class Sarsa(object): def __init__(self, env:GridWorldEnv, gamma=0.9, alpha=0.001, epsilon=0.1, samples=1, start_state=(0,0)): ''' :param env: 定义了网格的基础配置 :param gamma: discount rate :param alpha: learning rate :param epsilon: epsilon greedy更新policy :param samples: 从起点到终点采样的路径数 :param start_state: 起点 ''' self.env = env self.action_space_size = self.env.num_actions # 上下左右原地 self.state_space_size = self.env.num_states self.reward_list = self.env.reward_list self.gamma = gamma self.samples = samples self.alpha = alpha self.epsilon=epsilon self.start_state = self.env.state_id(start_state[0],start_state[1]) self.policy = np.ones((self.state_space_size, self.action_space_size)) / self.action_space_size self.qvalues = np.zeros((self.state_space_size, self.action_space_size)) def solve(self): for i in range(self.samples): s = self.start_state a = np.random.choice(self.action_space_size, p=self.policy[s]) while s not in self.env.terminal: next_s, next_r, _ = self.env.step(s,a) next_a= np.random.choice(self.action_space_size, p=self.policy[next_s]) # 根据Πt(s_t+1)生成a_t+1 # updata q-value for (s_t,a_t) # qt+1(st, at) = qt(st, at) − αt(st, at) [ qt(st, at) − (rt+1 + γqt(st+1, at+1))] td_target=next_r+self.gamma*self.qvalues[next_s][next_a] td_error=td_target-self.qvalues[s][a] # 负号提出去 self.qvalues[s][a]+=self.alpha*td_error # update policy for s_t best_a=np.argmax(self.qvalues[s]) self.policy[s] = self.epsilon / self.action_space_size self.policy[s, best_a] += 1 - self.epsilon s, a = next_s, next_a if __name__ == '__main__': env = GridWorldEnv( size=5, forbidden=[(1, 2), (3, 3)], terminal=[(4, 4)], r_boundary=-1, r_other=-0.04, r_terminal=1, r_forbidden=-1, r_stay=-0.1 ) # 注意samples要大一点,否则每个state被访问到的概率很小 vi=Sarsa(env=env, gamma=0.9, alpha=0.01, epsilon=0.1, samples=5000, start_state=(0,0)) vi.solve() print("\n state value: ") print(vi.qvalues) drow_policy(vi.policy, env)

运行结果:

相关新闻

  • 一文详解Java中Thread、ThreadGroup 和 ThreadLocal<T> 三者的区别和用途
  • Qt定时执行:槽函数并非必须
  • 基于单片机的安全带长度高度拉力监测与自动锁紧控制系统设计

最新新闻

  • 民国老文书老照片别丢!北京记录者商行上门回收民国照片、任命书、毕业证书 - 深鉴新闻
  • FanControl V270终极指南:Windows风扇智能控制与精准优化的完整解决方案
  • Mohist 1.20.1:解决Minecraft服务器Mod与插件兼容性问题的混合架构方案
  • DeepSeek-V4定价真相:显存、框架与提示词如何决定真实成本
  • C语言数学函数库工程实践:从ceil到expm1的精度与性能优化
  • PlantAssistant-管道IDF文件

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号