algorithm - 如何为 Min-Max 算法编写分析函数?

标签 algorithm game-theory minmax

我正在尝试为一款有点类似于 Tic-Tac-Toe 的游戏编写 AI 代码。可以看到它的规则here .

可以找到我正在使用的 min-max 算法和分析函数 here

到目前为止我尝试过的方式:

  1. 我已经建立了一些对当前玩家有好处的模式。 (在 Python 中)

例如my_pattern = "".join(str(x) for x in [piece, None, piece, piece, None])

  1. 我将这些图案与六边形游戏板上所有 6 种可能的方向进行匹配,以匹配每一 block (不是空白区域)。准确地说,将 my_pattern 与 6 个不同的数组匹配(每个数组代表 6 个不同方向之一)。

现在,这个分析函数实际应该计算什么?

  1. 整个棋盘状态的得分?
  2. 棋盘上最后一步的得分?

如果有人能准确描述 Analysis 函数的用途,那就太好了。

最佳答案

分析函数代表棋盘的当前状态。它可能/可能不包括最后一步、任何先前的 Action 或到达棋盘位置的 Action 顺序。它还应该考虑轮到谁玩。

我的意思是,同一 block 棋盘对白/黑可能是好是坏,这取决于轮到谁。 (在国际象棋中称为zugzwang的情况)。

此外,同一棋盘可以通过多种移动顺序到达,因此,是否要将其包含在分析中取决于游戏类型。 (高级国际象棋引擎肯定包括移动顺序,虽然不是为了计算当前棋盘,而是为了进一步分析到达该位置的可能性)。然而,在这个游戏中,我认为您的分析功能没有必要包括最后或之前的任何 Action (顺序)。

编辑:

分析函数示例:

value = 10000*W(4) - 10000*W(3) + 200*W(2.1) + 200*W(1.2) + 100*W(2) + 100*W(1.1) + 2*W(1e) + 10*W(1m) + 30*W(1c) - (10000*B(4) - 10000*B(3) + 200*B(2.1) + 200*B(1.2) + 100*B(2) + 100*B(1.1) + 2*B(1e) + 10*B(1m) + 30*B(1c))

哪里:

W = white
B = black pieces
4 = made line of 4 pieces
3 = made line of 3 pieces
2 = made line of 2 pieces having possibility of getting extended to 4 from atleast one side
. = blank (ie, 1.2 = W.WW on the board)
1.1 = Piece|Blank|Piece and possibility of extending to 4 from atleast one side
e|m|c = edge|middle|center of board, and possibility of extending to 4 from either sides

此分析函数的正值表示白色更好,0 表示平衡板,负值表示黑色具有优势。您可以根据要执行的测试结果更改权重。然而,找到所有可能的组合是一项详尽的任务,但游戏就是这样:)

关于algorithm - 如何为 Min-Max 算法编写分析函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843041/

相关文章:

algorithm - 具有此期望输出的算法的运行时间顺序是什么?

java - Minmax 算法不返回根的直接子代(返回非法移动)

python minmax仅使用递归

algorithm - 在 2048 游戏中,最大的理论牌是什么?

python - 列表的最小值和最大值(不使用最小/最大函数)

c - 为什么我总是得到 0 作为数组的最小值

python - 使用python查找图像中的连接组件

c# - Dijkstra 没有找到正确的路径

android - 使用倒计时设置按钮启用

algorithm - 有 N 座石头塔和 2 名玩家的游戏