在MDP环境下训练强化学习智能体

2023-10-30 18:20

本文主要是介绍在MDP环境下训练强化学习智能体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.创建MDP环境

2.创建Q-learning智能体

3. 训练Q-learning智能体

4.验证Q-learning结果


        本文示例展示了如何训练Q-learning智能体来解决一般的马尔可夫决策过程(MDP)环境。有关这些智能体的更多信息,请参阅Q-Learning智能体。

MDP环境如下图:

其中:

  1. 每一个圆圈代表一个状态。
  2. 每个状态可以决定上升或下降。
  3. 智能体从状态1开始。
  4. 智能体收到的奖励等于图中每个转换的值。
  5. 训练目标是获得最大的累积奖励。

1.创建MDP环境

创建具有8个状态和2个动作(上和下)的MDP环境。

MDP = createMDP(8,["up";"down"]);

为了对上图中的转换建模,需要修改MDP的状态转移矩阵和奖励矩阵。默认情况下,这些矩阵包含零。

为MDP指定状态转移矩阵和奖励矩阵。例如,在以下命令中:

  • 前两行指定通过采取动作1(“向上”)从状态1转移到状态2并且奖励+3。
  • 接下来的两行指定了通过采取动作2(“向下”)从状态1转移到状态3,并且奖励+1。
MDP.T(1,2,1) = 1;
MDP.R(1,2,1) = 3;
MDP.T(1,3,2) = 1;
MDP.R(1,3,2) = 1;

类似地,为图中剩余的规则指定状态转换和奖励。

% State 2 transition and reward
MDP.T(2,4,1) = 1;
MDP.R(2,4,1) = 2;
MDP.T(2,5,2) = 1;
MDP.R(2,5,2) = 1;
% State 3 transition and reward
MDP.T(3,5,1) = 1;
MDP.R(3,5,1) = 2;
MDP.T(3,6,2) = 1;
MDP.R(3,6,2) = 4;
% State 4 transition and reward
MDP.T(4,7,1) = 1;
MDP.R(4,7,1) = 3;
MDP.T(4,8,2) = 1;
MDP.R(4,8,2) = 2;
% State 5 transition and reward
MDP.T(5,7,1) = 1;
MDP.R(5,7,1) = 1;
MDP.T(5,8,2) = 1;
MDP.R(5,8,2) = 9;
% State 6 transition and reward
MDP.T(6,7,1) = 1;
MDP.R(6,7,1) = 5;
MDP.T(6,8,2) = 1;
MDP.R(6,8,2) = 1;
% State 7 transition and reward
MDP.T(7,7,1) = 1;
MDP.R(7,7,1) = 0;
MDP.T(7,7,2) = 1;
MDP.R(7,7,2) = 0;
% State 8 transition and reward
MDP.T(8,8,1) = 1;
MDP.R(8,8,1) = 0;
MDP.T(8,8,2) = 1;
MDP.R(8,8,2) = 0;

指定状态“s7”和"s8"作为终止状态。

MDP.TerminalStates = ["s7";"s8"];

为这个过程模型创建强化学习MDP环境:

env = rlMDPEnv(MDP);

要指定智能体的初始状态始终为状态1,请指定一个返回初始智能体状态的重置函数。这个函数在每一次训练的开始被调用。创建一个匿名函数句柄,将初始状态设置为1。

env.ResetFcn = @() 1;

为了再现结果固定随机生成器种子:

rng(0)

2.创建Q-learning智能体

为了创建Q-learning智能体,首先使用MDP环境中的观察值和动作创建一个Q表,并设置学习率为1。

obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
qTable = rlTable(obsInfo, actInfo);
qFunction = rlQValueFunction(qTable, obsInfo, actInfo);
qOptions = rlOptimizerOptions(LearnRate=1);

接下来,使用这个表创建一个Q-learning智能体,配置贪心探索算法。

agentOpts = rlQAgentOptions;
agentOpts.DiscountFactor = 1;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.9;
agentOpts.EpsilonGreedyExploration.EpsilonDecay = 0.01;
agentOpts.CriticOptimizerOptions = qOptions;
qAgent = rlQAgent(qFunction,agentOpts);

3. 训练Q-learning智能体

为了训练智能体,首先指定训练选项,对于这个例子,使用如下选项:

  • 训练最多500次,每次最多持续50个时间步。
  • 当智能体在连续30次中获得的平均累计奖励大于10时,停止训练。
trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes = 500;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 13;
trainOpts.ScoreAveragingWindowLength = 30;

 使用Train函数训练智能体。这可能需要几分钟才能完成。为了节省运行此示例时的时间,通过将doTraining设置为false来加载预训练的智能体。要训练自己的智能体,就将doTraining设置为true。

doTraining = false;if doTraining% Train the agent.trainingStats = train(qAgent,env,trainOpts); %#ok<UNRCH> 
else% Load pretrained agent for the example.load("genericMDPQAgent.mat","qAgent"); 
end

4.验证Q-learning结果

为了验证训练结果,使用sim函数在训练环境中模拟智能体。agent成功找到最优路径,累计奖励为13。

Data = sim(qAgent,env);
cumulativeReward = sum(Data.Reward)

由于折扣因子设置为1,因此训练智能体的Q表中的值与环境的未折现收益相匹配。

QTable = getLearnableParameters(getCritic(qAgent));
QTable{1}

TrueTableValues = [13,12;5,10;11,9;3,2;1,9;5,1;0,0;0,0]


 

这篇关于在MDP环境下训练强化学习智能体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309751

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和