9 个版本

使用旧的 Rust 2015

0.3.0 2017年5月9日
0.2.7 2017年1月19日

#1874 in 游戏开发

32 个月下载量

MIT 许可证

400KB
7K SLoC

alcibiades

用于在 Rust 中编写棋盘引擎的框架。

为什么是棋盘引擎?

简单!棋是人类发明最伟大的东西。计算机紧随其后 ;)

为什么需要一个框架?

关于如何编写棋盘引擎的知识很多,创新的空间也很大。编写棋盘引擎很有趣,但即使是简单的引擎,也有许多复杂(且无聊)的东西需要先实现:UCI 协议通信、规则、静态交换评估器等等。成千上万的程序员一直在重复实现这些事情。

因此,如果您想编写自己的棋盘引擎,您将面临一个不愉快的抉择:您要么从零开始实现所有困难的部分,要么尝试理解他人的棋盘引擎的晦涩、未记录的源代码,希望它足够通用以便修改。这种不幸的情况抑制了创新。

功能

  • 模块化设计。用户可以为棋盘引擎的每个部分编写自己的实现。

  • 非常好的默认实现——移动生成、静默搜索、静态交换评估、时间管理、迭代加深、多PV、渴望窗口、通用置换表。

  • 非常完整的 UCI 支持(包括“搜索移动”)。

用法

使用框架创建棋盘引擎非常简单

extern crate alcibiades;
use alcibiades::stock::*;
use alcibiades::engine::run_uci;

fn main() {
    type HashTable = StdHashTable<StdHashTableEntry>;
    type SearchNode = StdSearchNode<StdQsearch<StdMoveGenerator<SimpleEvaluator>>>;
    type SearchExecutor = Deepening<SimpleSearch<HashTable, SearchNode>>;
    run_uci::<SearchExecutor, StdTimeManager>("My engine", "John Doe", vec![]);
}

此引擎是由不同框架特质的“库存”实现组装而成的。

在现实中,您可能希望为框架的一些特质编写自己的实现。多亏了 Rust 强大的泛型编程能力,您不仅限于实现特质所需的方法。例如,您可能编写自己的静态位置评估器,它有一个 consult_endgame_table 方法。然后您将能够编写一个使用此方法的搜索算法。

最后但同样重要的是,该框架有一个详尽的 文档

依赖关系

~4MB
~78K SLoC