【MATLAB强化学习工具箱】学习笔记--在MDP环境训练强化学习智能体Train Reinforcement Learning Agent in MDP Environment

介绍

MDP是Markov decision process马尔科夫决策过程的缩写。本示例在马尔科夫决策过程中训练一个智能体。

问题定义

MDP = createMDP(8,["up";"down"]);

createMDP函数的用法为:

Syntax

MDP = createMDP(states,actions)

8为states的个数;

“up”、“down”为两个可能的动作;

在createMDP中通过.T.R两个方法构建转移矩阵和奖励矩阵。

 T(s,s',a)=P(s'|s,a)

 r=R(s,s',a)

其中,s为当前状态,s'为下一个状态,a为采取的动作。

所以帮助文档中通过以下方法构建系统转移过程及奖惩。

% State 1 transition and reward
MDP.T(1,2,1) = 1;
MDP.R(1,2,1) = 3;
MDP.T(1,3,2) = 1;
MDP.R(1,3,2) = 1;
% State 2 transition and reward
MDP.T(2,4,1) = 1;
MDP.R(2,4,1) = 2;
MDP.T(2,5,2) = 1;
MDP.R(2,5,2) = 1;
% State 3 transition and reward
MDP.T(3,5,1) = 1;
MDP.R(3,5,1) = 2;
MDP.T(3,6,2) = 1;
MDP.R(3,6,2) = 4;
% State 4 transition and reward
MDP.T(4,7,1) = 1;
MDP.R(4,7,1) = 3;
MDP.T(4,8,2) = 1;
MDP.R(4,8,2) = 2;
% State 5 transition and reward
MDP.T(5,7,1) = 1;
MDP.R(5,7,1) = 1;
MDP.T(5,8,2) = 1;
MDP.R(5,8,2) = 9;
% State 6 transition and reward
MDP.T(6,7,1) = 1;
MDP.R(6,7,1) = 5;
MDP.T(6,8,2) = 1;
MDP.R(6,8,2) = 1;
% State 7 transition and reward
MDP.T(7,7,1) = 1;
MDP.R(7,7,1) = 0;
MDP.T(7,7,2) = 1;
MDP.R(7,7,2) = 0;
% State 8 transition and reward
MDP.T(8,8,1) = 1;
MDP.R(8,8,1) = 0;
MDP.T(8,8,2) = 1;
MDP.R(8,8,2) = 0;

通过.TerminalStates定义终止状态

MDP.TerminalStates = ["s7";"s8"];

【疑问:为何能够识别“s7”、“s8”这样的字符串作为第7,8两个状态?】

环境生成及训练

生成环境

env = rlMDPEnv(MDP);

重置初始状态为1;

env.ResetFcn = @() 1;

随机数种子初始化

rng(0)

后续部分程序是标准化的流程

定义Q表

obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
qTable = rlTable(obsInfo, actInfo);
qRepresentation = rlQValueRepresentation(qTable, obsInfo, actInfo);
qRepresentation.Options.LearnRate = 1;

配置agent参数

agentOpts = rlQAgentOptions;
agentOpts.DiscountFactor = 1;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.9;
agentOpts.EpsilonGreedyExploration.EpsilonDecay = 0.01;
qAgent = rlQAgent(qRepresentation,agentOpts); %#ok<NASGU> 

配置training参数

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes = 500;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 13;
trainOpts.ScoreAveragingWindowLength = 30;

开始训练

trainingStats = train(qAgent,env,trainOpts); 

训练过程如下图所示

 

 结果分析

得到的最优结果是13。

Data = sim(qAgent,env);
cumulativeReward = sum(Data.Reward)
cumulativeReward = 13

 帮助文档中给出了如下的训练后的Q表,那最优路径如何查看?

QTable = getLearnableParameters(getCritic(qAgent));
QTable{1}
ans = 8×2

   12.9874    7.0759
   -7.6425    9.9990
   10.7193    0.9090
    5.9128   -2.2466
    6.7830    8.9988
    7.5928   -5.5053
         0         0
         0         0

Q表用于表示从当前状态转移到后续状态的奖励。上面的QTable{1}翻译到state层面,如下所示。

 

ans = 8×2

   (S1->S2|UP)12.9874    (S1->S3|DOWN) 7.0759
   (S2->S4|UP)-7.6425    (S2->S5|DOWN) 9.9990
   (S3->S5|UP)10.7193    (S3->S6|DOWN) 0.9090
   (S4->S7|UP) 5.9128    (S4->S8|DOWN)-2.2466
   (S5->S7|UP) 6.7830    (S5->S8|DOWN) 8.9988
   (S6->S7|UP) 7.5928    (S6->S8|DOWN)-5.5053
                    0                       0
                    0                       0

从S1开始,根据 (S1->S2|UP)12.9874 (S1->S3|DOWN) 7.0759,得到优选路径为 (S1->S2|UP),得分3,得分总计3;

从S2开始,根据(S2->S4|UP)-7.6425 (S2->S5|DOWN) 9.9990,得到优选路径为(S2->S5|DOWN) ,得分1,得分总计3+1=4;

从S5开始,根据(S5->S7|UP) 6.7830 (S5->S8|DOWN) 8.9988,得到优选路径为(S5->S8|DOWN),得分9,得分总计3+1+9=13.

得到优选路径为S1->S2->S5->S8。

说明:不知道目前为何没有直接导出优选路径的函数?

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值