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

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

       本文示例展示了如何训练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]


 

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 决策智能
北大领衔,多智能体强化学习研究登上Nature子刊
北京大学研究团队近日在《Nature》子刊上发布了一篇关于多智能体强化学习(MARL)的论文,提出了一种高效且可扩展的MARL框架,旨在解决大规模网络控制系统中的决策问题。该框架实现了智能体间的局部通信,减少了通信成本与计算复杂度,并在交通、电力及疫情防控等多个真实场景实验中,显著提升了决策性能。论文链接:https://www.nature.com/articles/s42256-024-00879-7。尽管该研究仍存局限,但为MARL的应用提供了新思路。
62 2
|
3月前
|
算法
鬼手操控着你的手机?大模型GUI智能体易遭受环境劫持
【9月更文挑战第27天】近年来,随着人工智能技术的发展,多模态大语言模型(MLLM)在图形用户界面(GUI)中广泛应用,提升了交互体验。然而,最新研究《环境警示:多模态智能体易受环境干扰》指出,这些智能体可能因环境干扰而行为失准。作者通过实验展示了即使是强大模型也会受无关因素影响,导致不可靠或不可预测的行为。研究还证实,通过环境注入攻击可进一步加剧此问题。尽管如此,多模态GUI智能体依然潜力巨大,未来需改进感知能力和算法以增强鲁棒性,解决环境干扰问题。论文详细内容见:https://arxiv.org/abs/2408.02544。
57 8
|
1月前
|
敏捷开发 机器学习/深度学习 数据采集
端到端优化所有能力,字节跳动提出强化学习LLM Agent框架AGILE
【10月更文挑战第23天】字节跳动研究团队提出AGILE框架,通过强化学习优化大型语言模型(LLM)在复杂对话任务中的表现。该框架将LLM作为核心决策模块,结合记忆、工具和专家咨询模块,实现智能体的自我进化。实验结果显示,AGILE智能体在ProductQA和MedMCQA数据集上优于GPT-4。
127 4
|
2月前
|
Python 机器学习/深度学习 人工智能
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
【10月更文挑战第1天】本文通过构建一个简单的强化学习环境,演示了如何创建和训练智能体以完成特定任务。我们使用Python、OpenAI Gym和PyTorch搭建了一个基础的智能体,使其学会在CartPole-v1环境中保持杆子不倒。文中详细介绍了环境设置、神经网络构建及训练过程。此实战案例有助于理解智能体的工作原理及基本训练方法,为更复杂应用奠定基础。首先需安装必要库: ```bash pip install gym torch ``` 接着定义环境并与之交互,实现智能体的训练。通过多个回合的试错学习,智能体逐步优化其策略。这一过程虽从基础做起,但为后续研究提供了良好起点。
176 4
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
|
2月前
|
机器学习/深度学习 人工智能 安全
北大领衔,多智能体强化学习研究登上Nature子刊
【10月更文挑战第1天】近日,北京大学领导的研究团队在《Nature》子刊上发表了一篇关于多智能体强化学习的论文,提出了一种高效且可扩展的框架,解决了大规模网络控制系统中的决策问题。该框架通过局部通信避免了集中式和独立学习的缺点,在交通、电力等领域的实验中展现了卓越性能。然而,其在更复杂系统中的效果及计算复杂度仍需进一步验证。论文链接:https://www.nature.com/articles/s42256-024-00879-7。
49 3
|
4月前
|
人工智能 自然语言处理 算法
可自主进化的Agent?首个端到端智能体符号化训练框架开源了
【8月更文挑战第13天】近年来,AI领域在构建能自主完成复杂任务的智能体方面取得重大突破。这些智能体通常基于大型语言模型,可通过学习适应环境。为简化设计流程,AIWaves Inc.提出智能体符号化学习框架,使智能体能在数据中心模式下自我优化,以推进通向通用人工智能的道路。该框架将智能体视作符号网络,利用提示、工具及其组合方式定义可学习的权重,并采用自然语言模拟反向传播和梯度下降等学习过程,指导智能体的自我改进。实验显示,此框架能有效促进智能体的自主进化。尽管如此,该框架仍面临高质量提示设计及计算资源需求高等挑战。论文详情参见:https://arxiv.org/pdf/2406.18532。
184 58
|
4月前
|
机器学习/深度学习 存储 定位技术
强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学
本文是关于使用Pygame库开发Python贪吃蛇游戏的实战教学,介绍了Pygame的基本使用、窗口初始化、事件处理、键盘控制移动、以及实现游戏逻辑和对象交互的方法。
|
4月前
|
机器学习/深度学习 人工智能 缓存
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
658 0
|
4月前
|
人工智能 物联网 异构计算
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
318 0
|
5月前
|
机器学习/深度学习 算法 Python
强化学习(Reinforcement Learning, RL)** 是一种机器学习技术,其中智能体(Agent)通过与环境(Environment)交互来学习如何执行决策以最大化累积奖励。
强化学习(Reinforcement Learning, RL)** 是一种机器学习技术,其中智能体(Agent)通过与环境(Environment)交互来学习如何执行决策以最大化累积奖励。