此示例显示如何训练策略梯度(PG)代理以平衡Matlab®建模的推车杆系统。有关PG代理商的更多信息,请参阅政策梯度代理人。
有关用基线列举PG代理的示例,请参阅用基线列车PG代理控制双积分系统。
用于该示例的增强学习环境是连接到推车上的unactuat接头的杆,其沿着无摩擦轨道移动。培训目标是使摆锤直立直立而不会摔倒。
对于这个环境:
向上平衡的摆锤位置是0.
弧度和向下悬挂的位置是PI.
弧度。
摆锤直立,初始角度在-0.05和0.05弧度之间。
来自代理到环境的力动作信号为-10至10 n。
来自环境的观察是推车,摆角和摆角衍生物的位置和速度。
如果杆从垂直或撞车从原始位置移动超过2.4米,杆终止终止。
每次步骤都提供了+1的奖励,杆保持直立。当摆锤下降时,应用了-5的惩罚。
有关此模型的更多信息,请参阅负载预定义控制系统环境。
为摆锤创建预定义的环境界面。
Env = Rlpredefinedenv(“cartpole - 离散”)
Env = CartpoledIscreteAcreacteAdeaction:重力:1 9.8000 Masscart:1 MassPole:0.1000
该接口具有离散的动作空间,其中代理可以将两个可能的力值中的一个应用于推车,-10或10 n。
从环境界面获取观察和动作信息。
ObsInfo = GetobservationInfo(ENV);numobservations = Obsinfo.dimension(1);Actinfo = GetActionInfo(ENV);
修复随机发生器种子以进行再现性。
RNG(0)
PG代理决定使用演员表示来考虑观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。Actor网络具有两个输出,其对应于可能的动作的数量。有关创建深度神经网络策略表示的更多信息,请参阅创建策略和值函数表示。
ActorNetWork = [FeatureInputLayer(NumObServations,'正常化'那'没有任何'那'名称'那'状态')全连接列(2,'名称'那'fc')softmaxlayer('名称'那'actionprob')];
指定使用的Actor表示的选项rlrepresentationOptions.
。
Actoropts = RlRepresentationOptions('学习',1e-2,'gradientthreshold',1);
使用指定的深神经网络和选项创建演员表示。您还必须指定从环境界面获取的批评者的操作和观察信息。有关更多信息,请参阅rlstochastorrepresentation
。
Actor = rlstochastOrtorrepresentation(Actornetwork,Obsinfo,Actinfo,'观察',{'状态'},actoropts);
使用指定的Actor表示和默认代理选项创建代理。有关更多信息,请参阅rlpgagent.
。
代理= rlpgagent(演员);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项。
为大多数1000个剧集运行每个训练集,每个集发作持续到最多200个时间步长。
在Episode Manager对话框中显示培训进度(设置绘图
选项)并禁用命令行显示(设置verb
选择错误的
)。
当代理商收到超过195的平均累积奖励超过100个连续发作时停止培训。此时,代理可以在直立位置平衡摆锤。
有关更多信息,请参阅rltringOptions.
。
训练= rltrainingOptions(......'maxepisodes',1000,......'maxstepperepisode',200,......'verbose', 错误的,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那'AverageReward'那......'stoptriningvalue',195,......'scoreaveragingwindowlength',100);
您可以使用使用的可视化推车系统系统阴谋
培训或模拟期间的功能。
情节(env)
使用该代理商培训火车
功能。培训此代理是一个计算密集型进程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形
至错误的
。训练代理人,套装用圆形
至真的
。
dotraining = false;如果用圆形%训练代理人。Trainstats =火车(代理,env,训练);别的%加载预磨料的代理。加载('matlabcartpolepg.mat'那'代理人');结尾
要验证培训的代理的性能,请在推车杆环境中模拟它。有关代理模拟的更多信息,请参阅RlsimulationOptions.
和SIM
。即使仿真时间增加到500步,代理也可以平衡推车杆系统。
simoptions = rlsimulation选项('maxsteps',500);体验= SIM(ENV,Agent,SimOptions);
TotalReward = Sum(经验.Rward)
TotalReward = 500.