在Simulink中训练DDPG控制倒立摆系统

  • 倒立摆的Simscape模型
  • 创建环境接口
  • 创建DDPG智能体
  • 训练智能体
  • DDPG智能体仿真

此示例显示了如何训练深度确定性策略梯度(DDPG)智能体去控制以Simscape™Multibody™建模的倒立摆系统。

matlab 版本 2020b

倒立摆的Simscape模型

此示例的强化学习环境是一根杆,该杆连接到手推车上未操纵的关节上,该关节沿着无摩擦的轨道移动。 训练的目标是使杆立起,而只需花费最小的控制力就不会摔倒。

打开模型

mdl = 'rlCartPoleSimscapeModel';
open_system(mdl)


倒立摆系统是使用Simscape Multibody建模的。


对于该模型:

  1. 向上的平衡杆位置为0弧度,向下的悬挂位置为pi弧度。
  2. 从agent到环境的力作用信号是15到15 N,
  3. 从环境中观察到的是手推车的位置和速度,以及杆角的正弦、余弦和导数。
  4. 如果车从原来的位置移动超过3.5米,则该episode终止。
  5. 在每个时间步提供的奖励rtr_trt​为

其中:

  1. θt\theta_tθt​是从杆的直立位置开始的位移角。
  2. xtx_txt​是从小车中心位置移动的位置。
  3. ut−1u_{t-1}ut−1​是前一个时间步骤的控制工作。
  4. B是一个标志(1或0),指示车是否越界。

有关此模型的更多信息,请参见加载预定义的Simulink环境。

创建环境接口

为杆创建预定义的环境接口。

env = rlPredefinedEnv('CartPoleSimscapeModel-Continuous')


该接口具有连续的作用空间,智能体可以在其中向极点施加从–15到15 N的可能扭矩值。

从环境接口获取观察和动作信息。

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

以秒为单位指定模拟时间Tf和智能体采样时间Ts。

Ts = 0.02;
Tf = 25;

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

rng(0)

创建DDPG智能体

DDPG智能体使用评论者价值函数表示法,根据给定的观察和操作来估算长期奖励。 要创建评论者,首先要创建一个具有两个输入(状态和动作)和一个输出的深度神经网络。 动作路径的输入大小为[1 1 1],因为智能体可以将动作作为一个力值施加到环境。 有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示。

statePath = [featureInputLayer(numObservations,'Normalization','none','Name','observation')fullyConnectedLayer(128,'Name','CriticStateFC1')reluLayer('Name','CriticRelu1')fullyConnectedLayer(200,'Name','CriticStateFC2')];actionPath = [featureInputLayer(1,'Normalization','none','Name','action')fullyConnectedLayer(200,'Name','CriticActionFC1','BiasLearnRateFactor',0)];commonPath = [additionLayer(2,'Name','add')reluLayer('Name','CriticCommonRelu')fullyConnectedLayer(1,'Name','CriticOutput')];criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);criticNetwork = connectLayers(criticNetwork,'CriticStateFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC1','add/in2');

查看评论者网络配置。

figure
plot(criticNetwork)


使用rlRepresentationOptions指定评论者表示的选项。

criticOptions = rlRepresentationOptions('LearnRate',1e-03,'GradientThreshold',1);

使用指定的深度神经网络和选项创建评论者表示。 您还必须指定评论者的操作和观察信息,这些信息已经从环境界面中获得。 有关更多信息,请参见rlQValueRepresentation。

critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...'Observation',{'observation'},'Action',{'action'},criticOptions);

DDPG智能体使用写得者表示来决定在给定的观察结果下要采取哪种操作。 要创建行动者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

以类似于评论者的方式构造行动者。 有关更多信息,请参见rlDeterministicActorRepresentation。

actorNetwork = [featureInputLayer(numObservations,'Normalization','none','Name','observation')fullyConnectedLayer(128,'Name','ActorFC1')reluLayer('Name','ActorRelu1')fullyConnectedLayer(200,'Name','ActorFC2')reluLayer('Name','ActorRelu2')fullyConnectedLayer(1,'Name','ActorFC3')tanhLayer('Name','ActorTanh1')scalingLayer('Name','ActorScaling','Scale',max(actInfo.UpperLimit))];actorOptions = rlRepresentationOptions('LearnRate',5e-04,'GradientThreshold',1);actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,...'Observation',{'observation'},'Action',{'ActorScaling'},actorOptions);

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

agentOptions = rlDDPGAgentOptions(...'SampleTime',Ts,...'TargetSmoothFactor',1e-3,...'ExperienceBufferLength',1e6,...'MiniBatchSize',128);
agentOptions.NoiseOptions.Variance = 0.4;
agentOptions.NoiseOptions.VarianceDecayRate = 1e-5;

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

agent = rlDDPGAgent(actor,critic,agentOptions);

训练智能体

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

  1. 每个训练episode 最多运行2000个episode ,每个episode 最多持续ceil(Tf / Ts)个时间步长。

  2. 在“Episode Manager”对话框中显示训练进度(设置“Plots ”选项)并禁用命令行显示(将“Verbose ”选项设置为false)。

  3. 当智能体连续五个episode 获得的平均累积奖励大于–400时,请停止训练。 在这一点上,智能体可以用最少的控制力量快速地将立杆平衡在直立位置。

  4. 为累积奖励大于–400的每个episode 保存智能体的副本。

有关更多信息,请参见rlTrainingOptions。

maxepisodes = 2000;
maxsteps = ceil(Tf/Ts);
trainingOptions = rlTrainingOptions(...'MaxEpisodes',maxepisodes,...'MaxStepsPerEpisode',maxsteps,...'ScoreAveragingWindowLength',5,...'Verbose',false,...'Plots','training-progress',...'StopTrainingCriteria','AverageReward',...'StopTrainingValue',-400,...'SaveAgentCriteria','EpisodeReward',...'SaveAgentValue',-400);

使用训练功能训练智能体。 培训此智能体过程需要大量的计算,并且需要几个小时才能完成。 为了节省运行本示例的时间,请通过将doTraining设置为false来加载预训练的智能体。 要自己训练智能体,请将doTraining设置为true

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

DDPG智能体仿真

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

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

bdclose(mdl)

MATLAB强化学习实战(七) 在Simulink中训练DDPG控制倒立摆系统相关推荐

  1. MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统

    使用并行计算训练倒立摆系统 行动者的并行训练 创建Cart-Pole MATLAB环境接口 创建AC智能体 并行训练选项 训练智能体 AC智能体仿真 参考文献 此示例显示了如何通过使用异步并行训练来训 ...

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

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

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

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

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

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

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

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

  6. matlab强化学习算例理/菜鸟理解1——双足机器人行走算例

    目录 matlab双足机器人强化学习算例介绍 强化学习的一些基础理解 菜鸟对一些名词的理解 matlab强化学习库介绍 双足机器人算例逻辑盘点 如何改写算例做自己的强化学习. %写在前面: 本人大四狗 ...

  7. 【MATLAB强化学习工具箱】学习笔记--actor网络和critic网络的结果放在哪里?

    原算例见 [MATLAB强化学习工具箱]学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent_bear_miao的博客- ...

  8. matlab强化学习DDPG算法改编/菜鸟理解2——航天器三轴姿态稳定器学习算例

    目录 写在前面 matlab强化学习库简介 航天器三轴姿态稳定器介绍 算法流程 代码/simulink 结果展示与分析 一些心得 写在最后 写在前面 %写在前面: 本人大四狗一名,不是计算机专业,所以 ...

  9. 【经典书籍】深度强化学习实战(附最新PDF和源代码下载)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 深度强化学习可以说是人工智能领域现在最热门的方向,吸引了众多该领域优秀的科学家去发 ...

最新文章

  1. excel甘特图模板_类似这样的甘特图是怎么做的?
  2. 决策树——学习笔记(一)
  3. Error: Already running on PID 31356 (or pid file 'log/gunicorn.pid' is stale)
  4. [LeetCode] 547. Friend Circles Java
  5. C++算法四:顺序查找
  6. Git学习总结(19)——Git代码回滚总结
  7. 赛思互动:Salesforce包括哪些产品和服务
  8. python post 参数_python爬虫——requests库使用代理
  9. Xcode 9以下(xip) 官方直接下载地址(离线下载)
  10. 计算机网络复习训练题
  11. ES文件浏览器ftp文件共享,通过电脑访问手机文件夹传输文件
  12. G. I love Codeforces
  13. windows SVN server
  14. SpringBoot 官方强烈推荐,连接池,太快了!
  15. 华为瘦终端ct5200 linux版,华为瘦终端 ct5100怎么恢复出厂设置
  16. 矢量叉乘能否反求矢量
  17. 关于直播网站的搭建--第一步:获取直播源
  18. 明白的糊涂账 各家单反测光系统全解析
  19. 【python爬虫专项(10)】去哪儿网景点数据采集
  20. 搭乘地铁|轻轨规律(^-^) [大三四八九月实习]

热门文章

  1. Reactor And Gev 详解 通俗易懂
  2. MATLAB实现中频正交采样(数字下变频)
  3. LeetCode 热题 HOT — 字母异位词分组
  4. 台式电脑共享笔记本电脑的无线网络
  5. FDI-01-基于PCA的TEP故障检测
  6. postman批量运行和参数化
  7. 1109: 方块消除 blocks
  8. MetaAI的融合怪:BlenderBot
  9. 过年表情包 || 一个月后就能用啦
  10. 蚂蚁资深技术专家刘晓莹十年支付宝回忆录