MATLAB强化学习实战(七) 在Simulink中训练DDPG控制倒立摆系统
在Simulink中训练DDPG控制倒立摆系统
- 倒立摆的Simscape模型
- 创建环境接口
- 创建DDPG智能体
- 训练智能体
- DDPG智能体仿真
此示例显示了如何训练深度确定性策略梯度(DDPG)智能体去控制以Simscape™Multibody™建模的倒立摆系统。
matlab 版本 2020b
倒立摆的Simscape模型
此示例的强化学习环境是一根杆,该杆连接到手推车上未操纵的关节上,该关节沿着无摩擦的轨道移动。 训练的目标是使杆立起,而只需花费最小的控制力就不会摔倒。
打开模型
mdl = 'rlCartPoleSimscapeModel';
open_system(mdl)
倒立摆系统是使用Simscape Multibody建模的。
对于该模型:
- 向上的平衡杆位置为0弧度,向下的悬挂位置为pi弧度。
- 从agent到环境的力作用信号是15到15 N,
- 从环境中观察到的是手推车的位置和速度,以及杆角的正弦、余弦和导数。
- 如果车从原来的位置移动超过3.5米,则该episode终止。
- 在每个时间步提供的奖励rtr_trt为
其中:
- θt\theta_tθt是从杆的直立位置开始的位移角。
- xtx_txt是从小车中心位置移动的位置。
- ut−1u_{t-1}ut−1是前一个时间步骤的控制工作。
- 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);
训练智能体
要训练智能体,请首先指定训练选项。 对于此示例,使用以下选项。
每个训练episode 最多运行2000个episode ,每个episode 最多持续ceil(Tf / Ts)个时间步长。
在“Episode Manager”对话框中显示训练进度(设置“Plots ”选项)并禁用命令行显示(将“Verbose ”选项设置为false)。
当智能体连续五个episode 获得的平均累积奖励大于–400时,请停止训练。 在这一点上,智能体可以用最少的控制力量快速地将立杆平衡在直立位置。
为累积奖励大于–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控制倒立摆系统相关推荐
- MATLAB强化学习实战(二) 使用并行计算训练倒立摆系统
使用并行计算训练倒立摆系统 行动者的并行训练 创建Cart-Pole MATLAB环境接口 创建AC智能体 并行训练选项 训练智能体 AC智能体仿真 参考文献 此示例显示了如何通过使用异步并行训练来训 ...
- MATLAB强化学习实战(一) 强化学习智能体训练总览
强化学习智能体训练总览 简介 训练算法 情节管理器 保存候选智能体 并行计算 GPU加速 验证训练后的策略 环境验证 简介 创建环境和强化学习智能体后,您可以使用训练功能在环境中训练智能体. 要配置您 ...
- MATLAB强化学习实战(十三) 使用强化学习智能体训练Biped机器人行走
使用强化学习智能体训练Biped机器人行走 两足机器人模型 创建环境接口 选择和创建训练智能体 DDPG Agent TD3 Agent 指定训练选项和训练智能体 仿真训练过的智能体 比较智能体性能 ...
- MATLAB强化学习实战(十二) 创建自定义强化学习算法的智能体
创建自定义强化学习算法的智能体 创建环境 定义策略 自定义智能体类 智能体属性 构造函数 相关函数 可选功能 创建自定义智能体 训练自定义智能体 自定义智能体仿真 本示例说明如何为您自己的自定义强化学 ...
- MATLAB强化学习实战(八) 训练多个智能体执行协作任务
训练多个智能体执行协作任务 创建环境 创建智能体 训练智能体 智能体仿真 本示例说明如何在Simulink®环境上设置多智能体训练. 在该示例中,您训练了两个智能体以协同执行移动对象的任务. 2020 ...
- matlab强化学习算例理/菜鸟理解1——双足机器人行走算例
目录 matlab双足机器人强化学习算例介绍 强化学习的一些基础理解 菜鸟对一些名词的理解 matlab强化学习库介绍 双足机器人算例逻辑盘点 如何改写算例做自己的强化学习. %写在前面: 本人大四狗 ...
- 【MATLAB强化学习工具箱】学习笔记--actor网络和critic网络的结果放在哪里?
原算例见 [MATLAB强化学习工具箱]学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent_bear_miao的博客- ...
- matlab强化学习DDPG算法改编/菜鸟理解2——航天器三轴姿态稳定器学习算例
目录 写在前面 matlab强化学习库简介 航天器三轴姿态稳定器介绍 算法流程 代码/simulink 结果展示与分析 一些心得 写在最后 写在前面 %写在前面: 本人大四狗一名,不是计算机专业,所以 ...
- 【经典书籍】深度强化学习实战(附最新PDF和源代码下载)
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 深度强化学习可以说是人工智能领域现在最热门的方向,吸引了众多该领域优秀的科学家去发 ...
最新文章
- excel甘特图模板_类似这样的甘特图是怎么做的?
- 决策树——学习笔记(一)
- Error: Already running on PID 31356 (or pid file 'log/gunicorn.pid' is stale)
- [LeetCode] 547. Friend Circles Java
- C++算法四:顺序查找
- Git学习总结(19)——Git代码回滚总结
- 赛思互动:Salesforce包括哪些产品和服务
- python post 参数_python爬虫——requests库使用代理
- Xcode 9以下(xip) 官方直接下载地址(离线下载)
- 计算机网络复习训练题
- ES文件浏览器ftp文件共享,通过电脑访问手机文件夹传输文件
- G. I love Codeforces
- windows SVN server
- SpringBoot 官方强烈推荐,连接池,太快了!
- 华为瘦终端ct5200 linux版,华为瘦终端 ct5100怎么恢复出厂设置
- 矢量叉乘能否反求矢量
- 关于直播网站的搭建--第一步:获取直播源
- 明白的糊涂账 各家单反测光系统全解析
- 【python爬虫专项(10)】去哪儿网景点数据采集
- 搭乘地铁|轻轨规律(^-^) [大三四八九月实习]