我试图为类似于Tic-Tac-Toe的游戏编写AI代码。您可以看到其规则here。
我可以找到使用的最小 - 最大算法和分析函数here
到目前为止我的尝试方式:
e.g。 my_pattern = " ".join(str(x) for x in [piece, None, piece, piece, None])
my_pattern
与6个不同的数组匹配(每个数组代表6个不同方向中的一个)。 现在,这个分析功能应该实际计算什么?
如果有人能够准确地描述分析功能的目的,那就太棒了。
答案 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表示平衡板,负值表示黑色具有有利位置。您可以根据要执行的测试结果更改权重。但是,找到所有可能的组合是详尽的任务,但游戏是这样的:)