選自Github
作者:David Churchil
機器之心編譯
參與:李澤南
隨著暴雪與 DeepMind 在星際爭霸系列遊戲上的合作不斷推進,人工智慧領域的研究者們也正在將目光由 20 年歷史的星際爭霸一代轉向更為「現代化」的星際爭霸 2。近日,AIIDE 星際爭霸 AI 對抗賽的組織者 David Churchill 發布了基於暴雪星際 2 API 的 AI bot 框架,為開發者們構建人工智慧,挑戰這一複雜遊戲提供了一種基礎工具。
項目地址:https://github.com/davechurchill/commandcenter
CommandCenter 是一種星際爭霸 2 的 AI bot,它由 C++編寫,使用了暴雪提供的星際爭霸 2 AI API。它是由加拿大紐芬蘭紀念大學的助理教授 David Churchill 開發的,此人也是 AIIDE 星際爭霸 AI 對抗賽的組織者。
作為星際爭霸 2 為數不多的 bot 之一,CommandCenter 基於 UAlbertaBot 架構(星際爭霸一代 bot),旨在提供一種穩固、易於使用且能夠快速設置的架構,讓使用者可以與之對戰,並在其上構建自己的人工智慧。CommandCenter 本身並不包含太多硬編碼的策略或戰術,但它為你應用自己的三族戰術提供了一個很好的平臺。
目前,CommandCenter 提供以下功能
可以操作人族、神族與蟲族進行比賽,並可以對單位進行微操。
進行在線地圖分析,提取基礎地址與擴展信息等資料。
跟蹤所有曾經看到過的敵方單位,記住它們上次出現的地圖位置。
擁有 WorkerManager,可以管理資源採集、SCV\探機\工蜂的位置和建造活動。可以執行在配置文件中編寫的預定義的建造順序。
你可以輕鬆創建自己的建造順序,並在遊戲中即時對其進行修改。
包含建築物擺放算法,可以找到給定地址附近最近的可建造位置。
用建造單位搜索地圖,試圖尋找敵方基地位置。
一旦達成特定的條件(如默認條件下:12 個戰鬥單位),AI 將發出指令對敵方基地方向展開攻擊。
可以對單位進行編組,其中可包括不同種類的單位,對特定位置進行攻擊或防禦。
開發者表示,儘管目前還不盡完善,CommandCenter 最終將會包含 UAlbertaBot 的所有功能。以下是目前缺失\即將推出的功能列表:
目前 AI 只能通過 ProductionManager 構建單位和基本建築物――不能控制附加組件,研究或升級。
目前還沒有自動構建訂單計劃系統。
沒有戰鬥模擬機制,無法預測戰鬥的勝率。
目前 AI 只能用於 1v1 對戰,如果進行多人或組隊遊戲,可能會出現無法預測的情況。
下載和使用
如果你只想下載和運行,看看它和星際爭霸 2 內置 AI 的對戰效果如何,你可以下載預編譯版本:https://github.com/davechurchill/commandcenter/tree/master/release
你必須擁有星際爭霸 2 正版最新版本的遊戲才能運行該 bot。你必須下載並安裝 AI 可用的相應地圖:https://github.com/Blizzard/s2client-proto#downloads
注意:解壓密碼在頁面中已提供。
Bot 的調試文件名為 BotConfig.txt,你可以在其中調整單位建造順序,在屏幕上顯示 debug 信息,設置 bot 參數。你可以在文件中的「Strategies」段落設置同時構建多種類型的訂單,並在 AI 使用特定種族時指定其中的一部分。在訂單策略中,單位名稱必須準確(與遊戲中顯示的一致,分大小寫,無空格)。目前在設置文件中有一些策略無法應用,如風箏的遠程單位。
注意,此設置文件的格式為 JSON,如果格式錯誤,AI 將無法運行。設置文件必須放置在 CommandCenter.exe 相同的目錄下。如果你的 JSON 格式有語法錯誤,可以使用在線的 JSON Validator 來進行檢查:https://jsonlint.com/
在默認情況下,當你運行 CommandCenter.exe 時,它會開始玩隨機 AI vs 隨機星際爭霸 2 內置電腦(簡單)。你可以在「BotRace」和「EnemyRace」設置中調整對戰雙方的種族。你也可以在「MapFile」選項中調整對戰地圖。注意:MapFile 選項與星際爭霸 2 的地圖目錄相關,默認的地址是星際爭霸 2 安裝地址/maps/,你必須制定合法的地圖文件。
開發者安裝/調試(Windows)
下載並安裝 Visual Studio 2017
下載並安裝「星際爭霸 II」AI API(https://github.com/Blizzard/s2client-api)。最簡單的方法是在頁面底部下載預編譯庫(https://github.com/Blizzard/s2client-api#precompiled-libs),然後將其解壓縮到 PC 上的文件夾中。如果你通過複製 Blizzard github repo 並從頭開始編譯 SC2API,則可能需要將 VS 指向不同於 include 和 lib 的目錄,而不是下面描述的目錄。
將該 Git 存儲庫複製到 PC 上的文件夾中
在 VS2017 中打開「CommandCenter / vs / CommandCenter.sln」
將 VS Project include 和 lib 文件夾設置為指向 SC2API 目錄
右鍵單擊 VS2017 中的 CommandCenter 項目
選擇「屬性」
選擇要在左上方構建的正確配置(「Release」或「Debug」)
左側的「VC ++目錄」
在右側的表格中選擇「Include Directories」選項
點擊右側的下拉箭頭,然後點擊編輯
修改現有的目錄設置以指向 SC2API/include 目錄
在右側的表中選擇「Library Directories」選項
點擊右側的下拉箭頭,然後點擊編輯
修改現有的目錄設置以指向 SC2API/lib 目錄
在「Build」菜單中,單擊「Build Solution」
「CommandCenter.exe」應該出現在 CommandCenter/bin/目錄中
運行 CommandCenter bot 可通過:
雙擊 CommandCenter/bin/目錄中的可執行文件
從控制臺運行程序:
在 VS 中單擊「本地 Windows 調試器」以從 VS 內啟動程序。對此,你需要將「調試」下的「工作目錄」選項設置為「$(ProjectDir)/../bin/」(貌似這個選項無法保存)
CommandCenter/bin/BotConfig.txt文件必須在相同的目錄下,因此 .exe 才能正確運行
開發者安裝/調試(Linux)
目前,在 Linux 上的開發和測試尚未進行,也沒有相應的 Makefile,不過在 Linux 上的運行應該是穩定的。
開發
如果你熟悉 UAlbertaBot,它與 CommandCenter 的邏輯是大致相同的。其中最大的不同是與地圖有關的信息、基地位置等內容不再是全局可訪問的。該類數據現在存在於主 CCBot 類中,並且必須通過對該類的實例的引用才能進行訪問。正因為如此,CommandCenter 中的大部分類都會引用 bot 的主 CCBot 對象。這樣,與遊戲相關的所有信息、觀察和查詢就都可以完成了。
更為詳細的開發者指南會在未來推出,目前,你可以參考 UAlbertaBot wiki,因為其中的機制大致相同(除了構建計劃和戰鬥模擬器):https://github.com/davechurchill/ualbertabot/wiki