• smac环境介绍
  • 状态和观察
  • torchMARL
  • Corresponding Papers
  • Installation
  • Usage
  • Results
  • 5m_vs_6m
  • 之前因为一直没有实现Weighted QMIX,感觉公开的意义不大,所以就没写博客介绍。现在已基本复现了效果,受制于计算资源,没有完整运行论文中的实验。

    仓库链接: https://github.com/jingranburangyongzhongwen/torchMARL ,欢迎star和给issue

    smac环境介绍

    状态和观察

    在每个时间步,agent都会收到在其视野内的局部观察。这包括关于每个单位周围圆形区域内的地图信息,半径等于视野范围。从每个agent的角度来看,视野范围使环境部分可观察。 agent只能观察都活着并且位于视线范围内的其他agent 。因此,agent无法确定他们的队友是走远了,还是死了。

    每个agent观察到的特征向量包含视野范围内友军和敌军单位的以下属性:distance, relative x, relative y, health, shield, and unit_type。agent控制单位的health, shield and unit_type也包含在观察里。shield作为额外的保护源,需要在对单位的health造成任何损害之前移除。所有 Protos 单位都有shield,如果没有造成新的伤害, shield可以再生 (其他两个种族的单位没有这个属性)。此外, agent可以访问视野中的盟军单位的上一个动作 。最后, agent可以观察他们周围的地形特征 ;具体点,固定半径处的八个点的值表示高度和可步行性。

    全局状态仅在集中训练期间对agent可得到,包含有关地图上所有单元的信息。具体来说,状态向量包括所有agent相对于地图中心的坐标,以及观察中存在的单元特征。此外,状态存储 Medivacs 的 energy 和其余友军单位的 cooldown,这代表了两次攻击之间的最小延迟。最后,所有agent的上一个动作都附加到全局状态。

    所有特征,无论是在状态中还是在个体agent的观察中,都 通过它们的最大值进行归一化 。所有agent的 视线范围都设置为 9

    smac允许agent采取的离散动作集包括move[direction] (four directions: north, south, east, or west), attack[enemy_id], stop and no-op,所以至少7个动作,跟环境中enemy数目有关。死agent只能采取no-op,而活agent则不能。对于治疗单位,医疗运输机必须使用 heal[agent_id] 动作而不是 attack[enemy_id]。agent可以执行的 最大动作数介于 7 到 70 之间 ,具体取决于场景。

    为了确保任务的分散化,agent被限制只能对他们射击范围内的敌人使用 attack[enemy_id] 动作。这另外限制了单位对远处敌人使用内置 attack-move 宏动作的能力。 射击范围为 6 。比射击范围更大的视野迫使agent在开始射击之前使用move命令。

    总体目标是在每个战斗场景中获得最高的胜率。除了对应的 +1 和 -1 的奖赏,还有杀死敌方(盟军)单位后的一些正(负)奖励和/或正(负)奖励 赢得(输掉)战斗。作者强烈反对对奖赏函数进行不诚实的工程(例如,针对不同场景调整不同的奖赏函数)。

    torchMARL

    主要是一些MARL算法的pytorch实现,目前包括:
    VDN , QMIX , Weighted QMIX(CW-QMIX, OW-QMIX)

    该项目基于 https://github.com/starry-sky6688/StarCraft 改进得到,简化了模块与算法流程,改进可视化,方便建立自己的算法库。

    网络参数设置与“The StarCraft Multi-Agent Challenge”( SMAC )中保持一致。

    目前在StarCraft II上进行测试,但可以方便地迁移到任意封装好的环境使用。

    相关资料: Pymarl

    Corresponding Papers

  • QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning
  • Value-Decomposition Networks For Cooperative Multi-Agent Learning
  • Counterfactual Multi-Agent Policy Gradients
  • QTRAN: Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement Learning
  • Learning Multiagent Communication with Backpropagation
  • From Few to More: Large-scale Dynamic Multiagent Curriculum Learning
  • Multi-Agent Game Abstraction via Graph Attention Neural Network
  • MAVEN: Multi-Agent Variational Exploration
  • Weighted QMIX: Expanding Monotonic Value Function Factorisation
  • The StarCraft Multi-Agent Challenge
  • Installation

  • Python >= 3.6
  • Pytorch >= 1.2
  • Seaborn >= 0.9
  • 对于SMAC,这里简单介绍一下linux下的安装,Windows等系统可以查看 他们的仓库

    通过下列命令安装SMAC

    pip install git+https://github.com/oxwhirl/smac.git

    安装StarCraft II,这里给出 4.6.2 的下载链接,因为SMAC用的就是这个,并且他说 不同版本之间不能比较 ,其余版本可以查看 暴雪的仓库 ,解压时需要密码 iagreetotheeula 。解压后文件默认路径为 ~/StarCraftII/ ,如果放在别的路径,需要更改环境变量 SC2PATH

    下载 SMAC MAPS ,解压后将文件夹直接放在 $SC2PATH/Maps 下即可

    运行 python -m smac.bin.map_list 测试地图是否放置成功,运行 python -m smac.examples.random_agents 测试安装是否成功。如果是centos的话可能会出现因为缺少对应版本依赖 /home/user/SMAC/StarCraftII/Versions/Base75689/SC2_x64: /lib64/libc.so.6: version 'GLIBC_2.18' not found (required by /home/user/SMAC/StarCraftII/Libs/libstdc++.so.6) 而导致 pysc2.lib.remote_controller.ConnectError: Failed to connect to the SC2 websocket. Is it up? ,这时候就要根据情况安装依赖或者使用docker了。

    Usage

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

    或者直接pycharm打开项目,run main.py即可,也可以使用run.sh复现QMIX、CW-QMIX、OW-QMIX在5m_vs_6m上的实验。

    SMAC的各种地图描述在这里:https://github.com/oxwhirl/smac/blob/master/docs/smac.md

    Results

    暂时只贴一部分,因为我目前主要实现值分解的算法。所有地图的环境设置均与SMAC相同,难度为7(VeryHard)

    一站式通知聚合框架 SMS4J入驻GitCode,让开发效率飙升80%!
    • 浏览量 7098
    • 收藏 0
    • 0

    所有评论(0)