数学建模:MATLAB强化学习

一、强化学习简述

强化学习是一种通过与环境交互,学习状态到行为的映射关系,以获得最大积累期望回报的方法。包含环境,动作和奖励三部分,本质是智能体通过与环境的交互,使得其作出的动作所得到的决策得到的总的奖励达到最大。强化学习主要是智能体与环境的交互过程。

步骤:

智能体先观察环境的状态。状态是智能体周围的位置布局或者智能体与周围物体的距离,通常用向量表示。
基于当前观察到的状态,智能体选择一定策略决定采取的动作,根据每个动作的价值分配一个选择的概率,价值越高的动作被选中的概率越大,所有动作都有可能会被选择。
智能体执行动作后,观察环境对其动作的响应,接收新的状态和相应的奖励,奖励是标量值,用于评估所选动作的好坏。
基于新获得的状态和奖励,智能体采用一定的价值函数更新其对当前策略的价值评估:时序差分学习、蒙特卡洛方法、动态规划方法。
重复上面步骤改变策略直至达到停止条件。

二、用DQN方法创建智能体并实现智能体训练与环境的交互

1.简述

深度Q网络(DQN)是一种结合了Q学习深度神经网络的强化学习算法,用于解决具有高维状态空间的问题。DQN通过使用一个神经网络来近似动作价值函数(Q值),从而能够处理复杂的状态输入,并为每个可能的动作估计其预期收益。使得智能体能够在未知环境中通过试错学习到最优策略。

 

2.代码

clear
clc%%
%创建强化学习环境%使用预定义环境直接创建一个离散动作空间的倒立摆环境
env = rlPredefinedEnv('CartPole-Discrete');  %查看环境的状态信息
%getObservationInfo函数返回环境中状态观测值的相关信息,包括每个状态变量的名称、描述、低值、高值以及维度
obsInfo = getObservationInfo(env);            %查看环境的动作信息
%getActionInfo函数返回环境中所有可能动作的相关信息
actInfo = getActionInfo(env);                 %rng函数控制随机数生成器的状态
%设置为0,表示每次运行时都会使用相同的随机数序列,确保了结果的一致性和可重复性
rng(0)                                                 %%
%创建智能体% 创建神经网络结构
%定义神经网络的超参数
layers =[                                      %特征输入层,大小为状态观测值的维度。%使用featureInputLayer函数创建一个输入层%obsInfo.Dimension(1)参数表示环境状态空间的维度featureInputLayer(obsInfo.Dimension(1))   %fullyConnectedLayer函数创建一个全连接层,传入参数为神经元数量%创建两个全连接层有助于在保持重要信息的同时降低模型复杂度fullyConnectedLayer(200)                  fullyConnectedLayer(50)                   %用reluLayer函数创建一个ReLU激活层,引入了非线性,对输入数据进行非线性处理reluLayer                                  %创建全连接层为输出层,神经元数量等于环境中可执行的动作数,通过这个层预测每个动作的价值%length(actInfo.Elements)返回环境中所有可能动作的数量。fullyConnectedLayer(length(actInfo.Elements))
]; %dlnetwork函数将之前定义的layers数组转换为一个可被MATLAB中的深度学习工具箱所识别和使用深度学习网络对象,进而进行训练操作
net = dlnetwork(layers);                      %用rlVectorQValueFunction函数创建一个Q值函数作为评估器
%传入参数net表示已创建好的神经网络;obsInfo和actInfo分别表示状态信息和动作信息
%该Q值函数用于评估在给定状态下采取每个可能动作的价值
critic = rlVectorQValueFunction(net, obsInfo, actInfo);%用rlOptimizerOptions函数设置Q值函数的优化参数
%传入参数LearnRate表示学习率;GradientThreshold表示梯度阈值
%学习率控制模型参数更新速度;梯度阈值有助于稳定训练过程
crtic_Opts = rlOptimizerOptions(LearnRate=1e-3, GradientThreshold=1);%用rlDQNAgentOptions函数设置DQN智能体的训练选项
%SampleTime0表示每个时间步的时间间隔
%MiniBatchSize表示每次抽取训练样本的数量
%UseDoubleDQN表示不使用双重DQN
agentoption = rlDQNAgentOptions( ...SampleTime = 0.1, ...                       Critic = crtic_Opts, ...     MiniBatchSize = 256, ...                   UseDoubleDQN = false);                      %用rlDQNAgent函数创建DQN智能体
agent = rlDQNAgent(critic, agentoption);       %%
%配置训练选项%MaxEpisodes表示智能体与环境交互的最大次数
%MaxStepsPerEpisode表示每次与环境交互智能体执行的最大操作次数
%"StopTrainingCriteria","AverageReward"表示停止训练的标准是基于平均奖励
%"SaveAgentCriteria","AverageReward"表示当达到某个平均奖励时保存智能体
trainOpts = rlTrainingOptions( ..."MaxEpisodes", 200, ...                     "MaxStepsPerEpisode", 400, ...               "StopTrainingCriteria", "AverageReward", ... "StopTrainingValue", 400, ...                                                    "SaveAgentCriteria", "AverageReward", ...   "SaveAgentValue", 100);                      %%
%绘图,使推杆系统可视化
plot(env)                                       %%
%训练智能体
%用train函数实现智能体与环境之间的交互训练过程
%在训练过程中,智能体学习如何通过最大化累积奖励来选择最佳动作
training_Stats = train(agent, env, trainOpts);     

3.运行结果

浅蓝色折线表示每轮智能体与环境交互的奖励

深蓝色折线表示当前所有交互轮次的平均奖励

三、用simulink模型创建环境

Simulink是一个基于MATLAB的图形化编程环境,用于建模、仿真和分析多域动态系统,由一系列模块组成,这些模块代表了系统的各个组成部分。

用simulink模型创建强化学习环境,接收智能体的动作作为输入,输出相应的观察值、奖励和完成信号。

 

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

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

相关文章

C++:二分习题

1. 借教室 503. 借教室 - AcWing题库 在大学期间,经常需要租借教室。 大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。 教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。  面对海…

二进制安装指定版本的MariaDBv10.11.6

一、官网下载mariadb安装包 Download MariaDB Server - MariaDB.org 找到对应的版本 下载安装包后上传到服务器这里不再赘述。 二、安装二进制包 1、解压安装包 2、查看安装包内的安装提示文档根据提示文档进行安装 # 解压安装包 tar xf mariadb-10.11.6-linux-systemd-x8…

2025-03-12 Python深度学习1——安装Anaconda与PyTorch库

文章目录 1 配置 Anaconda1.1 下载1.2 安装1.3 配置环境变量1.4 检查安装 2 安装 PyTorch 库2.1 创建 DL 环境2.2 安装/升级 CUDA2.3 配置环境变量2.4 安装 Pytorch 库方法一(不稳定)方法二(推荐) 2.5 检查安装 3 Pycharm Communi…

Redis-缓存穿透击穿雪崩

1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中,先查缓存,缓存没有数据,就会请求到数据库上,导致数据库压力剧增。 解决方法: 给不存在的key加上空值,防止每次都会请求到数据库。布隆过滤器…

学习springboot(Bean 注册,Bean 扫描)

Bean 扫描 可以浏览下面的博客链接 :spring 学习 (注解)-CSDN博客 在学习spring 注解时,我们使用 Component ,Service,Controller等 这样的注解,将目标类信息,传递给IOC容器,为其创…

使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图

以下是使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图: graph TDA[开始移植] --> B[代码兼容性检查]B --> C[检查系统调用差异\nfork/exec -> CreateProcess]B --> D[检查文件路径格式\n/ vs \\]B --> E[检查依赖库兼容性\nPOSIX vs …

网络信息安全专业(710207)网络安全攻防实训室建设方案

一、引言 随着信息技术的飞速发展,网络空间安全已成为国家安全的重要组成部分,对网络信息安全专业人才的需求日益增长。为满足网络信息安全专业(专业代码710207)的教学需求,提升学生在网络安全攻防领域的实践能力&…

赶紧白P这款免费神器!

现在,很多视频剪辑软件都开始收费了,真正免费又好用的软件真的越来越难找了。 今天,我给大家推荐一款非常小巧的视频编辑工具,目前完全免费,功能却非常丰富。 咔咔一通剪 视频编辑工具 这款软件真的超级轻巧&#xff…

Qt 初识1.1

目录 QLineEdit QPushButton connet: Qt命名规范 Qt窗口坐标系 QLineEdit ​ ​ QPushButton ​ 给按钮的点击操作上关联一个处理函数。 connet: connet的作用是连接信号和槽,是QObject类中的一个静态函数, ​ Qt命…

Linux内核机制之epoll详解

目录 简介: 一、IO 多路复用介绍 1、select,poll,epoll 引入 2、select,poll,epoll 区别分析 3、epoll 原理 3.1 epoll 相关函数介绍 1)epoll_create 2)epoll_ctl 3)epoll_…

以 ArcGIS Pro 为笔,绘就水墨地图画卷

一、引言 水墨画,作为中国传统绘画艺术的瑰宝,以其独特的韵味和表现力,在艺术领域占据着重要地位。它通过水与墨的交融,展现出山水之间的灵动与韵味。 而将这种艺术形式与现代地理信息系统(GIS)技术相结合…

JAVA:利用 Jsoup 轻松解析和操作 HTML 的技术指南

1、简述 在现代 Java 开发中,处理 HTML 数据是一项常见需求,无论是抓取网页数据、解析 HTML 文档,还是操作 DOM 树,Jsoup 都是一个强大的工具。它是一个基于 Java 的 HTML 解析库,支持从 URL、文件或字符串中解析 HTM…

个人记录的一个插件,Unity-RuntimeMonitor

没有什么干货,仅仅是个人的记录 基于GUI做的一个工具:好处就是Monitor必须,Unity天然支持实时的Monitor;唯一不好处,就是默认字体太小了,layout居中,居右也是要自行设计的。 (下面文字是有一点点写错,但意思和功能就很牛逼了;并不是都按2 x shift,而是一个 shift 添…

云服务器安装宝塔面板部署

单机部署(前端vue项目) 服务器安装宝塔面板 连接到服务器 使用 SSH 连接到你的服务器: ssh rootip安装宝塔面板 运行以下命令来安装宝塔面板: yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安…

Java数据结构第二十期:解构排序算法的艺术与科学(二)

专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素,存放在…

【MapSet】哈希表

目录 1. 搜索树 1.1 概念 1.2 操作-查找 1.3 操作-插入 1.4 操作-删除(难点) 1.5 性能分析 1.6 和java类集的关系 2. 搜索 2.1 概念及场景 2.2 模型 3. Map的使用 3.1 关于Map的说明 3.2 关于Map.Entry的说明 3.3 Map的常用方法说明 3.4 …

手写一个Tomcat

Tomcat 是一个广泛使用的开源 Java Servlet 容器,用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂,但通过手写一个简易版的 Tomcat,我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat,并深…

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim (设置 Git 的默认编辑器为 Vim)在用户根目录下(~),创建一个.git_commit_msg文件,然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

亚信安全发布第七期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件121起,与上周相比,勒索事件数量大幅下降,仍需注意防范。从整体上看Clop是影响最严重的勒索家族;本周Ransomhub和Akira也是活动频繁的两个恶意家族,需要注意防范。本周&…

React基础之项目实战

规范的项目结构 安装scss npm install sass -D 安装Ant Design组件库 内置了一些常用的组件 npm install antd --save 路由基础配置 npm i react-router-dom 路由基本入口 import Layout from "../page/Layout"; import Login from "../page/Login"; impor…