ML&DL/Sung Kim's RL Lecture

LEC 05. Q-learning on Nondeterministic Worlds!

rrojin 2021. 1. 8. 17:40

LEC 05

실제 미끄러운 Frozen Lake, Stochastic 환경에서는 어떻게 해야할까?

- Deterministric [ is_slippery: False 환경 ]

특정 행동에 대해 항상 같은 결과(이동방향 및 reward)를 냄.

       vs

- Stochastic(non-deterministic) [ is_slippery : True (혹은 env = gym.make('FrozenLake-v0') ) 환경]

미끄러지기도 하면서 내 의도(키보드 입력)와 다르게 움직일 수도 있음.       

 Stochastic환경에서는 기존의 방식의 알고리즘이 잘 작동하지 않는다.

Stochastic환경에서는 Q형님이 Frozen Lake에서 미끄려져 우연히 이동한 결과값 일 수도 있기에, Q형님 말만 믿고 따라가면 위험하다. 슬라이드에서 볼 수 있듯이, 결과가 매우 매우 매우 안좋다!

 

 

 따라서, 등장한 방법! 멘토를 무조건적으로 따르지 않는다!!!

여전히 Q형님에게 물어보지만 Q형님 정보를 조금 사용하고, 나머진 내가 원래 하고 싶었던 의견(강의에서는 '고집'이란 용어 사용)을 반영한다.

이때, learning rate(알파)을 사용하여 비중 조절한다. 

 

''' 

- 강의 답변 댓글 중 -

만약 slippery가 10번 중 1번의 확률로 가끔 일어난다고 생각해도, 가끔일어나는 slippery때문에 Q값은 엉망인 값으로 한순간 초기화되버릴 것 같네요. 그래서 그동안의 학습을 기억하고 한번의 slippery로 학습이 초기화되지 않도록 하는 조치가 필요한 것 같구요

'''


LAB 05

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import gym
import numpy as np
import matplotlib.pyplot as plt
 
env = gym.make('FrozenLake-v0')
 
= np.zeros([env.observation_space.n, env.action_space.n])
 
learning_rate = .85
dis = .99
num_episodes = 2000
 
rList = []
 
for i in range(num_episodes):
    state = env.reset()
    rAll = 0
    done = False
    
    while not done:
        action = np.argmax(Q[state,:] + np.random.rand(1, env.action_space.n)/(i+1))
        
        new_state, reward, done, _ = env.step(action)
        
#Update Q-table
        Q[state, action] = (1-learning_rate) * Q[state, action] \
                            + learning_rate * (reward + dis * np.max(Q[new_state, :])) 
    
        rAll += reward
        state = new_state
        
    rList.append(rAll)
 
print("Score over time: "str(sum(rList)/ num_episodes))
print("Final Q-Table Values")
print(Q)
 
plt.bar(range(len(rList)), rList, color = 'blue')
plt.show()
cs
 
 
 

 

result


Code For Playing a game

'FrozenLake-v0'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import tensorflow as tf
import gym
import numpy as np
import matplotlib.pyplot as plt
import readchar
import colorama as cr
 
cr.init(autoreset=True)
 
#MACROS
LEFT = 0
DOWN = 1
RIGHT = 2
UP = 3
 
arrow_keys = {
    '\x1b[A' : UP,
    '\x1b[B' : DOWN,
    '\x1b[C' : RIGHT,
    '\x1b[D' : LEFT
}
 
env = gym.make('FrozenLake-v0')
 
env.render()
state = env.reset() #Windows10 오류 방지 위해 필요
 
while True:
    key = readchar.readkey()
    if key not in arrow_keys:
        print('Game aborted! Press Up, Down, Right, Left!')
        break
        
    action = arrow_keys[key]    
    state, reward, done, _ = env.step(action)
    env.render()
    
    print("State: ", state, "Action: ", action, "Reward: ", reward)
    
    if done:
        print('Finished with reward: ',reward)
        break
 
cs

 

실제 터미널에서 게임 진행보기(쉽지 않다..ㅎ)

Reference:

[1]: http://hunkim.github.io/ml/

[2]: youtu.be/6KSf-j4LL-c

[3]: youtu.be/ZCumo_6qTsU

'ML&DL > Sung Kim's RL Lecture' 카테고리의 다른 글

LEC 07. DQN  (0) 2021.01.11
LEC 06. Q-Network  (0) 2021.01.08
LEC 04. Q-learning (table)  (0) 2021.01.07
LEC 03. Dummy Q-learning (table)  (0) 2021.01.07
LEC 02. Playing OpenAI GYM Games  (0) 2021.01.06