强化学习:bellman方程求解state value例题

最近在学习强化学习相关知识,强烈推荐西湖大学赵世钰老师的课程,讲解的非常清晰流畅,一路学习下来令人身心大爽,感受数学抽丝剥茧,化繁为简的神奇魅力。
bellman方程还是比较容易理解的:当前状态下的state value等于即时奖励加上未来状态下的state value
向量形式版本如下:
在这里插入图片描述
整体完整版本如下:
在这里插入图片描述

上述公式中只涉及状态变量,而状态的改变是通过action实现的。基于全概率公式,利用状态-动作概率分布函数,可以推导得到局部细节的bellman方程如下:
在这里插入图片描述
在一步一步推导bellman方程的过程中,是从局部细节版整体完整版,再到清晰明了的向量形式。但我们理解时,可以反其道而行之。根据向量形式的公式感性认识bellman方程的内涵,再通过理性思考不断展开细化向量形式,得到整体完整版,再进一步细化得到局部细节版,如此形成闭环学习认知,实现知识点的融会贯通。这正是华老所提倡的读书从薄到厚,再从厚到薄。与大家共勉!!!

在讲解bellman方程的向量形式的课程最后,赵老师给出了几个计算实例,不同于之前讲解知识点所采用的2阶矩阵,例题给出的是5阶状态矩阵。一时无法快速给出每个状态的state value。为了验证自己的学习效果,本人选择其中状态转移概率分布最简单的一个案例进行分析,如下图红框所示。

在这里插入图片描述
可以发现,每个状态的动作方向都是确定的,且都是指向自己的右侧,因此其状态转移矩阵 P P P必呈现一定的规律性。以第一行中的5个状态为例,不难得到转移矩阵为:
在这里插入图片描述
以此类推,可以得到完整的25阶的转移矩阵。
接着,列出每个状态的即使奖励,得到向量 r r r,代入向量形式的bellman方程,即可求解得到最终的state value。
笔者利用matlab实现完整求解过程如下:

clc;
close all;
clear all;

strele = zeros(5,5);
strele(1,2) = 1;
strele(2,3) = 1;
strele(3,4) = 1;
strele(4,5) = 1;
strele(5,5) = 1;

P = zeros(25,25);

for i = 0:4
    P(5*i+1:5*i+5,5*i+1:5*i+5) = strele;
end

r = zeros(25,1);

numlists = [5,6,7,10,12,15,16,18,20,21,25]; % 不难得到每个状态的即时奖励。

for i = 1:length(numlists)
    r(numlists(i),1) = -1;
end
r(17,1) = 1;

res = inv(eye(25) - 0.9*P) * r;

res = reshape(res,5,5)'; % 因为上述构造P和r矩阵是按照行优先,而matlab是列优先,所以需要转置

最终求解得到的res矩阵为:
在这里插入图片描述
如果保留一位小数后,得到的结果和课程中给出的数据是一致的,验证了上述计算过程的正确性。因为其他案例中不存在如此明显的规律性,需要人为挨个计算得到P和r矩阵,大家感兴趣可以进一步测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值