728x90
반응형
OpenAI Gym

OpenAI에 의해 개발된, 강화학습 문제를 실험하고 테스트할 수 있게 해주는 환경을 제공하는 툴킷
필요 라이브러리 설치
- gym: OpenAI에서 제공하는 강화 학습 환경 툴킷
- python-opengl: OpenAI Gym의 일부 환경에서 필요한 3D 렌더링 라이브러리
- xvfb: X Virtual Framebuffer. GUI를 가상 디스플레이에 렌더링하는 데 사용
!pip install gym
!apt-get install python-opengl -y
!apt install xvfb -y
환경 실행
CartPole-v1 환경을 실행하고, 매 스텝마다 랜덤한 행동을 선택하여 환경에 적용하기
Cart Pole
https://www.gymlibrary.dev/environments/classic_control/cart_pole/
import gym
env = gym.make("CartPole-v1")
obs = env.reset()
for _ in range(1000):
env.render()
action = env.action_space.sample() # 랜덤한 액션을 선택
obs, reward, done, info = env.step(action)
if done:
obs = env.reset()
env.close()
obs = env.reset()
Num | Observation | Min | Max |
0 | Cart Position | -4.8 | 4.8 |
1 | Cart Velocity | -Inf | Inf |
2 | Pole Angle | ~ -0.418 rad (-24°) | ~ 0.418 rad (24°) |
3 | Pole Angular Velocity | -Inf | Inf |
action = env.action_space.sample()
Num | Action |
0 | Push cart to the left |
1 | Push cart to the right |
obs, reward, done, info = env.step(action)
obs : 다음 관측값
reward : 보상
done : episode가 종료되었는지 나타내는 boolean 값. (종료되었다면 True)
- Pole Angle이 ±12°를 초과하는 경우 (막대기가 너무 많이 기울어짐)
- Cart Position이 ±2.4를 초과하는 경우 (카트가 디스플레이 밖으로 나가게 되는 경우)
- Episode의 길이가 500을 초과하는 경우 (너무 오랜 시간 동안 수행하지 않도록 하는 안전장치)
info : 추가 정보
환경 시각화
Google Colab에서는 GUI를 직접 렌더링할 수 없기 때문에, pyvirtualdisplay와 piglet를 설치하여 가상 디스플레이를 설정해야 한다.
!pip install pyvirtualdisplay
!pip install piglet
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1400, 900))
display.start()
import gym
from gym.wrappers.record_video import RecordVideo
import glob
import io
import base64
from IPython.display import HTML
from IPython import display as ipythondisplay
def show_video():
mp4list = glob.glob('video/*.mp4')
if len(mp4list) > 0:
mp4 = mp4list[0]
video = io.open(mp4, 'r+b').read()
encoded = base64.b64encode(video)
ipythondisplay.display(HTML(data='''<video alt="test" autoplay
loop controls style="height: 400px;">
<source src="data:video/mp4;base64,{0}" type="video/mp4" />
</video>'''.format(encoded.decode('ascii'))))
else:
print("Could not find video")
def wrap_env(env):
env=RecordVideo(env, './video/', episode_trigger = lambda episode_number: True)
return env
env = wrap_env(gym.make("CartPole-v1"))
obs = env.reset()
for _ in range(1000):
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
if done:
break
env.close()
show_video()
728x90
반응형
'🤖 ai logbook' 카테고리의 다른 글
[paper] DeepSeek-R1 정리 및 Ollama를 이용해서 DeepSeek-R1 모델 간단하게 사용해보기 (0) | 2025.02.10 |
---|---|
[RL] MDP - Bellman equation (0) | 2024.06.25 |
[RL] 마르코프 결정 과정 (Markov decision processes, MDP) (0) | 2024.06.23 |
[RL] 강화 학습(Reinforcement Learning) (0) | 2024.06.23 |
[RL] Deep Deterministic Policy Gradient (DDPG) (0) | 2023.08.21 |
[paper] ChatDev - 소프트웨어 개발을 위한 통신 에이전트(Communicative Agents for Software Development) (0) | 2023.08.16 |
[RL] Actor-Critic (0) | 2023.08.10 |
[RL] DQN(Deep Q-Network) - 작성중 (0) | 2023.08.08 |