我正在学习MDP和value iteration自学,我希望有人能提高我的理解。
考虑一个有数字的 3 面骰子的问题1, 2, 3。如果您掷出 a1或 a 2,您将获得该值,$但如果您掷出 a 3,您将失去所有钱,游戏结束 ( finite horizon problem)
从概念上讲,我了解如何使用以下论坛完成此操作:
所以让我们分解一下:
由于这是一个finite horizon我们可以忽略的问题gamma。
如果我observe 1,我可以go要么stop。那utility/value就是:
V(1) = max(Q(1, g), Q(1, s))
Q(1, g) = r + SUM( P( 2 | 1,g) * V(2) + P( 3 | 1,g) * V(3))
Q(1, s) = r + SUM( P( 2 | 1,s) * V(2) + P( 3 | 1,s) * V(3))
where r = 1
我observe 2,我可以go或者stop:
V(2) = max(Q(2, g), Q(2, s))
Q(2, g) = r + SUM( P( 1 | 2,g) * V(1) + P( 3 | 1,g) * V(3))
Q(2, s) = r + SUM( P( 1 | 2,s) * V(1) + P( 3 | 1,s) * V(3))
where r = 2
我观察3,游戏结束。
直觉V(3)上是0因为游戏结束了,所以我们可以从方程中去掉那一半Q(1, g)。我们在上面也定义V(2)了,因此我们可以将其替换为:
Q(1, g) = r + SUM( P( 2 | 1,g) *
MAX ((P( 1 | 2,g) * V(1)) , (P( 1 | 2,s) * V(1))))
这就是事情发生转折的地方。Q(1, g)如果它的解决方案中有自己的定义,我不确定如何解决。这可能是由于糟糕的数学背景。
我所理解的是,效用或状态的价值会根据奖励而改变,因此决定也会改变。
具体来说,如果滚动三给了您$3而滚动一结束了游戏,那将影响您的决定,因为实用程序已更改。
但我不确定如何编写代码来计算它。
有人可以解释动态编程是如何工作的吗?我该如何解决Q(1,g)或Q(1,s)当它在自己的定义中?
