2

시간적 차이를 배우는 예제 (https://www.youtube.com/watch?v=XrxgdpduWOU)를 사용하고 있으며 파이썬 구현시 다음 계산식에 문제가 있습니다.시간 차이 학습의 이중 계산

아래 표를 2 차원 배열로 코딩하면 최대 보상이 1이라고 가정 할 때 현재 위치는 (2, 2)이고 목표는 (2, 3)입니다. Q (t)를 현재의 평균 평균 위치, 다음 r (t + 1) 1이고 최대 Q (t + 1) 또한 1, 내 Q (t) 2 (감마 1 가정) 가까운 결과를 가정합니다. 이게 맞습니까? 아니면 Q (n), 여기서 n은 종점입니까?

Grid

enter image description here

편집 코드를 포함하는 - I 그것이 종점이며, 값이 모두 현재 인 경우 0을 반환 get_max_q 함수를 수정 아래 I은 보상 이후 더 정확한 추정 한 (단지 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}) 
+1

코드를 표시하고 원하는 출력을 표시하고 잘못된 출력을 표시하십시오. –

+0

@TomKarzes 감사합니다. 코드와 출력을 포함 시켰습니다. –

답변

1

Q 값은 에피소드가 끝날 때까지 예상되는 보상의 예상치를 나타냅니다. 따라서 터미널 상태에서는 maxQ = 0이됩니다. 그 이후로는 더 이상 보상을받지 못하기 때문입니다. 따라서 t의 Q 값은 1이되어 할인되지 않은 문제에 맞습니다. 그러나 방정식에서 gamma을 무시할 수 없으므로 공식에 추가하여 할인합니다. 예를 들어 gamma = 0.9 인 경우 t의 Q 값은 0.9입니다. (2,1)과 (1,2)에서는 0.81이 될 것입니다.

+0

감사합니다. 감마 값으로 실험 해 보겠습니다. 설명 해줘서 고마워, 그리고 당신이 설명하는 방식으로 터미널 상태에서 maxQ가 0이라는 것은 의미가있다. –