问题在于我很难理解DFBB是如何工作的,以及在这种情况下应该使用哪些参数和输出是什么。
我正在为《星际争霸2》游戏开发一个AI,用于处理游戏中的建造顺序(针对Terran团队)。我计划按照下面的链接中描述的方法进行,该方法与我的目标非常相似。总结一下我的计划如下:
我将获得一个需要建造的不同类型建筑物的列表。这些建筑物需要消耗矿物和气体(这是游戏中的货币),有些建筑物有前置条件(意味着需要先建造其他建筑物才可能建造它),并且它们需要一定的时间来建造。
在文章中,他们使用深度优先分支限界算法来找出最佳的建造顺序,也就是以最快的方式建造列表中的建筑物。这是他们的伪代码:
其中状态S由S =(当前游戏时间,可用资源,正在进行但未完成的行动,工人收入数据)表示。S´的推导在文章中有描述,是通过三个函数完成的,这部分我理解了。
如前所述,我难以理解在他们描述的伪代码中,起始状态S,目标G,时间限制t和界限b应该如何表示。
我只确定三件事:需要建造的建筑物列表,当前拥有的消耗品(矿物和气体),以及资源(即我在游戏中已经拥有的建筑物)。这些应该以某种方式应用到算法中,但输入函数的具体内容尚不清楚。输出应该是一个按正确顺序排序的列表,如果我按照列表中的顺序建造建筑物,那么一切应该都能顺利进行,并且应该是在可能的最短时间内完成的。
例如,我是否应该遍历建筑物列表,并对每个元素运行DFBB,目标是查看该建筑物是否可以建造。但时间限制应该设置为多少,界限在这种情况下意味着什么?它仅仅是成本吗?
请解释如何在列表上运行此函数以找到最佳的建造路径。文章读起来相当容易,但我需要一些帮助来理解它的工作原理以及如何将其应用到我的问题上。
文章链接:https://ai.dmi.unibas.ch/research/reading_group/churchill-buro-aiide2011.pdf
回答:
起始状态S是游戏开始时的初始状态。我认为你有100矿物和一个指挥中心,以及12个SCV,这就是你的起点。
这里的目标是您想要拥有的建筑物列表。满足条件是目标中的所有建筑物也都在S中。
时间限制是您愿意花费的时间来获得结果。如果您将其设置为5秒,它可能会给您一个次优解,但它会在5秒内完成。如果算法完成搜索,它会提前返回。如果您不在乎,可以省略它,但请确保将解决方案写入文件,以防万一发生意外情况。
界限b是建造所有东西的游戏内时间限制。您最初可以将其设置为无限或某个明显的值(比如10分钟?)。当您找到一个解决方案时,b会更新,因此您找到的每个新解决方案必须(在游戏内)比之前的更快。
几点注意事项。请确保可能的行动(步骤9中的子节点)包括什么都不做(等待更多资源)和建造一个SCV。
另一个可能缺失的是对SCV移动速度的正确建模。单位需要移动到某个地方去建造东西,它们返回采矿也需要时间。