我正在尝试为一款有点类似于 Tic-Tac-Toe 的游戏编写 AI 代码。可以看到它的规则here .
可以找到我正在使用的 min-max 算法和分析函数 here
到目前为止我尝试过的方式:
- 我已经建立了一些对当前玩家有好处的模式。 (在 Python 中)
例如my_pattern = "".join(str(x) for x in [piece, None, piece, piece, None])
- 我将这些图案与六边形游戏板上所有 6 种可能的方向进行匹配,以匹配每一 block (不是空白区域)。准确地说,将
my_pattern
与 6 个不同的数组匹配(每个数组代表 6 个不同方向之一)。
现在,这个分析函数实际应该计算什么?
- 整个棋盘状态的得分?
- 棋盘上最后一步的得分?
如果有人能准确描述 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/