저자: **** Yan Kexi, Jing Yuheng, Liu Zhihao, Feng Xiaokun, Lei Shiqi-** 중국과학원 자동화 연구소
요약
이 강화 학습 실험에서 우리 팀이 선택한 주제는 "강화 학습에 대한 MindSpore 액세스를 위한 새로운 환경/새 알고리즘"입니다. 다중 에이전트 협력 시나리오를 위한 게임 테스트 환경인 SISL(Stanford Intelligent Systems Laboratory)을 MindSpore 플랫폼에 연결하고, 이 실험 환경에서 QMIX 및 MAPPO 알고리즘의 성능 벤치마크 테스트를 구현했습니다. 이번 공유에서는 주제 선택, 환경, 알고리즘, 실험 결과 및 결론의 5가지 측면을 중심으로 해당 소개 및 분석을 수행합니다.
프로젝트 관련 코드는 첨부파일을 참고하세요.
https://gitee.com/lemonifolds/reinforcement/tree/c03e5f8e6104b5880fdfa53d579332078c7dfb99
01
주제 소개
강화학습은 시퀀스 의사결정을 연구하는 학문으로, 에이전트와 환경 간의 상호작용 과정을 분석하여 누적 수익을 극대화하는 최적화 전략을 학습합니다. 그 중 환경은 강화학습에 있어 중요한 요소로, 알고리즘 모델의 입력 데이터 형식을 직접적으로 결정할 뿐만 아니라 강화학습의 연구과제와도 밀접한 관련이 있다. 일부 고전적인 강화 학습 알고리즘은 종종 일부 고전적인 검증 환경을 동반합니다. 예를 들어, 단일 에이전트 인식 및 의사 결정 작업의 경우 고전적인 알고리즘 DQN(Deep Q-learning)[1]이 완전한 정보 제로섬 게임 작업을 위한 고전적인 환경인 Atari 게임에서 검증되었습니다. 및 불완전 정보 다중 플레이어 작업 혼합 게임 작업의 경우 대표작인 AlphaGo[2][3]와 AlphaStar[4]는 해당 검증 환경(Go, StarCraft)에 따라 알고리즘 이름을 지정하기도 했습니다. 이는 강화학습 분야에서 검증환경의 중요한 역할을 보여준다.
강화 학습에 사용되는 환경에는 다양한 유형이 있습니다. 일반적인 환경에는 Gym[5], MuJoCo[6], MPE[7], Atari[1], PySC2[8], SMAC[9], TORCS, ISAAC 등이 있습니다. 현재 StarCraft MindSpore 아키텍처는 각각 단일 에이전트 강화 학습 및 다중 에이전트 강화 학습 시나리오를 지향하는 Gym 및 SMAC(StarCraft Multi-Agent Challenge)라는 두 가지 환경에 연결되어 있습니다. 후자의 경우 스타크래프트 게임의 복잡하고 고차원적인 상태, 행동 및 결정 공간으로 인해 다중 에이전트 강화 학습 알고리즘에 대한 중요한 도전적인 벤치마크가 되었습니다. 그러나 실제 과학 연구에서는 새로운 알고리즘을 제안할 때 일부 소규모 환경(Gym의 Atari 게임 환경 등)에서 먼저 검증하는 경우가 많습니다. 이를 기반으로 우리 팀은 다중 에이전트 시나리오를 위한 소규모 테스트 환경인 SISL(Stanford Intelligent Systems Laboratory)을 선택하고 이를 MindSpore 플랫폼과 연결하여 플랫폼에 보다 다양한 다중 지능 경험 인증 환경을 제공했습니다. 또한 SISL 환경을 위해 두 가지 일반적인 다중 에이전트 강화 학습 알고리즘인 MAPPO [10] 및 QMIX [11]도 구현하고 해당 벤치마크 테스트 결과를 제공했습니다.
다음으로, 이 공유에서는 먼저 연결된 SISL 환경(2장)과 사용된 QMIX 및 MAPPO 알고리즘(3장)에 대한 사전 소개를 제공한 다음, 환경에 액세스하는 구현 프로세스, 실험에서 얻은 벤치마크 테스트 결과를 제공합니다. 실험에서 발생한 문제를 표시하고 분석하고(4장), 마지막으로 실험 결과를 바탕으로 해당 결론을 제시합니다(5장).
02
환경소개
PettingZoo[12]는 다중 에이전트 강화 학습 연구에 일반적으로 사용되는 Python 라이브러리입니다. SISL(Stanford Intelligent Systems Laboratory)은 Multiwalker, Pursuit 및 Waterworld의 세 가지 하위 환경을 포함하는 환경 패키지 중 하나입니다.
PettingZoo의 기본 사용법은 Gym과 유사합니다. 다음은 Waterworld 환경에서 무작위로 작동하는 에이전트를 구축하는 코드 예제입니다.
from pettingzoo.sisl import waterworld_v4
env = waterworld_v4.env(render_mode='human')
env.reset()
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
if termination or truncation:
action = None
else:
action = env.action_space(agent).sample()
env.step(action)
env.close()
다음은 SISL의 세 가지 하위 환경에 대한 소개입니다.
2.1멀티워커
멀티워커 환경에서는 이족 보행 로봇이 화물을 운반하고 오른쪽으로 걸어가려고 합니다. 여러 대의 로봇이 큰 화물을 운반하는데, 아래 그림과 같이 서로 협력해야 합니다.
멀티워커 환경 다이어그램
각 에이전트는 이전 시점과 비교하여 패키지 위치의 변화를 곱한 forward_reward의 반환을 받게 됩니다. 적어도 하나의 패키지가 떨어지거나 패키지가 지형의 왼쪽 경계를 초과하는 경우 환경이 종료되고 각 에이전트는 -100의 이점을 받습니다. 패키지가 지형의 오른쪽 가장자리에서 떨어지면 환경도 0의 이득으로 종료됩니다.
에이전트가 추락하면 추가로 -10의 이점을 받습니다. quit_on_fall = False이면 에이전트가 떨어질 때 환경이 종료되지 않습니다. 그렇지 않으면 에이전트가 떨어질 때 환경이 종료되어 -100의 이점을 가져옵니다. Remove_on_fall = True이면 떨어진 에이전트가 환경에서 제거됩니다. 또한 각 에이전트는 머리 높이를 유지하기 위해 머리 각도 변경의 -5배를 받습니다. shared_reward = True이면 각 에이전트의 개인 보상이 평균화되어 각 에이전트에 반환됩니다.
각 에이전트는 두 다리의 두 관절에 힘을 가하므로 연속적인 행동 공간은 4차원 벡터입니다. 각 에이전트의 관찰 공간은 환경과 주변 에이전트에 대한 노이즈 레이더 데이터, 자신의 신체 각 관절의 각도와 속도, 기타 정보를 포함하는 31차원 벡터입니다.
2.2 추격
추격 환경에서는 아래 그림과 같이 일부 추격 에이전트가 탈출자를 쫓아 포위하려고 합니다(빨간색은 제어된 추격 에이전트, 파란색은 탈출자의 무작위 이동).
추구 환경 다이어그램
기본적으로 16X16 그리드에 탈출자 30명과 추적자 요원 8명이 있으며, 맵 중앙에 장애물(흰색 부분)이 있습니다. 에이전트가 탈출자를 완전히 둘러싸면 주변의 각 에이전트는 5의 이점을 받고 탈출자는 환경에서 제거됩니다. 에이전트가 탈북자를 건드릴 때마다 0.01의 이익을 얻게 됩니다.
각 에이전트에는 위, 아래, 왼쪽, 오른쪽, 정지 등 개별적인 행동 공간이 있습니다. 각 에이전트의 관찰 공간은 이를 중심으로 한 7X7 그리드이며 그림에서 주황색으로 표시됩니다.
2.3 워터월드
Waterworld 환경은 고세균이 환경에서 생존하려고 하는 조건을 시뮬레이션합니다. 각 요원은 아래 그림과 같이 음식을 섭취하고 독소를 피하도록 노력해야 합니다.
워터월드 환경도
입력 매개변수에 따라 에이전트는 음식을 소비하기 위해 협력해야 할 수 있으므로 모델은 협력적이면서 동시에 경쟁적일 수 있습니다. 마찬가지로, 혜택은 에이전트마다 다르거나 평균이 다를 수도 있습니다. 전체 환경은 연속적인 2차원 공간이며, 혜택은 음식과 독소에 대한 노출을 기반으로 합니다.
각 에이전트의 행동 공간은 2차원 벡터, 즉 수평 및 수직 방향의 전진(가속)이다. 각 에이전트의 관찰 공간은 음식, 독소, 기타 에이전트와의 거리 및 음식이나 독소와의 충돌 여부에 대해 각 센서가 수신한 정보이며 매개변수에 따라 전체 차원 은 입니다.
03
알고리즘 소개
본 절에서는 실험에 사용된 MAPPO[10] 알고리즘과 QMIX[11] 알고리즘을 소개한다.
3.1 MAPPO 알고리즘
MAPPO의 전체 이름은 Multi-Agent Proximal Policy Optimization입니다. 이름에서 알 수 있듯이 MAPPO 알고리즘은 다중 지능 환경에서 확장된 고전적인 강화 학습 알고리즘인 PPO[13] 알고리즘입니다. 다중 에이전트 환경의 경우 < > 7-튜플을 사용하여 설명되는 경우가 많습니다. 그 중 n은 에이전트의 수를 나타내고, S는
모든 에이전트의 행동으로 구성된 행동 공간을 나타내며,
전역 상태 s에서 에이전트 i가 얻은 로컬 관찰을 나타냅니다. 완전히 관찰 가능한 환경
)은
공동 행동이 주어지면 s에서 s'로 변환될 확률을 나타냅니다. R(s,A)는 할인
요소를 나타냅니다.
MAPPO 알고리즘은 고전적인 행위자-비평가 구조를 사용하며, 이를 위해서는 정책 네트워크 와 가치 함수
(각각 행위자 및 비평가로서)라는 두 개의 별도 신경망을 훈련해야 합니다.
정책망의 경우 관찰 o_i에서 행동 분포 a_i로의 매핑을 학습하는 데 사용되며 해당 최적화 목표는 다음과 같습니다.
이 중 B는 GAE[14] 방법을 사용하여 계산한 배치 크기의 크기를 나타내며
정책 엔트로피를 나타내고
가중치 계수 하이퍼 매개변수를 나타냅니다.
상태 S에서 보상 추정으로의 매핑을 학습하는 데 사용되는 가치 함수의 경우
해당 최적화 목표는 다음과 같습니다.
여기서 계산된 할인 수익을 나타냅니다. MAPPO는 중앙 집중식 훈련 및 분산 실행 훈련 방법을 채택하므로 가치 함수는 전역 상태를 직접 분할할 수 있는 반면 정책 함수는
각 에이전트의 로컬 관찰 정보 만
처리 할 수 있습니다.
위의 최적화 목적식을 바탕으로 MAPPO의 연산과정을 얻을 수 있으며, 원문[10]에서 제공하는 순환 MAPPO 알고리즘의 처리과정은 다음과 같이 구성된다.
3.1 MAPPO 알고리즘
이 섹션에서 u는 행동을 나타내는 데 사용되며 u 는 행동 관찰 내역을 나타내는 데 사용됩니다. QMIX 알고리즘의 설계 아이디어는 VDN과 유사하며, 전역적인 계산을 통해
각각을 얻을 수 있기를 바랍니다
. 단지 필요하다
그러면 요구 사항이 충족됩니다. 위의 공식이 성립하려면 Q_i에 대해 단조성이 있어야 합니다.
QMIX의 신경망 구조는 아래 그림과 같습니다. QMIX 프레임워크 다이어그램
그림 (c)에 표시된 것처럼 각 에이전트 i에 대해 이를 계산하는 데 사용되는 에이전트 네트워크가 있습니다 . 이 네트워크는 DRQN 네트워크입니다. 즉, DQN의 완전 연결 계층이 GRU로 대체되고, 입력은 시간 t에서의 에이전트 관찰
과 시간 t-1에서의 동작입니다
.
하이브리드 네트워크는 에이전트 네트워크로부터 n개의 출력을 받아 단조롭게 혼합하는 피드포워드 신경망으로 그림 (a)와 같이 출력이 결과가 된다. 하이브리드 네트워크의 가중치는 별도의 슈퍼 네트워크에 의해 생성됩니다. 슈퍼 네트워크는 전역 상태 s_t를 입력으로 사용하여 하이브리드 네트워크 계층의 가중치를 생성합니다. 각 슈퍼네트워크는 하이브리드 네트워크의 가중치가 음수가 되지 않도록 보장하는 절대값 활성화 기능을 갖춘 단일 선형 레이어로 구성됩니다.
QMIX 네트워크는 다음 손실을 최소화하기 위해 엔드 투 엔드로 훈련되었습니다.
그 중 는 대상
네트워크의 매개변수입니다(DQN과 유사).
04
실험 결과
이 섹션에서는 위의 SISL 환경 소개와 MAPPO 및 QMIX 알고리즘을 기반으로 구체적인 실험 분석을 수행합니다. 먼저 SISL 환경의 액세스 프로세스를 소개합니다(섹션 4.1). 그런 다음 원래 MindSporeRL 웨어하우스에서 제공되는 MAPPO 및 QMIX 알고리즘을 기반으로 수정 및 조정을 거쳐 새로 액세스한 환경에 적용하려고 합니다. SISL 환경에서 테스트 실험(섹션 4.2 및 4.3)이 완료되었으며 해당 엔지니어링 개선 사항, 실험 결과 및 생각을 표시하고 소개합니다.
4.1 SISL 환경 접근 프로세스
pip install pettingzoo[sisl] 명령을 사용하여 SISL의 기본 환경 라이브러리를 설치합니다. 물론 다음 방법을 통해 기본 환경을 로컬로 설치할 수도 있습니다.
cd ~/reinforcement/mindspore_rl/environment
git clone https://github.com/Farama-Foundation/PettingZoo.git
cd PettingZoo
pip install -e .[sisl]
이 기본 환경을 기반으로 MindSpore Reinforcement의 기존 환경 캡슐화 모드에 따라 SISL을 캡슐화합니다. 특정 코드 구현은 sisl_environment.py를 참조하세요.
SISL 환경의 Wrapper 클래스는 주로 다음 클래스를 상속합니다.
from mindspore_rl.environment import Environment
MindSpore Reinforcement 및 MindSpore의 훈련 프레임워크와 호환되기 위해 SISL 환경의 Wrapper 클래스에서 다음 데이터 구조를 상속하거나 사용합니다.
import mindspore as ms
from mindspore.ops import operations as P
from mindspore_rl.environment.space import Space
MindSpore Reinforcement의 코드 프레임워크를 관찰한 후 우리는 다양한 알고리즘이 특정 환경에만 적용되며 모든 환경과 알고리즘이 보편적이지 않다는 것을 발견했습니다. 예를 들어 MAPPO 알고리즘은 MPE 환경에만 적용되므로 알고리즘은 연속 벡터 상태 공간과 이산 동작 공간만 지원합니다. 또한 MPE 환경의 구현은 여러 프로세스를 사용하므로 MAPPO 알고리즘도 여러 프로세스에 대해 구현됩니다. .특화된 적응. 또 다른 예로, QMIX 알고리즘은 SMAC 환경에만 적용되므로 알고리즘은 연속 벡터 상태 공간과 이산 동작 공간만 지원합니다. SMAC 환경은 단일 프로세스이므로 QMIX 알고리즘은 단일 프로세스에만 적합합니다. 따라서 MindSpore Reinforcement의 기존 알고리즘은 이산적이고 연속적인 상태 또는 동작 공간을 보편적으로 지원할 수 없으며 상태 공간은 일반적으로 이미지와 같은 다른 형태의 입력에만 적합하며 CNN과 같은 추가 백본 네트워크를 구현해야 합니다. 또한 액세스 환경에는 알고리즘의 단일 프로세스 또는 다중 프로세스 구현을 기반으로 하는 특정 적응이 필요합니다.
QMIX 알고리즘에 적응하기 위해 우리는 SISL 환경 래퍼 클래스 SISLEnvironment의 단일 프로세스 버전을 구현하고 MindSpore Reinforcement 캡슐화 형식에 따라 환경의 모든 API를 캡슐화합니다.
MAPPO 알고리즘에 적응하기 위해 SISL 환경의 다중 프로세스 버전, Wrapper 클래스 SISLMultiEnvironment 및 Python 기반 다중 처리 라이브러리를 구현하여 다중 프로세스 예약 클래스 EnvironmentProcessNew를 구현하고 환경의 모든 API를 캡슐화합니다. MindSpore Reinforcement 캡슐화 형식을 따릅니다.
4.2 MAPPO 알고리즘 벤치마크 테스트 실험
reinforcement_MAPPO
├─ example
│ ├─ make_plot.py
│ ├─ scripts
│ │ ├─ mappo_train_log.txt
│ │ └─ run_standalone_train.sh
│ └─ train_SISL.py
└─ mindspore_rl
├─ algorithm
│ ├─ config.py
│ ├─ config_SISL.py
│ ├─ mappo.py
│ ├─ mappo_replaybuffer.py
│ ├─ mappo_session.py
│ ├─ mappo_trainer.py
│ ├─ mappo_vmap.py
│ ├─ mappo_vmap_trainer.py
│ ├─ mpe
│ ├─ mpe_environment.patch
│ ├─ mpe_environment.py
│ ├─ on-policy
│ ├─ sisl_environment.py
│ └─ __init__.py
└─ environment
└─ sisl_environment.py
MAPPO 알고리즘으로 구현된 SISL 환경 코드 트리
MAPPO**** 알고리즘은 환경과 분리됩니다.
Shengsi Mindspore의 MAPPO는 기본적으로 MPE 환경에 연결되어 있으며 팀 구성원의 시도에서 MPE 환경에서 직접 실행될 수 있으며 환경과의 상호 작용, 교육, 매개 변수 업데이트 등의 단계를 성공적으로 완료하여 정확성을 보장합니다. MAPPO 알고리즘 코드의 . SISL에는 Multiwalker, Pursuit, Waterworld 등 실험 환경마다 다른 맵이 있습니다. 하지만 config.py 파일을 직접 변경하는 것은 SISL 환경에서 성공적으로 실행되지 않습니다. 팀 구성원 간의 연구와 토론을 통해 그들은 MindSpore 프레임워크의 MAPPO 구현에서 MAPPO 알고리즘이 환경과 고도로 결합되어 있음을 발견했습니다. 예를 들어 MAPPOSession.py에서는 에이전트 수, 상태 차원 관찰 차원, 실행 가능한 조치 차원 등 모든 환경 관련 변수가 sisl_environment.py에서도 마찬가지로 환경 변수가 아닌 특정 값으로 구현됩니다. 명시적으로 정의된 에이전트 수와 같은 구성 매개변수 변수가 제거됩니다. 이 명시적 정의는 config.py 파일에 대한 변경 사항이 알고리즘 내부로 전달되는 것을 방지하여 기능 입력 네트워크의 인터페이스에서 런타임 오류가 발생합니다.
우리는 원래 알고리즘을 개선하고 환경에서 디커플링 부분을 추가했습니다. 이를 통해 프레임워크는 config.py 파일에서 해당 환경 정보를 올바르게 읽고 환경 정보를 올바르게 사용하여 알고리즘에 전달함으로써 환경과 디커플링을 실제로 실현할 수 있습니다. MAPPO 알고리즘.
SISL 환경에 대한 MAPPO 액세스****
위 작업이 완료된 후 MAPPO 알고리즘이 정확하고 구성 파일의 매개변수가 알고리즘에 올바르게 전달될 수 있는지 확인할 수 있습니다. 그 후 팀원들은 SISL 환경에 연결하기 시작했습니다. MindSpore 프레임워크에서는 다양한 알고리즘이 다양한 환경에 대응하고 실행도 다릅니다. 디버깅 과정에서 멀티스레드 버전의 SISL 환경에서는 멀티스레드 스레드 수와 각 스레드에 존재하는 환경 수가 직접 변경될 수 없다는 사실을 발견했습니다. 또한 코드 실행 중에 데이터 유형 불일치로 인해 알고리즘이 특정 지점에서 중단될 수 있습니다. 예를 들어 numpy.int32는 int32와 호환되지 않아 환경 문제가 발생합니다. 변환, 환경에서 반환되는 것은 작업의 원-핫 인코딩이며, 이는 훈련 및 기타 문제를 위해 정의된 mappo 네트워크에 직접 입력할 수 없습니다.
데이터 유형 및 환경과의 상호 작용 문제를 해결한 후 팀원들은 SISL 환경에서 MAPPO를 교육했지만 기본 교육 코드에 따라 프로그램은 19회 교육 후에 오류를 보고하고 종료되었습니다. 원래 훈련 코드에 따라 팀원들 사이에서 논의하고 한 줄씩 디버깅한 후, 각 훈련 후에는 에피소드를 종료하기 위한 잘림 프롬프트 정보가 포함되어 있지 않으므로 다음 훈련 라운드가 시작되면 이전 환경의 환경이 해당 상태에서 실행이 시작되며 이전 환경 라운드의 실행 단계 수는 지워지지 않습니다. Pursuit 환경은 최대 실행 단계 수로 설정되어 있으므로 해당 환경의 최대 실행 횟수까지 실행한 후 환경 프레임워크에 따라 sisl_environment.py의 실행 함수에서 실행되는 모든 보상 및 관찰이 최종 단계 환경은 지워지고 실행 함수는 삭제되지 않습니다. 지워진 변수는 처리되지 않으므로 함수 실행 중에 환경에서 지정한 최대 단계 수에 도달할 때마다 프로그램이 충돌하는 이유이기도 합니다. 프로그램이 19개의 훈련 에피소드마다 오류를 보고하는 이유. 따라서 팀원들은 설정된 최대 개수에 도달했는지 확인하기 위한 테스트를 추가했습니다. 최대 개수에 도달하면 환경이 잘림 신호를 보내고 실행 기능을 종료하고 환경을 재설정합니다.
위의 어려움을 해결한 후 MAPPO 알고리즘은 SISL 환경에서 성공적으로 실행될 수 있었습니다. MAPPO에 필요한 상태 정보를 모든 에이전트 관찰의 연결로 설정하고 최대 500개의 에피소드를 실행합니다. 각 에피소드에는 500개의 시간 단계가 포함됩니다. SISL 환경에서 MAPPO 실험을 수행하고 훈련 중에 보상 및 손실 곡선을 그립니다. 훈련이 완료되면 다음과 같은 결과를 얻습니다.
4.3 QMIX 알고리즘 벤치마크 테스트 실험
reinforcement_QMIX
├─ example
│ ├─ qmix
│ │ ├─ eval.py
│ │ ├─ scripts
│ │ │ ├─ run_standalone_eval.sh
│ │ │ └─ run_standalone_train.sh
│ │ └─ train.py
│ └─ __init__.py
└─ mindspore_rl
├─ algorithm
│ ├─ qmix
│ │ ├─ config.py
│ │ ├─ qmix.py
│ │ ├─ qmix_session.py
│ │ ├─ qmix_trainer.py
│ │ ├─ _config.py
│ │ ├─ __init__.py
│ └─ __init__.py
└─ environment
├─ sc2_environment.py
└─ sisl_environment.py
QMIX 알고리즘으로 구현된 SISL 환경 코드 트리
QMIX 알고리즘 수정
구현 중에 MindSpore 프레임워크에서 원래 QMIX 알고리즘과 해당 실험 환경 SMAC가 실행될 수 없으며 eval.py 루틴도 오류를 보고하고 실행될 수 없음을 발견했습니다. 따라서 알고리즘의 정확성과 환경의 타당성을 테스트하기 위해 먼저 QMIX 알고리즘과 프레임워크에 구현된 해당 환경을 수정했습니다.
MindSpore 프레임워크를 처음 사용했기 때문에 팀원들은 실험 중에 프레임워크의 오류 메시지가 명확하지 않다는 것을 발견했습니다. 팀원들 간의 논의와 협력을 통해 이는 프레임워크에서 상속과 오버로딩을 반복적으로 사용하고, 계산을 위해 Python 언어를 cpp 계산 그래프로 변환하는 기본 컴퓨팅 로직에 따른 것으로 밝혀졌습니다. 동일한 오류가 보고되고 프레임워크의 디버거가 항상 해당 오류 위치를 반환할 수 있는 것은 아닙니다.
Line-by-line 디버깅을 통해 구현된 QMIXTrainer 클래스에서 save_reward가 반환되어야 하는데 SMAC 환경에서는 Step_info가 잘못 반환되는 것을 발견했습니다. 디버깅 후 SMAC 환경 중 하나에서 QMIX 알고리즘을 올바르게 확인할 수 있습니다.
환경에서 QMIX 알고리즘 분리
SMAC는 팀원들의 이전 경험을 바탕으로 Shengsi MindSpore에서 구현한 2s3z를 비롯해 3m, 3s5z 등 실험 환경으로 다양한 맵을 보유하고 있습니다. 그러나 문서에 설명된 대로 해당 config.py 파일을 변경하면 원본 프로그램을 직접 실행할 수 없습니다. 팀 구성원 간의 연구와 토론을 통해 그들은 MindSpore 프레임워크의 QMIX 구현에서 QMIX 알고리즘이 환경과 고도로 결합되어 있음을 발견했습니다. 예를 들어 QMIXTrainer에서는 에이전트 수 Agent_num, 관찰 차원 obs_shape, 실행 가능한 행동 차원 등 거의 모든 환경 관련 변수가 환경 변수가 아닌 특정 값으로 구현됩니다.
-
위의 평가() 함수는 훈련 및 테스트 단계에서 재사용되며 위와 같은 문제가 발생합니다. 기능적 혼란을 피하기 위해 여기에서 분리하십시오.
-
Agent_num, obs_shape 및 기타 변수는 환경과 관련이 있으며 알고리즘과는 아무런 관련이 없습니다. 환경에서 알고리즘을 분리하고 프레임워크 사양을 준수하기 위해 MindSporeRL의 문서에 따라 지역 변수가 추가되고 코드가 리팩터링되었습니다.
요약하면 프레임워크 디버깅 및 수정을 통해 환경과 알고리즘 간의 과도한 결합 문제를 해결하고 QMIX 알고리즘과 SMAC 환경의 분리를 진정으로 달성했습니다. 또한 프레임워크의 후속 사용자의 편의를 위해 원래 코드 저장소에 이 버전의 코드에 대한 풀 요청을 제출했습니다.
3s5z 환경에서 코드를 사용하여 QMIX를 테스트하면 다음과 같은 결과를 얻습니다.
SISL 환경에 대한 QMIX 액세스
위 작업이 완료되면 QMIX 알고리즘이 올바른지 확인하고 해당 SMAC 환경에서 해당 결과를 얻을 수 있습니다. 그 후 팀원들은 SISL 환경에 연결하기 시작했습니다. 앞서 언급했듯이 MindSpore 프레임워크에서는 서로 다른 알고리즘이 서로 다른 환경에 대응하고 서로 다른 실행을 갖습니다. QMIX 알고리즘은 단일 스레드 버전만 구현하므로 앞서 언급한 MAPPO 환경과 상호 운용되지 않습니다. 디버깅 과정에서 우리는 SISL 환경의 단일 스레드 버전이 정상적으로 실행될 수 없다는 것을 발견했습니다. 오류 위치를 찾기가 어렵습니다. 내용은 다음과 같습니다. Python 인스턴스를 C++ 유형으로 캐스팅할 수 없습니다.
팀원들은 한 줄씩 논의하고 디버깅한 결과 MindSpore 프레임워크가 Cpp 하단 레이어를 사용하여 계산 가속화를 위한 계산 그래프로 컴파일하므로 Python에서 cpp로 변환하는 프로세스가 있으며 이 프로세스는 이전 프로세스와 약간 다르다는 것을 발견했습니다. 전통적인 Python 실행 프로세스. 전통적인 Python 프로그램은 해석된 언어이며 프로그램은 거의 한 줄씩 실행되지만, 컴파일된 언어인 cpp는 완전히 컴파일되어 실행되어야 합니다. 이 때문에 팀원들은 이러한 혼합이 위에서 언급한 불명확한 오류 보고 문제로 이어진다고 추측했습니다. 동시에, 프로그램을 작성하는 과정에서 항상 각 변수의 데이터 유형을 확인해야 합니다. 기존 Python과 달리 numpy.int32는 int32와 호환되지 않으므로 많은 시간이 소요됩니다. 환경부터 알고리즘까지 각 단계의 데이터 유형을 확인합니다.
어려움에 직면한 그룹의 학생들은 환경과 알고리즘에서 각 데이터의 데이터 유형을 차례로 확인하려고 시도했지만 여전히 문제가 발생한 특정 변수와 문제가 발생한 위치를 찾을 수 없었습니다. 또한 SISL 환경의 다중 프로세스 버전을 구현하고 MAPPO 코드를 실행했습니다. 토론 후 팀원들은 데이터 유형과 그것이 호출하는 기본 C++ 데이터 유형 간의 불일치로 인해 문제가 발생했다는 결론을 내렸습니다. 단일 지점 디버깅을 통해 문제를 찾는 것은 어렵습니다. 컴파일 및 디버깅을 시도해야 합니다. 동시에 이 문제는 강화 학습 과정의 내용과 거의 관련이 없기 때문에 단일 프로세스 SISL 환경에서 QMIX 알고리즘 구현을 디버깅하는 데 계속 시간을 소비하지 않았습니다.
05
결론적으로
이번 강화 학습 실험에서 우리 팀은 다중 에이전트 협력 시나리오를 위한 게임 테스트 환경인 SISL(Stanford Intelligent Systems Laboratory)을 MindSpore 플랫폼에 성공적으로 연결하고 이를 수행하기 위해 QMIX 및 MAPPO 알고리즘을 사용하려고 했습니다. 실험 환경. 과제에 제시된 다양한 요구 사항을 완료한 후에는 MindSpore의 기본 아키텍처에 대해 더 깊이 이해하게 되므로 향후 과학 연구 활동에 MindSporeRL 라이브러리를 더욱 능숙하게 적용하는 데 도움이 될 것입니다.
참고자료
[1]. Mnih V, Kavukcuoglu K, Silver D, 외. 심층 강화 학습으로 Atari를 플레이합니다[J]. arXiv 사전 인쇄 arXiv:1312.5602, 2013.
[2]. 실버 D, 황 A, 매디슨 CJ, 외. 심층 신경망과 트리 검색으로 바둑 게임을 마스터하세요[J]. 자연, 2016, 529(7587): 484-489.
[삼]. 실버 D, Schrittwieser J, Simonyan K, 외. 인간의 지식 없이 바둑 게임을 마스터한다[J]. 자연, 2017, 550(7676): 354-359.
[4]. Vinyals O, Babuschkin I, Czarnecki WM 등. 다중 에이전트 강화 학습[J]을 사용하는 스타크래프트 II의 그랜드마스터 레벨. 자연, 2019, 575(7782): 350-354.
[5]. Brockman G, Cheung V, Pettersson L, 외. Openai 체육관[J]. arXiv 사전 인쇄 arXiv:1606.01540, 2016.
[6]. Todorov E, Erez T, Tassa Y. Mujoco: 모델 기반 제어를 위한 물리 엔진[C]//2012 지능형 로봇 및 시스템에 관한 IEEE/RSJ 국제 회의. IEEE, 2012: 5026-5033.
[7]. Mordatch I, Abbeel P. 다중 에이전트 집단에서 기반 구성 언어의 출현[C]//인공 지능에 관한 AAAI 회의 절차. 2018, 32(1).
[8]. Romo L, Jain M. PySC2 강화 학습[J].
[9]. Samvelyan M, Rashid T, De Witt CS, 외. 스타크래프트 다중 에이전트 챌린지[J]. arXiv 사전 인쇄 arXiv:1902.04043, 2019.
[10]. Yu C, Velu A, Vinitsky E, 외. 다중 에이전트 협력 게임에서 PPO의 놀라운 효율성[J]. 신경 정보 처리 시스템의 발전, 2022, 35: 24611-24624.
[11]. Rashid T, Samvelyan M, De Witt CS, 외. 심층 다중 에이전트 강화 학습을 위한 단조로운 가치 함수 인수분해[J]. 기계 학습 연구 저널, 2020, 21(1): 7234-7284.
[12]. https://pettingzoo.farama.org/environments/sisl/
[13]. Schulman J, Wolski F, Dhariwal P, 등. 근접 정책 최적화 알고리즘[J]. arXiv 사전 인쇄 arXiv:1707.06347, 2017.
[14]. 존 슐만, 필립 모리츠, 세르게이 레빈, 마이클 조던, 피터 아빌. 일반화된 이점 추정을 사용한 고차원 연속 제어. 학습 표현에 관한 국제 회의(ICLR) 간행물, 2016.
1990년대에 태어난 프로그래머가 비디오 포팅 소프트웨어를 개발하여 1년도 안 되어 700만 개 이상의 수익을 올렸습니다. 결말은 매우 처참했습니다! Google은 Flutter, Dart 및 Python 팀의 중국 코더의 "35세 저주"와 관련된 정리해고를 확인했습니다 . | Daily Windows 1.0용 Arc Browser가 3개월 만에 공식적으로 GA Windows 10 시장 점유율이 70%에 도달했으며 Windows 11 GitHub는 AI 기본 개발 도구 GitHub Copilot Workspace JAVA를 계속해서 출시했습니다 . OLTP+OLAP을 처리할 수 있는 유일한 강력한 유형의 쿼리입니다. 우리는 너무 늦게 만났습니다 .