안녕하세요! 이번 11월 동안 RLKorea에서 주최하는 Drone Delivery Challenge with Unity가 진행되고 있는데요! 마침 11월 초에 카카오엔터프라이즈에서 오픈소스 강화학습 프레임워크 **JORLDY (Join Our Reinforcement Learning framework for Developing Yours)**가 공개되었습니다!

JORLDY 링크: https://github.com/kakaoenterprise/JORLDY

JORLDY는 다양한 강화학습 알고리즘과 환경을 포함하고 있을 뿐 아니라 알고리즘과 환경을 변경하고 새로운 환경, 에이전트, 네트워크 등을 추가하는 것이 가능합니다! 이에 따라 현재 진행중인 Drone Delivery Challenge의 환경을 JORLDY에 추가하여 JORLDY에서 제공하는 알고리즘으로 드론 배송 환경을 학습할 수 있도록 하였습니다! 😊

지금부터 어떻게 JORLDY를 통해 드론 배송 환경을 학습하고 제출하는지 과정을 살펴보겠습니다!

JORLDY를 이용한 DroneDelivery 환경 학습

먼저 깃허브에서 JORLDY의 코드를 받으시고 requirements.txt를 이용하여 필요한 라이브러리들을 설치해주세요!

드론 배송 환경의 경우 JORLDY/jorldy/core/env/mlagents/DroneDelivery에 윈도우, 맥, 리눅스 빌드 모두 포함시켜놓았습니다. 단 리눅스의 경우 chmod를 통한 파일 권한 변경을 해주셔야하며 맥 빌드의 경우 조금 더 복잡한 과정을 수행하서야 합니다. 맥 빌드 사용 관련해서는 다음의 링크 내용을 참고해주시기 부탁드립니다.

https://github.com/reinforcement-learning-kr/2021_RLKR_Drone_Delivery_Challenge_with_Unity/discussions/13

먼저 JORLDY 내부의 requirements.txt를 이용하여 JORLDY 0.0.2 버전에 필요한 라이브러리들을 설치합니다.

현재 드론 배송 환경의 경우 PPO, SAC, MPO, V-MPO, ICM PPO, RND PPO 등을 통해 실행이 가능합니다. jorldy/config의 해당 에이전트들의 폴더로 가보시면 drone_delivery_mlagent.py 안에 환경에 대한 config 설정이 되어있는 것을 확인하실 수 있습니다.

아래의 예시는 PPO 내부의 drone_delivery_mlagent.py의 내용입니다.

### PPO Drone Delivery Config ###

env = {"name": "drone_delivery_mlagent", "train_mode": True}

agent = {
    "name": "ppo",
    "network": "continuous_policy_value",
    "head": "multi",
    "gamma": 0.99,
    "batch_size": 32,
    "n_step": 128,
    "n_epoch": 3,
    "_lambda": 0.95,
    "epsilon_clip": 0.1,
    "vf_coef": 1.0,
    "ent_coef": 0.01,
    "clip_grad_norm": 1.0,
}

optim = {
    "name": "adam",
    "lr": 1e-4,
}

train = {
    "training": True,
    "load_path": None,
    "run_step": 30000000,
    "print_period": 10000,
    "save_period": 100000,
    "eval_iteration": 5,
    "record": False,
    "record_period": 300000,
    # distributed setting
    "distributed_batch_size": 256,
    "update_period": agent["n_step"],
    "num_workers": 4,
}

이제 JORLDY/jorldy로 이동하셔서 drone 환경에 대한 학습을 실행합니다. 현재 JORLDY에서는 학습을 위해 3가지 형태의 distributed 구조를 지원합니다. 자세한 내용은 JORLDY 내의 Distributed Architecture에 대해 설명한 문서 링크를 참고 부탁드립니다.