在Matlab 上使用 Reinforcement learning

在Matlab 上使用 Reinforcement learning

环境搭建

在Matlab中安装Deep Learning Toolbox后安装Reinforcement Learning Toolbox

什么是强化学习

强化学习的最终目标是在未知的环境中训练一个agent,这个agent接受来自环境的observation与reward并对环境输出action,其中的reward用来表示当前动作对任务目标的贡献。
agent由policy和Reinforcement learning algorithm两部分构成.

  • policy部分相当于闭环控制系统中的控制器。
  • reinforcement learning algorithm部分基于observation, action, reward对policy的参数进行调节。其目标是找到一个最优的policy最大化累计reward。

在Matlab使用reinforcement learning入门

直立小车环境模拟

在Matlab 上使用 Reinforcement learning
对于环境:

  • 直立状态角度为0,垂直向下角度为pi
  • 开始状态的初始角度在-0.05~0.05之间
  • 从agent到enviroment的力量信号在-10~10N之间
  • 观察量为:位置,速度,角度和角速度。
  • 如果角度偏差超过12o或者移动距离大于2.4m则终止程序
  • 每当处于直立状态时+1分,每当倒下-5分。

创建预设环境

可以使用rlPredefinedEnv调用Matlab预设的环境。环境中包含了reset和step两个函数,这两个函数描述了环境的功能细节。

env = rlPredefinedEnv("CartPole-Discrete");

env =
CartPoleDiscreteAction with properties:

           	  Gravity: 9.8000
             MassCart: 1
             MassPole: 0.1000
               Length: 0.5000
             MaxForce: 10
                   Ts: 0.0200
ThetaThresholdRadians: 0.2094
           XThreshold: 2.4000
  RewardForNotFalling: 1
    PenaltyForFalling: -5
                State: [4x1 double]
obsInfo = getObservationInfo(env);

obsInfo =
rlNumericSpec with properties:

 LowerLimit: -Inf
 UpperLimit: Inf
       Name: "CartPole States"
Description: "x, dx, theta, dtheta"
  Dimension: [4 1]
   DataType: "double"
actInfo = getActionInfo(env);

rng(0);

创建DQN Agent

接着创建PG Agent,首先需要创建Policy的神经网络结构,该网络结构决定了强化学习的表现的上限, 再使用rlStochasticActorRepresentation对该网络进行representation,接着按默认选项创建PGAgent即可。

dnn = [
	featureInputLayer(obsInfo.Dimension(1),'Normalization','none','Name','state')
	fullyConnectedLayer(24,'Name','CriticStateFC1')
	reluLayer('Name','CriticRelu1')
    	fullyConnectedLayer(24, 'Name','CriticStateFC2')
    	reluLayer('Name','CriticCommonRelu')
	fullyConnectedLayer(length(actInfo.Elements),'Name','output')];

该网络的结构

figure
plot(layerGraph(dnn))

在Matlab 上使用 Reinforcement learning
使用rlRepresentationOptions设定一些评价器参数

criticOpts = rlRepresentationOptions('LearnRate',0.001,'GradientThreshold',1);

创建一个critic

critic = rlQValueRepresentation(dnn,obsInfo,actInfo,'Observation',{'state'},criticOpts);

使用rlDQNAgentOptions设定一些agent参数,并使用rlPGAgent创造一个agent

agentOpts = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...    
    'TargetSmoothFactor',1, ...
    'TargetUpdateFrequency',4, ...   
    'ExperienceBufferLength',100000, ...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',256);
agent = rlDQNAgent(critic,agentOpts);

训练Agent

为了训练agent,首先需要设定一些参数,我们在这里使用下列的参数:

  • 运行一次最多包含 1000 个片段的训练,每个片段最多持续 500 个时间步长。
  • 在Episode Manager dialog box中显示训练过程,禁用命令行显示
  • 当agent平均得分大于480的时候停止训练
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',1000, ...
    'MaxStepsPerEpisode',500, ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',480); 

在训练或者仿真时可以用plot观看。

plot(env)

通过使用train来训练。

doTraining = false;
if doTraining    
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('MATLABCartpoleDQNMulti.mat','agent')
end

在Matlab 上使用 Reinforcement learning

DQN agent仿真

为了验证训练出的agent的性能,将agent在环境中进行仿真。使用rlSimulationOptions和sim函数

simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);

在Matlab 上使用 Reinforcement learning

totalReward = sum(experience.Reward)

totalReward = 500

上一篇:Vue项目中的配置及配置文件


下一篇:go get安装包超时处理