當前位置:
首頁 > 新聞 > 《星際爭霸2》人工智慧研究環境 SC2LE 初體驗

《星際爭霸2》人工智慧研究環境 SC2LE 初體驗

雷鋒網按:本文原作者Flood Sung、杜克,原文載於作者的知乎專欄——智能單元,雷鋒網經授權發布。

1 前言

2017年8月10號,DeepMind聯合暴雪發布了星際爭霸2人工智慧研究環境SC2LE,從而使人工智慧的研究進入到一個全新的階段。這次,研究人工智慧的小夥伴們可以邊玩遊戲邊做研究了。

為了讓更多的朋友了解SC2LE研究環境,我們在第一時間對其進行安裝測試,並對DeepMind發布的pysc2代碼進行分析,初步了解基於pysc2的RL開發方法。下面我們將一一進行介紹。


2 測試使用設備

Macbook Pro 13inch (MacOS Sierra)

Alienware 13inch (Ubuntu 14.04)


3 安裝方法

3.1 Mac環境下的安裝

(1)安裝pysc2

pip install pysc2

如果許可權不夠,就加上sudo:

sudo pip install pysc2

程序會自動安裝各種依賴:

Installing collected packages: google-apputils, pygame, future, pysc2

Successfully installed future-0.16.0 google-apputils-0.4.2 pygame-1.9.3 pysc2-1.0

(2)然後在國服下載mac版的星際爭霸客戶端:https://www.battlenet.com.cn/account/download/,mac版的,然後安裝,30個G,3.16.1版本。

(3)下載完畢可以運行遊戲就OK

(4)下載Map Packs,mini-game和replay:Blizzard/s2client-proto,https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip

(5)進入星際爭霸2的目錄

(6)創建Maps文件夾

(7)將Map Packs和mini-game壓縮包都解壓到Maps目錄下,密碼是iagreetotheeula

(8)打開終端,輸入python -m pysc2.bin.agent --map Simple64進行測試。

下面為示意圖:

<img src="https://static.leiphone.com/uploads/new/article/pic/201708/4df0d743f23353e59fd6c2a9c0b7ba79.jpg" data-rawwidth="1600" data-rawheight="1000" class="origin_image zh-lightbox-thumb" width="1600" data-original="https://pic3.zhimg.com/v2-c6e24843a8e9d7f1ab76c3da7685a886_r.jpg" _src="https://static.leiphone.com/uploads/new/article/pic/201708/4df0d743f23353e59fd6c2a9c0b7ba79.jpg"/>

<img src="https://static.leiphone.com/uploads/new/article/pic/201708/6749d6caff9c0d2c67f362969c90738c.png" data-rawwidth="768" data-rawheight="480" class="origin_image zh-lightbox-thumb" width="768" data-original="https://pic4.zhimg.com/v2-ffdb4c3e9dd1c4f0fbcacfd8bf45c113_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/6749d6caff9c0d2c67f362969c90738c.png"/>

大家可以看到在Mac下既顯示了原始的遊戲畫面,又顯示了feature的畫面

3.2 Ubuntu環境下安裝

(1)安裝pysc2 (和Mac相同)

sudo pip install pysc2

(2)下載Linux版本的星際2:Blizzard/s2client-proto並解壓在Home目錄下,解壓密碼:iagreetotheeula

(3)下載Map Packs,mini-game:Blizzard/s2client-proto,https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip。將文件解壓到~/StarCraft2/Maps 下。

(4)打開終端,輸入python -m pysc2.bin.agent --map Simple64進行測試。

下面為兩個不同地圖的示意圖:

Linux下沒有原始遊戲畫面。

<img src="https://static.leiphone.com/uploads/new/article/pic/201708/c8cfdb2d09c4d35239670c675a3ca989.png" data-rawwidth="1440" data-rawheight="707" class="origin_image zh-lightbox-thumb" width="1440" data-original="https://pic1.zhimg.com/v2-b80ac969c618ed2e9b29433b1fe8a6e8_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/c8cfdb2d09c4d35239670c675a3ca989.png"/>

<img src="https://static.leiphone.com/uploads/new/article/pic/201708/168e6acf055f54f0a3623ea05119bb08.png" data-rawwidth="1440" data-rawheight="707" class="origin_image zh-lightbox-thumb" width="1440" data-original="https://pic3.zhimg.com/v2-23676bd7583d6dab05b53b902c7dfcee_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/168e6acf055f54f0a3623ea05119bb08.png"/>


4 測試

(1)基本測試

python -m pysc2.bin.agent --map Simple64

(2)更改Map如使用天梯的Map

python -m pysc2.bin.agent --map AbyssalReef

注意天梯的Map 名稱沒有LE!

(3)不使用agent,手動玩!

python -m pysc2.bin.play --map MoveToBeacon

(4)使用特定agent來玩(比如MoveToBeacon這個mini game)

python -m pysc2.bin.agent --map MoveToBeacon --agent pysc2.agents.scripted_agent.MoveToBeacon

(5)播放replay

python --m pysc2.bin.play --replay


5 如何進行RL開發

前面只是安裝,到這裡才是最關鍵的。要知道如何進行RL開發,要首先知道pysc2的代碼是如何運行的。

在上一小結測試中,我們看到第四種可以指定agent。所以,我們可以自己編寫一個agent文件,從而使得環境運行我們自己的agent:

python -m pysc2.bin.agent --map--agent

那麼如何來編寫這個agent呢?

pysc2的代碼中為什麼構建了一個BaseAgent,我們只需要在BaseAgent的基礎上,構造一個新的agent的類,然後在裡面的step函數中實現我們的RL演算法即可。

基本的程序架構如下:

from __future__ import absolute_import

from __future__ import division

from __future__ import print_function

import numpy

from pysc2.agents import base_agent

from pysc2.lib import actions

from pysc2.lib import features

class OurAgent(base_agent.BaseAgent):

  def step(self, obs):

      super(OurAgent, self).step(obs)

  #----------------------------------#

   RL Algorithm Here

    #----------------------------------#

      return action

其中obs包含所有的觀察信息,包括feature maps,reward及可執行動作actions等信息。step這個函數的目標是輸出動作給環境執行。RL演算法需要處理obs然後輸出action。

我們來看一下pysc2提供的MoveToBeacon的非智能演算法:

from __future__ import absolute_import

from __future__ import division

from __future__ import print_function

import numpy

from pysc2.agents import base_agent

from pysc2.lib import actions

from pysc2.lib import features

_PLAYER_RELATIVE = features.SCREEN_FEATURES.player_relative.index

_PLAYER_FRIENDLY = 1

_PLAYER_NEUTRAL = 3  # beacon/minerals

_PLAYER_HOSTILE = 4

_NO_OP = actions.FUNCTIONS.no_op.id

_MOVE_SCREEN = actions.FUNCTIONS.Move_screen.id

_ATTACK_SCREEN = actions.FUNCTIONS.Attack_screen.id

_SELECT_ARMY = actions.FUNCTIONS.select_army.id

_NOT_QUEUED = [0]

_SELECT_ALL = [0]

class MoveToBeacon(base_agent.BaseAgent):

  """An agent specifically for solving the MoveToBeacon map."""

  def step(self, obs):

    super(MoveToBeacon, self).step(obs)

    if _MOVE_SCREEN in obs.observation["available_actions"]:

       player_relative = obs.observation["screen"][_PLAYER_RELATIVE]

       neutral_y, neutral_x = (player_relative == _PLAYER_NEUTRAL).nonzero()

       if not neutral_y.any():

          return actions.FunctionCall(_NO_OP, [])

       target = [int(neutral_x.mean()), int(neutral_y.mean())]

       return actions.FunctionCall(_MOVE_SCREEN, [_NOT_QUEUED, target])

    else:

       return actions.FunctionCall(_SELECT_ARMY, [_SELECT_ALL])

我們可以看到,上面的代碼直接獲取了beacon的位置信息(neutral_y,neutral_x),從而直接給出動作。但是為了使用RL演算法,我們需要獲取feature map的圖像信息。然後我發現上面代碼中的player_relative就是圖像信息,可以直接通過opencv或者plt輸出顯示。如下圖最右邊的顯示:

<img src="https://static.leiphone.com/uploads/new/article/pic/201708/9f2384ee97925fe9ef6ef71e2493993e.png" data-rawwidth="1835" data-rawheight="708" class="origin_image zh-lightbox-thumb" width="1835" data-original="https://pic4.zhimg.com/v2-ac5cae8cc97debc8cd83f88f0e15b913_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/9f2384ee97925fe9ef6ef71e2493993e.png"/>

下面總結一下state , action, reward的獲取方式:

(1)state,也就是各種feature map,通過obs.observation["screen"][feature_map_name] 獲取

(2)action,可以使用的action,通過obs.observation["available_actions"] 獲取

(3)reward,通過obs.reward獲取。

知道這些RL關鍵信息的獲取,我們也就可以編寫RL代碼來玩星際2的小任務了。

值得注意的是,星際2的動作actions非常複雜,pysc2把動作封裝成帶參數的函數。比如上面的Move動作,需要target目標位置的2維參數。所以,如果輸出動作是一個複雜的問題。官方的論文中使用了auto-regressive自回歸的方式,也就是先輸出Move這個動作,然後在此基礎上再輸出target,從而形成完整的動作,最後輸出。


5 小結

本文對SC2LE進行了初體驗,包括安裝,測試和RL開發的代碼研究。整體來看,DeepMind這次聯合暴雪確實做了非常精良的代碼工作,SC2LE有以下幾個優點:

對於API封裝得很好,可以非常方便的進行RL開發

直接提供了Feature Map信息方便卷積神經網路CNN的使用。

跨平台支持,特別是對Linux平台的支持,非常方便廣大深度學習開發者的使用。

提供Replay資料庫及Replay介面,為進行imitation learning模仿學習的研究提供了極大的方便。

提供了Mini Game,方便大家從簡單入手。

提供了天梯地圖,滿足大家挑戰高難度的慾望!

總的來說,SC2LE真的是非常友好的一個研究平台,值得大家入手研究,也相信未來會有越來越多的人工智慧玩星際2的成果出來!


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

聚焦2017中國互聯網安全領袖峰會,法治驅動創新協同應對挑戰
入選MIT TR 35的王剛是誰 他給阿里帶來什麼
CSS2017人工智慧分論壇:AI為網路與信息安全帶來新可能
清華胡事民教授:來CNCC,了解計算機一切領域前沿 | CNCC 2017專訪
創立3個月就從福特手中拿到10億美元,Argo AI到底是何方神聖?

TAG:雷鋒網 |

您可能感興趣

B&O選用GENELEC音箱進行聲學環境模擬的實驗研究
案例丨B&O選用GENELEC音箱進行聲學環境模擬的實驗研究
「TFBOYS」「新聞」190314 王俊凱聯合國環境大會演講,全程英文演講致力環保
美陸軍研究實驗室研發GPS拒止環境下人/機定位新技術
2018UCAN大會官方全紀錄——人工智慧和新零售環境下的設計產業升級
科學家在模擬火星的環境中測試ExoMars自主導航軟體
中聯環境:環境產業進入AI人工智慧時代
CSAIL研發3D印表機器魚,將用於執行海洋環境及生物研究
CRO醫藥研發外包行業研究和競爭環境分析
DAPRA啟動DBRE項目研發虛擬訓練環境中的高性能計算技術
CDPR將改善《賽博朋克2077》開發者的工作環境
IPv6應用創新:立普威陸LoRaWAN景區物聯網環境監測
美軍現代空戰環境模擬軟體「MACE」特點分析
DARPA啟動SAIL-ON項目開發可自主識別和響應現實環境變化的人工智慧系統
「MD PHOTO」劉智泰鄭雨盛等藝人出席 第15屆首爾環境電影節
韓國科研團隊:超90%的醫學影像AI論文未在臨床環境進行嚴格驗證
創造舒適聲音環境 Sony WI-1000X體驗
NASA 的新一代環境科學衛星啟用激光測距系統
NASA最新研究稱火星環境難地球化
利用qPCR研究環境中微生物數量