【问题标题】:look for evaluation function in tictactoe 3d game在 tictactoe 3d 游戏中寻找评估函数
【发布时间】:2010-04-14 16:24:23
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: c++ algorithm function 3d tic-tac-toe


    【解决方案1】:

    这是我要使用的:

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

    示例(伪代码):

    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;
    

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

    【讨论】:

    • 你能告诉我一个如何将分数映射到分数的例子吗?
    • 我想知道 setScore 中的值对 AI 有多大影响?我正在努力寻找最佳价值。
    • 找到好的值的一种方法是让你的 AI 用不同的值与自己玩很多游戏,看看哪一个是赢家。许多最好的国际象棋引擎都会这样做来调整它们的参数。 (更准确地说,他们通常与其他引擎而不是自己对抗)。
    • 前一个想法的概括是使用遗传算法自动调整值,但这可能有点矫枉过正。
    【解决方案2】:

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

    【讨论】:

    • 不,在 3D tictactoe 中,状态的总数是 64 阶乘
    • 您应该定义“3D tic tac toe”。我假设 Keith 假设它是一个 3x3x3 网格,而不是 4x4x4 网格,这似乎是您的建议。无论哪种情况,您都会将“状态”与可能的游戏数量混淆。应该有〜3 ^ 64个状态。现在这可能是不可行的,但可能会帮助您稍微可视化状态的数量。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多