#chess-engine #chess #move #generator #movegen

bin+lib chess-lib

国际象棋移动生成库

4 个版本

0.1.3 2023 年 10 月 3 日
0.1.2 2023 年 6 月 18 日
0.1.1 2023 年 6 月 18 日
0.1.0 2023 年 6 月 18 日

#640游戏开发

21 每月下载次数

MIT 许可证

140KB
3.5K SLoC

Chess-Lib

开发

初始化

使用以下命令启用 git 预提交钩子: chmod +x .githooks/pre-commit && git config --local core.hooksPath

测试

要运行所有测试,请使用 cargo test。这将也会运行更昂贵的测试。在开发过程中,您可以使用 cargo test --no-default-features 来运行仅包含快速测试。

代码生成

生成魔法条目: cargo run --release chess generate > /tmp/magics_entries.rs && mv /tmp/magics_entries.rs src/engine/chess/magics_entries.rs

调试

性能分析

为了初步了解,我们可以在 Linux 上使用 cargo-flamegraph 创建 flamegraph,通过以下命令运行: cargo build --release && flamegraph -o my_flamegraph.svg -- target/release/chess-lib chess perft --fen "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -" --depth 5

对于性能分析,我们可以在Linux上使用perf。运行perft命令并使用perf record进行性能分析,直到退出:cargo build --release && perf record -F99 --call-graph dwarf target/release/chess-lib chess perft --fen "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -" --depth 5

这将输出一个名为perf.data的文件。

要查看性能分析结果,请使用perf report,要查看特定的数据文件,可以使用perf report -i <path-to-perf-data-file>

或者,要比较报告,可以使用perf diff <path-to-base-line-perf-data-file> <path-to-new-perf-data-file>

Stockfish & Perft
Stockfish

下载 Stockfish 并使用以下命令编译它:make -j build ARCH=x86-64-modern。然后运行 ./stockfish

您可以使用例如 position fen rnbqkbnr/1ppppppp/p7/8/8/7P/PPPPPPP1/RNBQKBNR w KQkq - 0 1输入一个特定的FEN。

您也可以通过输入 d 来可视化它。

然后,要运行具有特定深度(例如3)的perft,请输入 go perft 3

Perft

运行例如 `cargo run --release chess perft --fen "rnbqkbnr/1ppppppp/p7/8/8/7P/PPPPPPP1/RNBQKBNR w KQkq - 0 1" --depth 3

调试

首先编译一个发布版本,执行 cargo build --release

有一个调试脚本可以通过以下命令运行:python perft.py <path-to-stockfish-executable> <path-to-rechess-engine-executable> "<fen>" <depth>

发布

要发布新的crate版本,您需要执行以下操作

  1. 更新Cargo.toml中的版本号,包括versiondocumentation
  2. 运行 cargo test以确保所有测试通过
  3. 通过运行 cargo doc --no-deps --open 来检查生成的文档。
  4. 提交 Git 修改
  5. 运行 cargo publish --dry-run 来确保在发布前没有警告或错误。
  6. 通过运行 cargo package --list 来检查生成的 .crate 文件。
  7. 运行 cargo publish 将 crate 发布到 crates.io。

依赖项

~3.5–5MB
~92K SLoC