[gym] CartPole-v0

2021. 5. 17. 23:24Artificial_Intelligence/Reinforcement Learning

OpenAI Gym CartPole-v0 코드 실행 결과 

import gym
import time

env = gym.make('CartPole-v1') #강화학습 환경 불러오기

for i_episode in range(20):
    # 새로운 에피소드(initial environment)를 불러온다(reset)
    observation = env.reset()
    for t in range(100):
        env.render() #화면에 출력 / 행동 취하기 이전 환경에서 얻은 관찰값(obsevation)적용해서 그림
        time.sleep(0.05)

        # 행동(action)을 취하기 이전에 환경에 대해 얻은 관찰값(observation)
        print('observation before action:')
        print(observation)
        action = env.action_space.sample()#임의의 action 선택
        observation, reward, done, info = env.step(action)#선택한 action을 환경으로 보냄
        time.sleep(0.05)

        # 행동(action)을 취한 이후에 환경에 대해 얻은 관찰값(observation)
        print('observation after action:')
        print(observation)

        if done:
            print("Episode finished after {} timesteps".format(t+1))
         
            break
            
env.close()

Gym은 강화학습의 구현원리를 이해하고 간단히 실습할 수 있는 OpenAI의 라이브러리이다.

  • A pole is attached by an un-actuated joint to a cart, which moves along
  • a frictionless track. The pendulum starts upright, and the goal is to
  • prevent it from falling over by increasing and reducing the cart's velocity.
  • This environment corresponds to the version of the cart-pole problem

 

에피소드 종료 조건

  • 막대기의 각도가 12도 이상 넘어갈때
  • 카트 위치가 2.4보다 클때(카트 중앙이 디스플레이 끝으로 넘어갈때)
  • 에피소드가 200보다 클때
  • 평균 100회 연속 시행에서 195.0보다 크거나 같을때 해결된다 판단한다.

 

env.step 함수를 이용해서 에이전트가 환경(environment)에 대한 행동(action)을 취하면, 행동 이후에 획득한 환경에 대한 정보를 리턴(return)해주게 된다.

 

<CartPole환경에서 리턴해주는 값들>

observation : 환경에 대한 정보를 포함한 4-dimension vector로 각각 Cart Position(카트의 위치), Cart Velocity(카트의 속도), Pole Angle(막대기의 각도), Pole Velocity At Tip(막대기 끝의 속도)을 의미한다.

reward는 넘어지지 않을 경우 매 time마다 +1의 값을 갖는다.

done은 현재 에피소드(episode)가 끝났는지 끝나지 않았는지를 나타내는 boolean 값이다.

(막대기가 쓰러지거나 카트가 중앙에서 너무 멀리 이동하면 episode를 종료(terminate)한다.

 

CartPole 환경에서 Agent가 취할 수 있는 행동(action_space)은 0, 1 두개의 값이다.

0은 왼쪽으로 이동, 1은 오른쪽으로 이동을 뜻한다.

 

CartPole-v0은 한 에피소드에서 얻을 수 있는 최대보상은 200 step이다.
매 스탭마다 막대가 넘어지지 않으면 1의 보상을 받는데,
100 에피소드 연속으로 195이상의 보상(reward)를 획득하면 문제를 해결했다고 본다.

 

step 함수
선택한 action을 step함수로 보내면, 다음의 4가지 value를 return한다.
observation : 픽셀 데이터과 같은 관찰값
reward : 그 action을 하므로서 환경에서 받는 reward값
done : 에피소드가 terminal 되면 True( 목표를 달성했거나, 에이전트가 목숨을 잃었을때)
info : 환경의 정보들( 점수 등등 )

Agent는 각 time_step마다 action을 선택하며 Environment과 상호작용을 한다.
이때 Environment는 Agent로부터 action을 받고 reward와 observation을 return 한다.

728x90