问题标签 [uci]

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.

0 投票
1 回答
59 浏览

c++ - 需要帮助了解 Stockfish 中使用的 uci.h 文件

我试图了解Stockfish如何处理UCI 协议,以便我可以调整我的引擎以使用 UCI。

但是我仍然是 C++ 的初学者,并且uci.h 文件使用了一些我以前从未见过的编码实践。

具体来说,我不了解 operator() 函数。当我试图寻找解释时,我得到了大量简单的运算符重载的东西。

这段代码有什么作用?

我不明白这里的 operator() 函数这个结构将用作区分大小写的比较器。

另外,在 Option 类中,我也不明白 operator() 函数的目的是什么。

UCI 协议的这种实现似乎超出了我的想象。有人可以帮助我了解 Stockfish 如何处理 UCI 输入吗?

0 投票
1 回答
44 浏览

c# - 如何在关闭进程之前等待任务结束?

最近我正在研究国际象棋,对于人工智能,我正在使用带有 UCI 协议的 Stockfish。感谢以下 2 个链接(UCI 协议:http ://wbec-ridderkerk.nl/html/UCIProtocol.html和这篇文章:在 Unity 中使用 Stockfish Chess AI)我已经取得了一些进展,但我有一个问题。

这是我的代码:

当我用以下代码询问 Stockfish 时:myStreamWriter.WriteLine("go movetime 2000");

他这样做了,但是当我要求关闭进程时立即停止:p.Close();

所以我想让进程等到任务完成,有没有办法做,怎么做?

感谢您阅读我,祝您有美好的一天。

0 投票
2 回答
207 浏览

java - Java - 运行子进程在本地工作,但在 Heroku 上运行时因“管道损坏”而失败?

作为背景,我在 Heroku 上部署了一个基于 Java 的 Discord 机器人,使用 1 个免费的 worker dyno。我需要运行一个 .exe 文件(stockfish 12 可执行文件),将输入传递给它并处理它的输出。我正在使用 Java RunTime 来创建这个进程,但是当我尝试使用 flush() 方法向它发送输入时,会抛出损坏的管道错误。我假设 Heroku 必须以某种方式关闭输入/输出流,因为此代码在本地运行良好。Heroku 对创建子进程有限制吗?

应用程序 [worker.1]:chess.player.ai.stockfish.exception.StockfishEngineException:java.io.IOException:断管应用程序 [worker.1]:在 chess.player.ai.stockfish.engine.UCIEngine.sendCommand(UCIEngine .java:39) app[worker.1]:在 chess.player.ai.stockfish.engine.UCIEngine.passOption(UCIEngine.java:77) app[worker.1]:在 chess.player.ai.stockfish.engine .UCIEngine.(UCIEngine.java:23) app[worker.1]: at chess.player.ai.stockfish.engine.Stockfish.(Stockfish.java:13) app[worker.1]: at chess.player.ai .stockfish.StockFishClient.(StockFishClient.java:21) app[worker.1]: at chess.player.ai.stockfish.StockFishClient$Builder.build(StockFishClient.java:80)

编辑:我试图通过对单个命令进行硬编码来简化程序,但它仍然无法通过 writer.flush() 行。什么都没有打印。

0 投票
1 回答
448 浏览

c# - 什么是标准输入和输出?

我开始在国际象棋引擎上工作,我想遵循 uci 界面,其中使用平面文本完成通信。在规范中它说

所有通信都是通过标准输入和文本命令输出完成的

但我不知道这实际上意味着什么。

我正在考虑用 C# 编写一个 .net 标准库。我知道由于 uci 是跨平台的,我们不能用类似的语言交谈,Console.WriteLine但 api 中的那条线对我来说意味着什么。

我是否必须Console.ReadLine()为标准输入运行一个循环监听或类似的东西?我只是不明白。或者我应该编写一个将输入作为命令行参数并将字符串写入控制台的控制台应用程序?

完整的规范可以从这个链接下载:http: //download.shredderchess.com/div/uci.zip

0 投票
0 回答
116 浏览

yocto - 我可以在 Yocto 构建中包含 OpenWRT 的统一配置接口 (UCI) 吗?

我们有一个 Yocto 构建系统,针对许多基于 ARM 的路由器类型设备。

包含 OpenWrt 的统一配置接口 (UCI) 肯定会很不错,这样我们的配置脚本就不必经常弄乱 /etc 中的配置文件。

有没有人有这样做的经验?UCI 是否可以完全融入非 OpenWrt 嵌入式 Linux 系统?还是它与 OpenWrt 的其他方面相关联?

我看到了一组将 UCI 添加到 Ubuntu 的说明,所以我想这也应该是可行的。

谢谢!

0 投票
0 回答
59 浏览

c++ - 有没有办法查看用户输入是否与 C++ 中的变量名匹配?

我正在用 C++ 编写一个程序,其中有一些我想使用遗传算法调整的变量,但是找到单个染色体的适应值相对较慢。

因此,我想在计算所有个体的适应度值时使用并发,但唯一的方法是使用几个编译的程序,并且我希望能够在运行时通过命令行指定变量(命令来自一种具有类似 UCI 协议的“主”程序),但我不知道有什么方法可以检查是否存在与来自 cmd 的输入字符串同名的变量。

因此,我的问题是:是否甚至可以检查命令行输入是否与 C++ 中的变量名匹配?

0 投票
1 回答
565 浏览

python - 使用 chess.uci 更改鳕鱼技能等级

我们的国际象棋游戏项目使用chess.uci和stockfish 引擎。我们曾经engine = chess.uci.popen_engine("/some_address/stockfish")启动引擎。但是,我想知道是否有办法改变这个引擎的技能水平。我可以通过传递参数来实现engine.go()吗?我看到有诸如移动时间和深度之类的选项。一些 Stack Overflow 帖子说,stockfish 中有一个“技能级别”选项,但我没有找到。我想要实现的是将引擎的技能与玩家的技能相匹配。谢谢!

0 投票
0 回答
192 浏览

chess - 在stockfish 中使用UCI_LimitStrength 选项

我正在开发一个国际象棋游戏并使用 UCI 与 stockfish 12 进行通信。现在我想将引擎的强度限制为特定的 ELO 等级。我知道 Stockfish 中有UCI_LimitStrengthUCI_Elo选项,但这些是命令。我想知道是否有任何 API 可以用来实现我的目标?我目前正在使用 python-chess,它具有depth限制引擎强度的属性,但我不知道深度如何与 Elo 评级匹配。谢谢。

0 投票
0 回答
81 浏览

chess - 有没有办法在 Stockfish 中查看失误、错误、错过的将死

我正在使用Stockfish,当我分析游戏时,stockfish 只显示最佳动作和位置价值。是否可以显示失误、错误和可能的将死?

例如,我有这个pgn职位

在此处输入图像描述

鲶鱼计算结果

Stockfish 表明,最强的移动是 bishop c8e6

我想达到什么目标?

现在我想强调可能的最强动作和错误。例如,由于mate , g7pawn 将突出显示为错误(如果用户 playg7 - g6或)g7 - g5Nf6

在此处输入图像描述

0 投票
1 回答
90 浏览

java - 如何将我的国际象棋引擎变成可执行文件

我有这个用java写的国际象棋引擎。问题是,我需要制作一个 exe 应用程序,该应用程序可以接受遵循特定协议 (UCI) 的命令。我在试图让它发挥作用时遇到了很多问题,但我会保持简短并分享最重要的问题。

  1. 其他引擎点击时会弹出cmd,我的只是一个基本的java CLI(不知道这是否有问题)。
  2. 我的防病毒软件一直阻止我打开 exe。Launch4j 给了我一个警告,告诉我我应该签署它以防止这种事情发生,但我不知道这意味着什么。

所以这是交易,我知道这篇文章是呕吐物,但我现在真的很茫然。我喜欢关于我应该如何解决问题的一般订单建议,也许还有一些关于我是否应该首先使用 launch4j 的建议。