我正在学习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)
当它在自己的定义中?