gpt4 book ai didi

python - 了解马尔可夫决策过程的值(value)迭代算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:23 24 4
gpt4 key购买 nike

在学习 MDP 时,我遇到了 value iteration 的问题。从概念上讲,这个示例非常简单且有意义:

如果您有一个 6 面的骰子,并且掷出 456您将这笔金额保存在 $ 中,但如果您掷出 123,您将失去本金并结束游戏。

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

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

我遇到的问题是将其转换为 python 代码。不是因为我不擅长 python,而是我对 pseudocode 的理解是错误的。尽管 Bellman equation 对我来说确实有意义。

借用用于值迭代Berkley代码并将其修改为:

isBadSide = [1,1,1,0,0,0]

def R(s):
if isBadSide[s-1]:
return -s
return s

def T(s, a, N):
return [(1./N, s)]

def value_iteration(N, epsilon=0.001):
"Solving an MDP by value iteration. [Fig. 17.4]"
U1 = dict([(s, 0) for s in range(1, N+1)])
while True:
U = U1.copy()
delta = 0
for s in range(1, N+1):
U1[s] = R(s) + max([sum([p * U[s1] for (p, s1) in T(s, a, N)])
for a in ('s', 'g',)])

delta = max(delta, abs(U1[s] - U[s]))

if delta < epsilon:
return U

print(value_iteration(6))
# {1: -1.1998456790123457, 2: -2.3996913580246915, 3: -3.599537037037037, 4: 4.799382716049383, 5: 5.999228395061729, 6: 7.199074074074074}

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

最佳答案

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

关于python - 了解马尔可夫决策过程的值(value)迭代算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45906505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com