用极小极大来解决一个有大量动作的棋盘游戏是否可行?

人工智能 游戏-ai 极小极大 α-β-修剪
2021-10-26 20:39:00

我必须为类似于国际象棋的虚构游戏构建一个 KI。当我研究合适的解决方案时,我发现了 MinMax 算法,但我不确定它是否适用于给定的游戏动态。

挑战在于,由于这些游戏规则,我们每轮的排列比国际象棋要多得多。

  • 棋盘上有六个棋子,范围不同。
  • 平均而言,每转一个棋子有 8 种可能的移动。
  • 玩家可以选择任意数量的棋子移动。例如没有,全部,或介于两者之间的某个数字(而在国际象棋中,您只能移动一个。)

实际问题:

  • 为所描述的游戏实现 MinMax 是否可行?
  • alpha-beta-pruning 和精炼的评估函数是否有帮助(尽管有大量可能的移动)?
  • 如果没有,是否有合适的替代方案?
1个回答

- 玩家可以选择任意数量的棋子移动。例如没有,全部,或介于两者之间的某个数字。(而在国际象棋中你只能移动一个)

这句话特别是真正导致你的法律行动规模扩大的部分。你在这里有一个组合动作空间。如果你的每一个棋子都有 8 个合法的移动,那么就是:

  • 第一个棋子有 8 个合法动作(如果该计数尚未包括“什么都不做”选项,则为 9 个)
  • 对于这些中的每一个,第二个部分又有 8 或 9 个不同的选择(导致例如8×8=64仅前两件的可能组合)
  • 对于这些中的每一个,第三个部分再次有 8 个选择(导致64×8=512仅前三件的可能组合)。
  • 等等。

这爆发得太快了,使用任何基于 MiniMax 的算法(包括诸如 alpha-beta 修剪、主要变异搜索等),真的没有希望得到一个像样的玩家。

在您描述的各种游戏中,您将希望使用可以利用您的动作空间“结构”的算法。所有可能组合的原始枚举很快就会爆炸,但是许多算法可以通过以这样一种方式重新表述问题,使你有更多的“深度”而不是“广度”来做得相当好。例如,您可以将每个片段的选择视为单独的“动作”,而不是将所有片段的完整选择组合视为单个“动作”。

而不是做出单一的选择8×8×8×每回合都有可能,您希望有一个搜索树,让您的玩家在其中做出一个选择8(对于第一件),紧接着是另一个选择8(对于第二个棋子)等等。只有在当前玩家为所有棋子做出选择后,对方玩家才能做出选择。有了这样的策略,你的搜索树的广度将不再是问题,但深度将成为问题。为了解决这个问题,您还需要确保您的方法可以泛化到不同的深度级别。

一个很好的地方是蒙特卡洛树搜索的组合版本,例如:

这些算法虽然比 MiniMax 复杂得多,但相比之下 MiniMax 是一个非常基本的算法。