2

我正在尝试为类似于井字游戏的游戏编写 AI 代码。你可以在这里看到它的规则。

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

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

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

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

  1. 我将这些图案与每块六角游戏板上的所有 6 个可能方向进行匹配(而不是空格)。准确地说,匹配my_pattern6 个不同的阵列(每个阵列代表 6 个不同方向之一)。

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

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

如果有人可以准确地描述分析功能的目的,那就太好了。

4

1 回答 1

0

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

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

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

编辑:

分析函数示例:

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表示平衡板,负值表示黑方有优势。您可以根据将要执行的测试结果更改权重。然而,找到所有可能的组合是一项艰巨的任务,但游戏就是这样 :)

于 2016-11-28T12:14:59.410 回答