1

我正在参加一个在线课程,在那里我发现提交了许多Q-Values。所以,我写了一个 Python 脚本来自动计算它。我使用了以下等式。 Q值迭代更新规则 但是脚本没有按应有的方式执行。它给出了错误的答案。虽然我可以通过在纸上做同样的事情来得到正确的答案。

def Qvalue_iteration(T, R, gamma=0.5, n_iters=10):
    nS = R.shape[0]
    nA = T.shape[0]
    Q = [[0]*nA]*nS # initially
    for _ in range(n_iters):
        for s in range(nS): # for all states s
            for a in range(nA): # for all actions a
                sum_sp = 0
                for s_ in range(nS): # for all reachable states s'
                    sum_sp += (T[a][s][s_]*(R[s][s_][a] + gamma*max(Q[s_])))
                Q[s][a] = sum_sp
    return Q

这里,T 是转移概率,R 是奖励。谁能帮我从头开始编写这个 Q 值迭代算法。我是强化学习的初学者。虽然我已经提交了答案并且通过在纸上完成了所有正确的操作,但我想对其进行编码。

4

2 回答 2

1

创建错误的代码是您初始化零矩阵的行:

Q = [[0]*nA]*nS # initially

相反,您可以尝试将 numpy 导入为 np 并初始化一个零矩阵:

Q = np.zeros((nS,NA))
于 2020-11-08T03:58:02.027 回答
0

@Ashutosh您已经解决了问题吗?它适用于哪个在线课程?

def Qvalue_iteration(T, R, gamma=0.5, n_iters=10):
nA = R.shape[0]
nS = T.shape[0]
Q = np.zeros((nS,nA)) # initially
for _ in range(n_iters):
    for s in range(nS): # for all states s
        for a in range(nA): # for all actions a
            sum_sp = 0
            for s_ in range(nS): # for all reachable states s'
                sum_sp += (T[s][a][s_]*(R[s][a][s_] + gamma*max(Q[s_])))
            Q[s][a] = sum_sp
return Q

形状已重新排序!

于 2021-04-13T11:47:05.103 回答