박민혀기
OpenAI gymnasium install 본문
OpenAI에서 만든 강화학습 패키지인 gymnasium을 설치하려고 한다.
(원래는 gym이지만 더 이상 지원을 안하고 gymnasium으로 변경해서 운영중 하지만 gym도 사용은 가능함.)
간단하게 아래 명령이면 된다.
pip install gym
아직 해보지는 안았지만 Ubuntu 16.04 or 18.04 setting할 경우에는 입력해줘야 하나보다..
apt-get install -y libglu1-mesa-dev libgl1-mesa-dev libosmesa6-dev xvfb ffmpeg curl patchelf libglfw3 libglfw3-dev cmake zlib1g zlib1g-dev swig
처음에는 문제점들이 너무 많았다.
샘플 코드 에러부터 화면 출력 에러 등등 너무 많은 에러가 나왔다.
(처음에는 gymnasium과 gym중 어떤걸 써야하는지도 몰랐다.)
몇 일 정도 서칭하고 삽질한 끝에 문제 점들을 모두 파악했고 학습도 시켰다.
우선 PyGame이라는 툴을 설치해줘야 한다.
이걸 설치해야 게임 화면을 눈으로 볼 수 있는 것 같다.
$ pip install pygame
아래 코드가 가장 간단한 강화학습 예제인 CartPole 예제이다.
OpenAI gym의 CartPole은 카트 위에 막대기가 고정되어 있고 막대기는 중력에 의해 바닥을 향해 자연적으로 기울게 되는 환경을 제공한다. CartPole 의 목적은 카트를 좌, 우로 움직이며 막대기가 기울지 않고 서 있을 수 있도록 유지시켜 주는 것이 목적인데, 강화 학습 알고리즘을 이용하여 막대기를 세울 수 있는 방법을 소프트웨어 에이전트가 스스로 학습할 수 있도록 한다.
import gym
env = gym.make('CartPole-v1')
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
공식 홈페이지에 있는 예제 코드인데 내가 실행한 환경에서는 곧바로 에러가 발생했다.
첫 번째 코드는 에러라기 보단 화면에 게임화면이 나오지 않는 현상에 관한 문제가 이 코드에 있다.
구글링한 결과 뒤에 옵션(render_mode)을 추가해야 된다는 것을 발견했다.(컴퓨터나 환경마다 그냥 되는 곳도 있고 추가해야 하는 곳도 있나봄)
env = gym.make('CartPole-v1')
=>
env = gym.make("CartPole-v1", render_mode="human")
실제로 화면 출력 함수는 env.render() 함수이지만 위에 코드를 수정하지 않으면 게임 화면이 나오지 않는다.
두 번째 코드는 반환 개수 에러이다.
내가 보기엔 gym 버전이나 CartPole 버전 등의 문제로 파악된다.
observation, reward, done, info = env.step(action)
=>
observation, reward, done, info, _ = env.step(action)
그래서 이런식으로 ", _"를 추가하여 함수에서 리턴되는 변수의 개수를 맞춰주고 실행하면 에러가 사라진다.
최종코드
아래 코드를 실행하면 CartPole 예제를 실행이 가능하다.
import gym
env = gym.make("CartPole-v1", render_mode="human")
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info, _ = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
제대로 본게 맞다면 막대가 좌,우로 12도?? 이상 넘어가면 종료, 화면 끝까지 넘어거면 종료일 것이다.
(현재 코드는 학습은 안하고 랜덤하게 움직임)
강화학습으로 막대를 오래동안 세울 수 있는 모델, 값을 찾는 것이 최종 목표이다.
간단한 예제인데 예전 버전이라 그런가 지금 동작하면 에러도 많고 많이 바뀐 것 같다...
다음 포스팅에서는 PyTorch를 활용해서 강화학습을 실행하고 학습하는 것을 올릴 예정이다.
'Research' 카테고리의 다른 글
SAM2(Segmentation Anything Model) by Meta on RPi5 (0) | 2024.08.13 |
---|---|
Guide for using Google Drive API on RPi(2) (0) | 2024.06.12 |
Guide for using Google Drive API on RPi (0) | 2024.06.12 |
PyTorch & CUDA Install (0) | 2024.04.15 |
Work & Research balance (0) | 2024.01.05 |