인공지능/실습 자료

- 훈련 environment : CarRacing-v1 (https://github.com/NotAnyMike/gym)

 

NotAnyMike/gym

An improvement of CarRacing-v0 from OpenAI Gym in order to make the environment complex enough for Hierarchical Reinforcement Learning - NotAnyMike/gym

github.com

https://notanymike.github.io/Solving-CarRacing/

 

Solving CarRacing with PPO - Mike.W

Solving Car Racing with Proximal Policy Optimisation I write this because I notice a significant lack of information regarding CarRacing environment. I also have expanded the environment to welcome more complex scenarios (see more). My intention is to publ

notanymike.github.io

위 링크를 참고하여 제작했습니다.

 

 

Proximal Policy Optimization (줄여서 PPO) 알고리즘을 사용하여 훈련하였습니다.

timestep 100만회 colab에서 훈련시켰고, 어느 정도 쓸만한 결과가 나왔습니다!

 

(1)

 

(2)

이렇게 좋은 모습들을 보이기도 하는 반면,

어디서 막혔는지;;; 가끔 보면 이상한 장면들도 나오곤 합니다.

 

???

너무 굴곡이 깊거나 하면 그냥 그대로 탈선해서 돌아오려고 하지도 않는 모습을 보이기도 하고,

 

??????? 너 왜 가만히 있냐?

????????

이해할수도 없이 그냥 멈춰있기도 하고;;;

 

음주운전???

갑자기 Agent가 술마셨는지 시작하자마자 어기적대면서 그대로 풀로 들어가서 주차하기도 하고;;;

 

 

한 천만번 정도는 돌린 다음에 하면 거의 완벽하게 되지 않을까 싶습니다.

Taxi-v2 Q-learning

import gym
import random
import numpy as np

env = gym.make("Taxi-v2")
env.reset()

q_table = np.zeros([env.observation_space.n, env.action_space.n])

alpha = 0.8
gamma = 0.95
epsilon = 1

success = 0

for i in range(10000):
    epsilon = 5 / (1 + i)
    state = env.reset()
    epochs = 0
    done = False

    while not done and epochs < 500:
        epochs += 1

        # e-greedy
        if random.uniform(0, 1) < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(q_table[state])

        next_state, reward, done, info = env.step(action)

        # update Q
        old_value = q_table[state, action]
        next_max = np.max(q_table[next_state])

        new_value = old_value + alpha * (reward + gamma * next_max - old_value)
        q_table[state, action] = new_value

        state = next_state

        if reward > 0:
            success += 1

print("Success rate : " + str(success / 10000))
env.close()

 

 

FrozenLake Q-learning

(V3 : Deterministic, V0 : Stochastic)

import gym
import numpy as np

gym.envs.registration.register(
    id='FrozenLake-v3',
    entry_point='gym.envs.toy_text:FrozenLakeEnv',
    kwargs={'map_name': '4x4',
            'is_slippery': False}
)
# Stochastic
# env = gym.make("FrozenLake-v0")

# Deterministic
env = gym.make("FrozenLake-v3")
env.reset()

q_table = np.zeros([env.observation_space.n, env.action_space.n])

alpha = 0.6
gamma = 0.6
epsilon = 1
success = 0

for i in range(20000):
    epsilon = 1. / ((i // 1000) + 1)

    state = env.reset()
    epochs = 0
    done = False
    episode_reward = 0

    while not done and epochs < 500:
        epochs += 1
        
        # e-greedy
        if np.random.uniform(0, 1) < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(q_table[state])
            
        next_state, reward, done, info = env.step(action)
        
        # update Q
        old_value = q_table[state, action]
        next_max = np.max(q_table[next_state])

        q_table[state, action] = old_value + alpha * (reward + gamma * next_max - old_value)

        state = next_state

        episode_reward += reward

        if done and reward == 0:
            q_table[state][action] -= 1

        if reward == 1:
            success += 1

print("Success rate : " + str(success / 20000))
env.close()

 

오늘의 교훈

1. epsillon을 줄이자. (줄이는 코드를 안짜서 한참 헤멨음.)

2. epsillon을 줄이는 방법에 따라 결과가 천차만별이다. (Frozen-lake에서 epsillon을 1 / (i+1) 로 뒀더니 결과가 똥망함)

3. 시간은 얼마 없고 갈 길은 멀다. 빨리 공부해야지.

'인공지능 > 실습 자료' 카테고리의 다른 글

openAi gym CarRacing 훈련 중간결과  (13) 2019.10.20

+ Recent posts