Multi-Agent Particle Environment(MPE)
介绍
Multi-Agent Particle Environment(MPE)是由OpenAI开源的一款多智能体强化学习实验平台,以OpenAI的gym为基础,使用Python编写而成。它创造了一个简单的多智能体粒子世界,粒子们可以进行连续的观察和离散的动作。
安装配置
- 实验环境
Python 3.6.4
Windows 10
OpenAI gym 0.10.5
Numpy
Pyglet 1.2.0
- 配置步骤
cd
至根目录下,执行pip install -e .
安装环境。- 运行程序
python bin/interactive.py --scenario simple.py
Demo运行
- 环境说明
Env Name | Communication | Competitive | Notes |
---|---|---|---|
simple.py |
无 | 有 | 单agent趋近landmark点,以距离landmark的距离远近作为reward。这不是一个多智能体环境,只是用来调试policy的。 |
simple_adversary.py (身体欺骗) |
无 | 有 | 1 个adversary (红球), N个agent(绿球), N 个landmark (大部分情况下 N=2). 所有agent可以观察landmark和其他agent的位置。其中一个landmark为目标landmark(绿色)。Agent们以它们中的任何一个距离目标landmark的距离为reward,但若adversary靠近目标landmark,将会得到negative reward。Adversary 以距离目标landmark的距离作为回报,但它并不知道哪个是landmark。因此,agent将不得不学习“分散”策略,从而到达各个landmark,混淆adversary。 |
simple_crypto.py (加密通信) |
有 | 有 | 两个agent(Alice和Bob),一个adversary。Alice会通过一个公共频道传输一条私密消息给Bob。Alice和Bob的reward是基于Bob是否良好的重构了这条消息,但如果adversary可以理解这条信息,他们就将受到negative reward。Alice和Bob在每个周期开始时会随机产生一个private key,他们必须学习如何利用它来加密消息。 |
simple_push.py (逼开) |
无 | 有 | 一个agent, 1个adversary, 1 个landmark。 Agent以到landmark的距离作为reward。Adversary 以接近landmark和使agent远离landmark作为reward。因此adversary将会学习如何将agent赶离landmark。 |
simple_reference.py |
有 | 无 | 2个agent, 3个不同颜色的landmark。每个agent都想到达他们的目标landmark,但是这个landmark只有对方知道。在这里Reward是集体的。因此agent必须学会如何告诉对方它的目标,以及如何到达该目标。这个场景跟simple_speaker_listener是一样的,即agent们都各是speaker又是listener。 |
simple_speaker_listener.py (合作交流) |
有 | 无 | 和simple_reference基本相同,但在这个场景中:其中一个agent为speaker(灰色),它并不移动,只是观察另一个agent的目标, 另一个agent为listener,它无法说话,但必须到达正确的目标。 |
simple_spread.py (合作导航) |
无 | 无 | N个agent, N个landmark。 Agent以他们到每个landmark的距离作为reward。Agent之间发生碰撞时会受到惩罚。因此,agent们必须学会在避免碰撞的前提下覆盖所有的landmark。 |
simple_tag.py (捕捉) |
无 | 有 | 捕捉-逃跑环境。agents(绿色)速度更快,它们想要躲避adversary(红色)的捕捉。Adversary稍慢,他们想要捕捉agent。Obstacle (大黑圈) 挡在了路中央。 |
simple_world_comm.py |
有 | 有 | 在文章所附的视频中的环境。和simple_tag基本相同,但在这个场景中(1)agent靠近food(小蓝球)会受到reward;(2)forest 可以供agent躲藏;(3)leader adversary可以随时看到所有的agent,并且可以与其他adversary进行通信交流,协调捕捉策略。 |
- 环境运行常见问题
- 无法打开可视化终端
问题原因:Pyglet
版本问题
解决方法:安装pyglet1.2.0
- 无法打开可视化终端
simple_world_comm
simple_reference
运行报错AssertionError: nvec should be a 1d array (or list) of ints
问题原因:gym 0.10.5
环境下spaces-multi_discrete_py
中函数定义冲突
解决办法:使用gym 0.9.4
下的multi_discrete_py
替换simple_crypto
运行报错:TypeError: set_color() got multiple values for argument 'alpha'
问题原因:rendering
函数下set_color()
参数问题
解决方法:暂未找到。。
Multi-Agent Deep Deterministic Policy Gradient (MADDPG)
介绍
Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments提出的MADDPG算法(混合合作-竞争环境下的多智能体Actor-Critic)的代码。必须在Multi-Agent Particle Environments (MPE)的环境运行。
安装配置
- 实验环境
Python 3.6.4
Windows10
OpenAI gym 0.10.5
Numpy
Tensorflow
Pyglet 1.2.0
- 配置步骤
cd
至根目录下,执行pip install -e .
,安装环境。- 安装
multiagent-particle-envs
,并确保将其添加到PYTHONPATH
环境变量中。 cd
至experiments
目录下,运行程序python train.py --scenario simple
命令参数说明
环境选项
--scenario
: MPE中的环境 (默认:"simple"
)--max-episode-len
环境的每个周期的长度 (默认:25
)--num-episodes
训练周期总数 (默认:60000
)--num-adversaries
: 环境中的adversary数量 (默认:0
)--good-policy
: 环境中good policy算法(默认:"maddpg"
; 选项: {"maddpg"
,"ddpg"
})--adv-policy
: 环境中adversary policy算法(默认:"maddpg"
; 选项: {"maddpg"
,"ddpg"
})
核心训练参数
--lr
: 学习速率 (默认:1e-2
)--gamma
: 损失因子(discount factor) (默认:0.95
)--batch-size
: Batch大小 (默认:1024
)--num-units
: 多层神经网络层数 (默认:64
)
保存
--exp-name
: 实验的名称,用以保存结果。 (默认:None
)--save-dir
: 保存训练结果和模型的位置 (默认:"/tmp/policy/"
)--save-rate
: 模型将会以这个周期频率进行保存 (默认:1000
)--load-dir
: 载入训练结果和模型的位置 (默认:""
)
评估
--restore
: 恢复在load-dir
的训练结果, 并且继续训练 (默认:False
)--display
: 展示训练结果, 但不继续训练 (默认:False
)--benchmark
: 对训练结果进行基准评估, 保存结果到benchmark-dir
文件夹 (默认:False
)--benchmark-iters
: 执行基准评估的训练周期 (默认:100000
)--benchmark-dir
: 存放基准数据的目录 (默认:"./benchmark_files/"
)--plots-dir
: 存放训练曲线的目录 (默认:"./learning_curves/"
)
Demo
进行训练
python train.py --scenario simple_push --num-episodes 1000000 --exp-name exp1 --save-dir dir
训练结果可视化
python train.py --scenario simple_push --load-dir dir --display
- 继续训练
python train.py --scenario simple_push --load-dir dir --restore --num-episodes 80000