使用并行计算训练倒立摆系统

  • 行动者的并行训练
  • 创建Cart-Pole MATLAB环境接口
  • 创建AC智能体
  • 并行训练选项
  • 训练智能体
  • AC智能体仿真
  • 参考文献

此示例显示了如何通过使用异步并行训练来训练actor-critic(AC)智能体以平衡在MATLAB®中建模的小车系统。 有关显示如何在不使用并行训练的情况下训练智能体的示例,请参阅训练AC智能体以平衡倒立摆系统。

matlab版本2020b。

行动者的并行训练

当您将并行计算与AC智能体一起使用时,每个工作人员都将从其智能体副本和环境中产生经验。 每隔N个步骤,工作人员就会根据经验计算梯度并将计算出的梯度发送回宿主智能体。 主机智能体如下更新其参数。

  1. 对于异步训练,主机智能体将应用接收到的梯度,而无需等待所有工作人员发送梯度,然后将更新的参数发送回提供梯度的工作人员。 然后,工作人员继续使用更新的参数从其环境中产生经验。

  2. 对于同步训练,主机智能体会等待从所有工作人员接收梯度,并使用这些梯度更新其参数。 然后,主机同时将更新的参数发送给所有工作程序。 然后,所有工作人员将继续使用更新的参数来产生经验。

创建Cart-Pole MATLAB环境接口

为车杆系统创建预定义的环境界面。 有关此环境的更多信息,请参见加载预定义的控制系统环境。

env = rlPredefinedEnv("CartPole-Discrete");
env.PenaltyForFalling = -10;

从环境界面获取观察和动作信息。

obsInfo = getObservationInfo(env);
numObservations = obsInfo.Dimension(1);
actInfo = getActionInfo(env);

固定随机发生器种子的重现性。

rng(0)

创建AC智能体

AC智能体使用评论者价值函数表示法,根据观察和操作来估计长期奖励。 要创建评论者,首先创建一个具有一个输入(观察)和一个输出(状态值)的深度神经网络。 评论者网络的输入大小为4,因为环境提供了4个观察值。 有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示。

criticNetwork = [featureInputLayer(4,'Normalization','none','Name','state')fullyConnectedLayer(32,'Name','CriticStateFC1')reluLayer('Name','CriticRelu1')fullyConnectedLayer(1, 'Name', 'CriticFC')];criticOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);critic = rlValueRepresentation(criticNetwork,obsInfo,'Observation',{'state'},criticOpts);

AC智能体使用行动者表示来决定要采取的行动(给定观察结果)。 要创建行动者,请创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。 actor网络的输出大小为2,因为智能体可以向环境施加2个力值–10和10。

actorNetwork = [featureInputLayer(4,'Normalization','none','Name','state')fullyConnectedLayer(32, 'Name','ActorStateFC1')reluLayer('Name','ActorRelu1')fullyConnectedLayer(2,'Name','action')];actorOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...'Observation',{'state'},actorOpts);

要创建AC智能体,请首先使用rlACAgentOptions指定AC智能体选项。

agentOpts = rlACAgentOptions(...'NumStepsToLookAhead',32,...'EntropyLossWeight',0.01,...'DiscountFactor',0.99);

然后使用指定的行动者表示形式和智能体选项创建智能体。 有关更多信息,请参见rlACAgent。

agent = rlACAgent(actor,critic,agentOpts);

并行训练选项

要训练智能体,请首先指定训练选项。 对于此示例,使用以下选项。

  1. 每次训练最多进行1000个episode,每个episode最多持续500个时间步。

  2. 在“情节管理器”对话框中显示训练进度(设置“Plots ”选项),并禁用命令行显示(设置“Verbose ”选项)。

  3. 当智能体在连续10个episode中获得的平均累积奖励大于500时,请停止训练。 此时,智能体可以使摆锤处于直立位置。

trainOpts = rlTrainingOptions(...'MaxEpisodes',1000,...'MaxStepsPerEpisode', 500,...'Verbose',false,...'Plots','training-progress',...'StopTrainingCriteria','AverageReward',...'StopTrainingValue',500,...'ScoreAveragingWindowLength',10);

您可以使用绘图功能在训练或仿真过程中可视化倒立摆系统。

plot(env)


要使用并行计算训练智能体,请指定以下训练选项。

  1. 将UseParallel选项设置为True。

  2. 通过将ParallelizationOptions.Mode选项设置为“ async”,以异步方式并行训练智能体。

  3. 每隔32步,每个工作人员就会根据经验计算梯度并将其发送给主机。

  4. AC智能体要求工作人员将“梯度”发送给主机。

  5. AC智能体要求“ StepsUntilDataIsSent”等于agentOptions.NumStepsToLookAhead。

trainOpts.UseParallel = true;
trainOpts.ParallelizationOptions.Mode = "async";
trainOpts.ParallelizationOptions.DataToSendFromWorkers = "gradients";
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;

训练智能体

使用训练函数训练智能体。 训练智能体是一个计算密集型过程,需要几分钟才能完成。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的智能体。 要自己训练智能体,请将doTraining设置为true。 由于异步并行训练中的随机性,您可以从以下训练图中获得不同的训练结果。 该图显示了对六名工人进行训练的结果。

doTraining = false;if doTraining    % Train the agent.trainingStats = train(agent,env,trainOpts);
else% Load the pretrained agent for the example.load('MATLABCartpoleParAC.mat','agent');
end

AC智能体仿真

您可以在仿真过程中使用绘图功能来可视化倒立摆系统。

plot(env)

要验证训练后的智能体的表现,请在倒立摆环境中对其进行仿真。 有关智能体模拟的更多信息,请参见rlSimulationOptions和sim。

simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);

totalReward = sum(experience.Reward)

totalReward = 500

参考文献

[1] Mnih, Volodymyr, Adrià Puigdomènech Badia, Mehdi Mirza, Alex Graves, Timothy P. Lillicrap, Tim Harley, David Silver, and Koray Kavukcuoglu. ‘Asynchronous Methods for Deep Reinforcement Learning’. ArXiv:1602.01783 [Cs], 16 June 2016. https://arxiv.org/abs/1602.01783.

MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统相关推荐

  1. MATLAB强化学习实战(一) 强化学习智能体训练总览

    强化学习智能体训练总览 简介 训练算法 情节管理器 保存候选智能体 并行计算 GPU加速 验证训练后的策略 环境验证 简介 创建环境和强化学习智能体后,您可以使用训练功能在环境中训练智能体. 要配置您 ...

  2. MATLAB强化学习实战(七) 在Simulink中训练DDPG控制倒立摆系统

    在Simulink中训练DDPG控制倒立摆系统 倒立摆的Simscape模型 创建环境接口 创建DDPG智能体 训练智能体 DDPG智能体仿真 此示例显示了如何训练深度确定性策略梯度(DDPG)智能体 ...

  3. MATLAB强化学习实战(十三) 使用强化学习智能体训练Biped机器人行走

    使用强化学习智能体训练Biped机器人行走 两足机器人模型 创建环境接口 选择和创建训练智能体 DDPG Agent TD3 Agent 指定训练选项和训练智能体 仿真训练过的智能体 比较智能体性能 ...

  4. MATLAB强化学习实战(十二) 创建自定义强化学习算法的智能体

    创建自定义强化学习算法的智能体 创建环境 定义策略 自定义智能体类 智能体属性 构造函数 相关函数 可选功能 创建自定义智能体 训练自定义智能体 自定义智能体仿真 本示例说明如何为您自己的自定义强化学 ...

  5. MATLAB强化学习工具箱(十一)训练DDPG智能体控制飞行机器人

    训练DDPG智能体控制飞行器 飞行机器人模型 创建集成模型 动作与观察 创建环境接口 重置函数 创建DDPG智能体 训练智能体 DDPG智能体仿真 本示例说明如何训练深度确定性策略梯度(DDPG)智能 ...

  6. MATLAB强化学习实战(八) 训练多个智能体执行协作任务

    训练多个智能体执行协作任务 创建环境 创建智能体 训练智能体 智能体仿真 本示例说明如何在Simulink®环境上设置多智能体训练. 在该示例中,您训练了两个智能体以协同执行移动对象的任务. 2020 ...

  7. 【第 07 章 基于主成分分析的人脸二维码识别MATLAB深度学习实战案例】

    基于主成分分析的人脸二维码识别MATLAB深度学习实战案例 人脸库 全套文件资料目录下载链接–>传送门 本文全文源码下载[链接–>传送门] 如下分析: 主文件 function varar ...

  8. 【强化学习实战】基于gym和tensorflow的强化学习算法实现

    [新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...

  9. 【强化学习实战-04】DQN和Double DQN保姆级教程(2):以MountainCar-v0

    [强化学习实战-04]DQN和Double DQN保姆级教程(2):以MountainCar-v0 实战:用Double DQN求解MountainCar问题 MountainCar问题详解 Moun ...

最新文章

  1. android 自定义弹窗,Android自定义弹窗
  2. matlab对像素邻域操作,matlab图像的邻域操作与块操作
  3. MOSS站点的FORM认证修改小结
  4. Elasticsearch SQL
  5. 不通人情世故的 飞秋官方下载 短处中
  6. Silverlight访问Web Service报System.Security.SecurityException: 安全性错误的处理
  7. 练习--第一次课(运算if while 字符编码)
  8. (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
  9. 学会计为什么要学计算机基础,会计专业学生为什么要学数据库
  10. volte的sip信令流程_VoLTE主叫信令流程详解(有抓包截图详细介绍)
  11. 【Java】# Java对图片进行base64编解码
  12. 大数据分析流程步骤都有哪些
  13. flutter设置签名
  14. Hexo主题next中添加天气插件(心知天气)
  15. 计算基因上外显子碱基覆盖度(exon coverage depth):Samtool工具使用
  16. parsel安装老是失败_adb安装应用失败,错误码
  17. iphone更新运营商服务器,iphone更新运营商配置文件操作方法
  18. Manifest merger failed with multiple errors问题解决
  19. spring boot 虚拟路径url中文无法访问
  20. Python编程(0-1)——Eric6界面初识

热门文章

  1. ThreadPoolExecutor参数说明
  2. 嘉兴碧桂园云栖里土拍价格_奥山深耕嘉兴,再下一城!以总价5.73亿元竞得王店镇宅地...
  3. 消息队列技术的介绍和原理(MQ)
  4. 什么是反射?为什么使用反射?
  5. 五千字长文为你揭秘滴滴共享出行派单算法原理(干货)
  6. 心智模式:心智模式的更多资料
  7. 以太坊Go-ethereum源码分析之启动流程
  8. Android商城项目开源
  9. 好的代码结构是什么样的?
  10. c#如何实现RTU远程数据采集功能及RTU在水利工程中的运用