728x90
유니티로 만든 게임을 파이썬으로 직접 강화학습을 돌려보고 싶어 이것저것 알아보다 못찾아서 직접 코드를 짜야하나 고민하던 중, 다행히도 ML-Agent에서 gym.Env 환경으로 변형해줄 수 있는 내용을 발견하였다.
사용법은 생각보다 간단하다.
gym_unity 설치
pip install gym_unity
gym_unity로 유니티 게임을 gym.Env 환경으로 감싸기
from mlagents_envs.environment import UnityEnvironment
from gym_unity.envs import UnityToGymWrapper
unity_env = UnityEnvironment("path")
env = UnityToGymWrapper(unity_env)
이후에는 개인적으로 stable-baselines3 라이브러리를 잘 사용하고 있어서 이 부분으로 학습했다.
stable-baselines3에 대한 학습 방법은 이전 글에 적어놓았다.
학습 코드
from mlagents_envs.environment import UnityEnvironment as UE
from gym_unity.envs import UnityToGymWrapper
from stable_baselines3.ppo import PPO
from stable_baselines3.common.callbacks import EvalCallback
unity_env = UE(file_name="UnityEnvironment", seed=1, side_channels=[])
env = UnityToGymWrapper(unity_env, uint8_visual=False)
log_dir = 'unity_log/'
eval_callback = EvalCallback(env, best_model_save_path=log_dir,
log_path=log_dir, eval_freq=10000,
deterministic=False, render=True)
ppo = PPO('MlpPolicy', env=env, verbose=1)
ppo.learn(1e+6, callback=eval_callback)
단점으로는 한 게임 내에서 agent가 여러개인 경우는 에러로 넘어가서, 1 게임에 1 에이전트로 학습하였다.
에러코드 예시
gym_unity.envs.UnityGymException: There can only be one Agent in the environment but 12 were detected.
출처 : https://github.com/Unity-Technologies/ml-agents/tree/main/gym-unity
728x90
'AI | ML > Reinforcement Learning' 카테고리의 다른 글
[RL] DQN(Deep Q-Network) 논문 리뷰 (0) | 2024.01.18 |
---|---|
[RL] Beginner Guide (2) | 2024.01.16 |
pyMARL 구조 분석 + COMA 코드 분석 (0) | 2021.08.23 |
[Unity] ML-Agents 설치 및 테스트해보기 (2) | 2021.08.13 |
[RL] Stable-baselines3 모델 커스터마이징 (10) | 2021.08.02 |