2

私は一時的な差分学習の例 ( https://www.youtube.com/watch?v=XrxgdpduWOU ) に取り組んでおり、報酬を二重にカウントしているように見えるため、Python の実装で次の方程式に問題があります。とQ。

以下のグリッドを 2 次元配列としてコーディングした場合、現在の位置は (2, 2) であり、目標は (2, 3) であり、最大報酬が 1 であると仮定します。Q(t) を現在の位置の平均とします。 r(t+1) は 1 であり、最大 Q(t+1) も 1 であると仮定すると、Q(t) は 2 に近づきます (ガンマが 1 であると仮定)。これは正しいですか、それとも Q(n) (n は終点) は 0 であると仮定する必要がありますか?

ここに画像の説明を入力

グリッド

コードを含めるように編集 - get_max_q 関数を変更して、それが終点であり、値がすべて 1 を下回っている場合は 0 を返すようにしました (報酬は 1 にすぎないため、より正確であると思います)。ただし、これが正しいアプローチであるかどうかはわかりません (以前は、終点のときに 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})
4

1 に答える 1

1

Q 値は、エピソードの終わりまでに受け取ることが期待される報酬の推定値を表します。したがって、最終状態では maxQ = 0 です。それ以降は報酬を受け取ることができないからです。したがって、 の Q 値はt1 になります。これは、割引されていない問題では正しい値です。しかし、方程式の を無視することはできませんgamma。それを計算式に追加して割引を行います。したがって、たとえば の場合gamma = 0.9、 の Q 値はt0.9 になります。(2,1) と (1,2) では 0.81 などになります。

于 2016-06-05T07:35:07.363 に答える