TFT-Strategist/README.md
2025-04-02 14:44:42 +08:00

599 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 云顶之弈阵容推荐器
## 项目概述
本项目是一个基于Python的云顶之弈阵容推荐工具通过Riot官方提供的游戏数据职业、特质、棋子实现自动化的阵容分析与推荐。项目具有灵活的评分机制能够根据用户需求如指定人口、羁绊、棋子等智能推荐最优阵容。
## 主要功能
1. **数据提供模块**
- 从官方接口获取最新游戏数据并支持本地缓存
- 提供丰富的数据查询API如获取羁绊下的棋子、棋子的羁绊详情等
- 高效的数据处理与缓存机制
2. **阵容推荐模块**
- 根据用户指定的人口、必须羁绊、必选棋子自动生成阵容
- 支持多种约束条件组合,如指定多个羁绊、多个棋子等
- 智能选择最佳棋子组合,最大化羁绊效果
3. **阵容评分模块**
- 综合考虑羁绊数量、等级、棋子费用等因素
- 可配置的评分权重,支持自定义评分策略
- 多维度评估阵容强度,提供量化的阵容分析
- **支持通过外置配置文件为特定羁绊或棋子设置自定义权重**
4. **接口模块**
- 提供编程接口,方便集成到其他应用中
- 交互式命令行界面,便于直接使用
- 支持自定义评分参数
5. **Web界面模块**
- 基于Flask的Web界面提供图形化操作体验
- 可视化显示阵容推荐结果
- 支持在线调整权重参数与配置
## 环境与依赖
- **Python版本:** Python 3.8+
- **主要依赖:**
- requests: 用于获取在线数据
- pandas: 用于数据处理
- pyyaml: 用于配置文件解析
- numpy: 用于数值计算
- flask: 用于Web界面
- flask-cors: 处理跨域请求
- waitress: 生产环境Web服务器
- pytest: 用于单元测试
- tqdm: 用于进度显示
## 项目安装
1. 克隆项目代码
```bash
git clone https://github.com/username/TFT-Strategist.git
cd TFT-Strategist
```
2. 安装依赖
```bash
pip install -r requirements.txt
```
## 快速开始
### 查看帮助信息
运行以下命令查看主程序的帮助信息:
```bash
python main.py --help
```
输出结果会显示所有可用的子命令和选项。
### Web界面
运行以下命令启动Web界面
```bash
python main.py web
```
默认情况下Web服务器将在`http://localhost:5000`上运行。您可以使用以下参数自定义服务器配置:
- `--host`: 指定服务器主机地址,默认为"0.0.0.0"(允许所有网络接口访问)
- `--port`: 指定服务器端口默认为5000
- `--dev`: 启用开发模式(开启调试功能,自动重载代码)
- `--config`: 指定自定义配置文件路径
例如:
```bash
python main.py web --host 127.0.0.1 --port 8080 --dev
```
Web界面提供以下功能
- 通过滑动条调整基础权重(羁绊等级权重、羁绊数量权重、棋子费用权重)
- 为每个具体的羁绊和棋子设置自定义权重
- 指定必选羁绊和必选棋子
- 一键生成最佳阵容并可视化显示
- 支持筛选显示已激活的羁绊和棋子
### 数据提供模块演示
运行以下命令启动数据提供模块的演示程序:
```bash
python main.py data
```
演示程序将展示以下功能:
- 加载最新的游戏数据
- 显示当前版本职业、特质和棋子的基本信息
- 提供交互式查询界面,可以查询羁绊的棋子、棋子的羁绊等信息
### 阵容推荐模块演示
运行以下命令启动阵容推荐模块的演示程序:
```bash
python main.py recommend
```
演示程序将提供以下功能:
- 指定人口数量生成最佳阵容
- 指定必选羁绊生成阵容
- 指定必选棋子生成阵容
- 综合多种条件生成最优阵容
### 评分系统演示
运行以下命令启动评分系统的演示程序:
```bash
python main.py scoring
```
演示程序将展示以下功能:
- 使用默认权重进行阵容评分
- 使用配置文件中的自定义权重进行评分
- 通过代码动态设置特定羁绊和棋子的权重
- 比较不同权重设置下的评分差异
- 动态修改配置文件并重新加载
您还可以指定自定义配置文件:
```bash
python main.py scoring --config path/to/custom_config.yaml
```
### 配置管理
运行以下命令管理权重配置:
```bash
python main.py config --show
```
配置管理提供以下功能:
- 显示当前所有权重配置
- 设置特定羁绊的权重
- 设置特定棋子的权重
- 设置基础权重参数
例如:
```bash
# 设置羁绊权重
python main.py config --set-synergy "超频战士" 1.5
# 设置棋子权重
python main.py config --set-chess "厄加特" 1.8
# 设置基础权重参数
python main.py config --set-base "synergy_level_weight" 1.2
```
### 命令行界面
运行以下命令启动交互式命令行界面:
```bash
python main.py cli
```
命令行界面提供以下功能:
- 指定阵容人口和评分参数
- 交互式添加必选羁绊和等级
- 交互式添加必选棋子
- 展示详细的阵容推荐结果,包括棋子信息和激活的羁绊
您还可以使用命令行参数自定义配置:
```bash
python main.py cli --population 8 --results 5 --level-weight 1.2 --count-weight 0.7 --cost-weight 0.2
```
参数说明:
- `--population`阵容人口数量范围1-10默认为9
- `--results`推荐结果数量默认为3
- `--level-weight`羁绊等级权重默认为1.0
- `--count-weight`羁绊数量权重默认为0.5
- `--cost-weight`棋子费用权重默认为0.1
- `--config`:指定自定义配置文件路径
## 项目结构
```
TFT-Strategist/
├── data/ # 数据存储目录
│ ├── chess.json # 棋子数据
│ ├── job.json # 职业数据
│ ├── race.json # 特质数据
│ └── weights_config.yaml # 自定义权重配置文件
├── src/ # 源代码
│ ├── data_provider/ # 数据提供模块
│ │ ├── __init__.py
│ │ ├── data_loader.py # 数据加载器
│ │ └── data_query_api.py # 数据查询API
│ ├── recommendation/ # 阵容推荐模块
│ │ ├── __init__.py
│ │ └── recommendation_engine.py # 阵容推荐引擎
│ ├── scoring/ # 阵容评分模块
│ │ ├── __init__.py
│ │ ├── scoring_system.py # 阵容评分系统
│ │ └── config_loader.py # 配置加载器
│ ├── interface/ # 接口模块
│ │ ├── __init__.py
│ │ ├── api.py # 编程接口
│ │ └── cli.py # 命令行界面
│ ├── config/ # 配置管理模块
│ │ ├── __init__.py
│ │ └── weights_config.py # 权重配置管理
│ ├── web/ # Web界面模块
│ │ ├── __init__.py
│ │ ├── app.py # Flask应用
│ │ ├── static/ # 静态资源
│ │ │ ├── css/ # CSS样式
│ │ │ │ └── style.css
│ │ │ └── js/ # JavaScript脚本
│ │ │ └── main.js
│ │ └── templates/ # HTML模板
│ │ └── index.html
│ ├── __init__.py
│ ├── data_provider_demo.py # 数据提供模块演示
│ ├── recommendation_demo.py # 阵容推荐模块演示
│ ├── scoring_demo.py # 评分系统演示
│ └── test_scoring.py # 评分测试模块
├── tests/ # 测试代码
│ ├── test_data_provider.py # 数据提供模块测试
│ ├── test_recommendation.py # 阵容推荐模块测试
│ └── test_interface.py # 接口模块测试
├── main.py # 主程序入口
├── requirements.txt # 项目依赖
├── test_direct.py # 直接测试脚本
├── test_recommendation.py # 阵容推荐测试脚本
├── generate_weights_config.py # 权重配置生成工具
├── get_data.py # 数据获取工具
└── README.md # 项目文档
```
## 数据提供模块详解
数据提供模块是整个阵容推荐系统的基础,负责从官方接口获取最新的游戏数据,并提供丰富的查询功能。
### 主要组件
1. **DataLoader**: 负责数据获取与缓存
- 支持从本地或网络加载数据
- 实现数据缓存机制,避免频繁请求
- 自动处理数据更新
2. **DataQueryAPI**: 提供丰富的数据查询接口
- 获取所有职业/特质/棋子数据
- 根据ID或名称查询具体数据
- 查询羁绊下的棋子、棋子的羁绊
- 获取羁绊等级信息
- 查询棋子费用分布
### 使用示例
```python
from src.data_provider import DataQueryAPI
# 初始化API
api = DataQueryAPI()
# 获取所有职业
jobs = api.get_all_jobs()
# 查询特定羁绊的棋子
heavy_warrior = api.get_job_by_name("重装战士")
if heavy_warrior:
chess_list = api.get_chess_by_job(heavy_warrior['jobId'])
print(f"重装战士棋子: {[chess['displayName'] for chess in chess_list]}")
# 查询棋子的羁绊
brand = api.get_chess_by_name("布兰德")
if brand:
synergies = api.get_synergies_of_chess(brand['chessId'])
print(f"布兰德的羁绊: {[synergy['name'] for synergy in synergies]}")
```
## 阵容推荐模块详解
阵容推荐模块是系统的核心,能够根据用户需求生成最优阵容。
### 主要组件
1. **RecommendationEngine**: 阵容推荐引擎
- 支持多种约束条件组合(人口、羁绊、棋子)
- 智能选择最佳棋子组合
- 内置多种推荐策略
2. **TeamComposition**: 阵容组合类
- 表示一个完整的云顶之弈阵容
- 包含棋子列表、羁绊统计等信息
- 提供阵容分析功能
### 使用示例
```python
from src.data_provider import DataQueryAPI
from src.recommendation import RecommendationEngine
from src.scoring import TeamScorer
# 初始化API和推荐引擎
api = DataQueryAPI()
engine = RecommendationEngine(api=api)
# 指定人口推荐
teams = engine.recommend_team(population=9)
# 指定羁绊推荐
required_synergies = [
{'name': '刺客', 'level': 4},
{'name': '忍者', 'level': 1}
]
teams = engine.recommend_team(
population=8,
required_synergies=required_synergies
)
# 指定棋子推荐
required_chess = [
{'name': '阿卡丽'},
{'name': '劫'}
]
teams = engine.recommend_team(
population=7,
required_chess=required_chess
)
# 查看推荐结果
for team in teams:
print(f"推荐阵容评分: {team.score}")
print(f"阵容棋子: {[chess['displayName'] for chess in team.chess_list]}")
```
## 阵容评分模块详解
阵容评分模块是系统的核心评估组件,负责为推荐的阵容提供量化的评分指标。
### 主要组件
1. **TeamScorer**: 阵容评分器
- 综合考虑羁绊数量、等级、棋子费用等因素
- 支持自定义权重配置
- 提供灵活的评分API
2. **ScoringConfig**: 评分配置类
- 定义评分所需的各项权重参数
- 提供默认配置值
- 支持通过外部配置文件进行定制
3. **ConfigLoader**: 配置加载器
- 从YAML或JSON文件加载评分配置
- 支持热重载配置
- 提供丰富的配置访问API
### 配置文件详解
系统支持通过YAML配置文件data/weights_config.yaml来自定义评分权重
```yaml
# 基础权重配置
base_weights:
synergy_level_weight: 1.0 # 羁绊等级权重
synergy_count_weight: 0.5 # 羁绊数量权重
chess_cost_weight: 0.1 # 棋子费用权重
# 羁绊权重配置
synergy_weights:
重装战士: 1.5 # 特定羁绊权重
魔法师: 1.2
# 其他羁绊...
# 棋子权重配置
chess_weights:
亚索: 1.5 # 特定棋子权重
艾希: 1.2
# 其他棋子...
# 羁绊等级权重
synergy_level_weights:
'1': 1.0 # 1级羁绊权重
'2': 1.2 # 2级羁绊权重
# 其他等级...
# 棋子费用权重
cost_weights:
'1': 1.0 # 1费棋子权重
'2': 1.2 # 2费棋子权重
# 其他费用...
```
配置文件中的权重设置将直接影响阵容评分结果。权重值越大,对应的因素在评分中的影响越大。
### 使用示例
```python
from src.scoring import TeamScorer
from src.data_provider import DataQueryAPI
from src.recommendation import RecommendationEngine
# 初始化评分器(自动加载配置文件)
scorer = TeamScorer()
# 或者指定配置文件路径
scorer = TeamScorer(config_path="path/to/custom_config.yaml")
# 动态修改权重
scorer.set_synergy_weight("忍者", 2.0) # 提高"忍者"羁绊的权重
scorer.set_chess_weight("劫", 1.8) # 提高"劫"的权重
# 重新加载配置文件
scorer.reload_config()
# 为阵容评分
api = DataQueryAPI()
engine = RecommendationEngine(api)
teams = engine.recommend_team(population=8)
for team in teams:
score = scorer.score_team(team)
print(f"阵容评分: {score}")
print(f"棋子: {[chess['displayName'] for chess in team.chess_list]}")
print(f"羁绊: {team.synergy_levels}")
```
## 接口模块详解
接口模块提供了便捷的方式与阵容推荐器进行交互,包括编程接口和命令行界面。
### 主要组件
1. **TFTStrategistAPI**: 编程接口类
- 提供完整的数据查询功能
- 提供阵容推荐和评分功能
- 支持自定义评分参数
2. **TFTCommandLine**: 命令行界面类
- 交互式用户界面
- 支持添加必选羁绊和棋子
- 详细展示阵容推荐结果
### 编程接口使用示例
```python
from src.interface import TFTStrategistAPI, get_api
# 使用单例模式获取API实例
api = get_api()
# 或者创建新的API实例
# api = TFTStrategistAPI(use_local_data=True)
# 获取游戏版本
version = api.get_version()
print(f"当前游戏版本: {version}")
# 自定义评分参数
api.customize_scoring(
synergy_level_weight=1.2,
synergy_count_weight=0.6,
chess_cost_weight=0.15
)
# 获取职业和特质信息
jobs = api.get_all_jobs()
races = api.get_all_races()
# 推荐阵容
required_synergies = [{'name': '超频战士', 'level': 3}]
required_chess = [{'name': '薇古丝'}]
teams = api.recommend_team(
population=8,
required_synergies=required_synergies,
required_chess=required_chess,
max_results=3
)
# 处理推荐结果
for i, team in enumerate(teams, 1):
print(f"\n推荐阵容 #{i} (评分: {team['score']:.2f})")
print(f"棋子: {[chess['displayName'] for chess in team['chess_list']]}")
```
### 命令行界面使用
直接通过main.py运行命令行界面
```bash
python main.py cli [参数]
```
可选参数:
- `--population`: 阵容人口数量默认为9
- `--results`: 返回结果数量默认为3
- `--level-weight`: 羁绊等级权重默认为1.0
- `--count-weight`: 羁绊数量权重默认为0.5
- `--cost-weight`: 棋子费用权重默认为0.1
在交互界面中,您可以:
1. 添加必选羁绊并指定等级
2. 添加必选棋子
3. 获取详细的阵容推荐结果
## Web界面模块详解
Web界面模块提供了图形化的用户交互方式基于Flask框架实现。
### 主要功能
1. **阵容推荐设置**
- 可视化选择阵容人口
- 添加/删除必选羁绊和棋子
- 自定义权重调整
2. **阵容展示**
- 直观显示推荐阵容棋子和羁绊
- 支持多种排序和筛选方式
- 详细的阵容分析数据
3. **配置管理**
- 在线编辑权重配置
- 保存和加载配置文件
- 配置模板管理
### 启动方式
```bash
python main.py web [--host HOST] [--port PORT] [--dev] [--config CONFIG_PATH]
```
## 工具脚本
### generate_weights_config.py
用于生成初始权重配置文件,可根据游戏最新数据自动更新配置。
```bash
python generate_weights_config.py [--output OUTPUT_PATH]
```
### get_data.py
用于从官方接口获取最新游戏数据,支持手动更新。
```bash
python get_data.py [--force]
```
## 开发计划
- [x] 数据提供模块
- [x] 阵容推荐模块
- [x] 阵容评分模块
- [x] 接口模块
- [x] Web界面模块
- [x] 配置管理功能
## 未来展望
- [ ] 优化算法效率,支持更复杂的推荐策略
- [ ] 基于历史数据的胜率分析
- [ ] 支持装备推荐
- [ ] 多语言支持
- [ ] 基于机器学习的个性化推荐
- [ ] 移动端应用开发
## 贡献指南
欢迎贡献代码、报告问题或提出新功能建议请先fork本仓库然后提交拉取请求。
## 许可证
MIT
## 联系方式
如有任何问题或建议请提交issue或联系项目维护者。