0

我正在尝试在 C++ 中为游戏 tictactoe 3D 应用 minimax 算法。我正在努力为它找到一个好的评估函数。

有人知道哪里有很好的资源可以找到评估函数吗?

谢谢你。

4

3 回答 3

0

启发式是不必要的。只有 3^27 个状态,您可以将它们全部枚举并计算出最佳播放。

于 2010-04-14T18:56:23.943 回答
0

这是我要使用的:

遍历所有行(在所有方向)。对于每一行,如果它只有一个玩家的分数,则根据有多少分数奖励该玩家积分。您可以有一个查找表映射分数的分数,可以对其进行调整以获得最佳结果。最终结果将是两位选手得分之差。

示例(伪代码):

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;

这应该很有效,因为任何只有一个玩家分数的行都会让该玩家有机会获胜。

于 2010-04-14T16:30:25.423 回答
0

该游戏的评估函数只需要测试获胜位置。评估函数应该计算板子中的空字段,因为板子的空字段越多,分数应该越高。为了减少评估函数必须检查的线、行和对角线的数量,您可以镜像和旋转电路板。

于 2010-04-14T19:36:18.993 回答