多智能体强化学习算法及环境


多智能体强化学习算法及环境

Pytorch实现的多智能体强化学习算法,包括IQL、QMIX、VDN、COMA、QTRAN(QTRAN-base和QTRAN-alt)、MAVEN、CommNet、DyMA-CL和G2ANet,这些都是最先进的MARL算法。SMAC是星际争霸II的分散式微观管理场景。

项目地址:

https://github.com/starry-sky6688/StarCraft

运行:

python main.py --map=3m --alg=qmix

直接运行 ,然后算法将在map上开始训练。

MRL环境配置

星际争霸II 环境: https://github.com/oxwhirl/smac

安装星际争霸 II

SMAC基于星际争霸II的完整游戏(版本>= 3.16.1)。要安装游戏,请按照下面的命令操作。

  1. Linux

请使用暴雪的存储库下载 Linux 版本的《星际争霸 II》。默认情况下,游戏应位于目录中。这可以通过设置环境变量来更改。~/StarCraftII/SC2PATH

  1. MacOS/Windows

请从Battle.net安装星际争霸 II。免费的入门版也有效。如果您使用默认安装位置,PySC2 将找到最新的二进制文件。否则,与Linux版本类似,您需要使用游戏的正确位置设置环境变量。SC2PATH

SMAC 地图

SMAC由许多具有预配置地图的战斗场景组成。在SMAC可以使用之前,这些地图需要下载到星际争霸II的目录中。Maps

下载SMAC地图并将其解压缩到您的目录中。如果您通过 git 安装了 SMAC,只需将目录从复制到目录中即可。

在根目录下新建一个文件夹Maps

将文件保存到星际争霸Maps文件夹内。

运行

python main.py --map=3m --alg=qmix

环境配置,感觉有点问题,其实修改有个python文件夹里面的地址即可,不需要配置什么环境变量。
报错的文件,点进去找到C:修改为F:即可。

结果

视频结果
平均胜率为8次,独立运行3m --difficulty=7(VeryHard)

MADDPG

git上找到的都运行不了,测试了很久,在https://github.com/starry-sky6688/MADDPG 的基础上改了一下,成功运行。

多智能体环境

MPE

  1. 安装方法1:

cd into the root directory and type pip install -e .

  1. 安装方法2:
    https://www.pettingzoo.ml/mpe

pip install pettingzoo[mpe]

Requirements

python=3.6.5
Multi-Agent Particle Environment(MPE)
torch=1.1.0

运行

python main.py --scenario-name=simple_tag --evaluate-episodes=10

环境列表

代码中的环境名称 沟通 竞争 描述
simple N N 单个代理看到地标位置,根据它与地标的接近程度进行奖励。不是多代理环境——用于调试策略。
simple_adversary.py (物理欺骗) N 是 1 个对手(红色),N 个优秀代理(绿色),N 个地标(通常 N=2)。所有代理都会观察地标和其他代理的位置。一个地标是“目标地标”(绿色)。好的代理根据其中一个与目标地标的接近程度进行奖励,但如果对手靠近目标地标,则获得负面奖励。对手根据它与目标的接近程度获得奖励,但它不知道哪个地标是目标地标。因此,优秀的代理必须学会“拆分”并覆盖所有地标以欺骗对手。
simple_crypto.py (秘密交流) 两个好代理人(爱丽丝和鲍勃),一个对手(夏娃)。Alice 必须通过公共频道向 bob 发送私人消息。Alice 和 bob 会根据 bob 重建消息的程度获得奖励,但如果 eve 能够重建消息,则获得负面奖励。Alice 和 bob 有一个私钥(在每集开始时随机生成),他们必须学会使用它来加密消息。
simple_push.py (远离) N 1 个代理、1 个对手、1 个地标。代理根据与地标的距离进行奖励。如果对手靠近地标,并且代理远离地标,则它会得到奖励。因此,对手学会将代理推离地标。
simple_reference.py N 2 个代理,3 个不同颜色的地标。每个代理都想到达他们的目标地标,只有其他代理知道。奖励是集体的。因此,代理必须学会传达另一个代理的目标,并导航到他们的地标。这与 simple_speaker_listener 场景相同,其中两个代理同时是说话者和听众。
simple_speaker_listener.py (合作交流) N 与 simple_reference 相同,除了一个代理是不动的“说话者”(灰色)(观察其他代理的目标),另一个代理是听者(不能说话,但必须导航到正确的地标)。
simple_spread.py (合作导航) N N N 个代理,N 个地标。根据任何代理与每个地标的距离对代理进行奖励。如果代理与其他代理发生冲突,则会受到惩罚。因此,代理必须学会在避免碰撞的同时覆盖所有地标。
simple_tag.py (捕食者-猎物) N 捕食者-猎物环境。好的代理(绿色)速度更快,并且希望避免被对手(红色)击中。对手速度较慢,并希望打击优秀的代理。障碍物(大黑圈)挡住了去路。
simple_world_comm.py 在论文随附的视频中看到的环境。与 simple_tag 相同,除了 (1) 有食物(蓝色小球),好代理会因为靠近而获得奖励,(2)我们现在有“森林”,可以将代理隐藏在里面,从外面看不到;(3)有一个“领导对手”,可以随时看到代理人,并可以与其他对手沟通,帮助协调追击。

通过python main.py --scenario-name=simple_tag --evaluate-episodes=10

修改simple_tag替换环境。

结果

在这项任务中,两个蓝色代理通过最小化它们与绿色地标的最近距离(只有一个需要靠近以获得最佳奖励)来获得奖励,同时最大化红色对手与绿色地标的距离。红色对手通过最小化它与绿色地标的距离来获得奖励;然而,在任何给定的试验中,它不知道哪个地标是绿色的,所以它必须跟随蓝色代理。因此,蓝色代理应该学会通过覆盖两个地标来欺骗红色代理。


文章作者: 万鲲鹏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 万鲲鹏 !
评论
  目录