火车MBPO代理Cart-Pole平衡系统
这个例子展示了如何培养一个基于模型的政策优化(MBPO)代理来平衡cart-pole MATLAB®系统建模。MBPO代理的更多信息,请参阅基于模型的政策优化(MBPO)代理。
MBPO代理使用一个环境模型来产生更多的经验在训练基地的代理。在这个例子中,软actor-critic基地的代理商(SAC)代理。
基于模型的build-int MBPO代理是基于政策优化算法[1]。的原始MBPO算法训练一个随机模型。相比之下,这个例子列车确定性模型的一个整体。
下图总结了这个示例中使用的算法。在训练MBPO代理收集实际经验与环境作用的结果。MBPO代理使用这些经验来训练其内部环境模型。然后,它使用这个模型生成的经验没有与实际环境交互最后,MBPO代理使用生成的实际经验和训练囊基地代理经验。
Cart-Pole MATLAB环境
对于这个示例,强化学习环境是极连接到一个unactuated革命联合在一个购物车。车有一个驱动移动关节连接到一个一维无摩擦的轨道。在这种环境下的训练目标是平衡杆通过应用移动关节力量(操作)。
对于这个环境:
向上的平衡摆位置
0
弧度和向下悬挂位置π
弧度。钟摆开始直立初始夹角-0.05弧度和0.05弧度。
力行动信号从代理环境从-10 N N。
来自环境的观察车的位置和速度,摆角和摆角的导数。
这一事件终止如果北极是超过12度从垂直或如果购物车移动超过2.4从原始位置。
+ 0.5提供的奖励每一个时间步长杆保持直立。提供一个额外的奖励基于车之间的距离和原点。-50年应用摆的一个点球。
关于这个模型的更多信息,请参阅负载预定义的控制系统环境。
创建一个预定义的环境界面cart-pole系统。
env = rlPredefinedEnv (“CartPole-Continuous”);
接口有一个连续动作的地方代理可以施加一个力值从-10 N 10 N。
从环境中获得的观察和行动规范的接口。
obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);
解决随机发生器再现性的种子。
rng (0)
创建MBPO代理
MBPO代理决定哪些行动观察使用基地off-policy给代理商。MBPO代理培训基地代理和一个环境模型。环境模型由过渡功能,奖励功能,一个是函数。这个模型是用来创造更多的样品没有与环境互动。这个示例使用以下步骤来构造一个MBPO代理。
定义模范自由off-policy代理。
定义转换模型。
定义奖励模式。
定义完成模型。
建立神经网络环境。
创建MBPO代理。
1。定义模范自由Off-Policy代理
创建一个囊基地代理和一个默认的网络结构。囊剂的更多信息,请参阅软Actor-Critic (SAC)代理。环境一个持续的行动空间,您还可以使用代理DDPG或TD3基地。对于离散环境,您可以使用一个代理DQN基地。
agentOpts = rlSACAgentOptions;agentOpts。MiniBatchSize = 256;initOpts = rlAgentInitializationOptions (NumHiddenUnit = 64);baseagent = rlSACAgent (obsInfo actInfo、initOpts agentOpts);baseagent.AgentOptions.ActorOptimizerOptions。LearnRate = 1的军医;baseagent.AgentOptions.CriticOptimizerOptions (1)。LearnRate = 1的军医;baseagent.AgentOptions.CriticOptimizerOptions (2)。LearnRate = 1的军医;baseagent.AgentOptions。NumGradientStepsPerUpdate = 5;
2。定义转换模型
建模环境,MBPO代理火车一个或多个转换模型。有效地模拟一个环境,你必须考虑两种不确定性:统计的不确定性和建模不确定性。随机转换函数可以模型统计的不确定性比确定性转换函数。在这个例子中,因为cart-pole环境是确定的,你用确定性转换功能。
很难有一个完美的模型,一个训练有素的模型通常有建模不确定性。一个常见的方法来克服建模不确定性是使用多个转换模型。原MBPO纸使用七个模型[1]。对于这个示例,降低计算成本,你用三个模型。MBPO代理使用所有三个过渡模型生成的经验。下图显示了一个过渡模型生成样本没有与环境互动。在这个图中,模型生成两个轨迹地平线= 2。
创建三个确定的转换功能。为此,创建一个深层神经网络使用createDeterministicTransitionNetwork
helper函数。然后,使用神经网络来创建一个rlContinuousDeterministicTransitionFunction
对象。当创建一个转换函数对象时,您必须指定操作和观察输入/输出神经网络的名称。
net1 = createDeterministicTransitionNetwork (4,1);transitionFcn = rlContinuousDeterministicTransitionFunction (net1,…obsInfo,…actInfo,…ObservationInputNames =“状态”,…ActionInputNames =“行动”,…NextObservationOutputNames =“nextObservation”);net2 = createDeterministicTransitionNetwork (4,1);transitionFcn2 = rlContinuousDeterministicTransitionFunction (net2,…obsInfo,…actInfo,…ObservationInputNames =“状态”,…ActionInputNames =“行动”,…NextObservationOutputNames =“nextObservation”);net3 = createDeterministicTransitionNetwork (4,1);transitionFcn3 = rlContinuousDeterministicTransitionFunction (net3,…obsInfo,…actInfo,…ObservationInputNames =“状态”,…ActionInputNames =“行动”,…NextObservationOutputNames =“nextObservation”);
3所示。定义奖励模型
MBPO代理还包含一个奖励对环境模型。如果你知道一个真实的回报函数,您可以指定它使用自定义函数。在这个例子中,真实回报函数中定义cartPoleRewardFunction
helper函数。使用这个奖励函数集useGroundTruthReward
来真正的
。
你也可以指定一个神经元网络奖励函数MBPO代理可以训练。在这个示例中,您可以使用这样一个奖励函数通过设置useGroundTruthReward
来假
。奖励的深层神经网络函数中定义createRewardNetworkActionNextObs
helper函数。定义一个使用神经网络完成功能,创建一个rlContinuousDeterministicRewardFunction
对象。
useGroundTruthReward = true;如果useGroundTruthReward rewardFcn = @cartPoleRewardFunction;其他的%这个神经网络使用行为和下观察作为输入。rewardnet = createRewardNetworkActionNextObs (4,1);rewardFcn = rlContinuousDeterministicRewardFunction (rewardnet,…obsInfo,…actInfo,…ActionInputNames =“行动”,…NextObservationInputNames =“nextState”);结束
4所示。定义了模型
MBPO代理还包含一个完成模型计算的终止信号环境。如果你知道一个真实终止信号,您可以指定它使用自定义函数。在这个例子中,日渐终止信号的定义cartPoleIsDoneFunction
helper函数。使用这个奖励函数集useGroundTruthIsDone
来真正的
。
你也可以指定一个神经元网络进行函数MBPO代理可以训练。在这个示例中,您可以使用这样一个通过设置完成功能useGroundTruthIsDone
来假
。完成的深层神经网络函数中定义createIsDoneNetwork
helper函数。定义一个使用神经网络完成功能,创建一个rlIsDoneFunction
对象。
useGroundTruthIsDone = true;如果useGroundTruthIsDone isdoneFcn = @cartPoleIsDoneFunction;其他的%这下obesrvation作为输入神经网络只使用。isdoneNet = createIsDoneNetwork (4);isdoneFcn = rlIsDoneFunction (isdoneNet,…obsInfo,…actInfo,…NextObservationInputNames =“nextState”);结束
5。建立神经网络环境
定义一个神经网络环境使用的过渡,奖励,完成功能。为此,创建一个rlNeuralNetworkEnvironment
对象。
generativeEnv = rlNeuralNetworkEnvironment (obsInfo actInfo,…[transitionFcn, transitionFcn2 transitionFcn3], rewardFcn isdoneFcn);%重置模型环境。重置(generativeEnv);
6。创建MBPO代理
定义一个MBPO代理使用基本off-policy剂和环境模型。要做到这一点,首先创建一个MBPO代理的选择对象。
MBPOAgentOpts = rlMBPOAgentOptions;
为训练环境模型指定选项。火车模型1时代每一集的开头和使用15 mini-batches大小256。
MBPOAgentOpts。NumEpochForTrainingModel = 1;MBPOAgentOpts。NumMiniBatches = 15;MBPOAgentOpts。MiniBatchSize = 256;
指定模型经验缓冲区的大小。
MBPOAgentOpts。ModelExperienceBufferLength = 60000;
指定实际的比率和囊剂生成的经验用来训练基地。对于本例,20%的样本来自真正的缓冲和80%的样本来自模型经验缓冲区。
MBPOAgentOpts。RealSampleRatio = 0.2;
指定的选项生成样本使用环境模型。
产生20000轨迹在每一个时代的开始。
使用一个
分段
转出地平线时间表,这就增加了地平线长度逐渐. .增加地平线长度每100时代。
使用一个初始层1的长度。
使用最大层长度的3。
MBPOAgentOpts.ModelRolloutOptions。NumRollout = 20000;MBPOAgentOpts.ModelRolloutOptions。HorizonUpdateSchedule =“分段”;MBPOAgentOpts.ModelRolloutOptions。HorizonUpdateFrequency = 100;MBPOAgentOpts.ModelRolloutOptions。地平线= 1;MBPOAgentOpts.ModelRolloutOptions。HorizonMax = 3;
指定优化器选择训练模式的过渡。使用相同的优化器选择所有三个过渡模型。
transitionOptimizerOptions1 = rlOptimizerOptions (…LearnRate = 1的军医,…GradientThreshold = 1.0);transitionOptimizerOptions2 = rlOptimizerOptions (…LearnRate = 1的军医,…GradientThreshold = 1.0);transitionOptimizerOptions3 = rlOptimizerOptions (…LearnRate = 1的军医,…GradientThreshold = 1.0);MBPOAgentOpts。TransitionOptimizerOptions =…[transitionOptimizerOptions1,…transitionOptimizerOptions2,…transitionOptimizerOptions3];
指定优化器选择培训奖励模式。如果你使用一个定制的真实回报函数,代理忽略这些选项。
rewardOptimizerOptions = rlOptimizerOptions (…LearnRate = 1的军医,…GradientThreshold = 1.0);MBPOAgentOpts。RewardOptimizerOptions = RewardOptimizerOptions;
指定优化器选择培训完成模型。如果你使用一个定制的真实回报函数,代理忽略这些选项。
isdoneOptimizerOptions = rlOptimizerOptions (…LearnRate = 1的军医,…GradientThreshold = 1.0);MBPOAgentOpts。IsDoneOptimizerOptions = IsDoneOptimizerOptions;
创建MBPO代理,代理指定基地,环境模型和选择。
代理= rlMBPOAgent (baseagent generativeEnv MBPOAgentOpts);
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项。
运行每个训练集最多500集,每集持续最多500时间步。
在事件管理器对话框显示培训进展(设置
情节
在命令行选项)和禁用显示(设置详细的
选项假
)。保存剂当平均集奖励大于或等于470。
停止训练当代理接收到平均累积奖励大于470 / 5连续集。在这一点上,代理可以平衡钟摆在直立位置。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions (…MaxEpisodes = 500,…MaxStepsPerEpisode = 500,…Verbose = false,…情节=“训练进步”,…StopTrainingCriteria =“AverageReward”,…StopTrainingValue = 470,…ScoreAveragingWindowLength = 5,…SaveAgentCriteria =“EpisodeReward”,…SaveAgentValue = 470,…ScoreAveragingWindowLength = 5);
你可以想象cart-pole系统使用情节
函数在训练或模拟。
情节(env)
火车代理使用火车
函数。培训这个代理是一个计算强度的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“MATLABCartpoleMBPO.mat”,“代理”);结束
模拟MBPO代理
验证培训代理的性能,模拟在cart-pole环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。在验证是没有必要在这个例子中探索。因此,在模拟使用确定性行为,设置UseExplorationPolicy
代理属性代理假
。
rng (1)%在sim禁用勘探代理。UseExplorationPolicy = false;simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);totalReward_MBPO =总和(experience.Reward)
totalReward_MBPO = 460.7233
而不是模拟MBPO代理,你可以模拟基本的代理。如果你使用相同的随机种子,得到同样的结果作为模拟MBPO代理。
rng(1)经验= sim (env、agent.BaseAgent simOptions);
totalReward_SAC =总和(experience.Reward)
totalReward_SAC = 460.7233
评估学习环境模型
验证训练环境过渡模型,您可以检查他们是否能够正确预测下一个观察。类似地,您可以验证奖励和完成功能的性能。基于环境模型的预测,使用一步
函数。
收集数据为学习模型评估
rng (1)%在sim创建期间启用勘探%不同数据模型评估代理。UseExplorationPolicy = true;simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);
对于本例,评估第一个过渡模型的性能。
agent.EnvModel。TransitionModelNum = 1;
为每个模拟步骤,提取实际的观察。
numSteps =长度(experience.Reward.Data);nextObsPrediction = 0 (4 1 numSteps);numSteps rewardPrediction = 0 (1);numSteps isdonePrediction = 0 (1);nextObsGroundTruth = 0 (4 1 numSteps);numSteps rewardGroundTruth = 0 (1);numSteps isdoneGroundTruth = 0 (1);为stepCt = 1: numSteps%提取下观察,实际的奖励,完成价值。nextObsGroundTruth (:,:, stepCt) =…experience.Observation.CartPoleStates.Data (:,:, stepCt + 1);rewardGroundTruth (:, stepCt) = experience.Reward.Data (stepCt);isdoneGroundTruth (:, stepCt) = experience.IsDone.Data (stepCt);%预测下一个观察,奖励,完成价值%使用环境模型。奥林匹克广播服务公司= experience.Observation.CartPoleStates.Data (:,:, stepCt);agent.EnvModel。观察={奥林匹克广播服务公司};action = experience.Action.CartPoleAction.Data (:,:, stepCt);[nextObs,奖励,结束]=步骤(agent.EnvModel{行动});nextObsPrediction (:,:, stepCt) = nextObs {1};rewardPrediction (:, stepCt) =奖励;isdonePrediction (:, stepCt) =结束;结束
情节地面真理和预测每个维度的观察。
图为obsDimensionIndex = 1:4次要情节(2,2,obsDimensionIndex)情节(重塑(nextObsGroundTruth (obsDimensionIndex,:,:), 1, numSteps))在情节(重塑(nextObsPrediction (obsDimensionIndex,:,:), 1, numSteps))从包含(“步骤”)ylabel (“观察”)如果obsDimensionIndex = = 1传说(“GroundTruth”,“预测”,“位置”,“西南”)结束结束
引用
[1]1月,迈克尔,贾斯汀傅,马文张,谢尔盖·莱文。“当你信任模型:基于模型的政策优化。“在学报的第33届国际会议上神经信息处理系统,12519 - 30。1122年。美国纽约红钩:Curran Associates Inc ., 2019年。
另请参阅
功能
对象
rlMBPOAgent
|rlNeuralNetworkEnvironment
|rlMBPOAgentOptions
|rlTrainingOptions
|rlSimulationOptions
|rlSACAgent