在Tictaoe 3d游戏中寻找评估函数 我尝试在C++中使用Mimax算法进行游戏。 我正在努力为它找到一个好的评价函数

在Tictaoe 3d游戏中寻找评估函数 我尝试在C++中使用Mimax算法进行游戏。 我正在努力为它找到一个好的评价函数,c++,algorithm,function,3d,tic-tac-toe,C++,Algorithm,Function,3d,Tic Tac Toe,有人知道哪里有很好的资源来找到评估功能吗 谢谢。以下是我要用的: 从各个方向检查所有行。对于每一行,如果只有一名玩家的分数,则根据分数多少奖励该玩家分数。您可以使用一个查找表将分数映射到分数,可以对其进行调整以获得最佳结果。最终结果将是两名球员的得分之差 伪代码示例: const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board //The above values are arbitrary - adjust to

有人知道哪里有很好的资源来找到评估功能吗

谢谢。

以下是我要用的:

从各个方向检查所有行。对于每一行,如果只有一名玩家的分数,则根据分数多少奖励该玩家分数。您可以使用一个查找表将分数映射到分数,可以对其进行调整以获得最佳结果。最终结果将是两名球员的得分之差

伪代码示例:

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;

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

不需要启发式。只有3^27个状态,您可以将它们全部枚举并计算最佳游戏。

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

您能给我举一个如何将分数映射到分数的例子吗?我想知道setScore中的值对AI有多大影响?我试图找到最好的价值观。找到好的价值观的一个方法是让你的AI用不同的价值观与自己进行大量的游戏,看看哪一个是赢家。许多最好的国际象棋引擎都会这样做来调整参数。更准确地说,他们通常与其他引擎而不是自己的引擎竞争。对之前想法的概括是使用遗传算法来自动调整值,但这可能有点过头了。不,在3D tictactoe中,状态的总数是64个因子。你应该定义3D tic tac toe。我想基思认为这是一个3x3x3的网格,而不是4x4x4的网格,这似乎是你所建议的。在任何一种情况下,你都会把州和可能的游戏数量混淆起来。应该有~3^64个州。现在这可能是不可行的,但可能会帮助您稍微可视化一些状态的数量。