数学建模:MATLAB强化学习

ops/2025/3/13 8:45:44/

一、强化学习简述

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

步骤:

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

二、用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.ppmy.cn/ops/165374.html

相关文章

数字隔离器,如何提升储能系统的安全与效能?

随着全球对光伏、风电等可再生能源需求的持续增长,在全球能源转型的浪潮中,储能技术凭借着可平衡能源供需、提高能源利用效率等优势,已成为实现 “双碳” 目标的核心支撑。据国家能源局公布数据显示,截至2024年底,我国…

java八股文之消息中间件

<在Java中使用消息中间件时&#xff0c;通常会选择一些流行的开源解决方案&#xff0c;如Apache Kafka、RabbitMQ、ActiveMQ等。这些消息中间件提供了高效、可靠的消息传递机制&#xff0c;广泛应用于企业级应用中。下面我将介绍如何在Java中使用Apache Kafka进行消息传递的…

RK3568平台(音频篇)AD82584F功放

一.AD82584 功放芯片简介 AD82584 是 Analog Devices 公司推出的一款高性能、多通道音频功率放大器芯片。 它专为汽车音响系统、家庭影院和其他需要高质量音频放大的应用而设计。以下是关于 AD82584 的详细介绍。 Analog Devices 官方网站:https://www.analog.com AD82584…

【基础知识】回头看Maven基础

版本日期修订人描述V1.02025/3/7nick huang创建文档 背景 项目过程中&#xff0c;对于Maven的pom.xml文件&#xff0c;很多时候&#xff0c;我通过各种参考、仿写&#xff0c;最终做出想要的效果。 但实际心里有些迷糊&#xff0c;不清楚具体哪个基础的配置所实现的效果。 今…

数据结构与算法效率分析:时间复杂度与空间复杂度详解(C语言)

1. 算法效率 1.1 如何衡量一个算法的好坏&#xff1f; 在计算机程序设计中&#xff0c;衡量算法优劣的核心标准是效率。但效率不仅指运行速度&#xff0c;还需要综合以下因素&#xff1a; 时间因素&#xff1a;算法执行所需时间 空间因素&#xff1a;算法运行占用的内存空间…

QT通过DeepSeek API获取公式正常显示的方法

一.问题描述 QT开发程序连接网络版本DeepSeek API获取的内容可能有大量LaTeX公式,这样直接在QT控件(比如Text Browser)中显示会无法正常显示,本文会给出两种解决方法。 二.QT通过API连接DeepSeek 1.官网注册并申请key DeepSeek官网:https://www.deepseek.com/

C# JObject 快速定位节点值

C# JObject 快速定位节点值 快速获取 JObject 中的某个节点值&#xff0c;可以使用 SelectToken 方法&#xff0c;支持 JSONPath 表达式&#xff0c;非常方便。例如&#xff1a; using Newtonsoft.Json.Linq; using System;class Program {static void Main(){string json &…

Flash Attention 算法简介

Flash Attention 算法简介 Flash Attention&#xff0c;是近几年 MLSys 领域最重要的工作之一。它考虑到 self attention 在 GPU 上计算时的 I/O 特性&#xff0c;通过 tiling 的思想对 self attention 过程中的矩阵乘法、softmax 等操作进行分块处理&#xff0c;使得每个块的…