国际象棋引擎的深度是它的力量吗?

Is the depth of a chess engine its strength?

我在将创建 StockfishVsPlayer 游戏的程序中使用 python 的国际象棋库,Stockfish 作为国际象棋引擎,我希望能够让用户 select游戏。我知道深度越高,国际象棋引擎检查的动作就越多,但是定义它的强度只需要这些吗?那么我可以说难度=引擎的深度吗?就像在这一行中,我 select 深度

[...while it's the computer's turn to move...]
[...]
best_move = engine.go(depth=difficulty)[0]
[...]

国际象棋引擎不仅仅是它的深度。

由于我们无法在某些时候计算整个棋局,因此我们需要对棋盘的当前值进行一些评估。这个评估越准确,算法就会越好。

此外,检查相同深度的分支也是一种资源浪费。例如说在一个分支中你免费失去了你的女王。 99% 的时间这将是一个死分支,用于进一步计算该分支的任何资源都将被浪费。

最后,大多数国际象棋计算机都使用数据库来进行开局和残局,而这些数据库的复杂性对计算机的能力有着巨大的影响。

如果这三个因素保持不变,那么唯一的另一个主要因素就是搜索深度。然而,我没有看过 python 中的鳕鱼,但根据我构建国际象棋计算机的经验,移动深度可能不是一个有效的指标。随着游戏的进行,移动深度会增加,因为要考虑的棋子越来越少。通常我很难缩放计算时间。

1.说清楚一点:

  • Python chess 是国际象棋 GUI,不是国际象棋引擎。
  • Stockfish 是国际象棋引擎,不是国际象棋 GUI

Python 国际象棋不需要 Stockfish,反之亦然。因此,你写的是:

... If there was an option to select the level it should mention ...

不正确。 Python 国际象棋的文档不应该有任何特定于 Stockfish UCI 国际象棋设置的内容。

2。我在哪里可以找到 Stockfish UCI 设置?

官方页面:

有你想要的。如果你想了解更多细节,你可能想看看源代码:

3。回答你的问题

深度是国际象棋实力中最重要的因素之一。其他可能性是:

  • Contempt factor
  • 哈希大小
  • 每一步的时间
  • 表库
  • 开书
  • 具体职位

例如,带有 Cerebellum 图书库的 Stockfish 比没有的要强。 Syzygy tablebase 也提高了播放强度。

Stockfish 速度很快,但它并不是平仓时最好的引擎。最近有一个 post 关于 Komodo 和 Stockfish 的平仓:

Stockfish 中有一个 Skill Level 参数(在上面的链接中)。如果你想了解它是如何工作的,请查看我的 post:

总的来说,是的。这是一篇很好的论文排名深度和 ELO 评分。 http://web.ist.utl.pt/diogo.ferreira/papers/ferreira13impact.pdf

但是,对于 Stockfish,答案是否定的。如果你玩 Stockfish 游戏并将它的技能等级设置为 0,这大约是 1200 等级,你应该可以轻松击败它。但是,如果您查看它搜索的深度,它通常会搜索到深度 20,这应该接近 2500 评级。

所以这完全取决于它的编程方式。