Python 如何实现状态值函数?

Python 如何实现状态值函数?,python,reinforcement-learning,Python,Reinforcement Learning,我正在看关于深度强化学习的伯克利CS294课程。然而,我在任务中遇到了一些麻烦。我试图实现下面的等式。我认为这很简单,但我未能获得评论中所示的预期结果。一定有什么我误解了。下面的代码显示了详细信息。有人能帮忙吗 这是我的密码: def compute_vpi(pi, P, R, gamma): """ :param pi: a deterministic policy (1D array: S -> A) :param P: the transition prob

我正在看关于深度强化学习的伯克利CS294课程。然而,我在任务中遇到了一些麻烦。我试图实现下面的等式。我认为这很简单,但我未能获得评论中所示的预期结果。一定有什么我误解了。下面的代码显示了详细信息。有人能帮忙吗

这是我的密码:

def compute_vpi(pi, P, R, gamma):
    """
    :param pi: a deterministic policy (1D array: S -> A)
    :param P: the transition probabilities (3D array: S*A*S -> R)
    :param R: the reward function (3D array: S*A*S -> R)
    :param gamma: the discount factor (scalar)
    :return: vpi, the state-value function for the policy pi
    """
    nS = P.shape[0]
    # YOUR CODE HERE
    ############## Here is what I wrote ######################
    vpi = np.zeros([nS,])
    for i in range(nS):
        for j in range(nS):
            vpi[i] += P[i, pi[i], j] * (R[i, pi[i], j] + gamma*vpi[j])
    ##########################################################
    # raise NotImplementedError()
    assert vpi.shape == (nS,)
    return vpi


pi0 = np.zeros(nS,dtype='i')
compute_vpi(pi0, P_rand, R_rand, gamma)

# Expected output:
# array([ 5.206217  ,  5.15900351,  5.01725926,  4.76913715,  5.03154609,
#         5.06171323,  4.97964471,  5.28555573,  5.13320501,  5.08988046])
我得到的是:

array([ 0.61825794,  0.67755819,  0.60497582,  0.30181986,  0.67560153,
    0.88691815,  0.73629922,  1.09325453,  1.15480849,  1.21112992])
一些初始化代码:

nr.seed(0) # seed random number generator
nS = 10
nA = 2
# nS: number of states
# nA: number of actions
R_rand = nr.rand(nS, nA, nS) # reward function
# R[i,j,k] := R(s=i, a=j, s'=k), 
# i.e., the dimensions are (current state, action, next state)
P_rand = nr.rand(nS, nA, nS) 
# P[i,j,k] := P(s'=k | s=i, a=j)
# i.e., dimensions are (current state, action, next state)

P_rand /= P_rand.sum(axis=2,keepdims=True) # normalize conditional probabilities
gamma = 0.90

实际上,作业2提供了解决方案,如果其他人在线学习本课程并遇到一些麻烦,请尝试从下一个作业中找到一些提示。

实际上,作业2提供了解决方案,如果其他人在线学习本课程并遇到一些麻烦,试着从下一个作业中找到一些技巧。

你可能想试着告诉我们你期望看到什么,以及你看到了什么……我添加了一些解释,它是关于强化学习中一个名为值函数的方程式,我认为这是一个非常简单和基本的概念,但是错误的输出告诉我我错了-,-当您试图实现的给定函数只对s求和时,为什么要对s(
i
)和s'(
j
)求和?(同时,您的注释说明您正在返回一个函数,但实际上您正在返回一个数组…)也许是一些参考链接/注释,以便那些没有参加该特定课程(并且仍然记得任何内容)的人可以了解您所在的位置?特别是,一个没有注释的公式及其组成部分没有任何意义。谢谢大家,我在作业第2部分找到了解决方案。你们可能想告诉我们你们期望看到的,以及你们看到的……我添加了一些解释,它是关于强化学习中一个名为值函数的方程,我认为这是一个非常简单和基本的概念,但是错误的输出告诉我我错了-,-当给定的函数只对s求和时,为什么要对s(
I
)和s'(
j
)求和?(同时,您的注释说明您正在返回一个函数,但实际上您正在返回一个数组…)也许是一些参考链接/注释,以便那些没有参加该特定课程(并且仍然记得任何内容)的人可以了解您所在的位置?特别是,一个没有注释的公式,它是什么,它的部分是什么,没有任何意义。谢谢大家,我在作业第二部分找到了答案。