UCI引擎的基本问题:ucinewgame和多个客户端

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

我正在阅读 UCI 协议的规范,但不幸的是我找不到对其某些命令或用例的合适解释。

1)我不明白

ucinewgame
的含义。根据文档,它“开始一个新游戏”,但是如果 UCI 引擎是无状态的,因此是否有新游戏并不重要,这到底意味着什么?

2)与客户端一起玩时,每次添加一个动作时发送到引擎

"position startpos moves ..."
(即从一开始就记录所有动作)或仅反映当前位置的
"position <fenstring>"
哪个更好?我知道第二种情况更加紧凑,但是保留之前的所有动作有什么好处吗?

3)如果我想让多个玩家同时对抗引擎(每个人都有自己的游戏),我是否需要为每个人都有一个引擎实例?我知道,虽然引擎正忙于一名玩家,但它无法处理另一名玩家的移动,但除此之外,我认为这里没有问题,我是否只需要在引擎准备好时暂时发送一名选定玩家的位置阻止其他玩家?话说回来,

ucinewgame
这里有事吗?

chess uci
2个回答
1
投票

好吧,从源代码来看,

ucinewgame
似乎只做了一件事——清除训练数据。


0
投票

有点晚了,所以我不知道这是否对你有帮助,但我也有同样的问题,经过一番思考,

position startpos moves ...
更好。

这是因为 FEN 字符串不包含有关游戏先前状态的信息,因此引擎不会知道何时会发生重复平局。如果游戏不是从初始位置开始,则应使用

position fen ... moves ...
。同样,这样引擎就会知道重复绘制。

如果你感觉很奇特,你只能发送自上次推兵、吃子或城堡以来的动作,因为其余的动作都是无用的,并且保持合理紧凑的字符串有许多小的实用和性能优势。

© www.soinside.com 2019 - 2024. All rights reserved.