改进 AI 启发式算法的更有效方法……在数千个预先确定的启发式算法集之间进化或测试?

人工智能 游戏-ai 进化算法 搜索 启发式 α-β-修剪
2021-10-18 02:03:52

我正在制作一个连接四游戏,其中我的引擎使用带有 Alpha-Beta 修剪的 Minimax 进行搜索。由于 Alpha-Beta 修剪在首先查看最佳移动时更有效(因为它可以修剪不良移动的分支),所以我试图提出一组启发式算法,可以将移动从最佳到最差排序。这些启发式方法显然不能保证总是有效,但我的目标是它们通常会让我的引擎首先查看最佳动作。这种启发式的一个例子如下:

  • 移动到棋盘中心柱的接近度 - 重量 3。
  • 有多少棋子围绕着一个动作 - 重量 2。
  • 水平移动到棋盘底部有多低 - 重量 1。
  • 等等

但是,我不知道移动的每个属性的最佳权重值集是多少。我上面列出的权重只是我的估计,显然可以改进。我可以想到两种改进它们的方法:

1)进化。我可以让我的引擎思考,而我的启发式尝试猜测引擎会选择哪个动作最好,我会看到我的启发式的成功分数(类似于正确猜测的 x%)。然后,我将对启发式进行伪随机更改/突变(通过将其中一个权重值随机调整一定量),然后看看启发式是如何做的。如果它猜得更好,那将是我的新启发式方法。请注意,当我的引擎思考时,它会在其计算中考虑数千个不同的位置,因此将有足够的数据来平均我的启发式方法在预测方面的好坏。

2) 从一开始就生成数千个具有不同权重值的不同启发式。然后,让他们都尝试猜测我的引擎在思考时会支持哪个动作。应保留得分最高的启发式算法集。

我不确定这里哪种策略更好。策略#1(进化)似乎需要很长时间才能运行,因为每次我让我的引擎认为它需要大约 1 秒。这意味着测试每个新的伪随机突变需要一秒钟。同时,策略 #2 似乎更快,但如果我自己不包括它们,我可能会错过一组很棒的启发式方法。

3个回答

嗯,我看到您提出的两种方法中都存在一些问题。

重要的是要注意,您的 Minimax 搜索过程设法达到的深度级别,以及它可以遍历树的速度,对于算法的性能非常重要。因此,在评估移动排序的特定启发式函数的好坏时,不仅要看它对移动排序的好坏;考虑启发式函数调用的运行时开销也很重要如果您的启发式函数能够很好地排序,但计算量太大以至于您无法在树中搜索那么深,那么它通常并不值得。您提出的任何解决方案都无法考虑到这一点。

另一个问题是衡量什么排序是“最好的”并非易事。仅对最佳移动位置具有最高准确度的启发式算法不一定是最佳启发式算法。例如,一个总是将最好的移动放在第二个位置的启发式(0%准确度,因为它在错误的位置,应该是第一个位置)可能比将最佳移动放在第一个位置的启发式更好50%的时间 (50%准确度),并把最好的移动放在最后50%的案例。


我更倾向于通过设置不同版本的 AI(相同的搜索算法、相同的每轮处理时间限制、不同的启发式函数)相互竞争并测量获胜百分比的比赛来评估不同启发式函数的性能。

此设置也可以使用类似于您提出的两种变体来完成;您可以将所有可以提出的启发式函数详尽地放在比赛中,或者您可以让进化算法顺序生成假设启发式函数的群体,并与每个群体进行比赛。一般来说,我倾向于进化方法,因为我们希望它搜索相同的假设搜索空间(启发式函数),但我们希望它以比穷举搜索更聪明/更有效的方式这样做。当然,如果您碰巧有大量可用的硬件(例如,如果您是 Google),您也许可以同时并行执行完整的穷举搜索。


请注意,也有一些方法可以在没有您建议的启发式函数的情况下进行相当不错的移动排序。

例如,您可能应该使用迭代深化这是您的搜索算法的一种变体,您首先只执行具有深度限制的搜索d=1,然后以深度限制重复完整的搜索过程d=2,然后再次有限制d=3等,直到处理时间用完。

一旦您完成了深度限制的此类搜索过程d,并继续进行后续搜索过程,限制为d+1,您可以根据您在之前搜索过程中的评估对根节点中的移动进行排序(有深度限制d)。是的,在这里您只能在根节点中进行移动排序,而在其他任何地方都没有,但这是迄今为止树中最有影响力/最重要的移动排序位置。随着离根越来越远,移动顺序变得越来越不重要。

如果您使用的是转置表(TT),通常也会存储为您的 TT 中的每个状态找到的“最佳移动”。稍后,如果您遇到 TT 中已经存在的状态(如果您使用迭代深化,这将很常见),并且如果您不能直接获取存储的值但必须实际进行搜索(例如,因为你的深度限制由于迭代加深而增加),你可以先搜索存储在TT中的“最佳移动”。这是一种非常轻量级的移动命令,因为您只将一个移动放在前面,而不命令其余的移动,但它仍然可以有效。

关于随机算法与进化算法,进化算法几乎总是更好。想象一下所有可能的启发式方法的空间。进化算法“智能地”通过它,即它在一定程度上遵循空间的梯度,并且应该收敛到局部最优值。随机算法将无法实现这一点。

关于所花费的时间,每个人评估 X 启发式方法肯定是一样的吗?

还有第三种策略,那就是研究人类玩家使用的启发式方法。