【问题标题】:Need help on chess game evaluation function需要有关棋局评估功能的帮助
【发布时间】:2014-07-12 08:03:33
【问题描述】:

我正在开发一个国际象棋游戏,目前我正在尝试实现一个极小极大算法。我以前没有这样做过,关于如何以编程方式表示和实现以下评估功能特性(材料、移动性、棋子方表、中心控制、被困棋子、国王安全、节奏和棋子结构)我所知甚少对我来说很清楚(如果有人可以向我详细解释,我将不胜感激)。我已经能够为每个棋子、棋子动作值和每个棋子的方桌分配值。目前遇到的问题是如何生成将被添加或从分数中减去的受攻击和防御值。这里的想法是,我想奖励 AI 代理保护它的棋子,并惩罚它受到攻击的棋子。提前感谢。

【问题讨论】:

    标签: java algorithm artificial-intelligence chess


    【解决方案1】:

    您提到的每个评估功能都将占用计算时间。您可能已经知道,国际象棋引擎的实力来自两个方面:

    • 搜索
    • 评估

    两者都在争夺相同的宝贵资源,即计算时间。 评估往往是基于启发式的,因此有点模糊,而搜索往往会产生更具体和相关的结果。如果您开始构建引擎,那么我建议您专注于搜索,同时保持评估基本(但不弱!)。这样,您将能够准确判断哪里出了问题,从而避免可能的早期失望。此外,Stockfish 等流行引擎也开始构建强大的搜索算法。

    如果您有足够的耐心阅读本文,让我为您指出两个有用的评估资源:

    1. Chess Programming Wiki's evaluation page:这个网站可能是国际象棋引擎开发的最佳在线资源。
    2. Link to a basic but not weak evaluation function:这是 C# 代码。很遗憾,我找不到作为此评估依据的原始文章。

    希望对你有帮助:)

    【讨论】:

      【解决方案2】:

      我认为你不应该包括进攻和防守棋子的计算。 minmax 算法已经以更有效的方式考虑了该功能。

      如果在接下来的移动中对手可以拿走它,则该棋子受到攻击。如果你试图在静态评估函数中评估这种可能性,如果你想正确地做到这一点,你会遇到麻烦。如果我的受保护棋子被对手皇后拿走,那不是问题。你如何考虑到这一点?如果我的王后被对面的棋子占领,但移动棋子会使国王受到攻击?

      这些注意事项由 minmax 算法而不是评估器更好地管理。考虑到要知道您可以吃/可以吃多少块,您应该考虑所有可能的移动,并且您可能会花费相同的时间用于在 minmax 算法中更深一层。此外,如果您稍后决定确实在 minmax 中进一步前进一步,那么时间将被浪费。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多