数学建模: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模型创建强化学习环境,接收智能体的动作作为输入,输出相应的观察值、奖励和完成信号。

相关文章:
数学建模:MATLAB强化学习
一、强化学习简述 强化学习是一种通过与环境交互,学习状态到行为的映射关系,以获得最大积累期望回报的方法。包含环境,动作和奖励三部分,本质是智能体通过与环境的交互,使得其作出的动作所得到的决策得到的总的奖励达…...
从0开始的操作系统手搓教程45——实现exec
目录 建立抽象 实现加载 实现sys_execv !!!提示:因为实现问题没有测试。所以更像是笔记! exec 函数的作用是用新的可执行文件替换当前进程的程序体。具体来说,exec 会将当前正在运行的用户进程的进程体&…...
深入理解 Linux 中的 -h 选项:让命令输出更“人性化”
在 Linux 系统中,命令行工具是系统管理员和普通用户最常用的交互方式之一。然而,命令行输出往往充满了技术性术语和数字,对于初学者或非技术用户来说可能显得晦涩难懂。幸运的是,许多 Linux 命令都提供了一个非常实用的选项&#…...
23. 观察者模式
原文地址: 观察者模式 更多内容请关注:智想天开 1. 观察者模式简介 观察者模式(Observer Pattern)是一种行为型设计模式,用于建立对象之间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都…...
sql语句分页的关键字是?
在 SQL 中,分页通常是通过限制查询结果的数量并指定从哪一行开始获取数据来实现的。不同的数据库系统使用不同的分页关键字。 以下是常见数据库系统的分页关键字: MySQL / PostgreSQL / SQLite 使用 LIMIT 和 OFFSET 来进行分页: LIMIT 限…...
golang从入门到做牛马:第十四篇-Go语言结构体:数据的“定制容器”
在Go语言中,结构体是一种非常强大的数据结构,它允许你将不同类型的数据组合在一起,形成一个逻辑上的“记录”。结构体非常适合用来表示复杂的数据类型,比如一个图书馆的书籍记录、一个用户的信息等。接下来,让我们一起深入了解Go语言中的结构体。 什么是结构体:数据的“组…...
C#控制台应用程序学习——3.11
一、整型数字计算 如果我们想执行以下程序:程序提示用户输入一个数字并输出 num 20 的结果,我们的思维应该是这样的: using System;public class Class1 {public static void Main(string[] args){Console.WriteLine("Enter the first…...
【商城实战(13)】购物车价格与数量的奥秘
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
STM32之硬件SPI
SPI1和SPI2挂载的总线不一样,SPI1的时钟频率的比SPI2的大一倍。 核心部分是移位寄存器,数据一位一位的移到MOSI,同理,移位寄存器也一位一位的从MISO接收数据,LSBFIRST控制位控制高位先行还是低位先行。移位寄存器左边交叉箭头是ST…...
【Go每日一练】构建一个简单的用户信息管理系统
👻创作者:丶重明 👻创作时间:2025年3月7日 👻擅长领域:运维 目录 1.😶🌫️题目:简单的用户信息管理系统2.😶🌫️代码开发3.😶&a…...
【力扣】2629. 复合函数——函数组合
【力扣】2629. 复合函数——函数组合 文章目录 【力扣】2629. 复合函数——函数组合题目解决方案概述方法 1:使用迭代的函数组合概述算法实现复杂度分析 方法 2:使用 Array.reduceRight() 的函数组合概述算法实现复杂度分析 附加考虑处理 this 上下文使用…...
【网络协议安全】任务10:三层交换机配置
CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI(开放系统互连)模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能,还能实现路由功能,提供更为灵活的网…...
Linux 服务器安全配置:密码复杂度与登录超时设置
Linux服务器安全配置指南:密码复杂度与登录超时设置 一、密码复杂度设置 通过PAM模块pam_cracklib.so实现密码强度策略,配置文件: system-auth该文件主要用于定义系统范围内的认证策略,涵盖了用户登录、su 命令切换用户、sudo 权限提升等多种认证场景。当用户尝试进行系…...
依托大数据实验室建设,培育创新人才:数据科学与大数据技术专业人才培养实践
近年来,得益于全球大数据产业政策扶持与数字经济蓬勃发展,大数据市场呈现迅猛增长态势。国家层面相继出台《“数据要素”三年行动计划(2024—2026年)》《数字中国建设整体布局规划》等政策,旨在激发产业创新活力&#…...
如何使用 CSS 实现黑色遮罩效果
最近在工作中遇见了一个需求,鼠标经过盒子出现黑色遮罩,遮罩中有相关的编辑按钮,点击以后,进行图片上传并且展示,由于当时没有思路,思考了好久,所以在完成开发后进行总结,使用的技术…...
ChatGPT课件分享(37页PPT)
资料解读:ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来,人工智能技术的迅猛发展引发了全球范围内的广泛关注,尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展,彻底改变了人机交互的方式。本文将详细解…...
开源模型时代的 AI 开发革命:Dify 技术深度解析
开源模型时代的AI开发革命:Dify技术深度解析 引言:AI开发的开源新纪元 在生成式AI技术突飞猛进的2025年,开源模型正成为推动行业创新的核心力量。据统计,全球超过80%的AI开发者正在使用开源模型构建应用,这一趋势不仅…...
无人机扩频技术对比!
一、技术原理与核心差异 FHSS(跳频扩频) 核心原理:通过伪随机序列控制载波频率在多个频点上快速跳变,收发双方需同步跳频序列。信号在某一时刻仅占用窄带频谱,但整体覆盖宽频带。 技术特点: 抗干扰…...
C语言_数据结构总结4:不带头结点的单链表
纯C语言代码,不涉及C 0. 结点结构 typedef int ElemType; typedef struct LNode { ElemType data; //数据域 struct LNode* next; //指针域 }LNode, * LinkList; 1. 初始化 不带头结点的初始化,即只需将头指针初始化为NULL即可 void Init…...
Zama TFHE-rs v1.0 发布
1. 引言 2025年2月,Zama 发布了 TFHE-rs v1.0,这是 TFHE-rs 库的第一个稳定版本。这标志着一个重要的里程碑,稳定了 x86 CPU 后端的高级 API,同时确保了向后兼容性。——即,现在可以依赖 TFHE-rs API,而不…...
AArch64架构及其编译器
—1.关于AArch64架构 AArch64是ARMv8-A架构的64位执行状态,支持高性能计算和大内存地址空间。它广泛应用于现代处理器,如苹果的A系列芯片、高通的Snapdragon系列,以及服务器和嵌入式设备。 • 编译器:可以使用GCC、Clang等编译器编…...
【ISP】对于ISP的关键算法补充
本篇是对于ISP的关键算法进行补充说明, 后面我们将开始逐渐深入讨论ISP的pipeline 1. 非局部均值(NLM, Non-Local Means) 原理 非局部均值(NLM)是一种基于 块匹配(Patch Matching) 的去噪算法…...
几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结
在 PyCharm 中创建虚拟环境是一个非常直接的过程,可以帮助你管理项目依赖,确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置: 在 Windows/Linux 上,可以通过点击…...
Ubuntu安装问题汇总
参考文章: 【Ubuntu常用快捷键总结】 【王道Python常用软件安装指引】 1. 无法连接虚拟设备 sat0:0 【问题】:出现下图所示弹框。 【问题解决】: 点击 “否” 。 点击左上角的 “虚拟机” → “设置…” → “CD/DVD (SATA)” ,…...
Ceph(1):分布式存储技术简介
1 分布式存储技术简介 1.1 分布式存储系统的特性 (1)可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性: 节点…...
从0开始的操作系统手搓教程43——实现一个简单的shell
目录 添加 read 系统调用,获取键盘输入 :sys_read putchar和clear 上班:实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用,获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…...
【Spring】基础/体系结构/核心模块
概述: Spring 是另一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架。 Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect…...
01 音视频知识学习(视频)
图像基础概念 ◼像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称px,所以“像素”有“图像元素” 之意。 ◼ 分辨率:是指图像…...
vue3自定义hooks遇到的问题
问题 写了一个输入查询参数和url返回加载中状态、请求方法、接口返回列表的hooks,出现的结果是只有请求方法有效,加载状态无效,接口返回了数据,页面却不显示数据。 代码如下 只展示部分关键代码 import { ref, toRefs, toRef, o…...
用Python和Docker-py打造高效容器化应用管理利器
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器化技术的发展,Docker已成为现代化应用部署的核心工具。然而,手动管理容器在规模化场景下效率低下。本文深入探讨如何利用Python结…...
