资源 | CommandCenter:基于暴雪官方API的星际争霸2 AI Bot
选自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
本文为机器之心编译,转载请联系本公众号获得授权。
✄------------------------------------------------
加入机器之心(全职记者/实习生):hr@jiqizhixin.com
投稿或寻求报道:editor@jiqizhixin.com
广告&商务合作:bd@jiqizhixin.com
点击阅读原文,查看机器之心官网↓↓↓
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 奋力打开改革发展新天地 7962119
- 2 中国黄金原董事长家搜出大量黄金 7912408
- 3 空调英文不会男生盯着考场空调看 7888200
- 4 “冷资源”里的“热经济” 7786173
- 5 被铁路售票员的手速惊到了 7676725
- 6 网红赤木刚宪爆改赵露思 7570563
- 7 特朗普想拿下世界第一大岛 7400978
- 8 山姆代购在厕所分装蛋糕 7382925
- 9 女演员陈丽君回应获最佳男主角奖 7213866
- 10 刘强东提前发年终奖 7152401