帶你還原星際爭霸AI比賽現場,Starcraft AI Tournament Manager比賽管理軟體初探
來自專欄星際爭霸AI比賽
Starcraft AI Tournament Manager是由AIIDE星際爭霸AI大賽組織者David Churchill和Rick Kelly開發的一款星際爭霸AI對戰管理軟體。可用於星際爭霸AI對戰比賽的執行、結果統計及展示。截止目前,AIIDE、CIG、SSCAIT以及SAIL等主流星際爭霸AI競賽、排行榜均使用這款軟體進行星際爭霸AI的自動對戰。我們使用這款軟體可以與其他AI進行高頻次的對戰來測試自己的AI性能,也可以建立自己的星際AI比賽。本文將對這款軟體的安裝、使用進行介紹。
軟體安裝
1.軟體獲取
StarcraftAITournamentManager軟體可在作者Github處獲取。
2.系統需求
- Microsoft Windows 7及以上版本操作系t
- 雙核及以上CPU的PC
- StarCraft: BroodWar 1.16.1(客戶端)
- Microsoft VC++ Redistributables集合(客戶端)
- JDK 8及以上版本(若不需要編譯,使用JRE即可)
3.文件結構
軟體包完整文件結構如下:
TournamentManager/ client/ Client Directory BWAPI.ini Default BWAPI settings file client.jar Client jar file client_settings.json Client settings file (modify this) run_client.bat Script to run client server/ Server Directory bots/ Contains all files for each bot botname/ Bot-specific directory AI/ Where the .dll / proxy bot files go read/ File I/O read directory write/ File I/O write directory html/ HTML for viewing results css/ CSS files javascript/ Javascript files results/ Output folder for results data in JSON format index.html Summary of tournament results results.html Detailed results from each game win_percentage_graph.html Win % over time for all bots replays/ Replay storage directory * required/ Required file storage directory Required_BWAPI_374.zip BWAPI/Starcraft required files (BWAPI 374) Required_BWAPI_401B.zip BWAPI/Starcraft required files (BWAPI 401B) Required_BWAPI_412.zip BWAPI/Starcraft required files (BWAPI 412) Required_BWAPI_420.zip BWAPI/Starcraft required files (BWAPI 420) games.txt Default tournament games list filename * parse_results.bat Script to run results parser results.txt Default tournament results filename * results_parser.jar Parses existing results like server without running server run_server.bat Script to run server server.jar Server .jar file server_settings.json Server settings file (modify this) src/ Source Code Folder packagename/ Source package directories clean.bat Script to delete all .class files in subdirs make.bat Script to compile / make jar files
其中包含以下三個主要文件夾:
- "server":服務端
- "client":客戶端
- "src":源碼
管理軟體的可執行文件為"client/client.jar"和"server/server.jar",若不需要修改源碼,則可直接運行使用。
4.服務端安裝過程
- 安裝JRE
- 執行server/run_server.bat即可運行服務端程序
5.客戶端安裝過程
- 安裝StarCraft: BroodWar 1.16.1
- 安裝Microsoft Visual C++ Redists集合包
- 安裝JRE/JDK
- 關閉系統UAC功能
- 修改client/client_settings.json:將"ClientStarcraftDir"項的值改為星際爭霸實際安裝目錄,將"ServerAddress"地址改為服務端所在PC的IP地址
- 執行client/run_client.bat,即可啟動客戶端
軟體使用
1.概述
Starcraft AI Tournament Manager採用CS架構,服務端運行與服務機上,負責對客戶機進行對戰調度、AI文件分發、I/O文件分發與收集、對戰結果收集及整理等任務。客戶端運行於客戶機上,負責執行一個星際爭霸及AI的實例,在服務機的調度下與其他客戶機進行區域網聯網對戰。一個星際爭霸AI自動對戰系統的整體結構如下圖所示。
因此,構造一個完整的星際爭霸比賽環境,需要同一區域網下的多台電腦的支持。當然,我們也可以使用虛擬機來解決機器數量不足的問題。
2.服務端軟體配置及使用
1) 配置文件
服務端的配置文件為"server/server_settings.json",典型的配置文件例子如下:
{ "bots": [ {"BotName": "UAlbertaBot", "Race": "Random", "BotType": "dll", "BWAPIVersion": "BWAPI_412"}, {"BotName": "Aiur", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "CruzBot", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "MegaBot", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "NUSBot", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Skynet", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Xelnaga", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Ximp", "Race": "Protoss", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "IceBot", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Iron", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_412"}, {"BotName": "LetaBot", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Oritaka", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "SRbotOne", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_412"}, {"BotName": "TerranUAB", "Race": "Terran", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Tyr", "Race": "Terran", "BotType": "proxy", "BWAPIVersion": "BWAPI_374"}, {"BotName": "Cimex", "Race": "Zerg", "BotType": "dll", "BWAPIVersion": "BWAPI_374"}, {"BotName": "GarmBot", "Race": "Zerg", "BotType": "proxy", "BWAPIVersion": "BWAPI_374"}, {"BotName": "JiaBot", "Race": "Zerg", "BotType": "dll", "BWAPIVersion": "BWAPI_412"}, {"BotName": "Overkill", "Race": "Zerg", "BotType": "dll", "BWAPIVersion": "BWAPI_412"}, {"BotName": "tscmoo", "Race": "Zerg", "BotType": "proxy", "BWAPIVersion": "BWAPI_374"}, {"BotName": "ZZZKBot", "Race": "Zerg", "BotType": "dll", "BWAPIVersion": "BWAPI_412"} ], "maps": [ { "mapFile": "maps/aiide/(2)Benzene.scx" }, { "mapFile": "maps/aiide/(2)Destination.scx" }, { "mapFile": "maps/aiide/(2)HeartbreakRidge.scx" }, { "mapFile": "maps/aiide/(3)Aztec.scx" }, { "mapFile": "maps/aiide/(3)TauCross.scx" }, { "mapFile": "maps/aiide/(4)Andromeda.scx" }, { "mapFile": "maps/aiide/(4)CircuitBreaker.scx" }, { "mapFile": "maps/aiide/(4)EmpireoftheSun.scm" }, { "mapFile": "maps/aiide/(4)Fortress.scx" }, { "mapFile": "maps/aiide/(4)Python.scx" } ], "gamesListFile" : "games.txt", "resultsFile" : "results.txt", "detailedResults" : false, "serverPort" : 1337, "clearResults" : "ask", "startGamesSimultaneously" : false, "tournamentType" : "AllVsAll", "enableBotFileIO" : true, "excludeFromResults" : [{"BotName": "ExampleExcludedBot"}], "tournamentModuleSettings": { "localSpeed" : 0, "frameSkip" : 256, "gameFrameLimit" : 85714, "timeoutLimits" : [ { "timeInMS" : 55, "frameCount": 320 }, { "timeInMS" : 1000, "frameCount": 10 }, { "timeInMS" : 10000,"frameCount": 1 } ], "drawBotNames" : true, "drawTournamentInfo": true, "drawUnitInfo" : true }}
其中幾個關鍵項目解釋如下:
- "bots":參與對戰的星際AI列表,包含名稱、種族、類型、使用BWAPI版本四項信息。該列表應與server/bots中的AI完全對應,否則服務端初始化時會報錯。
- "maps":對戰中使用的地圖列表。該列表中記錄的地圖文件需在"server/required/Required_BWAPI_*.zip/maps/aiide/"中存在,否則會導致運行出錯。
- "serverPort":服務端監聽埠,需與客戶端配置相同
- "tournamentType":對戰類型,包括多對多循環對戰("AllVsAll")和一對多車輪戰("1VsAll")兩種類型。其中"AllVsAll"及比賽中常用的模式,每個AI都將與其他所有AI進行交戰;而"1VsAll"模式下,bot列表中第一個AI將分別與其他所有AI進行對戰,其他AI之間不進行對戰,可用於測試自己開發的AI。
- "enableBotFileIO":是否啟用文件I/O功能。開啟此功能後將允許AI讀取自身的read文件夾和寫入write文件夾。每局結束後,客戶端將write文件夾中的內容同步到伺服器中,每局開始前,將服務端上一局的write內容推送到客戶機read文件夾中。這樣可實現AI的自定義數據記錄和讀取,便於某些具有學習能力的AI進行模型數據存儲和更新。
2)軟體操作及使用
修改好配置文件後,雙擊"server/run_server.bat"即可運行服務端軟體。服務端軟體可展示當前對戰狀態並生成結果報告,其基本界面如下圖:
服務端主界面主要展示了對戰進度和客戶端狀態列表。其中對戰狀態列表中顯示每個客戶端上運行的AI、對戰進行時間、輸贏結果等信息。
在對戰過程中和對戰結束後,都可以通過服務端軟體查看對戰結果報告,服務端軟體可生成對戰結果概要和詳細結果數據。
概要信息可通過點擊界面頂部菜單"Actions/View Results in Web Browser"查看,包括以下三種數據:
- 勝率統計表,展示每個AI對戰總場次,勝利、失敗、崩潰、超時次數,以及勝率信息。
- 對戰統計表,展示每個AI之間對戰的勝負場次信息
- 地圖統計表,展示每個AI在各個地圖上的勝負場次信息
對戰詳細結果數據,首先需要通過"Actions/Generate Detailed Results HTML"生成,之後在概要信息頁面中點擊"Detailed Game Results: html table"進行查看。該數據詳細記錄了每場對戰各方面情況,並可獲取對戰replay文件。
3.客戶端軟體配置及使用
客戶端通過修改配置文件"client/client_settings.json",即可開始運行。
{ "ClientStarcraftDir" : "C:\TM\Starcraft", "DefaultBWAPISettings": "BWAPI.ini", "TournamentModule" : "bwapi-data/TournamentModule.dll", "ServerAddress" : "192.168.1.100:1337", "ClientProperties" : []}
主要配置項目如下:
- "ClientStarcraftDir":星際爭霸安裝目錄
- "ServerAddress":伺服器IP及埠
修改好配置文件後,雙擊"client/run_client.bat"即可運行服務端軟體。正確配置的客戶端軟體運行後會自動接入服務端,在服務端調度下運行星際爭霸AI實例,自動創建或加入一局對戰。軟體運行界面如下圖:
快速開始一次星際爭霸AI比賽
StarcraftAITournamentManager內置了AIIDE2014-2016年3年的參賽AI數據,便於我們快速實現一次對戰比賽。
1.支撐環境:
- 安裝虛擬機軟體如VMWare,並創建一個WIN7 32為虛擬機,網路設置為」僅主機「或」橋接「
- 在虛擬WIN7中安裝星際爭霸、JRE
- 將client拷入虛擬機中
- 修改client配置文件將星際爭霸路徑指向實際位置
- 修改client配置文件將伺服器IP設置為主機實際IP(橋接)或虛擬網路內部IP(Host Only)
- 複製該虛擬機,複製數量參考主機性能,由於需要兩兩對戰,最終虛擬機數量最好為偶數。
2.服務端:
- 解壓"server/bots/aiide_2016_bots.7z"到"bots"文件夾
- 雙擊"server/run_server.bat",啟動服務端
- 軟體會詢問是否清空上次對戰數據,若不清空,可繼續執行上次未完成的比賽,若選擇清空,則重新開始比賽
- 若開始全新比賽,則需設置每兩個AI在每張地圖上的對戰次數,默認為1次
- 等待客戶端接入
3.客戶端
在每個虛擬機中執行"client/run_client.bat",啟動客戶端。
4.比賽執行
客戶端啟動後,會自動接入服務端。當服務端中接入的客戶端數量大於等於兩個,系統即自動開始對戰。
5.自定義對戰
可通過增減server_settings.json配置文件中的bots列表以及bots文件夾中的對應項目,進行自定義對戰。如果你自己開發了一款星際AI,也可以修改配置文件中的對戰模式為"1VsAll"並將自己的AI放在列表中第一個,進行一打多測試。
最後,祝大家遊戲愉快!
推薦閱讀:
※一樣在春節打折的「冷飯」,不一樣的炒法和吃法
※我的世界是個什麼樣的遊戲?
※你們為什麼要玩《迷你世界》?
※遊戲葫蘆娃的簡介是什麼?
※命運2這款遊戲的背景是什麼?