前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab倒立摆强化学习训练

matlab倒立摆强化学习训练

作者头像
万木逢春
发布2019-11-10 15:31:45
1.4K0
发布2019-11-10 15:31:45
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

里使用的学习方法是actor-critic:

Actor(玩家):为了得到尽量高的reward,实现一个函数:输入state,输出action。用神经网络来近似这个函数。目标任务就是如何训练神经网络,让它的表现更好(得更高的reward)。这个网络被称为actor Critic(评委):为了训练actor,需要知道actor的表现到底怎么样,根据表现来决定对神经网络参数的调整。这就要用到强化学习中的“Q-value”、但Q-value也是一个未知的函数,所以也可以用神经网络来近似。这个网络被称为critic。

只有重力的情况是这样的

Actor-Critic的训练: Actor看到游戏目前的state,做出一个action。 Critic根据state和action两者,对actor刚才的表现打一个分数。 Actor依据critic(评委)的打分,调整自己的策略(actor神经网络参数),争取下次做得更好。 Critic根据系统给出的reward(相当于ground truth)和其他评委的打分(critic target)来调整自己的打分策略(critic神经网络参数)。 一开始actor随机表演,critic随机打分。但是由于reward的存在,critic评分越来越准,actor表现越来越好。

ccc

% 获取环境

env = CartPoleEnv;

% 获取可观察的状态

obsInfo = getObservationInfo(env);

% 获取可观察的状态维度

numObservations = obsInfo.Dimension(1);

% 获取可执行的动作

actInfo = getActionInfo(env);

rng(0)

%% 学习网络设置

criticNetwork = [

imageInputLayer([4 1 1],'Normalization','none','Name','state')

fullyConnectedLayer(32,'Name','CriticStateFC1')

reluLayer('Name','CriticRelu1')

fullyConnectedLayer(1, 'Name', 'CriticFC')];

criticOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);

critic = rlRepresentation(criticNetwork,obsInfo,'Observation',{'state'},criticOpts);

%%

actorNetwork = [

imageInputLayer([4 1 1],'Normalization','none','Name','state')

fullyConnectedLayer(32, 'Name','ActorStateFC1')

reluLayer('Name','ActorRelu1')

fullyConnectedLayer(2,'Name','action')];

actorOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);

actor = rlRepresentation(actorNetwork,obsInfo,actInfo,...

'Observation',{'state'},'Action',{'action'},actorOpts);

%%

agentOpts = rlACAgentOptions(...

'NumStepsToLookAhead',32,...

'EntropyLossWeight',0.01,...

'DiscountFactor',0.99);

agent = rlACAgent(actor,critic,agentOpts);

%%

trainOpts = rlTrainingOptions(...

'MaxEpisodes',1000,...

'MaxStepsPerEpisode', 500,...

'Verbose',false,...

'Plots','training-progress',...

'StopTrainingCriteria','AverageReward',...

'StopTrainingValue',444,...

'ScoreAveragingWindowLength',10);

%% 并行学习设置

trainOpts.UseParallel = true;

trainOpts.ParallelizationOptions.Mode = "async";

trainOpts.ParallelizationOptions.DataToSendFromWorkers = "gradients";

trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;

env.show=0;% 关闭图像显示

trainingStats = train(agent,env,trainOpts);

%%

env.show=1;% 打开图像显示

plot(env)

% 运行一次500步

simOptions = rlSimulationOptions('MaxSteps',500);

experience = sim(env,agent,simOptions);

totalReward = sum(experience.Reward);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档