我正在研究时间差异学习示例(https://www.youtube.com/watch?v=XrxgdpduWOU),并且在python实现中遇到以下方程式的问题,因为我似乎正在重复计算奖励和Q。

如果我将下面的网格编码为2d数组,则假设最大奖励为1,那么我的当前位置是(2,2),目标是(2,3),假设Q(t)是我当前位置的平均平均值,那么r(t + 1)为1,我假设最大Q(t + 1)也为1,这导致我的Q(t)接近于2(假设伽玛为1)。这是正确的吗?还是我应该假设Q(n)(其中n是终点)为0?

python - 时差学习中的重复计数-LMLPHP

python - 时差学习中的重复计数-LMLPHP

编辑以包含代码-我修改了get_max_q函数,如果它是终点并且现在所有值都小于1(我认为这是更正确的,因为奖励仅为1),则返回0,但是不确定这是否是正确的方法(之前,我将其设置为终点时返回1)。

#not sure if this is correct
def get_max_q(q, pos):
    #end point
    #not sure if I should set this to 0 or 1
    if pos == (MAX_ROWS - 1, MAX_COLS - 1):
        return 0
    return max([q[pos, am] for am in available_moves(pos)])

def learn(q, old_pos, action, reward):
    new_pos = get_new_pos(old_pos, action)
    max_q_next_move = get_max_q(q, new_pos)

    q[(old_pos, action)] = q[old_pos, action] +  alpha * (reward + max_q_next_move - q[old_pos, action]) -0.04

def move(q, curr_pos):
    moves = available_moves(curr_pos)
    if random.random() < epsilon:
        action = random.choice(moves)
    else:
        index = np.argmax([q[m] for m in moves])
        action = moves[index]

    new_pos = get_new_pos(curr_pos, action)

    #end point
    if new_pos == (MAX_ROWS - 1, MAX_COLS - 1):
        reward = 1
    else:
        reward = 0

    learn(q, curr_pos, action, reward)
    return get_new_pos(curr_pos, action)

=======================
OUTPUT
Average value (after I set Q(end point) to 0)
defaultdict(float,
            {((0, 0), 'DOWN'): 0.5999999999999996,
             ((0, 0), 'RIGHT'): 0.5999999999999996,
              ...
             ((2, 2), 'UP'): 0.7599999999999998})

Average value (after I set Q(end point) to 1)
defaultdict(float,
        {((0, 0), 'DOWN'): 1.5999999999999996,
         ((0, 0), 'RIGHT'): 1.5999999999999996,
         ....
         ((2, 2), 'LEFT'): 1.7599999999999998,
         ((2, 2), 'RIGHT'): 1.92,
         ((2, 2), 'UP'): 1.7599999999999998})

最佳答案

Q值表示您希望在剧集结束前获得多少奖励。因此,在终端状态下,maxQ = 0,因为在此之后您将不再获得任何奖励。因此,t处的Q值将为1,这对于您的未折现问题是正确的。但是您不能忽略方程式中的gamma,将其添加到公式中以使其打折。因此,例如,如果gamma = 0.9,则t处的Q值为0.9。在(2,1)和(1,2)处为0.81,依此类推。

10-08 08:44