18 个版本

0.9.1 2024年5月15日
0.9.0 2023年9月5日
0.8.1 2023年8月26日
0.7.1 2023年7月13日
0.3.2 2023年3月26日

文件系统 中排名第 161

每月下载 30

GPL-3.0-or-later

7.5MB
33K SLoC

国际象棋文件格式的瑞士军刀

Jin, Jîyan, Azadî crates.io repology msrv documentation build status downloads Crowdin stability-beta license dependency status maintenance-status

这是 jja,一个用于与各种国际象棋文件格式交互的命令行工具。它仍处于早期开发阶段。作者的最初意图是将他们保存为 ChessBase 的专有 CTG 格式的开局书籍转换为免费和开放的 PolyGlot 格式。随着时间的推移,他们打算添加对其他国际象棋文件格式的支持(cbhsi4si5 等)。

演示

jja intro

金,吉延,阿扎迪

我在 2023 年国际妇女节开始编写这个项目,这一天是为了纪念女性的成就并在全球范围内倡导她们的权益。作为一名库尔德血统的人,我特别受到口号“妇女,生活,自由”的感动,这个口号已成为反抗压迫和呼吁平等的象征。在自由软件和自由言论的精神下,我努力为创建一个更加公正和包容的社会做出贡献,在这个社会中,每个人都被赋予了表达自己和追求梦想的自由。我还纪念玛莎·阿米尼,她的悲剧性死亡提醒我们,迫切需要为女性的自由和安全而斗争。

更多关于维基百科,WikiPedia::妇女,生活,自由

格式

截至版本 0.7.0,jja 支持

开局书籍文件,同时它支持写入/转换到

开局书籍文件。

截至版本 0.5.0,jja 支持将所有支持的开局书籍格式导出为 PGN 格式。要使用此功能,请将具有 pgn 扩展名的输出文件作为 jja edit 的参数指定。

截至版本 0.8.0,jja 支持将 PGN 文件中的所有位置导出到输出 EPD 文件。要使用此功能,请将具有 pgn 扩展名的输入文件(或压缩的 pgn:pgn.bz2pgn.gzpgn.lz4pgn.xzpgn.zst)和具有 epd 扩展名的输出文件作为 jja edit 的参数指定。

在开局书籍转换过程中,jja 使用各种输入开局书籍格式中提供的信息来生成与 PolyGlot 开局文件中的移动一起的 移动权重。在 ctg 转换期间,jja 还在 learn 字段中写入一些自定义数字,例如 NAGs,或在 abk 转换期间的 优先级。您可以使用 --no-learn 禁用此自定义使用,因为它可能会使使用此字段的其它软件产生混淆。

注意,Arena,又称 abk,支持从 ChessBase,又称 ctg 书籍中写入开局书籍文件。使用命令行标志 --author--comment--probability-priority--probability-games--probability-win-percent 来配置 ABK 标头元数据。游戏统计信息(最小游戏数/胜利数,双方的胜利百分比)由 jja 自动管理。

使用命令行选项 -i, -in-place=SUFFIX 也可以对 Arena 开局书籍进行就地编辑。计划在未来版本中实现从 PolyGlot,又称 bin,和 ChessMaster,又称 obk 开局书籍到 Arena,又称 abk 开局书籍文件的转换。

用法

  • 使用 jja info 获取关于棋文件的简要信息。
  • 使用 jja find 在棋文件中搜索位置。
  • 使用 jja edit 编辑开局书籍文件并将它们转换为 PolyGlot 文件或 Arena 文件。
  • 使用 jja makePolyGlotBrainLearn 文件编译为 PolyGlot 开局书籍。
  • 使用 jja dumpPolyGlotBrainLearn 文件作为 JSON 数组的流导出。
  • 使用jja restore从JSON数组流中恢复PolyGlotBrainLearn文件。
  • 使用jja merge合并两个PolyGlot开局书籍。
  • 使用jja match通过随机模拟来安排书籍比赛。
  • 使用jja play进行随机模拟,可选地使用书籍。
  • 使用jja digest计算给定棋局的Zobrist哈希。
  • 使用jja perft从给定位置计算到给定深度的节点数。
  • 使用jja open浏览ECO分类。
  • 使用jja quote打印棋局引语。

jja通过文件扩展名确定文件类型。扩展名为.bin的文件被认为是PolyGlot书籍。扩展名为.ctg的文件被认为是ChessBase书籍。扩展名为.abk的文件被认为是Arena书籍。扩展名为.obk的文件被认为是ChessMaster书籍。扩展名为.exp的文件被认为是BrainLearn经验文件。

默认情况下,如果标准输出是TTYjja将使用花哨的表格显示信息。使用--porcelain命令行选项以CSV(逗号分隔值)格式获取输出。

安装

要从源代码编译,请使用cargo install jja。这需要安装Rust工具链。此外,您还需要在UNIX系统上安装OpenSSL库。另外,您还需要在Linux上安装liburing。如果您在Linux系统上运行的版本低于5.1或您无法安装liburing,您可以通过使用cargo install jja --no-default-features来禁用此功能。

作为替代方案,jja的发布版本托管在chesswob.org上,适用于64位LinuxWindows。这些版本由GnuPG使用密钥D076A377FB27DE70签名。要安装,从chesswob.org获取最新版本,验证校验和GnuPG数字签名

$> export JJA_VERSION=0.7.1
$> export JJA_FLAVOUR=glibc
$> curl https://keybase.io/alip/pgp_keys.asc | gpg --import
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13292  100 13292    0     0  13535      0 --:--:-- --:--:-- --:--:-- 26584
gpg: key D076A377FB27DE70: public key "Ali Polatel (Caissa AI) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1
$> for f in jja-${JJA_VERSION}-${JJA_FLAVOUR}.bin{,.sha512sum,.sha512sum.asc}; do wget -q https://chesswob.org/jja/${f}; done
$> gpg --verify jja-${JJA_VERSION}.bin.sha512sum.asc jja-${JJA_VERSION}.bin.sha512sum
gpg: Signature made Sun Mar 19 20:52:41 2023 CET
gpg:                using RSA key 5DF763560390A149AC6C14C7D076A377FB27DE70
gpg: Good signature from "Ali Polatel (Caissa AI) ...
$> sha512sum -c jja-${JJA_VERSION}.bin.sha512sum
jja: OK
$> sudo install -m755 jja-${JJA_VERSION}-${JJA_FLAVOUR}.bin /usr/local/bin

最后,您可以通过SourceHut 构建服务器下载最新 git 版本的构建版本。共有三种版本,分别是 windowslinux-glibclinux-musl。只需浏览到最新构建版本,下载左侧列出的工件。注意:这些工件保留90天。

打包状态

Packaging status

许可证

jja 是免费软件:您可以在自由软件基金会发布的 GNU 通用公共许可证 的条款下重新分发和/或修改它,无论是许可证的第 3 版,还是(根据您的选择)任何更高版本。

本程序分发时希望它是有用的,但 不提供任何保证;甚至没有对 商品性适用于特定目的的适用性 的暗示保证。有关详细信息,请参阅 GNU 通用公共许可证。

您应已收到本程序随附的 GNU 通用公共许可证副本。如果没有,请参阅 http://www.gnu.org/licenses/

错误

Hey you, out there beyond the wall,
Breaking bottles in the hall,
Can you help me?

jja 的错误追踪器报告错误 https://todo.sr.ht/~alip/jja/

  1. 始终 保持礼貌、尊重和友好: https://css-tricks.org.cn/open-source-etiquette-guidebook/
  2. 尽可能使您的最终更改保持 小巧和整洁https://tirania.org/blog/archive/2010/Dec-31.html
  3. 在错误报告中附加诗歌会极大地鼓励考虑。

PGN 书制作

从版本 0.4.0 开始,jja 可以从 PolyGlot 文件制作 PGN。此功能与 polyglot make-book 类似,但有以下不同之处

  1. jja 可以直接读取压缩的 PGN 文件 .pgn.{bz2,gz,lz4,xz,zst}
  2. jja 可以通过在临时 RocksDB 数据库中持久化统计信息来处理比系统可用内存更大的 PGN 文件。
  3. jja 默认按比例缩放移动权重,以防止具有巨大 PGN 文件的大文件发生溢出,使用 --no-scale 禁用。
  4. jja 可以使用 筛选表达式 筛选移动,允许用户过滤掉不想要的比赛并创建专门的开局书籍。

筛选表达式

筛选表达式字符串应包含筛选条件,筛选条件由一个标签名称、一个比较运算符和一个值组成。以下运算符受支持

  • >(大于)
  • >=(大于或等于)
  • <(小于)
  • <=(小于或等于)
  • =(等于)
  • !=(不等于)
  • =~(正则表达式匹配,不区分大小写)
  • !~(否定正则表达式匹配,不区分大小写)

可以使用以下逻辑运算符组合筛选条件

  • AND(逻辑与)
  • OR(逻辑或)

示例

--filter="Event =~ World AND White =~ Carlsen AND ( Result = 1-0 OR ECO = B33 )"

受支持的标签是 Event、Site、Date、UTCDate、Round、Black、White、Result、BlackElo、WhiteElo、BlackRatingDiff、WhiteRatingDiff、BlackTitle、WhiteTitle、ECO、Opening、TimeControl、Termination、TotalPlyCount 和 ScidFlags。

除了这些,还有四个特殊变量,即:Player(玩家)、Elo(等级分)、Title(标题)和RatingDiff(评分差异)。这些变量可以用来匹配任一侧的相关标题。例如,过滤器

--filter="Player =~ Carlsen"

在功能上等价于

--filter="( 白方 =~ Carlsen OR 黑方 =~ Carlsen )"

注意:过滤设计得简单快捷。标记(包括括号)由空格分隔。不允许引用值。对于更复杂的过滤需求,请使用pgn-extract。

Scid标志

Scid使用单个字符标志,例如 DWBMENPTKQ!?U123456,用于每个字段,其中

  • D - 已删除
  • W - 白方开局
  • B - 黑方开局
  • M - 中局
  • E - 终局
  • N - 新颖性
  • P - 兵结构
  • T - 走法
  • K - 马路战
  • Q - 象路战
  • ! - 亮点
  • ? - 犯错
  • U - 用户定义
  • 1..6 - 自定义标志

不建议依赖于字符标志的顺序。

如果可能,请使用正则表达式匹配。

关于PGN图书制作的技巧和窍门

  1. 默认设置在我的笔记本电脑上运行最佳,以及在我的SourceHut构建服务器上的个人基准测试,它们并不是普遍真理。
  2. jja并行处理输入的PGN文件。您可以通过提供许多分割的PGN文件作为输入来增加并行性和性能。
  3. 只要您有恒定的内存使用,增加批量大小就很好。当线程跟不上的话,您将获得增加的内存使用,这就是您真正知道您的极限的地方。
  4. 尝试增加最大打开文件数到您不会从操作系统那里收到太多打开文件错误。您可以指定 --max-open-files=-1 以保持文件始终打开。
  5. 尝试不同的压缩算法用于临时的RocksDB数据库,或者如果您有足够的空间,尝试完全禁用压缩。 jja将临时RocksDB数据库写入第一个PGN文件参数所在的目录。默认压缩算法Lz4和默认压缩级别4旨在以相对适中的空间使用速度进行转换。如果在转换过程中空间不足,请尝试使用类似于Zstd的算法,并使用“ultra”级别,即大于或等于20的级别。
  6. 尽可能在 PGN 遍历时使用过滤器。由于这些过滤器在将游戏数据写入临时数据库之前进行匹配,因此如果使用得当,它们可能会对空间和内存成本产生重大影响,从而提高整体性能。这些过滤器包括:--filter=<expr>--max-ply=<ply>--min-pieces=<piece-count>--only-white--only-black

致谢

感谢 Steinar H. Gunderson 发布了 CTG 规范,并编写了 remoteglot 工具:在 jja 中的 CTG 探测代码直接从他们的 C 探测代码移植过来,规范在澄清各种粗糙边缘方面发挥了巨大作用。感谢 Fabien Letouzey,原始 PolyGlot 软件作者:在 jja 中的 PolyGlot 探测、制作和合并代码主要移植自相应的 C 代码。感谢 Michel Van den Bergh,pg_utils 的作者,一套用于与 PolyGlot 开局库交互的工具:在 jja 中的 PolyGlot 书籍编辑代码使用了 pg_utils 的许多思想和代码片段。感谢 Peter ÖsterlundDroidFish 的作者:在 jja 中的 ABK 开局库接口代码使用了来自 DroidFish 的思想和代码片段。感谢 Jens NissenChessX 的作者:在 jja 中的 CTGABK 探测代码使用了来自 ChessX 的思想和代码片段。感谢 LiChess,地球上最好的棋类网站。在 jja 中的 quote 命令从 LiChess 代码库中导入了引用。感谢 Shane HudsonScid vs. PC 的作者:在 jja eco 命令中使用的是由 Scid 项目完成的 ECO 分类。此外,jja 中的 PolyGlot 编辑代码使用了来自 Scid 的思想和代码。感谢 Marcus Bufettchess-tactics-cli 的作者:在 PolyGlotABK 编辑屏幕中的棋盘显示代码来自 chess-tactics-cli

变更日志

0.9.1

  • nix 包从 0.27 升级到 0.28
  • tempfilecrate 从 3.8 升级到 3.10
  • rust-embedcrate 从 8.1 升级到 8.4
  • rusqlitecrate 从 0.30 升级到 0.31
  • rayoncrate 从 1.8 升级到 1.10
  • hostnamecrate 从 0.3 升级到 0.4
  • 添加从 Lichess 评估导出 JSON 恢复 BrainLearn 经验文件的支持。
  • 现在在 make 过滤器中支持 TotalPlyCount PGN 标签。
  • 修复 make 中 --win,draw,loss-factor 的计算。
  • 将 50 棋子检测和 3 位置重复检测添加到 play 子命令中。
  • once_cellcrate 从 1.18 升级到 1.19
  • rayoncrate 从 1.7 升级到 1.8
  • zstdcrate 从 0.12 升级到 0.13
  • rusqlitecrate 从 0.29 升级到 0.30
  • dialoguercrate 从 0.10 升级到 0.11
  • i18n-embedcrate 从 0.13 升级到 0.14
  • rust-embedcrate 从 6.8 升级到 8.0
  • builtcrate 从 0.6 升级到 0.7
  • 修复在没有通配符字符时在单词边界处的引号匹配。
  • -O<u16>, --outlier-threshold=<u16> 合并到指定异常值阈值,其中权重高于给定阈值的移动将从合并输出书中过滤。这是基于这样一个事实:如果两个不同书中相同移动的权重差异很大,那么计算任何平均值可能都不会得到有意义的成果。默认值为0,这会禁用此功能。
  • 合并学习 --strategy dynmid,代表 jja::merge::MergeStrategy::DynamicMidpoint
  • 合并学习 --strategy wdist,代表 jja::merge::MergeStrategy::WeightedDistance
  • nix 包从 0.26 升级到 0.27 并添加了 signal 功能。
  • 合并学习 --strategy wmedian,代表 jja::merge::MergeStrategy::WeightedMedian
  • 合并学习 --strategy entropy,代表 jja::merge::MergeStrategy::Entropy
  • 合并学习 --strategy quadratic,代表 jja::merge::MergeStrategy::QuadraticMean。该策略使用二次平均(均方根)方法进行合并。二次平均(也称为均方根)是一组数字的幅度统计量。它提供了一个更平衡的视角,尤其是在处理大小不同的数字时。
  • 合并学习 --strategy lavg,代表 jja::merge::MergeStrategy::LogarithmicAverage。该策略使用对数平均方法进行合并。由于对数函数会压缩大值并扩展小值,我们可以使用它们来得到一个对较小权重差异敏感,同时对较大权重差异具有更强抵抗力的合并策略。

0.9.0

  • 使用 --c, --cutoff 指定的截止值现在在合并策略分配新权重后应用。这样,截止值也可以在合并后用于过滤掉不需要的条目。
  • edit --color-weight-blue 的默认值已从 32768 更改为 65280,以与 --nag-weight-good 保持一致。
  • 合并学习新合并策略 jja::merge::MergeStrategy::Sort,根据排序后的移动条目中移动条目的相对位置计算权重。
  • 合并学习新合并策略 jja::merge::MergeStrategy::GeometricScaling,使用几何缩放计算权重:几何缩放侧重于将数字相乘而不是相加,这有助于平衡差异。
  • 合并学习新合并策略 jja::merge::MergeStrategy::HarmonicMean,计算两本书中相同移动条目的调和平均权重。这种方法倾向于更平衡的权重,并且受极端值的影响较小。
  • 合并学习新合并策略 jja::merge::MergeStrategy::Sigmoid,使用Sigmoid函数非线性地重新映射权重。这里的想法是减少极端值的影响,这可能是以前策略中引起不满的原因。
  • 编辑现在优先考虑具有更高综合颜色、NAG、性能得分的CTG移动条目,以便排序更接近原始顺序。
  • 编辑学习新命令行标志 -C, --no-colors,以及 -N, --no-nags,以避免使用CTG移动颜色和NAG分配PolyGlot移动权重或Arena移动优先级。
  • 合并和make命令现在在成功运行后在输出书中输出 info
  • 合并策略默认为新的 pavg 策略,而不是 sum
  • 合并学习 --strategy pavg,代表 jja::merge::MergeStrategy::PercentageAverage。这种策略通过计算百分比权重的加权平均值进行合并,考虑到每本书中的条目总数。这种方法给予较大书籍中的移动更高的重视,确保结果权重反映了每本书相对于其大小的相对贡献。
  • 合并学习 --rescale 以全局重新缩放合并书籍条目的权重,使其适合16位。这与 edit --rescale 类似,但作用于最终的合并书籍而不是输入书籍。
  • make现在使用临时RocksDB数据库的 estimate-num-keys 属性来确定 近似 唯一位置计数,而不是两次大量扫描数据库,这提高了性能。
  • make现在在临时RocksDB数据库的大量扫描期间使用预读。这显著提高了性能,尤其是在旋转磁盘上。预读大小可以使用 --read-ahead=<SIZE> 命令行选项进行配置。默认为 4 MB,可以通过传递 0 作为大小来禁用。
  • make现在在扫描临时RocksDB数据库时使用异步I/O。这显著提高了性能,特别是在启用io_uring功能时。可以使用新的--sync命令行参数或使用环境变量JJA_SYNC来禁用此功能。
  • 删除smallvec crate的使用,并移除依赖。
  • humansize替换为bytefmt crate。
  • jja::abk::traverse_tree函数现在返回一个BTreeMap<u64, Vec<CompactBookEntry>,而不是一个BTreeMap<u64, Vec<BookEntry>,这是一个破坏性变更。此外,这个函数现在使用二分搜索对值向量进行排序,这使得abk->bin在内存效率更高且速度更快。
  • jja::ctg::ByteBoard::from_position已被替换为函数from_board,这是一个破坏性变更
  • jja::ctgbook::CtgBook::process_move函数现在使用二分搜索进行移动表查找,提高了效率。jja::ctg::MOVETABLEencoding元素的类型已从char更改为u8,这是一个破坏性变更
  • 使用新的紧凑型jja::polyglot::CompactBookEntry数据结构,将CTG书籍转换为BIN书籍,内存使用量减少了20%。
  • jja::abk::PackedSBookMoveEntry已重命名为CompactSBookMoveEntry,这是一个破坏性变更
  • 删除未使用的函数jja::ctgbook::CtgBook::extract_all{,2}和未使用的类型jja::ctgbook::CtgTree,这两个都是破坏性变更
  • 为了保持一致性,将jja::ctgbook::CtgBook::extract_map{,2}重命名为extract_abk{,2},这是一个破坏性变更
  • CTG->BIN中使用extract_bin以提高效率
  • 实现新功能 jja::ctgbook::CtgBook::extract_bin{,2}
  • 使用 human-panic 包来提供用户友好的 panic 信息。

0.8.1

  • tempfile 包从 3.7 升级到 3.8
  • clap 包从 4.3 升级到 4.4
  • info 现在可以打印棋文件的 sha256 校验和。
  • 修复了禁用 i18n 功能时的内存泄漏。
  • 编辑现在使用 30% 更少的内存,并且大约快 5% 倍,将 CTG 书籍转换为 ABK 书籍,归功于新公共函数 jja::ctgbook::CtgBook::extract_map{,2},该函数直接返回一个 BTreeMap<u64, Vec<SBookMoveEntry>>,而不是将 CtgTree 处理成 SBookMoveEntryHashMap 作为额外的步骤。
  • info 现在打印单个条目的大小信息。
  • info 现在打印 ABK 条目数量信息。
  • 新公共函数 jja::abkbook::AbkBook::total_entries() 用于计算竞技场开局书籍文件中的条目数量。
  • CTG->ABK 转换提供各种内存效率改进。
  • 当标准输入不指向终端(即不是 TTY)时,编辑现在从标准输入读取而不是启动默认编辑器。这对于程序性编辑开局书籍很有用。find 输出可以通过管道传递到 edit,这使得将开局书籍条目写入相同类型的另一个开局书籍变得实用。最后,这也给无法使用编辑器功能的使用者提供了通过提交自定义 CSV 文件通过标准输入编辑他们的开局书籍的机会。
  • 将最终的 lazy_static! 使用替换为 once_cell,并取消对 lazy_static 包的依赖。我们目前对 once_cell 的使用在 Rust nightly 中,希望很快就能进入稳定 Rust。

0.8.0

  • 新的 perft 子命令用于计算给定长度的合法走法路径数
  • pgn-reader 包从 0.24 升级到 0.25
  • shakmaty 包从 0.25 升级到 0.26
  • 升级 tempfile,创建版本从 3.6 提升至 3.7
  • 在 PGN 生成过程中进行了一个重要的修复,以避免因重复追踪器使用不当而跳过某些行。这会影响所有受支持的开局书籍格式(abkbinctgexpobk)的 PGN 生成,因此强烈建议用户重新导出之前导出的 PGN 文件,使用 jja edit book.{abk,bin,ctg,exp,obk} -o book.pgn
  • 将 MSRV(最小支持的 Rust 版本)从 1.64 升级到 1.70
  • 除非给定的引号模式包含通配符字符 .?*,否则引号现在将在单词边界处匹配。
  • jja 现在在 PGN 游戏的 FEN 头部中忽略无效的易位权和对局格,而不是跳过整场比赛。
  • 编辑学习功能现在将 PGN 文件中的所有位置转储到输出 EPD 文件中。支持压缩 PGN 文件,因此用法为 jja edit source.pgn{,.bzip2,gz,lz4,xz,zst} -o output.epd
  • 导出学习 -e--elements 以指定要导出的列表元素,默认为 idposition。此选项仅适用于 PGN 导出。当前 --look-ahead 仅支持 01 作为参数,其中 0 为默认值,其他值将生成一个 unimplemented 异常,引导用户报告错误。此更改伴随着公共函数签名更改 jja::polyglotbook::PolyGlotBook::write_pgn,这是一个 重大更改
  • 新增子命令 probe,可用于探测最多 7 个棋子的 Syzygy 表底。这与功能上几乎相同的 Fathom 工具相同,但也提供了一些替代模式,例如 --test --fast,以跳过 DTZ 行,但这会牺牲 MaybeWinMaybeLoss 位置的评估。
  • 学习到两个新的命令行选项 --max-ply=<PLY>--look-ahead=<PLY>。前者限制 PGN 生成到一定数量的步数,默认为 1024。后者用于在 PGN 生成过程中在 PolyGlot 书籍查找失败时指定向前查看的步数,这对于生成由 --only-black|white 生成的书籍的 PGN 非常有用。当前 --look-ahead 仅支持 01 作为参数,其中 0 为默认值,其他值将生成一个 unimplemented 异常,引导用户报告错误。此更改伴随着公共函数签名更改 jja::polyglotbook::PolyGlotBook::write_pgn,这是一个 重大更改
  • 函数 jja::polyglot::from_move 现在接受一个指向 shakmarty::Move引用 而不是 shakmaty::Move,这是一个 破坏性变更
  • jja edit 中某些权重转换参数的默认值已被更改,使其更直观,例如,--color-weight-green 的默认值已从 10000 更改为 65520--color-weight-blue1000 更改为 32768--nag-weight-good9000 更改为 65280--nag-weight-hard10000 更改为 65520--nag-weight-interesting7500 更改为 61440--nag-weight--forced10000 更改为 65520,以及 --nag-weight-only10000 更改为 65520。新的默认值是经验性的,建议高级用户在 CTG->BINCTG->ABK 转换期间使用 --color-weight-*--nag-weight-* 参数进行微调。
  • jja::ctgbook::CtgBook::read_page 函数中的一个 重要修复,以防止由于越界访问而导致的恐慌。这修复了与一些大型 CTG 书籍的搜索和转换。
  • 函数 jja::abkbook::AbkBook::traverse_book_and_merge 现在返回空值而不是 Result<(), Box<dyn std::error::Error>>,这是一个 破坏性变更
  • 函数 jja::chess::lines_from_tree 现在返回一个 Table 而不是 Result<Table, Box<dyn std::error::Error>>,这是一个 破坏性变更
  • 使用 anyhow 库进行错误处理。这主要用于主代码,而不是库代码,但库代码的某些地方也被修改了,存在 破坏性更改:现在 jja::pgnbook::create_opening_book 返回一个 anyhow::Result<GameBase>,而不是 Result<GameBase, Box<dyn std::error::Error>>。同样,函数 jja::pgn::pgn_dump 现在返回 anyhow::Result<()>,而不是 Result<(), Box<dyn std::error::Error>>
  • 函数 jja::system::get_progress_{bar,spinner} 现在返回一个 ProgressBar,而不是一个 Result<ProgressBar, Box<dyn std::error::Error>>。这些函数在模板中出错时会触发 panic,这在正常情况下不应该发生。这个更改是一个 破坏性更改
  • 函数 jja::system::edit_tempfile 在出错时现在返回 EditTempfileError,而不是 Box<dyn std::error::Error>。此外,EditTempfileError 枚举新增了一个成员 EditTempfileError::InputOutputError(std::io::Error)。这些更改在公共 API 中,因此是 破坏性更改
  • 恢复学习实验性的 EPD 输出支持。这可以与导出一起使用,例如:使用 jja dump -fcsv file.pgn | jja restore file.epd 创建给定 Portable Game Notation 文件中所有位置的扩展位置描述文件。EPD 条目包括 id 字段中的位置 Zobrist 哈希。
  • 修复了 jja::chess::deserialize_chess 中 Chess960 王车易位权的反序列化。
  • jja::chess::deserialize_chess 函数现在在遇到无效的棋子索引时会 panic,而不是静默地继续。
  • hash 子命令已重命名为 digest。旧名称将作为别名使用,直到下一个主要版本升级。

0.7.1

  • 在禁用 i18n 功能的情况下修复了构建问题。
  • 为 jja 库启用 lint #![deny(clippy::cast_lossless)] 并修复相关代码。

0.7.0

  • 为 jja 库启用 lint #![deny(clippy::cast_precision_loss)] 并修复相关代码。
  • 在 PGN 转换期间,编辑器学会了使用缓冲 I/O 而不是直接 I/O,以提高效率,尤其是在处理巨大的开局库时。
  • 在 PGN 转换期间,编辑器学会了显示进度条。
  • CTG 接口经历了很多 破坏性变更,以使接口更加精简,特别是在最近的 mmap 变更之后。因此,函数 jja::ctg::find_piece 返回 Option<i32> 而不是 Result<i32, std::io::Error>,函数 jja::ctgbook::CtgBook::extract_all{,2} 返回 CtgTree 而不是 Result<CtgTree, std::io::Error>,函数 jja::ctgbook::CtgBook::lookup_moves 返回 Option<Vec<CtgEntry>> 而不是 Result<Option<Vec<CtgEntry>>, std:io::io::Error>
  • 现在编辑功能使用了一个更高效的PGN转换实现,它不会将整个变化树加载到内存中。这使得可以将大型开局库文件转换为PGN,而不会耗尽系统内存。此外,PGN转换器现在尊重-f, --fen-p, --pgn参数的jja edit,因此可以将开局库的子树转换为PGN。有关更多详细信息,请参阅相关问题#14#16。此更改弃用了函数jja::chess::pgn_from_tree,建议使用相应开局库文件的新write_pgn函数。
  • jja::polyglotbook::PolyGlotBook实现经历了许多改进,成为一个更简洁的接口。PolyGlotBook::get{,_key}函数不再在无效索引时引发恐慌,而是返回一个Option<BookEntry>而不是一个BookEntry。这种实现避免了为大小为零的PolyGlot书籍映射一个假匿名内存区域,以允许从头开始创建PolyGlot书籍(例如:touch new-file.bin && jja edit -i new-file.bin)。由于这些函数是公开的,这是一个重大更改
  • merge现在支持合并BrainLearn经验文件。选项--weight-cutoff已重命名为--cutoff,并支持通过BrainLearn经验文件的最小深度进行过滤。
  • edit现在支持编辑BrainLearn经验文件。此类文件的原地编辑也得到支持。
  • 将最低支持的Rust版本(MSRV)从1.70降低到1.64以提高可移植性。
  • 恢复对is_terminal crate的依赖,而不是依赖于>=rust-1.70。
  • pgn-reader crate从0.25降级到0.24
  • shakmaty crate从0.26降级到0.25
  • regex crate从1.8升级到1.9
  • smallvec crate从1.10升级到1.11
  • 已移除 jja::obkbook::ObkBook 的成员 progress_bar,作为交换,公开函数 jja::obkbook::ObkBook::treejja::obkbook::ObkBook::traverse_tree 现在需要传入一个可选的进度条引用。这避免了不必要的进度条克隆,并且是一个 破坏性变更。此外,函数 jja::obkbook::ObkBook::read_moves 已更名为 load,这同样是一个 破坏性变更
  • 为了提高效率,find 现在将 OBK 开局库文件映射到内存中,而不是一次性将整个文件读入内存。这导致 jja::obkbook::ObkBook 的公开函数签名发生了变化,包括 read_movestraverse_treetree,这是一个 破坏性变更
  • 将学习到的 binary 格式导出为 PostgreSQL 二进制输出格式的 PGN。这引入了对 crate pgcopy 的依赖。
  • find 现在将 PolyGlot 开局库文件映射到内存中,而不是维护一个 BufReader 处理器。这移除了 jja::polyglotbook::PolyGlotBook 的公开成员 book,并更改了公开函数的签名 jja::polyglotbook::PolyGlotBook,这是一个 破坏性变更。此外,公开函数的名称也发生了变化:将 find_book_keyread_book_entryread_book_key 分别更改为 findgetget_key,这同样是一个 破坏性变更。此外,jja::polyglotbook::PolyGlotBook 的默认迭代器实现已更改为遍历单个开局条目。引入了新函数 jja::polyglotbook::PolyGlotBook::into_iter_grouped,可用于按键分组迭代条目。
  • 在显示进度条时检查标准错误是否是 TTY,而不是标准输出。这允许像 dump 这样的命令在执行期间显示进度条。
  • 优化了 stockfish 哈希函数实现,使其速度几乎翻倍。
  • 学习 -B--benchmark-I--benchmark-iterations 以基准测试 Stockfish 和 Zobrist 哈希函数。这引入了对 benchmarking 包的依赖。
  • jja find 输出中避免翻译 ABK 条目的 CSV 标头。注意,此更改仅适用于 CSV 输出,当输出不是 TTY 或给出选项 --porcelain=csv 时打印。
  • progress_bar 成员已从 jja::ctgbook::CtgBook 中删除。作为交换,公开函数 jja::ctgbook::CtgBook::extract_all{,2} 现在需要可选的进度条引用。这避免了不必要的进度条克隆,并且这是一个 破坏性变更
  • 避免在 jja::ctgbook::CtgBook 函数中不必要的 EPD 转换,从而提高效率。现在,函数 jja::ctgbook::CtgBook::lookup_moves 接受一个 &dyn shakmaty::Position 而不是 EPD 字符串,这是一个 破坏性变更
  • 删除了未使用的公开函数 jja::ctg::find_piecejja::ctg::decode_fen_boardjja::ctg::invert_boardjja::ctg::needs_flippingjja::ctg::flip_board,这是一个 破坏性变更
  • quote 现在也接受搜索词作为不区分大小写的正则表达式以及引用索引。
  • progress_bar 成员已从 jja::abkbook::AbkBook 中删除,作为交换,现在许多 jja::abkbook::AbkBook 的公开函数需要可选的进度条引用。这避免了不必要的进度条克隆,并且这是一个 破坏性变更
  • 为了提高效率,find 现在将 ABK 开局书籍文件进行内存映射,而不是一次性将整个文件读入内存。现在 jja::abkbook::AbkBook 不再实现 Clone,这是一个 破坏性变更
  • 现在在将书籍转换为ABK开局书格式时,edit使用缓冲写入,提高了效率。函数jja::AbkBook::write_file已被修改,现在接受一个参数BufWriter<W: Seek + Write>而不是一个File,这是一个破坏性更改
  • jja-0数据库中现在的位置表p上有id的索引p_idx,以便更有效地查询Zobrist哈希冲突。
  • 现在info打印文件类型为大写,而不是小写。
  • edit在成功进行CTG转换后,学会了打印Polyglot书籍信息,就像我们已经在CTG到ABK转换中那样做。
  • CTG现在支持NAG的全范围,$0 - $255,因此edit在遇到之前不受支持的NAG时不再崩溃。注意,只有移动评估,$1 - $9,在edit的Polyglot权重和ABK优先级计算中使用。其他NAG仅用于find子命令的显示。注意,这改变了jja::ctg::Nag公共类型,因此是一个破坏性更改
  • dump学会了使用-f=<FORMAT>--format=<FORMAT>参数来选择PGN转储的格式。此选项对非PGN转储没有影响。函数jja::pgn::pgn2csv已被重命名为jja::pgn::pgn_dump,这是一个破坏性更改
  • 在ABK优先级计算中,优先考虑CTG彩色移动推荐而不是数值注释图(NAG)。edit学会了三个命令行参数,分别是--color-priority-green--color-priority-blue--color-priority-red。它们的默认值分别是951
  • make学会了使用--min-wins,可以用来根据获胜次数过滤走法。默认值是0,没有任何效果。
  • 在Polyglot权重计算中,优先考虑CTG彩色推荐而不是数值注释图(NAG)。edit学会了三个命令行参数,分别是--color-weight-green--color-weight-blue--color-weight-red。它们的默认值分别是1000010001
  • 现在支持CTG数值注释符号7,它是一个强制移动。之前,我们错误地使用了8,这是一个唯一的移动,而不是强制移动。虽然这种区别不是很明显,但我们除了实现了ctg::Nag::Forced外,还实现了ctg::Nag::Only,并且jja编辑的对应命令行标志是--nag-weight-only=<WEIGHT>--nag-priority-only=<PRIO>。这两个默认值与--nag-weight-forced--nag-priority-forced的默认值相同。
  • 重要修复 jja::CtgBook::search_position函数由于错误地遗漏了一些位置,导致一些大于2.5-3G的CTG书籍在编辑期间显示为0个位置,或者在查找时位置查找失败。修复了jja::CtgBook::read_page函数中的乘法溢出问题。
  • make在过滤过程中通知用户有关--{win,draw,loss}-factor值,因为它们在确定权重和条目保留中也同样重要。
  • 修复了make中的一个bug,其中在--draw-factor--loss-factor中出现的负值未被视为亏损。
  • 将实验性的PGN学习到一个数组中,该数组包含棋盘位置Zobrist键和设置,并以流式JSON格式进行转储。restore可以将这些转储保存到以.jja-0扩展名结尾的sqlite3数据库中。此文件的格式是实验性的,可能会更改。一旦此格式稳定,将使用扩展名.jja-1。我们目前使用此格式仅用于检测Zobrist哈希冲突。
  • 使用XorShift随机数生成器在随机模拟中随机选择移动,使用play命令。此算法在密码学上不安全,但非常快。请参阅此处的基准。
  • 重大更改:现在jja::quote::print_quote需要一个额外的布尔参数,指定输出是否应该使用ANSI颜色代码进行格式化。默认情况下,当标准输出不是TTY时,现在print_quote将打印带引号的文本和作者信息,不进行样式化。
  • 修复了PGN转储以产生正确的JSON数组,之前数组标记[]被错误地未打印出来。

0.6.1

  • 修复了BrainLearn经验文件条目的提升反序列化。
  • 编辑学习到将BrainLearn经验文件转换为PGN。注意,在转换这些文件时可能需要大量的内存。计划在将来对其进行改进。
  • 修复了BrainLearn经验文件条目的王车易位移动反序列化。
  • 修复了 jja restore 中错误地将 BrainLearn 条目以大端格式而非小端格式写入的问题。
  • 修复了在 jja find 树输出中 BrainLearn 条目的排序问题。
  • rust-embed crate 从 6.7 升级到 6.8
  • num_cpus crate 从 1.15 升级到 1.16
  • 现在 find 可以使用与 Stockfish 兼容的 Zobrist 哈希正确查询 BrainLearn 经验文件。
  • -S, --stockfish 哈希学习以生成与 Stockfish 兼容的 Zobrist 哈希。
  • 新增公共模块 jja::stockfish 和新的公共函数 jja::stockfish::stockfish_hash 用于生成与 Stockfish 兼容的 Zobrist 哈希。在调用此函数之前,必须先调用 jja::stokfish::zobrist::init 函数来计算 Zobrist 哈希中使用的哈希表。
  • 新增公共函数 jja::chess::{de,}serialize_chessshakmaty::Chess 实例序列化/反序列化到 5 个无符号 64 位数字的数组。 jja dump 使用此功能在 PGN 导出中。

0.6.0

  • jja::pgnfilt::Operatorjja::pgnfilt::LogicalOperator 现在实现了 Eq 以及 PartialEq
  • 新增 restore 命令与 dump 命令配合使用,用于将 JSON 序列化的 PolyGlot 或 BrainLearn 文件条目恢复到指定的输出文件。
  • 在 UNIX 系统上修复了 SIGPIPE 处理,以便在将输出管道传输到另一个程序(如分页器)时,jja 不会崩溃。
  • 通过学习使用 -z <HASH>, --hash=<HASH> 查询 PolyGlot 开局书籍和 BrainLearn 经验文件。
  • 支持只读方式读取 BrainLearn 经验文件格式。子命令 infodumpfind 可以处理扩展名为 .exp 的 BrainLearn 经验文件格式。
  • 通过只读取键而不是整个条目来改进 polyglot 键查找。为此使用了新的公共函数 polyglotbook::PolyGlotBook::read_book_key
  • 新增 dump 命令用于导出 PolyGlot 开局书籍或 PGN 文件的全部内容。PolyGlot 开局书籍的导出格式为 JSON,而 PGN 文件的格式为 CSV。
  • 重大更改:函数 polyglotbook::PolyglotBook::lookup_moves 已更改为接受棋盘位置的 zobrist 哈希作为参数,而不是 shakmaty::Chess 棋盘位置本身。
  • 添加了 --signed 选项以将 zobrist 哈希打印为有符号十进制数字。
  • 新增模块 jja::file,该模块导出二进制文件 I/O 的实用工具。
  • 重大更改:函数 jja::polyglot::entry_{from,to}_file 已更名为 jja::polyglot::bin_entry_{from,to}_file
  • 在比赛命令中使用 XorShift 随机数生成器来随机选择棋步。此算法在密码学上不安全,但速度非常快。
  • 修复了在书查找失败时引发恐慌的 match 命令。
  • 在长版本上打印更详细的构建信息,--version 输出。
  • 将 CTG 文件映射到内存映射以加快随机访问,以换取增加的内存使用。这带来了对 crate memmap 的新依赖。
  • 在处理 PolyGlot 书籍时使用缓冲读取/写入,这大大减少了读取/写入系统调用,从而提高了性能。现在,PolyGlotBookbook 成员是一个 BufReader<File> 而不是一个 File,这是一个 重大更改
  • 重要修复:修复了计算与兵过路合法性相关的 PolyGlot 兼容 zobrist 哈希的问题。在 PolyGlot 格式中,兵过路移动仅是伪合法的,而之前 jja::hash::zobrist_hash 函数错误地检查了完全合法性。
  • 重大更改:新增类型 ctgbook::CtgTree,它包含函数 CtgBook::extract_allCtgBook::extract_all2 的新返回值。这些函数使用的 CtgEntrytree 元素也已删除,并且函数已通过使用相当少的内存以更高效的方式实现。因此,大多数 ctg 到 abk/polyglot 转换的速度几乎快一倍。
  • 重大更改:函数 ctgbook::CtgEntry 成员的 uci 类型已从 String 更改为 shakmaty::uci::Uci,而 nags 成员已重命名为 nag,并且其类型已从 Option<String> 更改为 Option<Nag>
  • ctg 移动注释条目已被解析并静默丢弃,它们不再被解析。此外,ctgbook::CtgEntry 已不再具有 comment 成员,这是一个 破坏性变更
  • 破坏性变更ctg::colored_uci 函数现在接受一个 shakmaty::uci::Uci 而不是 UCI 字符串。函数参数的顺序也发生了变化。
  • ctg:新增类型 Ctg::Nag 用于抽象 CTG NAG(数字注解符号)条目
  • 具有零权重的 obk 条目现在在 PolyGlot 转换期间被赋予权重 1,以防止跳过这些条目。我们计划将来使其可由用户配置。
  • 使用标准 IsTerminal 特性,并取消对 is_terminal 仓库的依赖
  • 使用标准 to_le_bytes()to_be_bytes(),并取消对 byteorder 仓库的依赖
  • 使用 -e=<MODE>--enpassant-mode=<MODE> 来选择在 Zobrist 哈希计算中是否包含吃过路兵格子的过路兵模式。
  • 重要修复:在将书籍转换为 PolyGlot 格式时对编码王车易位移动的修复。详细信息请参阅 相关问题
  • 破坏性变更polyglot.from_uci 现在期望一个 bool 参数,以通过确定即将移动的国王是否在其起始方格中来正确编码王车易位位置。
  • 由于 shakmaty 的更新,将最低支持的 Rust 版本(MSRV)从 1.64 升级到 1.70
  • 取消对未维护和不安全的 chrono 仓库的依赖
  • PolyGlotBook 有两个新的公共函数:find_book_keyread_book_entry
  • 使用 -x--hex 将哈希以十六进制形式打印,而不是十进制
  • pgn-reader 包从 0.24 升级到 0.25
  • shakmaty 包从 0.25 升级到 0.26
  • 优化各种 ctg 函数
  • info 学习打印 ctg 开局书籍的总位置数
  • 破坏性变更CtgBook::num_entries 已重命名为 total_positions
  • 破坏性变更CtgBook::total_pages 函数现在接受对 self 的引用,而不是消耗 self。返回类型现在是 usize
  • 重大变更:删除 close 函数,包括 CtgBookPolyGlotBook,将 CtgBook 改进为在打开 cto 文件后立即关闭,并在 CtgBook 中保持一个 File 而不是一个 Option<File>。现在不再使用的 path 元素也被删除。
  • 查找:简化并优化多语言条目查找
  • --help 输出中显示许可证、版本和作者信息
  • 将最低支持的 Rust 版本(MSRV)设置为 1.64,如 cargo-msrv 所定
  • 修复了一个导致编辑器屏幕上键和 epd 显示不正确的错误
  • 编辑:为 PolyGlot 书籍实现 --rescale。当指定时,编辑将调整书籍中所有条目的权重,而不仅仅是单个条目。这对于快速纠正/优化未进行权重缩放生成的 PolyGlot 书籍非常有用。
  • 修复了禁用 i18n 功能时的构建问题
  • tempfile 包从 3.5 升级到 3.6
  • rust-embed 包从 6.6 升级到 6.7
  • once_cell 包从 1.17 升级到 1.18
  • ctrlc 包从 3.3 升级到 3.4
  • 重要修复:CTG 到 Polyglot 权重转换,导致所有缺少性能信息的 CTG 书籍条目被跳过在输出 PolyGlot 书籍中。更多关于这个问题的信息请参阅 相关问题
  • 使 learned -H--hashcode 参数根据 HashCode PGN 标签跳过重复的游戏。可以使用 pgn-extract --addhashcode 标记 PGN 文件

0.5.0

  • 重要修复,关于 polyglot 书籍中王车易位的编码。以前,我们将王车易位编码为 e1g1、e1c1、e8g8 和 e8c8,而正确的编码应为 e1h1、e1a1、e8h8 和 e8a8。
  • 在打印版本信息时,如果构建为 git,则优先使用 git 版本而不是包版本
  • clap 包从 4.2 升级到 4.3
  • ctrlc 包从 3.2 升级到 3.3
  • rocksdb 包升级到 0.21.0,该版本捆绑 RocksDB-8.1.1
  • 记录所有公共代码并启用代码检查 #[deny(missing_docs)]
  • 学会以 PGN 格式导出开局库,使用扩展名为 pgn 的输出文件导出开局库到 PGN 格式
  • 将构建依赖项恢复为 built
  • 找到 -l <max-ply>--line=<max-ply> 以显示以累积权重逆序排序的开局变化表
  • 现在 --min-score 接受浮点值作为参数,而不是无符号 64 位整数
  • 使 learned --win-factor--draw-factor--loss-factor 能够在计分时指定相应的系数,默认值分别为 210,类似于原始的 polyglot 工具
  • 找到 --tree=<max-ply> 在断开管道时不再引发恐慌,因此与分页器一起使用更加方便
  • 使 learned -p, --min-pieces 能够指定包含在库中的位置在棋盘上的最小棋子数量,默认为 8
  • 合并 learned -, --weight-cutoff 以指定要包含在库中的条目的最小权重
  • 合并 learned 关于合并策略 avgwavg,分别使用平均权重或加权平均权重合并;对于 wavg,应使用 -, --weight1-, --weight2 指定加权平均值
  • 就地编辑 polyglot 文件允许编辑空开局库,这使得从头开始创建 polyglot 图书变得实用
  • 合并 learned 关于合并策略 maxminourssum,默认为 sum,它将移动权重相加,max 选择权重最大的,min 选择权重最小的,而 ours 总是选择第一本书的条目
  • 将 README 翻译成德语
  • 将 i18n 支持 turned 成一个默认开启的功能。对于静态链接,必须禁用此功能,因为 embed 使用 proc 宏。
  • 删除对未使用的 libc 包的依赖

0.4.1

  • 修复 docs.rs 构建
  • 更新 shakmatypgn-reader 创建
  • 添加土耳其语的初始翻译
  • 添加德语的初始翻译
  • 使用gettext进行国际化

0.4.0

  • atty替换为维护更好的is-terminal crate。
  • default-editor替换为更先进的dialoguer crate。
  • colored替换为更便携的console crate。
  • -i--irreversible与不可逆移动匹配,以在随机走棋时优先选择不可逆移动。包括兵的移动、捕获、破坏王车易位权利的移动和放弃兵过河的移动。
  • progress_bar crate替换为更便携和先进的indicatif crate。
  • 使用-B <games>--batch-size=<games>确定写批处理大小,以游戏数量为单位
  • Linux构建需要默认安装liburing。这可以通过在安装时使用--no-default-features来禁用。
  • 学习关于ScidFlags的知识,这是一组由Scid软件使用的字符标志,可以在过滤器表达式中使用。
  • 学习--debug标志来打印匹配的过滤器表达式信息
  • 引用了从goodreads.com导入的许多更多象棋引言
  • 使用--max-open-files=<int>来指定每个由临时RocksDB数据库打开的线程打开的最大文件数。
  • 匹配命令现在是多线程的,默认使用与机器上的CPU数量相同的线程数。使用-T=<threads>--threads=<threads>或环境变量JJA_NPROC来覆盖
  • 修复匹配,在随机走棋期间在书籍之间交替颜色
  • quote接受一个可选的索引参数,以打印指定索引的引言,而不是随机引言
  • quote学习了从archive.org、goodreads.com和nitter.net导入的许多更多象棋引言
  • 使过滤器学习特殊变量PlayerEloTitleRatingDiff以匹配从任何颜色匹配的相关字段
  • 使用--filter=<expression>学习来通过标题过滤PGN游戏。过滤设计简单快捷。包括括号在内的标记由空白分隔。不允许引用变量。有关过滤器表达式的更多信息,请参阅jja make --help
  • 使用-t <max-ply>--tree=<max-ply>显示开局书籍的行,作为使用termtree crate的树状结构
  • 删除对built crate的构建依赖
  • 删除对ħyphenation crate的未使用依赖
  • csv crate替换为更轻量级的quick-csv crate
  • cli-table crate 替换为更轻量级的 prettytable-rs crate
  • 使用 pgn-reader crate 代替 pgnparse 来解析 --pgn 命令行选项
  • 删除不必要的 cli-table-derive 依赖
  • 修复导致恐慌的 hash 子命令选项解析
  • ctg find 优先考虑胜利和平局而不是性能
  • 使 learned 能够通过 -0--null 保留带有 null moves 的书籍中的走法
  • 使 learned 能够通过 --no-scale 避免缩放权重
  • 使 learned 能够通过 --compression={none,bzip2,lz4,lz4hc,snappy,zlib,zstd}--compression-level=<level> 配置 rocksdb 数据库的压缩,默认为 lz4,级别 4
  • 在 pgn 书籍制作期间使用临时的 RocksDB 数据库,以便更好地利用内存,这会略微降低性能,但作为回报,使得导入大型 PGN 文件成为可能。
  • 新 make 命令从 pgn 文件制作多语言书籍,默认情况下以与系统 CPU 数量相同的线程数多线程运行,使用 -T--threads 来覆盖,与压缩的 PGN 文件(zstd、bzip2、gunzip、lz4)透明工作

0.3.2

  • 编辑将用户名和 jja 的版本作为注释写入 ChessBase 到 Arena 开放书籍转换的开局书籍元数据,用 --author、--comment 覆盖
  • 编辑在编辑的临时文件中显示 Unicode 国际象棋棋盘
  • 修复 Arena 开放书籍到 PolyGlot 转换中的书籍遍历
  • 在 Windows 终端运行时启用 ansi 颜色
  • 删除 Unixisms,为 Windows 进行交叉编译
  • 修复 polyglot read/query 中的 castle 解码另一个错误
  • 编辑不再尝试在标准输出不是 TTY 的情况下启动默认编辑器
  • 修复 find 和 edit 以读取 Arena 开放书籍,移动选择与 Arena GUI 相当
  • 新 hash 命令用于计算给定位置的 Zobrist 哈希
  • 修复转换某些大型 Arena 开放书籍文件时的无限循环
  • 通过避免使用 Zobrist 哈希构建器进行双重哈希来提高哈希性能
  • 使用 shakmaty crate 的 Zobrist Hashing 实现,而不是内部实现,以提高哈希性能

0.3.1

  • 编辑 learned 能够计算和写入 ABK 游戏统计字段
  • 编辑 learned 能够将 CTG 书籍文件转换为 ABK 书籍文件
  • 编辑 learned --author 和 --comment 以指定 Arena 开放书籍的元数据
  • 编辑可以带 -i、--in-place=SUFFIX 参数就地编辑 Arena 开放书籍 (abk) 文件
  • 支持写入 Arena (abk) 开放书籍
  • open learned 能够将长的 ECO 开局行包裹成多行
  • find 在某些具有无效 uci 的 abk 书籍上不再崩溃
  • 编辑在 abk 到 bin 转换时考虑走法优先级
  • 将 learned --move-selection={best_move,uniform_random,weighted_random} 与书籍走法的走法选择算法相匹配
  • 修复 polyglot read/query 中的 castle 解码
  • 修复在 abk、obk 和 ctg find 中找不到位置时的错误返回
  • 修复 ctg edit 中的升级处理
  • ctg find 有许多改进(走法着色和排序、平均统计)
  • 新 merge 命令用于合并两个 PolyGlot 开放书籍
  • 添加新的匹配命令,用于随机播放中安排书籍匹配

0.3.0

  • 重构代码,统一各种开局书籍读取接口
  • 支持obk版本1和2(带注释和不带注释的ChessMaster书籍)
  • 支持读取obk(ChessMaster)书籍并将其转换为多语言书籍
  • 如果标准输出不是TTY,则不显示进度条
  • 支持读取abk(Arena)书籍并将其转换为多语言书籍
  • 新播放命令可以用于使用开局书籍进行随机播放

0.2.1

  • 在ctg到多语言编辑的权重转换中,可以使用--nag-weight-{good,mistake,hard,blunder,interesting,dubious,forced}进行调整
  • 编辑学习时使用--no-scale避免将权重全局缩放到16位
  • 代码现在相对较好地进行了文档说明
  • 编辑--in-place现在在中断时正确删除输出临时文件
  • 编辑过滤掉权重为零的走法,使用-0,--null来保留它们

0.2.0

  • 编辑窗口以注释的形式列出位置信息(键,epd,合法走法)
  • 编辑不再静默丢弃非法走法
  • 编辑可以使用-i,--in-place=SUFFIX就地编辑PolyGlot文件
  • 编辑可以将CTG开局书籍转换为PolyGlot开局书籍
  • 对于编辑和查找,如果没有给出--fen或--pgn,则默认为起始位置
  • info打印CTG书籍中的总页数

0.1.1

  • 可以添加新位置到多语言文件中
  • 使用多语言编辑修复了许多错误
  • 添加了quote命令,用于打印随机棋盘语录
  • 添加了open命令,用于查询ECO分类

0.1.0

  • 编辑polyglot文件时,只有编辑当前位置有效
  • 读取polyglot文件
  • 读取ctg文件

依赖项

~70–105MB
~2M SLoC