时间差学习中的双重计数

我正在研究一个时间差学习的例子(https://www.youtube.com/watch?v=XrxgdpduWOU),在我的Python实现中,我对以下方程有些困惑,因为我似乎对奖励和Q值进行了双重计数。

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

enter image description here

Grid

已编辑以包含代码 – 我修改了get_max_q函数,使其在到达终点时返回0,现在所有值都低于1(我认为这是正确的,因为奖励仅为1),但我不确定这是否是正确的方法(之前我设置它在到达终点时返回1)。

#不确定这是否正确
def get_max_q(q, pos):
    #终点
    #不确定我是否应该将其设置为0或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)
    #终点
    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
平均值(在我将Q(终点)设置为0后)
defaultdict(float,
            {((0, 0), 'DOWN'): 0.5999999999999996,
             ((0, 0), 'RIGHT'): 0.5999999999999996,
              ...
             ((2, 2), 'UP'): 0.7599999999999998})
平均值(在我将Q(终点)设置为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,以此类推。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注