10个版本 (4个重大更新)

0.5.1 2024年7月27日
0.5.0 2024年7月13日
0.4.0 2024年6月8日
0.3.4 2024年5月19日
0.1.0 2024年5月6日

#456算法

Download history 246/week @ 2024-05-03 182/week @ 2024-05-10 454/week @ 2024-05-17 36/week @ 2024-05-24 191/week @ 2024-06-07 8/week @ 2024-06-14 143/week @ 2024-07-12 3/week @ 2024-07-19 130/week @ 2024-07-26 9/week @ 2024-08-02

每月285次下载

MIT许可

1MB
11K SLoC

Pokers

docs.rs crates.io

用Rust编写的扑克牌库。

  • 多线程范围对比范围计算
  • 快速牌型评估
  • 高效的牌型索引
  • 单独牌型和组合结果

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
pokers = "0.5.1"

牌型评估器

使用最多7张牌评估任何扑克牌型的强度。

用法

use pokers::{Hand, CARDS};
// cards are indexed 0->51 where index is 4 * rank + suit
let hand = Hand::empty() + CARDS[0] + CARDS[1];
let score = hand.evaluate();
println!("score: {}", score);

权益计算器

计算最多6个不同范围的范围权益,这些范围由equilab-like范围字符串指定。支持蒙特卡洛模拟和精确权益计算

用法

use std::sync::{atomic::AtomicBool, Arc};
use pokers::{HandRange, get_card_mask};
use pokers::approx_equity;
let ranges = HandRange::from_strings(["AK,22+".to_string(), "AA,KK,QQ@50".to_string()].to_vec());
let board_mask = get_card_mask("2h3d4c");
let dead_mask = get_card_mask("");
let cancel_token = Arc::new(AtomicBool::new(false));
let callback = |x: u8| {
    print!("\rProgress: {x}%");
    io::stdout().flush().unwrap();
};
let std_dev_target = 0.01;
let n_threads = 4;
let result = approx_equity(&ranges, board_mask, dead_mask, n_threads, std_dev_target, cancel_token, callback).unwrap();
let equities = result.equities;
println!("player 1 equity: {}", equities[0]);

贡献

这个库是 Kyle Murphy 的Rust重写的分支 (rust_poker),基于 zekyll 的C++权益计算器,OMPEval。与原始仓库的不同之处

  • 修复了多年来未更新的库中的一个问题。影响了 exact_equity()
  • 它在模拟结束时将单独牌型的结果存储起来,然后汇总成组合。
  • 只有一个依赖项(rand)。
  • 使用硬编码的数组进行查找,因此无需从文件中读取和写入,使用向量或lazy_static。这显著加快了编译速度。
  • 为模拟器添加了一个取消令牌,可以从另一个线程随时停止它。
  • 使用一个带有模拟进度的回调。

许可

本项目采用MIT许可

版权(c)2020 Kyle Murphy

版权(c)2024 Eduardo Mata Ewy

依赖项

~1.4–2MB
~36K SLoC