《星際爭霸2》人工智能研究環境 SC2LE 初體驗
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進行測試。
下麵為示意圖:
大家可以看到在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下沒有原始遊戲畫麵。
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 <path-to-replay>
5 如何進行RL開發
前麵隻是安裝,到這裏才是最關鍵的。要知道如何進行RL開發,要首先知道pysc2的代碼是如何運行的。
在上一小結測試中,我們看到第四種可以指定agent。所以,我們可以自己編寫一個agent文件,從而使得環境運行我們自己的agent:
python -m pysc2.bin.agent --map<Map> --agent<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輸出顯示。如下圖最右邊的顯示:
下麵總結一下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-08-23 10:33:22
上一篇:
雲服務器ECS開啟新的按周售賣模式
下一篇:
讀書筆記:LADDER: A Human-Level Bidding Agent for Large-Scale Real-Time Online Auctions
linux係統下載 僅供學習測試
J2EE中getParameter與getAttribute以及EL表達式${requestScope}和${param[]}
Bison executable not found in PATH by mysql install
You need to install a terminal library; for example ncurses.
基於HybridDB for MySQL實現企業級市場的ODS方案
JEESZ-Zookeeper集群安裝
2014阿裏巴巴校園招聘數據分析師職位筆試題目(答案版)
初學者如何學習運維?
關於MAP文件的使用
優雲·小課堂 第八期:運維自動化的魅力