使用鳕鱼干进行国际象棋程序。对于任何位置,它每次都会给出相同的动作。它甚至以相同的动作打开。
我正在使用 python-chess 库与 stockfish 进行通信,我不确定这是否是问题所在,或者是否是其他问题。
engine = chess.engine.SimpleEngine.popen_uci(
r"engine/stockfish_14.1_win_x64_popcnt/stockfish_14.1_win_x64_popcnt.exe")
Stockfish 在任何给定位置都会采取它认为最好的动作。这就是为什么如果你给它同样的位置并给它同样的思考量,它总是会给你同样的动作。
在引擎对引擎锦标赛中,他们经常根据给定的开局位置进行比赛。因此,给出了前 X 个动作,然后引擎将从那里开始自行运行。这样大多数时候游戏都会不同,否则无论玩多少次游戏看起来都一样。
像 Stockfish 这样的国际象棋引擎会尝试针对给定位置下最好的棋步。引擎找到的走法主要取决于时间限制和搜索线程数量 - 如果这些参数相同,您可以预期返回的最佳走法是相同的 - 特别是当引擎在单个线程上搜索时。
关于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]