Skip to content

LovelyBuggies/Python_MADDPG_SC2LE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5e28bf3 · Feb 7, 2019

History

51 Commits
Aug 17, 2018
Aug 27, 2018
Aug 27, 2018
Aug 27, 2018
Aug 27, 2018
Aug 27, 2018
Aug 17, 2018
Aug 17, 2018
Aug 27, 2018
Aug 7, 2018
Feb 7, 2019
Aug 21, 2018
Aug 17, 2018
Aug 17, 2018
Aug 17, 2018
Aug 17, 2018
Aug 21, 2018
Aug 17, 2018
Aug 17, 2018

Repository files navigation

pysc2_maddpg

目录

简介

pysc2_maddpg 这个项目是我在中科院自动化所的实习代码,主要是利用深度强化学习的MADDPG算法,应用到暴雪开源的SC2LE强化学习开发环境,来训练星际争霸2中一个简单的对抗环境。

功能

利用Open AIMADDPG多智体联合算法,训练了星际争霸2——sc2le环境中最基本5v5对抗中的收割者。

  • 当动作空间为3,初始态为攻击态时,胜率达到90%。
  • 通过训练,收割者能够实现索敌靠近。
  • 能够基本协同作战,以获得更高胜率。
  • 考虑血量和己方的攻击力,选择作战攻略(目前还未实现)。

项目

Papers

papers是项目的理论支撑,包括项目的参考的论文。

Document

Document是前人文档。

maddpg

maddpg是代码的核心部分,包含maddpg算法和pysc2环境两个部分。

  • sc2_env是项目对于pysc2环境的接口,包含combined_action.pyrunner.py两个文件。其中combined_action.py是动作空间文件,规定了动作个数,在在3动作空间会有更好的表现。runner.py将我们的agent接入了pysc2环境。
  • maddpg是项目调用的maddpg算法的部分,包含trainercommonagent.py文件。其中trainercommon是MADDPG自带的部分,用于规定算法;agent.py文件是我们自己实现的agent类,具体可以实现一些特殊的动作,如选择单元、选择控制组、获得当前状态等等。

csv文件

项目的csv文件是数据记录文件,记录了实验的相关数据。

load文件

项目的load文件将会显示试验的结果。

train_maddpg.py

train_maddpg.py训练总文件,配置好环境之后运行的文件。

设计思路

游戏采用最简单的5v5场景,为了让收割者们通过学习学到好的策略,设计采用condition-strategy-rewards的基本构架。

condition

为了让收割者们有更好的表现,我们需要让收割者们上场杀敌。杀敌的时候就需要考虑血量和攻击力两个方面。condition暂时还未实现,是未来工作的一部分。

假设我方还有m个幸存的收割者,血量分别是$$Hp_1, Hp_2,..., Hp_m$$,收割者的攻击力大体上相同,所以我方此时的攻击力为$$D=µm$$,µ是常数。同理,对方还剩下n个幸存者,血量分别是$$Hp'_1, Hp_2',..., Hp_m'$$,攻击力为$$D'=µn$$。那么敌我双方团灭时间大致为$$t_1=\frac{\sum{}Hp}{D'}$$和$$t_2=\frac{\sum{}Hp'}{D}$$。当我方团灭时间大于对方时候,$$m\sum{}Hp>n\sum{}Hp'$$时,攻击。

考虑pysc2内置的reward是当前帧减去前一帧的score,为了获得更大score,我们应该让$reaper_i=\arg\min_{reaper_i}(Hp_{reaper_i})$号收割者远离,并派遣其他收割者攻击。

其余情况均远离。

Github上可能无法加载condition,condition图片版点击此处

strategy

采取攻击策略有助于提升胜率,但是盲目攻击又将带来损失,因此我们制定了一套该场景下的策略。

  • 主动参兵有奖:设置distance,当我方收割者与离之最近的敌方收割者拉近距离时候会有奖励;若已经进入战场,不再通过distance增加reward。
  • 支援队友有奖:当拉近距离之后,孤军奋战是不好的策略,因此当我们所有的收割者都执行攻击动作的时候,有一个相应的奖励。
  • 战场杀敌有奖:此项由于涉及到score,是pysc2内设的,因此不予考虑。

rewards

rewards在agent.pyrunner.pytrain_maddpg.py中都有涉及,范围较广,暂时考虑了两种rewards,分别是pysc2内置的score带来的reward 和距离拉近带来的rew_d。

项目结果

代码截图

对战截图

结果截图

  • 在初始化为攻击状态,动作空间为3个动作时,胜率可以达到90%多。
  • 在初始化为任意状态,动作空间为3个动作时,胜率可以达到50%多。
  • 在初始化为任意状态,动作空间为7个动作时,胜率只有20%左右。

参考

前人工作

【1】星际争霸2人工智能研究环境SC2LE初体验

【2】迈向通用人工智能:星际争霸2人工智能研究环境SC2LE完全入门指南

【3】星际争霸2之环境配置

【4】星际争霸2之MADDPG算法

参考网页

【1】强化学习基本介绍

【2】DNQ介绍

【3】Intel——DNQ

【4】MADDPG论文翻译

【5】MADDPG官方文档

【6】MADDPG简介

【7】DDPG详解

【8】深度学习A3C

参考代码

【1】openai/MADDPG

【2】Blizzard/s2client-proto

【3】deepmind/pysc2

【4】fangbrodie/pysc2_maddpg

鸣谢

  • 感谢导师对我工作的支持。
  • 感谢Sherry,在背后默默对我代码工作和学习生活一贯的支持。