2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00
fix
2025-09-20 00:09:22 +08:00

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          # 项目文档

算法原理

  1. 牌力评估: 对于每手底牌遍历所有可能的RIVER牌剩余47张牌
  2. 分布构建: 统计每种手牌类型High Card到Royal Flush的出现次数
  3. EMD计算: 使用scipy.stats.wasserstein_distance计算两个分布的EMD距离

测试覆盖

  • 输入解析测试
  • 牌力分布计算测试
  • EMD距离计算测试
  • 错误处理测试
  • 不同牌力强度对比测试
Description
No description provided
Readme 49 KiB
Languages
Python 100%