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

时间:2016-11-28 11:18:47

标签: algorithm game-theory minmax

我试图为类似于Tic-Tac-Toe的游戏编写AI代码。您可以看到其规则here

我可以找到使用的最小 - 最大算法和分析函数here

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

  1. 我已经建立了一些对当前玩家有益的模式。 (在Python中)
  2. e.g。 my_pattern = " ".join(str(x) for x in [piece, None, piece, piece, None])

    1. 我将这些模式与六角形游戏板上所有6个可能的方向匹配,用于每个部分(不适用于空白区域)。确切地说,将my_pattern与6个不同的数组匹配(每个数组代表6个不同方向中的一个)。
    2. 现在,这个分析功能应该实际计算什么?

      1. 整个州的得分?
      2. 最后一招的成绩是什么?
      3. 如果有人能够准确地描述分析功能的目的,那就太棒了。

1 个答案:

答案 0 :(得分: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表示平衡板,负值表示黑色具有有利位置。您可以根据要执行的测试结果更改权重。但是,找到所有可能的组合是详尽的任务,但游戏是这样的:)