강화 학습(Reinforcement Learning)

강화 학습 Frozen Lake-v1 텍스트 출력 게임

coding art 2022. 1. 5. 22:09
728x90

Reinforcement Learning 을 스터디해 나가기 위한 첫 단계에 등장하는 Frozen Lake 텍스트 유형 게임을 소개해보자. 

인터넷에 많은 자료가 널려 있음에도 불구하고 막상 사용자가 해보면 어딘가에 장해가 있어 성공하지 못하는 경우를 일주일 가량 겪었다.  흔히 부딪치는 이런 류의 문제는 사실 특별한 해결책이 없으나 여러번 시행착오를 하다보면 특히 운이 좋을 경우 그 해답을 발견하곤 한다. 그다지 어려운 코드 작성은 아니지만 적어도 reinforced learning 코드 작성을 위해서는 한번 다루어 보아야 할 코드이다. 특히 이 주제를 처음 다룰 경우에는 is_slippery=False  조건하에서 움직이는 방향을 지정해 줄 경우 확정적으로 그 방향으로 움직인 결과를 얻어낼 수 있어야 게임이 가능해진다. 하지만 이 조건을 해제하여 is_slippery=True 로 설정할 경우 좌우상하 어느방향으로 미끌어질지 방향이 불분명한 확률적으로(probabilistic) 불확실성이 높은 stochastic 한 과정이 됨에 유의해야 하며 별도로 코드 작성법을 검토하기로 한다.

 

영상 도중에 아나콘다 프롬프트창 에서 OpenAI GYM 설치 해설이 나오는데 그 구체적인 명령은 다음과 같으니 참고하시기 바란다.

conda install -c conda-forge gym

 

영상 데모도 포함되어 있지만 텍스트 게임은 코드를 실행시키면 키보드에서 0,1,2,3을 눌러 게임이 실행된다는 점에 유의하자.

https://youtu.be/ThFf0WbH1bw

 

#frozen_02.py

import gym
env = gym.make('FrozenLake-v1',is_slippery=False)
for i_episode in range(1):
    observation = env.reset()
    for t in range(100):
        env.render()
        #action = env.action_space.sample()
        action = int(input("Enter a #:left-0 down-1 right-2 up-3:"))
        print(action)
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
env.close()