马尔科夫决策过程澄清

2024-06-14 14:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为家庭作业实施价值迭代。它进行得很好,但我对某个部分感到困惑,特别是下面指出的那条线

//(taken from http://aima.cs.berkeley.edu/python/mdp.html)
def value_iteration(mdp, epsilon=0.001):
  "Solving an MDP by value iteration. [Fig. 17.4]"
  U1 = dict([(s, 0) for s in mdp.states])
  R, T, gamma = mdp.R, mdp.T, mdp.gamma
  while True:
      U = U1.copy()
      delta = 0
      for s in mdp.states:
          U1[s] = R(s) + gamma * max([sum([p * U[s1] for (p, s1) in T(s, a)])
                                    for a in mdp.actions(s)])
          delta = max(delta, abs(U1[s] - U[s])) //*****THIS LINE**************//
      if delta < epsilon * (1 - gamma) / gamma:
          return U

我大体上理解这行代码的要点,但是我需要将更新后的实用程序与旧版本或最近更新的状态进行比较吗?目前我所做的似乎是有效的(主要是:P),但我很困惑,因为其他版本的算法,如this one都有k<;-k+1和∀s | Vk[s]-Vk-1[s]|<;θ,这让我觉得我做错了。在

这是我的代码:

^{pr2}$

我得到的输出是:

0.5094143831769762  0.6495863449484525  0.795362242280654    1
0.39850269350488843 None                0.48644045209498593 -1
0.29643305379491625 0.25395638075084487 0.344787810489289    0.12994184490884678

Tags: 代码inltforvaluemaxvkdelta