6e4973da7aa9c338be3a6d8fd5f0d42fea0ca50a
Poker Task 3: EMD Distance Calculation on TURN
这是扑克Task 3的实现,专注于计算TURN阶段两手牌力分布的EMD (Earth Mover's Distance) 距离。
功能特点
- TURN阶段扑克分析: 基于已知的公共牌和底牌,计算每手牌在所有可能RIVER牌下的牌力分布
- EMD距离计算: 使用scipy的wasserstein_distance函数计算两个牌力分布的EMD距离
- 专业扑克评估: 集成poker_task1的专业扑克牌评估系统,支持所有标准扑克手牌类型
安装和使用
安装依赖
# 使用uv管理依赖(推荐)
uv install
# 或使用pip
pip install scipy
运行程序
# 默认示例运行
python main.py
# 或使用uv
uv run python main.py
输入格式
程序接受以下格式的输入:
玩家1底牌(两张)
玩家2底牌(两张)
公共牌(TURN阶段,4张牌)
示例:
As Ks
7s 6s
8h 9d 9c Qh
运行测试
# 运行所有测试
uv run python -m pytest tests/ -v
# 或
python -m pytest tests/ -v
项目结构
poker_task3/
├── poker_task3/ # 主要代码包
│ ├── card.py # 扑克牌类定义
│ ├── hand_evaluator.py # 手牌评估器
│ ├── hand_ranking.py # 手牌排名系统
│ ├── emd.py # EMD距离计算
│ ├── task3.py # Task 3主要实现
│ └── __init__.py
├── tests/ # 测试文件
│ └── test_task3.py # Task 3测试
├── main.py # 程序入口
└── README.md # 项目文档
算法原理
- 牌力评估: 对于每手底牌,遍历所有可能的RIVER牌(剩余47张牌)
- 分布构建: 统计每种手牌类型(High Card到Royal Flush)的出现次数
- EMD计算: 使用scipy.stats.wasserstein_distance计算两个分布的EMD距离
测试覆盖
- 输入解析测试
- 牌力分布计算测试
- EMD距离计算测试
- 错误处理测试
- 不同牌力强度对比测试
Description
Languages
Python
100%