具有深度限制的极小极大游戏中的效用函数

问题描述

我正在制作自己的 5 连胜游戏,其中棋盘大于 5x5,大小尚未确定,但假设为 10x10。我正在使用极小极大算法和 alfa-beta 剪枝来设计它。我已经决定一个获胜情况的效用函数是:(空位+选择的位置)*5,所以如果计算机找到一个胜利,剩下2个空位,那么该值将是(2+1)*5 = 15. 输的计算相同,但乘以 -5 而不是 5。对于平局,它将评估为 0。现在,我写这篇文章的问题是:如何确定未完成场景的实用程序,其中达到深度限制?简单地设为 0 是不够的,必须有某种“猜测”或排名。

我的一个想法是计算每一行、每一列和每条可能的对角线中的所有 X,并计算空的位置 + 选择的位置乘以最大的 X 序列。问题在于计算需要时间并且编写起来很痛苦,然后您还必须考虑找到的序列的边缘:它们是否以 O 为边界?我们应该计算有空位的 X 吗?

这看起来非常复杂,因此我想知道是否有人对未完成的场景有任何好的建议。谢谢!

解决方法

我不知道您在第一段中在说什么,胜利应该被视为胜利(减去总是找到最短胜利的深度)。如果我理解正确,您正在寻找创建评估/启发式函数以便能够输入棋盘状态并输出该状态的静态分数? Gomoku (5 in a row) 是一款流行的游戏,有很多引擎,谷歌“评估功能 gomoku”,你会找到很多关于这个主题的信息和论文。

对于象棋这样的游戏,评估是完成的,例如通过计算每一方的物料平衡、棋子位置、国王安全等。对于 X-in-a-row,通常的方法是给所有可能的场景打分,然后将它们加在一起。五子棋的场景通常如下:

  • FiveInRow(赢)
  • OpenFour
  • ClosedFour
  • OpenThree
  • 关闭三
  • OpenTwo
  • 关闭两个

开放意味着在友方棋子旁边没有阻挡敌方棋子:

OpenThree: -O--XXX---
关闭三:--OXXX---

如何总结它们,以及给每个场景打多少分,取决于你,这就是乐趣和实验的开始!