强化学习matlab⼯具箱应⽤
1. 如何使⽤强化学习强⼤的⼯具箱编写⾃⼰的⼯程
众所周知reinforcement learning Toolbax for matlab是⾮常强⼤的,⼩编刚开始使⽤时⾛了很多弯路,有试过⼀层⼀层的去调⽤的函数等等,看过底层的同学就知道⽤类做的集成,如果你的⾯向对象基础知识很牢固⼤概能看懂这其中的奥秘。⼩编研究下去的结果就是快吐了,其实没有必要这样。接下来想说下如何快速上⼿编写强化学习的代码。⼩编以⽤DQN训练Cart-Pole为例:
2.了解和编程步骤
2.1环境的编写
强化学习的主体之⼀是环境,MATLAB的reinforcement learning toolbax中环境有三种编写⽅式:
1. 预定义的模型(是MATLAB内部集成好的模型,可以拿来学习下强化学习)
2. M函数编写
3. simlink仿真模型
其中后两种主要是为⽤户⾃定义的环境服务的,⼩编主要分享第⼆种,请详细阅读
2.2 算法部分
这个部分只需要调⽤⼯具箱即可,参考案例为按照此链接的内容进⾏编写,此时⽂中的env = rlPredefinedEnv("CartPole-Discrete")可以⽤上部分⾃⼰编写的环境代替。然后开始训练即可。
提醒⼤家⼀下现在matlab版本更新,如果你⽤的2019版本的很有可能好多函数不可⽤,但是19版本的函数2020⼀定可以⽤。
代码
clc;
clear;
close all;
ObservationInfo =rlNumericSpec([41]);
ObservationInfo.Name ='CartPole States';
ObservationInfo.Description ='x, dx, theta, dtheta';
%%%%动作状态空间
ActionInfo =rlFiniteSetSpec([-1010]);
ActionInfo.Name ='CartPole Action';
%%创建环境
env =rlFunctionEnv(ObservationInfo,ActionInfo,'myStepFunction','myResetFunction');
%%%%创建DQN
statePath =[
imageInputLayer([411],'Normalization','none','Name','state')
tool工具箱fullyConnectedLayer(24,'Name','CriticStateFC1')
reluLayer('Name','CriticRelu1')
fullyConnectedLayer(24,'Name','CriticStateFC2')];
actionPath =[
imageInputLayer([111],'Normalization','none','Name','action')
fullyConnectedLayer(24,'Name','CriticActionFC1')];
commonPath =[
additionLayer(2,'Name','add')
reluLayer('Name','CriticCommonRelu')
fullyConnectedLayer(1,'Name','output')];
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)
%%%
criticOpts =rlRepresentationOptions('LearnRate',0.01,'GradientThreshold',1);
obsInfo =getObservationInfo(env);
actInfo =getActionInfo(env);
critic =rlRepresentation(criticNetwork,obsInfo,actInfo,'Observation',{'state'},'Action',{'action'},criticOpts);
agentOpts =rlDQNAgentOptions(...
'UseDoubleDQN',false,...
'TargetUpdateMethod',"periodic",...
'TargetUpdateFrequency',4,...
'ExperienceBufferLength',100000,...
'DiscountFactor',0.99,...
'MiniBatchSize',256);
agent =rlDQNAgent(critic,agentOpts);
trainOpts =rlTrainingOptions(...
'MaxEpisodes',1000,...
'MaxStepsPerEpisode',500,...
'Verbose',false,...
'Plots','training-progress',...
'StopTrainingCriteria','AverageReward',...
'StopTrainingValue',480);
doTraining =true;
if doTraining
% Train the agent.
trainingStats =train(agent,env,trainOpts);
else
% Load pretrained agent for the example.
load('MATLABCartpoleDQN.mat','agent');
end
其中myStepFunction、myResetFunction函数参考链接⼀。弄懂上⽂中的两个链接的内容离编写⼀个⾃⼰的强化学习程序不远了。⽤深度强化学习解决迷宫问题后续会发布。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论