Stockfish 对于给定的位置每次都会做相同的动作

问题描述 投票:0回答:3

使用鳕鱼干进行国际象棋程序。对于任何位置,它每次都会给出相同的动作。它甚至以相同的动作打开。

我正在使用 python-chess 库与 stockfish 进行通信,我不确定这是否是问题所在,或者是否是其他问题。

engine = chess.engine.SimpleEngine.popen_uci(
        r"engine/stockfish_14.1_win_x64_popcnt/stockfish_14.1_win_x64_popcnt.exe")
python chess python-chess stockfish
3个回答
0
投票

Stockfish 在任何给定位置都会采取它认为最好的动作。这就是为什么如果你给它同样的位置并给它同样的思考量,它总是会给你同样的动作。

在引擎对引擎锦标赛中,他们经常根据给定的开局位置进行比赛。因此,给出了前 X 个动作,然后引擎将从那里开始自行运行。这样大多数时候游戏都会不同,否则无论玩多少次游戏看起来都一样。


0
投票

像 Stockfish 这样的国际象棋引擎会尝试针对给定位置下最好的棋步。引擎找到的走法主要取决于时间限制和搜索线程数量 - 如果这些参数相同,您可以预期返回的最佳走法是相同的 - 特别是当引擎在单个线程上搜索时。


0
投票

关于OP的评论

“玩家在 chess.com 上对战的国际象棋引擎会下出各种动作,尤其是在开局中。我意识到这可能不是引擎本身的内置功能,有没有好的方法来实现这一点?”

您可以通过

multipv
选项,例如

variations = engine.analyse(board, chess.engine.Limit(time=0.1), multipv=5)

也许可以消除错误(例如设置

thresh = 100
并减少以使引擎发挥更强)

variations = [info for info in variations if
        variations[0]['score'].relative.score() - info['score'].relative.score() < thresh]

然后随机选择一个动作

move = random.choice(variations)['pv'][0]
© www.soinside.com 2019 - 2024. All rights reserved.