数学建模:MATLAB强化学习

news2025/3/13 0:47:19

一、强化学习简述

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

步骤:

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

二、用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.coloradmin.cn/o/2314008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始的操作系统手搓教程45——实现exec

目录 建立抽象 实现加载 实现sys_execv !!!提示:因为实现问题没有测试。所以更像是笔记! exec 函数的作用是用新的可执行文件替换当前进程的程序体。具体来说,exec 会将当前正在运行的用户进程的进程体&…

STM32之硬件SPI

SPI1和SPI2挂载的总线不一样,SPI1的时钟频率的比SPI2的大一倍。 核心部分是移位寄存器,数据一位一位的移到MOSI,同理,移位寄存器也一位一位的从MISO接收数据,LSBFIRST控制位控制高位先行还是低位先行。移位寄存器左边交叉箭头是ST…

【网络协议安全】任务10:三层交换机配置

CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI(开放系统互连)模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能,还能实现路由功能,提供更为灵活的网…

依托大数据实验室建设,培育创新人才:数据科学与大数据技术专业人才培养实践

近年来,得益于全球大数据产业政策扶持与数字经济蓬勃发展,大数据市场呈现迅猛增长态势。国家层面相继出台《“数据要素”三年行动计划(2024—2026年)》《数字中国建设整体布局规划》等政策,旨在激发产业创新活力&#…

如何使用 CSS 实现黑色遮罩效果

最近在工作中遇见了一个需求,鼠标经过盒子出现黑色遮罩,遮罩中有相关的编辑按钮,点击以后,进行图片上传并且展示,由于当时没有思路,思考了好久,所以在完成开发后进行总结,使用的技术…

ChatGPT课件分享(37页PPT)

资料解读:ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来,人工智能技术的迅猛发展引发了全球范围内的广泛关注,尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展,彻底改变了人机交互的方式。本文将详细解…

无人机扩频技术对比!

一、技术原理与核心差异 FHSS(跳频扩频) 核心原理:通过伪随机序列控制载波频率在多个频点上快速跳变,收发双方需同步跳频序列。信号在某一时刻仅占用窄带频谱,但整体覆盖宽频带。 技术特点: 抗干扰…

C语言_数据结构总结4:不带头结点的单链表

纯C语言代码,不涉及C 0. 结点结构 typedef int ElemType; typedef struct LNode { ElemType data; //数据域 struct LNode* next; //指针域 }LNode, * LinkList; 1. 初始化 不带头结点的初始化,即只需将头指针初始化为NULL即可 void Init…

几种常见的虚拟环境工具(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…

liunx磁盘挂载和jar启动命令

一、磁盘挂载 查看历史磁盘挂载命令:history | grep mount 查看所有挂载硬盘命令:mount 磁盘挂载命令:mount -t cifs -o usernamesh**,passwordP!ss**** //192.168.1.2/attachmentfilesShare2.2/pdfCert /home/nybzg/cnfai1/pdfCert 二、j…

gbase8s rss集群通信流程

什么是rss RSS是一种将数据从主服务器复制到备服务器的方法 实例级别的复制 (所有启用日志记录功能的数据库) 基于逻辑日志的复制技术,需要传输大量的逻辑日志,数据库需启用日志模式 通过网络持续将数据复制到备节点 如果主服务器发生故障,那么备用服务…

如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户。 随时近来 AI 大模型的火热,越来越多的客户,问…

【AI智能体报告】开源AI助手的革命:OpenManus深度使用报告

一、引言:当开源智能体走进生活 2025年3月,MetaGPT团队用一场"开源闪电战"改写了AI Agent的竞争格局。面对商业产品Manus高达10万元的邀请码炒作,他们仅用3小时便推出开源替代品OpenManus,首日即登顶GitHub趋势榜。 …

DeepSeek+Maxkb+Ollama+Docker搭建一个AI问答系统

DeepSeekMaxkbOllamaDocker搭建一个AI问答系统 文章目录 DeepSeekMaxkbOllamaDocker搭建一个AI问答系统前言一、创建同一内网的网络二、拉取两个镜像三、启动Ollama以及调试Maxkb4.Maxkb创建一个应用并建立知识库5、应用效果总结 前言 我觉得只要是使用Docker技术,…