我正在尝试在 C++ 中为游戏 tictactoe 3D 应用 minimax 算法。我正在努力为它找到一个好的评估函数。
有人知道哪里有很好的资源可以找到评估函数吗?
谢谢你。
我正在尝试在 C++ 中为游戏 tictactoe 3D 应用 minimax 算法。我正在努力为它找到一个好的评估函数。
有人知道哪里有很好的资源可以找到评估函数吗?
谢谢你。
启发式是不必要的。只有 3^27 个状态,您可以将它们全部枚举并计算出最佳播放。
这是我要使用的:
遍历所有行(在所有方向)。对于每一行,如果它只有一个玩家的分数,则根据有多少分数奖励该玩家积分。您可以有一个查找表映射分数的分数,可以对其进行调整以获得最佳结果。最终结果将是两位选手得分之差。
示例(伪代码):
const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board
//The above values are arbitrary - adjust to what you think makes sense.
score = 0;
for all rows in all directions:
count Xs and Os
if (xs>0 && os==0)
score += markScore[xs];
else if (os>0 && xs==0)
score -= markScore[os];
return score;
这应该很有效,因为任何只有一个玩家分数的行都会让该玩家有机会获胜。
该游戏的评估函数只需要测试获胜位置。评估函数应该计算板子中的空字段,因为板子的空字段越多,分数应该越高。为了减少评估函数必须检查的线、行和对角线的数量,您可以镜像和旋转电路板。