问题标签 [stockfish]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 限制鳕鱼评估时间
我正在尝试使用 Python stockfish 库对一系列分位置进行评估。当解决方案在 x 中配合时,我的代码运行得很快。当解决方案是 x centipawns 时,它会运行很长时间。如何让stockfish 限制它考虑评估的时间?这是我的代码:
javascript - 设置鱼技能水平(UCI / Javascript)
我这辈子都做不到,除了在 20 级提供粉碎性打击之外,我似乎无法让鱼做任何事情。下面提供了用于配置鱼的技能水平和深度以及 UCI 顺序的代码代码执行的命令。
这段代码是用 javascript 编写的,但就像最初的开源实现一样使用 UCI。我按照以下示例进行操作:https ://github.com/nmrugg/stockfish.js/blob/2b87d5d16a613f3ce05b1dd0bbb58465501ed30a/example/enginegame.js#L38 。
Stockfish.js
ChessGameUI.js(...
用于表示不相关的代码)
理论上,这段代码应该尝试每半秒积极地设置技能级别和深度,同时bestMove
从 Stockfish 轮询新的。但设置似乎对引擎的难度没有任何影响。
调用的 UCI 命令(按顺序):
python - Stockfish:PermissionError:[WinError 5] 访问被拒绝
我正在用stockfish AI 编写一个国际象棋游戏。但是,每当我尝试导入库时,我都会收到错误 PermissionError: [WinError 5] Access is denied. 我已经搜索了错误并没有找到任何可以解决我的问题的东西。我对python很陌生,所以简单的答案将不胜感激。这是我的代码:
这是错误:
qt - QProcess 无法将命令写入程序
所以我想用QProcess打开stockfish并编写命令isready,stockfish回复readyok。我在终端中尝试了完全相同的命令,它工作正常。但是,当我尝试在 QProcess 中执行此操作时,它只会在 stockfish 打开时读取开头行“Stockfish 开发人员的 Stockfish 100521(请参阅 AUTHORS 文件)”。在我发出命令后,它没有回复“readyok”。
我写错了我的命令还是我的等待命令错了?如果这个问题的结构或支持不正确,我很抱歉,因为我是新手。
python - 什么是国际象棋中的游戏状态移动评估?为什么带有python的stockfish API给了我垃圾评估
我正在分析一个国际象棋游戏 PGN 文件。我使用 stockfish 13 API 来执行游戏动作分析,但是引擎正在计算一些垃圾评估分数。对于 e2e4,同一游戏的评价接近 0。但是我使用 python chess 和 stockfish 国际象棋引擎的 python 代码的输出得到了 -3、+111 的评估。为什么是这样?怎么做才对?
PGN 文件:
代码:
评估输出:
c++ - 在不关闭主程序的情况下清理 Stockfish 使用的内存
我正在尝试通过静态库将 Stockfish 实施到我自己的项目中。但是我遇到了一个问题。Stockfish 在“Stockfish”的命名空间中使用了一些全局变量,并且在我的项目中的某个时刻,我想销毁我从 Stockfish 使用的所有内容并稍后重新初始化。
例如,Stockfish 将选项存储在 Stockfish::Options 的全局对象中。当我第一次初始化 Stockfish 时,一切都很好。但是我想要实现它结束 Stockfish 并从变量中删除它的所有成员而不关闭我的项目并在我想要的时候重新初始化它。
据我了解,Stockfish 不是为此而设计的。设计为“启动引擎,关闭主程序时结束引擎。”。
所以,我相信我必须经历每一次初始化并找到结束它们的正确方法。在此之前,我想问三个问题:
- 我可以告诉我的程序清理“这个特殊的.lib”使用的内存吗?
- 我可以编写一个代码来删除由命名空间初始化的整个内存吗?例如,由于 Stockfish 是整个代码的命名空间,我可以执行“删除 Stockfish”之类的操作吗??
- 有没有其他我想不出的方法来实现我想做的事情?
python-3.9 - AttributeError:“Stockfish”对象没有属性“stockfish”
我正在用 Stockfish 编写一个 lichess 机器人。第一行代码失败并显示多条错误消息:
机器人在控制台中这样说:
我的代码:
我正在使用 Windows 10 并安装了 Stockfish 模块。是否有一些我丢失的文件或代码片段?
permissions - colab中的权限被拒绝
我想在我的 colab 笔记本中使用 stockfish。我首先尝试了该chess.engine.SimpleEngine.popen_uci()
命令,该命令似乎已过时,因为module 'chess.engine' has no attribute 'SimpleEngine'
所以我尝试了鱼本身:
在这里我总是得到错误:
权限被拒绝:'/usr/local/lib/python3.7/dist-packages/stockfish'
我用谷歌搜索它并想出了一些好的尝试:
我尝试使用!chmod +x '/usr/local/lib/python3.7/dist-packages/stockfish'
which 编译,但没有解决问题,并且!chmod +x 'stockfish'
, 没有找到文件夹。
那么我究竟如何授予使用stockfish文件夹的权限呢?
python - 如何从 python 脚本向命令行发送数据
我正在创建一个使用 Stockfish 下棋的程序。我打算在处理板和命令的终端中玩。我希望能够通过首先在 python 中获取数据来将数据发送到终端,但我不知道如何从我的搜索中将数据发送到终端。
作为一个简单的例子,我想做这样的事情:
我知道有一些库是为了利用鱼和其他国际象棋相关的东西而构建的,但是我打算不使用它们,而是使用 UCI 协议从头开始制作它。
go - 使用 io.WriteString 时可执行文件提前退出
我正在使用 io 包来处理我的 PATH 中定义的可执行文件。可执行文件称为“Stockfish”(国际象棋引擎),显然可以通过命令行工具使用。
为了让引擎搜索最佳移动,您使用“go depth n” - 深度越高 - 搜索所需的时间越长。使用我的命令行工具,它使用 20 的深度搜索大约 5 秒,它看起来像这样:
go depth 20
info string NNUE evaluation using nn-3475407dc199.nnue enabled
info depth 1 seldepth 1 multipv 1 score cp -161 nodes 26 nps 3714 tbhits 0 time 7 pv e7e6
info depth 2 seldepth 2 multipv 1 score cp -161 nodes 51 nps 6375 tbhits 0 time 8 pv e7e6 f1d3
info depth 3 seldepth 3 multipv 1 score cp -161 nodes 79 nps 7900 tbhits 0 time 10 pv e7e6 f1d3 g8f6
info depth 4 seldepth 4 multipv 1 score cp -161 nodes 113 nps 9416 tbhits 0 time 12 pv e7e6 f1d3 g8f6 b1c3
[...]
bestmove e7e6 ponder h2h4
现在,使用 io.WriteString 它在毫秒后完成,没有任何(可见)计算:(这也是下面代码的输出)
Stockfish 14 by the Stockfish developers (see AUTHORS file)
info string NNUE evaluation using nn-3475407dc199.nnue enabled
bestmove b6b5
这是我使用的代码:
这是我如何使用它的一个例子。第一个命令是设置位置,第二个是计算深度为 20 的下一个最佳移动。结果如上所示。