理解马尔可夫决策过程的值迭代算法

时间:2017-08-27 15:22:16

标签: python algorithm artificial-intelligence markov

在了解int时,我遇到了MDP的问题。从概念上讲,这个例子非常简单并且有意义:

如果您有一个value iteration侧面骰子,并且您掷出645,则将该金额保留在6但如果你掷出$12你的资金,然后结束游戏。

一开始你有3所以滚动和不滚动之间的选择是:

$0

我遇到的问题是将其转换为python代码。不是因为我对python不好,但也许我对pseudocode的理解是错误的。即使Bellman equation确实对我有意义。

k = 1 If I roll : 1/6*0 + 1/6*0 + 1/6*0 + 1/6*4 + 1/6*5 + 1/6*6 = 2.5 I I don't roll : 0 since 2.5 > 0 I should roll k = 2: If I roll and get a 4: If I roll again: 4 + 1/6*(-4) + 1/6*(-4) + 1/6*(-4) + 1/6*4 + 1/6*5 + 1/6*6 = 4.5 If I don't roll: 4 since 4.5 is greater than 4 I should roll If I roll and get a 5: If I roll again: 5 + 1/6*(-5) + 1/6*(-5) + 1/6*(-5) + 1/6*4 + 1/6*5 + 1/6*6 = 5 If I don't roll: 5 Since the difference is 0 I should not roll If I roll and get a 6: If I roll again: 6 + 1/6*(-6) + 1/6*(-5) + 1/6*(-5) + 1/6*4 + 1/6*5 + 1/6*6 = 5.5 If I don't roll: 6 Since the difference is -0.5 I should not roll borrowed的{​​{3}}代码,并将其修改为:

value iteration

这是错误的答案。这段代码中的错误在哪里?或者这是我对算法的理解问题?

1 个答案:

答案 0 :(得分:2)

B成为您当前的余额。

如果您选择滚动,则预期奖励为2.5 - B * 0.5

如果您选择不滚动,则预期奖励为0

所以,政策是:如果B < 5,滚动。否则,不要。

遵循该政策的每一步的预期奖励为V = max(0, 2.5 - B * 0.5)

现在,如果你想用贝尔曼方程来表达它,你需要将平衡结合到状态中。

让状态<Balance, GameIsOver>由当前余额和定义游戏是否结束的标志组成。

  • 行动stop
    • 将状态<B, false>变为<B, true>
  • 行动roll
    • <B, false>变为<0, true> 概率1/2
    • <B, false>变为<B + 4, false> 概率1/6
    • <B, false>变为<B + 5, false> 概率1/6
    • <B, false>变为<B + 6, false> 概率1/6
  • 任何操作都无法将<B1, true>转变为<B2, false>

使用here中的符号:

π(<B, false>) = "roll", if B < 5

π(<B, false>) = "stop", if B >= 5

V(<B, false>) = 2.5 - B * 0.5, if B < 5

V(<B, false>) = 0, if B >= 5