AI
OpenAI LunarLander-v2 box2d error: command 'swig.exe' failed: None
스푸79
2024. 8. 10. 13:41
Gymnasium 사이트에서
LunarLander-v2를 강화학습 시켜보려고 build 를 하는 중 swig.exe 명령어 오류 메시지가 뜨면서 동작을 안 했다.
pip install gymnasium[box2d]
위와 같이 gymnasium box2d 관련 모듈을 아무리 내려 받아도 여전히 오류가 발생했다.
오류 메시지를 자세히 확인해 보니 Box2D는 cpp로 개발된 모듈인데
swig.exe로 빌드를 한 후에야 python에서 동작 할 것 같은 생각이 들었다.
구글에서 swig로 검색을 하니 바로 아래와 같은 사이트가 검색 되었다.
swig에 대한 안내 글을 대충 읽어보니
예상했던대로
C++로 개발된 모듈을 다른 언어에서도 동작할 수 있도록 처리해주는 녀석이었다.
항상 이런 귀한 걸 별다른 보상도 없이 만들어주시는 개발자 분들에게 언제나 감사할 뿐이다.
다운로드 링크를 클릭해서 최신 릴리즈 버전을 받았다. 다운받은 zip 파일의 압축을 해제한 후
시스템 환경 변수 path에 swigwin 압축을 해제한 폴더를 추가했다.
우선 DQN은 제외하고 아래와 같이 실행하는 부분의 소스코드만 입력해서 실행해 보았다.
import gymnasium as gym
num_episodes = 100
all_rewards = []
env = gym.make("LunarLander-v2", render_mode="human")
# human : 시각적으로 처리
# rgb_array : 프레임별 rgb 이미지 배열이 반환, 시각화되지 않음
for episode in range(num_episodes):
observation, info = env.reset(seed=42)
done = False
total_reward = 0
while not done:
action = env.action_space.sample() # agent policy that uses the observation and info
# action
# 0 : do nothing
# 1 : fire left orientation engine
# 2 : fire main engine
# 3 : fire right orientation engine
observation, reward, terminated, truncated, info = env.step(action)
total_reward += reward
done = terminated or truncated
print("Episode: {}, Reward: {}, Total Reward: {}".format(episode, reward, total_reward))
all_rewards.append(total_reward)
env.close()
정상적으로 잘 동작하는 걸 확인할 수 있었다.