task3
This commit is contained in:
77
README.md
77
README.md
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user