3个不稳定版本
0.2.1 | 2023年5月26日 |
---|---|
0.2.0 | 2023年5月24日 |
0.1.0 | 2023年5月23日 |
2346 在 算法
32 每月下载量
30KB
455 行
mocats
一个快速、易于使用、通用的蒙特卡洛树搜索库。适用于任何游戏、任何数量的玩家以及任何树策略(包括默认的UctPolicy策略)。当前版本,搜索是单线程的。
功能
- 快速高效的蒙特卡洛树搜索实现
- 易于使用的API
- 可自定义玩家数量(对于超过2个玩家使用偏执方法)
- 可自定义树策略
- 调试时格式化的输出显示
用法
在项目的根目录中,将 mocats
依赖项添加到您的 Cargo.toml
文件中
cargo add mocats
...或添加此内容到您的 Cargo.toml
[dependencies]
mocats = "0.2.1"
定义游戏
要使用 mocats
,您必须定义一个游戏和一个树策略。游戏由三个特性定义
GameState
: 表示游戏状态。GameAction
: 表示可以应用于某些GameState
的合法游戏动作。Player
: 表示游戏中的玩家。应该是一个枚举。
树策略由一个特性定义
TreePolicy
: 表示树策略。
UctPolicy
结构体被包括为默认的树策略。
运行搜索
要运行搜索,使用游戏和树策略创建一个 SearchTree
结构体,然后调用其上的 run
。
use mocats::{tic_tac_toe, UctPolicy};
fn foo() {
let game = tic_tac_toe::TicTacToePosition::new();
let tree_policy = UctPolicy::new(2.0);
let mut search_tree = mocats::SearchTree::new(game, tree_policy);
search_tree.run(2000);
let best_action = search_tree.get_best_action();
println!("{}", search_tree);
println!("Best action: {}", best_action.unwrap());
}
示例
查看 mocats::tic_tac_toe 模块
,了解使用 mocats
实现井字棋的完整示例。您可以将 tic_tac_toe
导入以在您的代码中使用。
use std::fmt;
use std::fmt::{Display, Formatter};
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct TicTacToeMove {
pub pos: u16
}
impl mocats::GameAction for TicTacToeMove {}
impl Display for TicTacToeMove {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
todo!()
}
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub enum TicTacToePlayer {
X,
O
}
impl TicTacToePlayer {}
impl mocats::Player for TicTacToePlayer {}
impl Display for TicTacToePlayer {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
todo!()
}
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub struct TicTacToePosition {
pub board_x: u16,
pub board_o: u16,
pub turn: TicTacToePlayer,
}
impl TicTacToePosition {
pub fn new() -> TicTacToePosition {
todo!()
}
}
impl Display for TicTacToePosition {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
todo!()
}
}
impl mocats::GameState<TicTacToeMove, TicTacToePlayer> for TicTacToePosition {
fn get_actions(&self) -> Vec<TicTacToeMove> {
todo!()
}
fn apply_action(&mut self, action: &TicTacToeMove) {
todo!()
}
fn get_turn(&self) -> TicTacToePlayer {
todo!()
}
fn get_reward_for_player(&self, player: TicTacToePlayer) -> f32 {
todo!()
}
}
文档
有关更详细的文档和使用示例,请参阅API文档。
贡献
欢迎以拉取请求的形式进行贡献!如果您遇到任何问题或对改进有建议,请在GitHub仓库上打开一个问题。
许可证
本项目采用MIT许可证。有关详细信息,请参阅许可证文件。
依赖项
~305KB