【强化学习】SARAS代码实现
前言
SARAS,假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想,对动作价值矩阵进行更新。
代码实现
import gymnasium as gym
import numpy as npclass sarsa():def __init__(self, states_n, action_n, greedy_e=0.1):self.Q = np.zeros((states_n, action_n)) #动作价值矩阵self.greedy_e = greedy_e #随机探索的概率self.states_n = states_n #环境状态个数self.action_n = action_n #行动状态个数self.gamma=0.9 #价值衰减值self.lr=0.1 #学习率def predict(self, states):action_list=self.Q[states]#先拿出对应的行#再取出对应价值最大的行为,如果有重复则在重复项中随机选取,返回索引action=np.random.choice(np.flatnonzero(action_list==action_list.max()))return actiondef act(self, states):'''由对应环境产生对应的行动@param states: 当前环境@return: 行动动作'''if np.random.uniform() < self.greedy_e:#是否采取随即探索action = np.random.choice(np.arange(self.action_n))#随机探索else:action = self.predict(states) # 根据行动价值矩阵进行预测return actiondef learning(self,state,action,reward,next_state,next_action,does):'''学习更新参数@param state: 环境状态@param action: 采取的行动@param reward: 回报@param next_state: 采取行动后的下一个环境状态@param next_action: 下一个环境状态对应的行为@param does: 游戏是否结束@return:'''current_q=self.Q[state,action] #取出对应的行动价值if does: #查看是否已经完成游戏,完成则直接将当前回报作为下一个行动价值next_q=rewardelse:# 计算当前回报和下一个环境状态和下一个行动对应的价值,加和next_q=reward+self.gamma*self.Q[next_state,next_action]self.Q[state,action]+=self.lr*(next_q-current_q) #时序差分,更新行动价值矩阵def train():env = gym.make("FrozenLake-v1", render_mode="human")#初始化游戏环境obs,info=env.reset()#重置位置agent=sarsa(env.observation_space.n,env.action_space.n)#初始化模型action = agent.act(obs)#预测行为num=0while True:num+=1# 由行为产生回报和下一个环境状态next_obs, reward, done, truncated, info = env.step(action)#预测下一个动作next_action=agent.act(obs)# 更新参数agent.learning(obs,action,reward,next_obs,next_action,done)obs=next_obsaction=next_action# 判断游戏是否结束或者中断,是则重置游戏if done or truncated:obs, info = env.reset()if num % 100 == 0 :env.close()if __name__ == '__main__':train()
相关文章:
【强化学习】SARAS代码实现
前言 SARAS,假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想,对动作价值矩阵进行更新。 代码实现 import gymnasium as gym import numpy as npclass sarsa():def __init__(self, states_n, acti…...
P1019 [NOIP2000 提高组] 单词接龙 刷题笔记
P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路来自 大佬 Chardo 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 匹配 : 将 第一个字符串末尾 和第二个字符串第一个开始匹配 如果 j<i这段走完了 flag还没…...
如何实现WinApp的UI自动化测试?
WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…...
chrome扩展程序开发之在目标页面运行自己的JS
原文地址:https://qdgithub.com/home/index/article/aid/247.html chrome 插件开发的入门介绍,实现利用 chrome 扩展实现在目标网页运行我们的 js 的功能。关于 chrome 扩展的详细内容,可以通过官网了解。 开发工具很简单,记事本…...
NLP项目之语种识别
目录 1. 代码及解读2. 知识点n-grams仅保留最常见的1000个n-grams。意思是n1000 ? 1. 代码及解读 in_f open(data.csv) lines in_f.readlines() in_f.close() dataset [(line.strip()[:-3], line.strip()[-2:]) for line in lines] print(dataset[:5])[(1 december wereld…...
Linux lpr命令教程:如何使用lpr命令打印文件(附案例详解和注意事项)
Linux lpr命令介绍 lpr命令在Unix-like操作系统中用于提交打印任务。如果在命令行中指定了文件名,那么这些文件将被发送到指定的打印机(如果没有指定目的地,则发送到默认目的地)。如果命令行中没有列出文件,lpr将从标…...
浅谈C语言inline关键字
对于C开发者来说,inline是个再熟悉不过的关键字,因为默认的成员函数都是inline,也是常规高校教材中宣扬C的“优势”之一。 但是C语言其实也是支持inline关键字的,而且是很早期的gcc就支持了该关键字。在Linux0.12版本内核代码中也…...
Flink1.17实战教程(第六篇:容错机制)
系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…...
OpenCV实战 -- 维生素药片的检测记数
文章目录 检测记数原图经过操作开始进行消除粘连性--形态学变换总结实现方法1. 读取图片:2. 形态学处理:3. 二值化:4. 提取轮廓:5. 轮廓筛选和计数: 分水岭算法:逐行解释在基于距离变换的分水岭算法中&…...
【AI】注意力机制与深度学习模型
目录 一、注意力机制 二、了解发展历程 2.1 早期萌芽: 2.2 真正意义的注意力机制: 2.3 2015 年及以后: 2.4 自注意力与 Transformer: 2.5 BERT 与预训练模型: 三、基本框架 1. 打分函数(Score Fun…...
HTML5和JS实现新年礼花效果
HTML5和JS实现新年礼花效果 2023兔年再见,2024龙年来临了! 祝愿读者朋友们在2024年里,身体健康,心灵愉悦,梦想成真。 下面是用HTML5和JS实现新年礼花效果: 源码如下: <!DOCTYPE html>…...
【owt-server】一些构建项目梳理
【owt-server】清理日志:owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client...
Linux shell编程学习笔记38:history命令
目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history:显示命令历史列表2.2 history -a:将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c…...
elasticsearch安装教程(超详细)
1.1 创建网络(单点部署) 因为我们还需要部署 kibana 容器,因此需要让 es 和 kibana 容器互联,所有先创建一个网络: docker network create es-net 1.2.加载镜像 采用的版本为 7.12.1 的 elasticsearch;…...
arkts中@Watch监听的使用
概述 Watch用于监听状态变量的变化,当状态变量变化时,Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等(),遵循严格相等规范。当在严格相等为false的情况下,就会触发Watch的…...
【Jmeter】Jmeter基础9-BeanShell介绍
3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中,除了配置元件,其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…...
详解数组的轮转
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...
html 表格 笔记
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第二个页面</title><meta name"language" content"cn"> </head> <body><h2 sytle"width:500px;…...
计算机网络【HTTP 面试题】
HTTP的请求报文结构和响应报文结构 HTTP请求报文主要由请求行、请求头、空行、请求正文(Get请求没有请求正文)4部分组成。 1、请求行 由三部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔;请…...
linux基于用户身份对资源访问进行控制的解析及过程
linux中用户分为三类 1.超级用户(root) 拥有至高无上的权限 2.普通用户 人为创建、权限小,权限受到控制 3.程序用户 运行程序的用户,不是给人使用的,给程序使用的,一般不给登录! 组账…...
独立开发者如何通过taotoken以更低成本实验多种大模型能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何通过Taotoken以更低成本实验多种大模型能力 对于独立开发者或小型工作室而言,在项目原型阶段验证不同大…...
DeepSeek-R1大模型微调实战:从LoRA原理到完整项目部署指南
1. 项目概述:一个面向开发者的开源大模型微调项目最近在开源社区里,一个名为FareedKhan-dev/train-deepseek-r1的项目引起了我的注意。乍一看,这只是一个托管在代码托管平台上的仓库,但如果你像我一样,在过去几年里深度…...
如何快速掌握Avogadro 2:开源分子可视化工具的终极指南
如何快速掌握Avogadro 2:开源分子可视化工具的终极指南 【免费下载链接】avogadrolibs Avogadro libraries provide 3D rendering, visualization, analysis and data processing useful in computational chemistry, molecular modeling, bioinformatics, material…...
简化环境配置:OpenClaw v2.7.1 部署与实操教学(新手适用)
🚀 Windows 极速部署 OpenClaw v2.7.1 教程|5 分钟搭建本地 AI 智能体 在开源 AI 智能体快速普及的当下,OpenClaw(小龙虾)凭借本地运行、零代码操控、全场景自动化能力,成为办公与技术人群的效率工具&…...
Applite:Mac软件管理的图形化革命,告别命令行操作
Applite:Mac软件管理的图形化革命,告别命令行操作 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac软件安装更新而烦恼吗?Applite作…...
低代码平台表单设计器 unione form editor 组件介绍--文件上传
低代码平台表单设计器 unione form editor 组件介绍--文件上传 在企业级低代码表单开发中,文件上传组件是实现“附件提交、资料归档、证据留存”的核心组件,广泛应用于合同上传、简历提交、凭证上传、图片上传等场景。不同于其他输入类组件,文…...
从IR压降到远程采样:大电流PCB供电设计的实战经验与陷阱规避
1. 项目背景与问题浮现几年前,我参与了一个项目,主电源是一个标准的开放式机架电源,需要为一个位于机箱内相对较远的模块提供5V、约20A的直流电。最初的供电路径设计是依靠PCB走线,我们使用了1盎司铜厚的板材。问题很快就出现了&a…...
Firefly:一站式大模型训练工具,从零到一掌握LLM微调
1. 项目概述:一站式大模型训练工具Firefly 如果你正在寻找一个能够让你快速上手,从零开始训练或微调主流大语言模型(LLM)的开源项目,那么Firefly(流萤)绝对值得你花时间深入了解。作为一名在AI…...
从OpenClaw到memU Bot:企业级AI代理的记忆优先架构与实战部署
1. 项目概述:从个人助手到企业级AI代理的跃迁如果你和我一样,是OpenClaw的早期用户,那你一定体验过那种“私人AI管家”带来的便利。它能帮你写邮件、查资料、整理文件,就像一个随时待命的数字伙伴。但当我们尝试在团队内部推广&am…...
终极指南:使用dmg2img免费快速转换苹果DMG镜像文件
终极指南:使用dmg2img免费快速转换苹果DMG镜像文件 【免费下载链接】dmg2img DMG2IMG allows you to convert a (compressed) Apple Disk Images (imported from http://vu1tur.eu.org/dmg2img). Note: the master branch contains imported code, but lacks bugfix…...
