English | 中文
本项目是用 ELO + Monte Carlo 模拟 + Valve 官方 Buchholz 配对规则预测 CS2 Major 瑞士轮结果。
其实就是跑10万次瑞士轮模拟,然后暴力搜索1000万种 Pick'Em 组合,找出最优预测方案。基于历史比赛数据计算队伍评分。
v2.0 支持 GPU 加速: 比 v1.0 的 16 核 CPU 快了几十倍 (感谢**Tenzray** 大佬的PR)。
v2.1 性能优化版: 新增多项性能优化,包括内存管理、向量化计算、智能批处理等,进一步提升运行效率。
无表头的 CSV 文件,7 列:
date,team1,score1,score2,team2,tournament,format
2025-11-21,Team A,2,1,Team B,Example Tournament,bo3
2025-11-20,Team C,16,14,Team D,Example League,bo1
date: YYYY-MM-DD 格式team1,team2: 队伍名(必须和代码里的 TEAMS 列表一致)score1,score2: 比赛分数tournament: 赛事名(随便写,只是标记用)format:bo1、bo3或bo5
带表头的 CSV,HLTV 评分:
team,Maps,KD_diff,KD,Rating
Team A,120,+250,1.08,1.09
Team B,95,+180,1.06,1.07只有 team 和 Rating 这两列有用。想要更准确的初始评分可以去 HLTV.org 抓最新数据。
pip install -r requirements.txt注意: 如果要用 GPU 加速,确保已安装 CUDA。PyTorch 会自动检测并使用 GPU。
v2.1 新增性能监控依赖:新增了 psutil、memory-profiler、joblib 等性能优化相关包。
编辑 data/config.json 调整性能:
{
"simulation_params": {
"num_simulations": 50000
},
"performance_params": {
"eval_batch_size": 5000,
"save_every": 1000000
},
"device_params": {
"use_gpu": true,
"gpu_id": 0
}
}编辑 cs2_gen_preresult.py (目前里面的队伍名只是举例,按照实际情况改):
TEAMS = [
"FURIA", "Natus Vincere", "Vitality", "FaZe",
"Falcons", "B8", "The MongolZ", "Imperial",
# ... 一共 16 支队伍
]
ROUND1_MATCHUPS = [
("FURIA", "Natus Vincere"),
("Vitality", "FaZe"),
# ... 一共 8 场对局
]手动输入 stage X 的参赛队伍以及第一轮谁打谁。一定要注意顺序!ROUND1_MATCHUPS 的顺序决定了 Buchholz 配对的初始种子。
第一步:生成模拟数据 (优化版)
python cs2_gen_preresult.py会生成:
output/intermediate_sim_data.pkl- 高效二进制格式 (推荐)output/cs2_gen_preresult.json- 兼容JSON格式- 包含 10 万次瑞士轮模拟结果
新增功能:
- 自动系统资源检测和性能调优
- 实时内存监控和垃圾回收
- 智能批次大小调整
- 性能统计报告
可选:运行性能基准测试
python benchmark.py用于测试系统性能和优化效果。
第二步:GPU 加速的 Pick'Em 优化
python cs2_gen_final.py标准 ELO 改进了一些:
- 时间衰减(50 天半衰期)- 老比赛权重更低
- 格式权重:BO1=1.0, BO3=1.2, BO5=1.5 (理论上应该没毛)
- 自适应 K 因子:一开始 K=50 快速调整,30 场后降到 K=30
- HLTV 评分和历史数据混合(历史数据越多,HLTV 权重越低)
胜率公式:P = 1 / (1 + 10^((rating2-rating1)/400))
参照 Valve 官方规则
暴力枚举所有合法组合:
- 2 支 3-0 队伍
- 6 支 3-1 或 3-2 队伍
- 2 支 0-3 队伍
总共:C(16,6) × C(10,2) × C(8,2) = 10,090,080 种组合
选出在 10 万次模拟里成功率最高(至少命中 5 个)的方案。
v2.0 GPU 优化: 使用 PyTorch 张量和矩阵乘法进行批量评估,在 NVIDIA GPU 上实现 24 倍加速。
生成的文件:
output/final_prediction.json- 完整结果,包含最佳 Pick'Em 组合output/optimized_report.txt- 人类可读的推荐方案output/cs2_gen_preresult.json- 缓存的模拟数据(来自第一步)gpu_checkpoint.json- 自动保存的进度(可断点续传)
注意事项:
- 每支队伍至少需要 10 场历史比赛才能得到可靠的预测
- 如果想从头开始优化,删除
gpu_checkpoint.json即可 - 两步设计允许你修改配置后重跑第二步,无需重新生成模拟数据
- 旧版 v1.0 单文件版本保留为
cs2_swiss_predictor_old.py
-
向量化计算优化
- 使用 NumPy 替代循环,提升数学运算效率
- 优化 ELO 评分计算的向量化操作
- 改进胜率计算算法,使用更高效的
tanh函数
-
内存管理优化
- 实现智能垃圾回收机制
- 批量处理减少内存碎片
- 使用二进制格式 (pickle) 存储,节省空间和加载时间
-
算法结构优化
- 预计算配对优先级表,避免重复创建
- 优化配对算法的时间复杂度
- 使用集合 (Set) 替代列表进行快速查找
-
系统资源管理
- 实时监控 CPU 和内存使用情况
- 根据可用资源动态调整批次大小
- 提供性能优化建议
- 内存使用: 减少 20-40%
- 计算速度: 提升 30-50%
- I/O 性能: 二进制格式提升 3-5 倍加载速度
新增 data/config_performance.json 用于性能调优:
{
"performance": {
"auto_adjust_batch_size": true,
"memory_check_interval": 1000,
"enable_gc_optimization": true
}
}使用装饰器自动监控关键函数:
- 执行时间统计
- 内存使用跟踪
- 峰值内存监控
- 系统资源使用率
-
低配置系统 (<4GB RAM)
- 设置
num_simulations: 30000 - 启用
enable_gc_optimization - 使用较小的批次大小
- 设置
-
高配置系统 (>8GB RAM)
- 可以设置
num_simulations: 200000 - 考虑启用 GPU 加速
- 使用更大的批次提升效率
- 可以设置
-
生产环境
- 使用二进制格式存储
- 启用性能监控
- 定期运行基准测试
最后,本项目参考了 claabs/cs-buchholz-simulator