了解星际争霸 2 的深度优先分支定界实现

Understanding Depth-First Branch and Bound implementation to StarCraft 2

问题是我发现很难理解 DFBB 的工作原理,这种情况下的参数和输出应该是什么。

我正在为 StarCraft 2 游戏创建一个 AI,它将处理游戏中的构建顺序(对于 Terran 团队)。我计划遵循 link(见下文)中描述的方法,该方法与我想要的非常相似。总结一下我打算做什么:

一份需要建造的不同类型建筑的清单会给我。建筑物需要消耗矿物和气体(这是游戏中的货币),有些建筑物有先决条件(意味着其他建筑物需要先建造才能建造)并且需要一定的时间才能建造。

在文章中,他们使用深度优先分支定界法找出最佳构建顺序,这意味着以最快的方式构建该列表中的建筑物。这是他们的伪代码:

其中状态S表示为S=(当前游戏时间、可用资源、进行中但未完成的动作、工人收入数据)。文章描述了 S´ 是如何导出的,它是通过三个函数完成的,所以我有点理解。

如前所述,我正在努力理解在他们描述的伪代码中应该用什么表示起始状态 S、目标 G、时间限制 t 和绑定 b。

我只确定三件事:需要建造的建筑列表,我目前拥有的消耗品(矿物和天然气),资源(即我在游戏中已经拥有的建筑)。然后应该以某种方式将其应用于算法,但不清楚函数的输入应该是什么。输出应该是一个按正确顺序排序的列表,所以如果我按照它们进来的顺序在哪里建造建筑物,那么它应该全部解决,这应该是可以完成的最佳时间。

例如,我是否应该在每个元素上遍历建筑物列表和 运行 DFBB,然后查看建筑物是否可以建造。但是,时间限制也应该设置什么?在这种情况下,bound 是什么意思?仅仅是成本吗?

请解释这个函数应该如何 运行 在列表中,以便找到构建它的最佳路径。这篇文章相当容易阅读,但我需要一些帮助来理解它的工作原理以及如何将它应用到我的问题中。

Link 到文章:https://ai.dmi.unibas.ch/research/reading_group/churchill-buro-aiide2011.pdf

起始状态S是游戏开始时的初始状态。我相信你有 100 个矿产和指挥中心和 12 个? SCV,这就是你的开始。

此处的目标是您想要拥有的建筑列表。满足条件是所有建筑都在目标也在S.

时间限制是您愿意为获得结果花费的时间。如果你将它设置为 5 秒,它可能会给你一个 sub-optimal 解决方案,但它会在 5 秒内完成。如果算法完成搜索,它将提前 return。如果您不介意,请将其保留,但请确保将解决方案写入文件以防万一。

绑定 b 是 in-game 构建所有内容的时间限制。您最初将其设置为无穷大或某个明显的值(例如 10 分钟?)。当您找到解决方案时,b 会更新,因此您找到的每个新解决方案都必须比前一个更快 (in-game)。

一些注意事项。确保可能的操作(第 9 步中的子项)包括什么都不做(等待更多资源)和构建 SCV。

另一件可能缺失的事情是 SCV 移动速度的正确建模。这些单位需要移动到一个地方来建造东西,他们也需要时间才能回到采矿。