This commit is contained in:
2025-09-23 09:15:05 +08:00
parent 6e4973da7a
commit e8a705c467
7 changed files with 72 additions and 353 deletions

View File

@@ -1,24 +1,7 @@
# Poker Task 3: EMD Distance Calculation on TURN
# Poker Task3
这是扑克Task 3的实现专注于计算TURN阶段两手牌力分布的EMD (Earth Mover's Distance) 距离。
这是Task3的实现计算TURN阶段的EMD (Earth Mover's Distance) 距离。
## 功能特点
- **TURN阶段扑克分析**: 基于已知的公共牌和底牌计算每手牌在所有可能RIVER牌下的牌力分布
- **EMD距离计算**: 使用scipy的wasserstein_distance函数计算两个牌力分布的EMD距离
- **专业扑克评估**: 集成poker_task1的专业扑克牌评估系统支持所有标准扑克手牌类型
## 安装和使用
### 安装依赖
```bash
# 使用uv管理依赖推荐
uv install
# 或使用pip
pip install scipy
```
### 运行程序
@@ -32,57 +15,9 @@ uv run python main.py
### 输入格式
程序接受以下格式的输入:
```
玩家1底牌两张
玩家2底牌两张
公共牌TURN阶段4张牌
```
示例:
```
As Ks
7s 6s
8h 9d 9c Qh
```
## 运行测试
```bash
# 运行所有测试
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 # 项目文档
```
## 算法原理
1. **牌力评估**: 对于每手底牌遍历所有可能的RIVER牌剩余47张牌
2. **分布构建**: 统计每种手牌类型High Card到Royal Flush的出现次数
3. **EMD计算**: 使用scipy.stats.wasserstein_distance计算两个分布的EMD距离
## 测试覆盖
- 输入解析测试
- 牌力分布计算测试
- EMD距离计算测试
- 错误处理测试
- 不同牌力强度对比测试
AsKs
7s6s
8h9d9cQh
```