- 如果你想要高样本效率,请使用qmix_high_sample_efficiency.yaml
- 它使用4个进程进行训练,速度较慢但样本效率更高。
- 使用不同进程数量训练的模型性能*不*具有可比性。
PyMARL2
开源代码用于重新思考合作多智能体强化学习中的实现技巧和单调性约束。
此代码库针对星际争霸多智能体挑战赛(SMAC)进行了优化。对于其他多智能体任务,我们还推荐一个经过优化的QMIX实现:https://github.com/marlbenchmark/off-policy。
星际争霸2版本:SC2.4.10。难度:7。
2022年10月10日更新:添加qmix_high_sample_efficiency.yaml,使用4个进程进行训练,速度较慢但样本效率更高。
2021年10月28日更新:添加Google足球环境[vdn_gfootball.yaml](使用"simple115特征")。
2021年10月4日更新:为通信任务添加带注意力机制的QMIX (qmix_att.yaml)作为基准。
优化的QMIX
多智能体强化学习(MARL)中存在许多代码级技巧,例如:
- 值函数裁剪(为QMIX裁剪最大Q值)
- 值归一化
- 奖励缩放
- 正交初始化和层缩放
- Adam
- 神经网络隐藏层大小
- 学习率退火
- 奖励裁剪
- 观察归一化
- 梯度裁剪
- 大批量大小
- N步回报(包括GAE($\lambda$)和Q($\lambda$)等)
- 回滚进程数量
- $\epsilon$-贪婪退火步数
- 死亡智能体掩码
相关工作
- 深度强化学习中的实现很重要:以PPO和TRPO为例的研究
- 在策略强化学习中什么是重要的?大规模实证研究
- MAPPO在合作多智能体游戏中的惊人有效性
使用上述几个技巧(粗体文本),我们使QMIX(qmix.yaml)能够解决几乎所有SMAC的困难场景(针对每个场景优化的超参数)。
场景 | 难度 | QMIX (batch_size=128) | 优化的QMIX |
---|---|---|---|
8m | 简单 | - | 100% |
2c_vs_1sc | 简单 | - | 100% |
2s3z | 简单 | - | 100% |
1c3s5z | 简单 | - | 100% |
3s5z | 简单 | - | 100% |
8m_vs_9m | 困难 | 84% | 100% |
5m_vs_6m | 困难 | 84% | 90% |
3s_vs_5z | 困难 | 96% | 100% |
bane_vs_bane | 困难 | 100% | 100% |
2c_vs_64zg | 困难 | 100% | 100% |
corridor | 超级困难 | 0% | 100% |
MMM2 | 超级困难 | 98% | 100% |
3s5z_vs_3s6z | 超级困难 | 3% | 93%(hidden_size = 256,qmix_large.yaml) |
27m_vs_30m | 超级困难 | 56% | 100% |
6h_vs_8z | 超级困难 | 0% | 93%($\lambda$ = 0.3,epsilon_anneal_time = 500000) |
重新评估
之后,我们使用标准化的技巧(一套通用超参数)重新评估了多个QMIX变体,发现QMIX达到了最先进的水平。
场景 | 难度 | 基于价值的 | 基于策略的 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
QMIX | VDNs | Qatten | QPLEX | WQMIX | LICA | VMIX | DOP | RIIT | ||
2c_vs_64zg | 困难 | 100% | 100% | 100% | 100% | 100% | 100% | 98% | 84% | 100% |
8m_vs_9m | 困难 | 100% | 100% | 100% | 95% | 95% | 48% | 75% | 96% | 95% |
3s_vs_5z | 困难 | 100% | 100% | 100% | 100% | 100% | 96% | 96% | 100% | 96% |
5m_vs_6m | 困难 | 90% | 90% | 90% | 90% | 90% | 53% | 9% | 63% | 67% |
3s5z_vs_3s6z | 超难 | 75% | 43% | 62% | 68% | 56% | 0% | 56% | 0% | 75% |
corridor | 超难 | 100% | 98% | 100% | 96% | 96% | 0% | 0% | 0% | 100% |
6h_vs_8z | 超难 | 84% | 87% | 82% | 78% | 75% | 4% | 80% | 0% | 19% |
MMM2 | 超难 | 100% | 96% | 100% | 100% | 96% | 0% | 70% | 3% | 100% |
27m_vs_30m | 超难 | 100% | 100% | 100% | 100% | 100% | 9% | 93% | 0% | 93% |
离散PP | - | 40 | 39 | - | 39 | 39 | 30 | 39 | 38 | 38 |
平均得分 | 困难+ | 94.9% | 91.2% | 92.7% | 92.5% | 90.5% | 29.2% | 67.4% | 44.1% | 84.0% |
通信
我们还在一些需要通信的地图上测试了带注意力机制的QMIX(qmix_att.yaml,$\lambda=0.3$,attention_heads=4)(来自NDQ)。
场景(200万步) | 难度 | 微调QMIX(无通信) | 带注意力机制的QMIX(有通信) |
---|---|---|---|
1o_10b_vs_1r | - | 56% | 87% |
1o_2r_vs_4r | - | 50% | 95% |
bane_vs_hM | - | 0% | 0% |
谷歌足球
我们还在一些地图上测试了VDN(vdn_gfootball.yaml)(来自Google Football)。特别地,我们使用"simple115特征"来训练模型(谷歌足球原始论文使用复杂的"CNN特征")。我们没有测试QMIX,因为这个环境不提供全局状态信息。
场景 | 难度 | VDN ($\lambda=1.0$) |
---|---|---|
academy_counterattack_hard | - | 0.71 (测试得分) |
academy_counterattack_easy | - | 0.87 (测试得分) |
使用说明
PyMARL 是 WhiRL 的深度多智能体强化学习框架,包含以下算法的实现:
基于价值的方法:
- QMIX: QMIX:用于深度多智能体强化学习的单调值函数分解
- VDN: 用于合作多智能体学习的值分解网络
- IQL: 独立 Q 学习
- QTRAN: 通过转换学习分解以实现合作多智能体强化学习
- Qatten: Qatten:合作多智能体强化学习的通用框架
- QPLEX: Qplex:双重对偶多智能体 Q 学习
- WQMIX: 加权 QMIX:扩展单调值函数分解
演员评论家方法:
- COMA: 反事实多智能体策略梯度
- VMIX: 值分解多智能体演员评论家
- LICA: 学习隐式信用分配以实现合作多智能体强化学习
- DOP: 离线多智能体分解策略梯度
- RIIT: 重新思考合作多智能体强化学习中的实现技巧和单调性约束
安装说明
安装 Python 包
# 需要 Anaconda 3 或 Miniconda 3
conda create -n pymarl python=3.8 -y
conda activate pymarl
bash install_dependecies.sh
设置星际争霸 II (2.4.10) 和 SMAC:
bash install_sc2.sh
这将把 SC2.4.10 下载到 3rdparty 文件夹中,并复制运行所需的地图。
设置 Google Football:
bash install_gfootball.sh
命令行工具
运行实验
# 对于 SMAC
python3 src/main.py --config=qmix --env-config=sc2 with env_args.map_name=corridor
# 对于难度增强的捕食者-猎物
python3 src/main.py --config=qmix_predator_prey --env-config=stag_hunt with env_args.map_name=stag_hunt
# 对于通信任务
python3 src/main.py --config=qmix_att --env-config=sc2 with env_args.map_name=1o_10b_vs_1r
# 对于 Google Football(测试不充分)
# map_name: academy_counterattack_easy, academy_counterattack_hard, five_vs_five...
python3 src/main.py --config=vdn_gfootball --env-config=gfootball with env_args.map_name=academy_counterattack_hard env_args.num_agents=4
配置文件作为算法或环境的默认设置。
它们都位于 src/config
中。
--config
指的是 src/config/algs
中的配置文件
--env-config
指的是 src/config/envs
中的配置文件
运行 n 个并行实验
# bash run.sh 配置名称 环境配置名称 地图名称列表 (参数列表 线程数 GPU列表 实验次数)
bash run.sh qmix sc2 6h_vs_8z epsilon_anneal_time=500000,td_lambda=0.3 2 0 5
xxx_list
用 ,
分隔。
所有结果将存储在 Results
文件夹中,并以 map_name
命名。
终止所有训练进程
# 当前用户的所有 python 和游戏进程都将退出。
bash clean.sh
引用
@article{hu2021rethinking,
title={Rethinking the Implementation Tricks and Monotonicity Constraint in Cooperative Multi-Agent Reinforcement Learning},
author={Jian Hu and Siyang Jiang and Seth Austin Harding and Haibin Wu and Shih-wei Liao},
year={2021},
eprint={2102.03479},
archivePrefix={arXiv},
primaryClass={cs.LG}
}