什么型号最适合优化实时策略游戏?

时间:2010-11-02 21:28:26

标签: optimization artificial-intelligence genetic-algorithm

最近一篇文章讨论了使用遗传算法优化星际争霸II中的“构建命令”。

http://lbrandy.com/blog/2010/11/using-genetic-algorithms-to-find-starcraft-2-build-orders/

星际争霸战的初始状态是预先确定并且不变的。和国际象棋一样,在比赛的早期阶段做出的决定对球员在比赛中后期的表现有着长期的影响。因此,各种开放可能性或“构建订单”正在经过深入的研究和审查。在上述文章的发行之前,计算机辅助的构建顺序创建可能并不像最近那样流行。

我的问题是...... 遗传算法真的是建模优化构建订单的最佳方法吗?

构建顺序是一系列操作。某些操作具有先决条件,例如“在创建构建C之前需要构建B,但您可以随时构建A”。所以染色体可能看起来像AABAC。

我想知道遗传算法是否真的是解决这个问题的最佳方法。虽然我对这个领域并不太熟悉,但我很难将基因概念变成数据结构,这是一系列行动。这些不是独立的选择,可以像头和脚一样混合和匹配。那么复制和穿越会有什么价值?

我想任何国际象棋AI都会更合适,因为在任何特定时间的选择数组都可以被视为树状。

5 个答案:

答案 0 :(得分:3)

  

虽然我对这个领域并不熟悉,但我很难将基因的概念变成数据结构,这是一系列行动。这些不是独立的选择,可以像头和脚一样混合和匹配。那么复制和穿越会有什么价值?

嗯,这是一个非常好的问题。也许星际争霸中的前几个动作确实可以在几乎任何顺序中执行,因为与敌人的接触并不像在国际象棋中那样直接,因此记住前几个动作的顺序并不重要。要知道前几个中包含了哪些动作。但这种联系似乎意味着其他方面,这意味着'基因'确实不是所有可以被交换的,除非在编码中有一些我不知道的东西。

总的来说,看看你提供的链接,我会说遗传算法对于这种情况来说是一个糟糕的选择,可以在某些部分进行数学建模,并在其他部分扩展搜索树。它们可能比对可能性空间的详尽搜索更好,但可能不是 - 特别是考虑到有多个群体,而较贫穷的群体只是浪费处理时间。

然而,我所说的“糟糕的选择”是指相对于更合适的方法而言效率低下;这并不是说它不能在一秒钟之内产生98%的最佳结果。在这种情况下,如果计算机的暴力有用,通常比正确建模搜索空间比使用最有效的算法更重要。

答案 1 :(得分:2)

遗传算法可以是或者有时不是最优解或非最优解。基于遗传算法的复杂性,有多少突变,组合的形式,以及如何解释遗传算法的染色体。

因此,根据AI的实施方式,遗传算法可能是最好的。

您正在寻找实现遗传算法的单一方式,同时忘记遗传编程,数学的使用,高阶函数等。遗传算法可能非常复杂,并且通过使用聪明的组合系统进行杂交,非常智能化。
例如,神经网络经常通过遗传算法进行优化。


查找“遗传编程”。它类似,但使用树形结构而不是字符行,这允许更复杂的交互,更好地繁殖。对于更复杂的东西,它们通常效果更好。

答案 2 :(得分:2)

正如TaslemGuy指出的那样,遗传算法并不能保证是最优的,即使它们通常会产生良好的效果。

要获得最佳结果,您必须搜索每个可能的操作组合,直到找到通过树状表示的最佳路径。然而,为星际争霸做这件事很困难,因为有很多不同的途径可以达到目标。在国际象棋中,你将一个棋子从e2移动到e4然后对手移动。在星际争霸中,您可以在瞬间x或x + 1或x + 10或......

移动单位

国际象棋引擎可以查看棋盘的许多不同方面(例如它有多少棋子以及对手有多少棋子)来指导它的搜索。如果它知道它们严重比其他更糟糕,它可以忽略大多数可用的动作。

对于构建订单创建者,时间才真正重要。建造另一架无人机以更快地获得矿物质是否更好,或者是否可以更快地立即启动该产卵池?不像国际象棋那么简单。

这些决定很早就会发生,因此您必须先搜索每个替代结论,然后才能决定更好的结果,这将需要时间。 如果我自己编写构建顺序优化器,我可能会尝试制定一个启发式算法来估计当前状态有多好(接近目标状态),就像国际象棋引擎一样:

Score = a*(Buildings_and_units_done/Buildings_and_units_required) - b*Time_elapsed - c*Minerals - d*Gas + e*Drone_count - f*Supply_left

这会试图将得分与完成百分比以及星际争霸的常识相关联(保持你的资源低,建造无人机,不要建造超出你需要的供应)。当然,变量a到f需要调整。

在你有一个可以估计某种情况价值的启发式之后,我会使用Best-first searchIDDFS来搜索可能性树。

修改

我最近发现了paper,实际上甚至可以实时描述星际争霸中的构建顺序优化。作者使用depth-first searchbranch and bound以及启发式算法来估算基于技术树达到目标所需的最小努力量(例如,小狗需要产卵池)以及收集所需矿物质所需的时间

答案 3 :(得分:1)

已经进行了一些研究,使用分层强化学习来构建行动的分层排序,从而有效地最大化奖励。我没有找到很多实现这个想法的代码,但是有一些论文描述了基于MAXQ的算法,这些算法已被用于明确处理实时战略游戏领域,例如thisthis

答案 4 :(得分:0)

这种遗传算法只优化了游戏中一个非常特定部分的策略:游戏的前几个构建动作的顺序。它也有一个非常具体的目标:尽可能快地拥有尽可能多的蟑螂。

影响这个系统的唯一方面似乎是(我不是星际玩家):

  • 各单位的建立时间和 建筑物
  • 允许的单位和建筑物给出可用的单位和建筑物
  • 幼虫再生率。

这是一个相对有限的,相对明确的问题,具有较大的搜索空间。因此,它非常适合遗传算法(以及其他一些其他优化算法)。完整基因是一组特定的构建顺序,以第7个蟑螂结束。根据我的理解,你可以“玩”这个特定的基因,看它完成的速度有多快,所以你有一个非常明确的健康测试。 您还对构建顺序有一些很好的约束,因此您可以将不同的基因组合起来,而不是随机组合。

以这种方式使用的遗传算法是一个非常好的工具,可以为星际争霸的第一阶段找到更优化的构建顺序。由于其随机性,它也很擅长找到令人惊讶的策略,这可能是作者的另一个目标。

要在RTS游戏中使用遗传算法作为 算法,您必须找到一种方法来编码对情境的反应,而不仅仅是普通的旧构建顺序。这还涉及正确识别本身可能是一项艰巨任务的情况。然后,你必须让这些基因发挥成千上万的星际争霸,相互对抗,并且(可能)对抗人类,选择和组合赢家(或更持久的输家)。这也是遗传算法的一个很好的应用,但它涉及在你进入遗传算法部分之前解决了一些非常困难的问题。