다중 에이전트 강화학습(Multi-Agent Reinforcement Learning, MARL)은 여러 에이전트가 공유 환경에서 상호작용하며 각자 또는 협력하여 목표를 달성하는 강화학습 분야다. 게임 AI, 자율주행, 로봇 협력 등에 적용된다.
핵심 분류
| 유형 | 목표 | 예시 |
|---|
| 협력적(Cooperative) | 공통 보상 최대화 | 팀 스포츠, 드론 편대 |
| 경쟁적(Competitive) | 제로섬 | 바둑, 포커 |
| 혼합(Mixed) | 부분 협력/경쟁 | 축구, 거래 |
CTDE 패러다임
중앙집중 학습 + 분산 실행(Centralized Training, Decentralized Execution):
python
import torch
import torch.nn as nn
class CentralCritic(nn.Module):
"""전체 에이전트 관측+행동 → 전체 상태 가치"""
def __init__(self, n_agents, obs_dim, act_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(n_agents * (obs_dim + act_dim), 256), nn.ReLU(),
nn.Linear(256, 256), nn.ReLU(),
nn.Linear(256, 1)
)
def forward(self, obs_all, act_all):
x = torch.cat([obs_all.flatten(1), act_all.flatten(1)], dim=-1)
return self.net(x)
class LocalActor(nn.Module):
"""개별 에이전트 관측 → 행동 (실행 시 독립)"""
def __init__(self, obs_dim, act_dim, hidden=128):
super().__init__()
self.net = nn.Sequential(
nn.Linear(obs_dim, hidden), nn.ReLU(),
nn.Linear(hidden, hidden), nn.ReLU(),
nn.Linear(hidden, act_dim)
)
def forward(self, obs): return self.net(obs)
class MADDPG:
"""Multi-Agent DDPG"""
def __init__(self, n_agents, obs_dim, act_dim):
self.actors = [LocalActor(obs_dim, act_dim) for _ in range(n_agents)]
self.critics = [CentralCritic(n_agents, obs_dim, act_dim) for _ in range(n_agents)]
self.n_agents = n_agents
| 알고리즘 | 방식 | 특징 |
|---|
| IQL | 독립 Q-러닝 | 단순, 비정상성 문제 |
| MADDPG | 중앙 크리틱 | 연속 행동 공간 |
| QMIX | 단조 가치 혼합 | 협력 최적화 |
| MAPPO | 중앙 크리틱+PPO | 안정적 |
| AlphaStar | 계층적 | StarCraft II 달성 |
도전 과제
1. 비정상성(Non-stationarity): 다른 에이전트가 동시에 정책을 변경
2. 크레딧 할당: 팀 보상을 개별 기여로 분해
3. 확장성: 에이전트 수 증가 시 상태·행동 공간 폭증
4. 통신: 에이전트 간 정보 공유 최적화
관련 개념
- •PPO (근위 정책 최적화)
- •Q-러닝
- •게임 이론