스푸79 기록 보관소

OpenAI LunarLander-v2 box2d error: command 'swig.exe' failed: None 본문

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()

 

 

정상적으로 잘 동작하는 걸 확인할 수 있었다.