
2026年的美赛终于结束了。 现在的我坐在椅子上,看着电脑里那堆乱七八糟的
.py文件和最终提交的 PDF,由于连续熬夜,心脏还在突突地跳。 为什么要写这篇复盘?因为这四天的经历实在太魔幻了。我们选了D题(体育管理),从第一天觉得“这题我熟不就是看球吗”,到第二天发现“我靠这其实是金融+运筹学”,再到最后一天用 滚动时域整数规划 极限救场。 如果你是明年要参赛的小白,或者今年同样被折磨过的道友,这篇博客应该能给你一些共鸣,或者一些实用的工具推荐。下面就让我们正式开始吧!
比赛开始前,我们队伍的三个人达成了一致,定了策略:坚决不碰物理题,尽量选数据题。
看到题目的那一刻,我们三个人的眼睛都亮了。Problem D: Managing Sports for Success(体育管理)。 “这不就是玩《NBA 2K》吗?经理模式我熟啊!”负责建模的队友A拍着胸脯说。 “数据也好找,NBA数据网上一大堆。”负责数据和编程的我也觉得稳了。
于是,我们毫不犹豫选了D。后来事实证明,选D题就像谈恋爱,始于颜值,陷于才华,终于人品。 题目看起来是体育,实际上核心全是 商业决策、金融期权定价、多目标动态规划。只懂球不懂数学?那基本就凉了。
这里顺便给大家提供一下D题的题目:




第一天是最痛苦的。我们试图用简单的线性回归来预测球员价值。 代码写出来一跑,结果惨不忍睹。 “为什么库里的价值预测出来还没一个年轻新秀高?” “因为模型只看了年龄衰减,没看商业流量价值啊!”
队友A主张上神经网络(LSTM),我觉得数据量不够,LSTM肯定过拟合,建议用随机森林。负责论文写作的队友C在旁边急得转圈:“你俩先别吵算法,我的背景分析咋写?老板到底是要赢球还是赚钱?”
教训1: 第一天千万别急着写代码!先审题!先审题!先审题! D题的核心矛盾是 Win Games vs Make Money。我们直到第一天晚上才意识到,必须建立一个“竞技-商业”的双目标体系,否则模型就是裸奔。
第二天早上,我做了一个大胆的决定:重写代码架构。 之前的代码太散了,全是脚本。为了应对题目中复杂的“扩军”、“伤病”、“交易”场景,我们必须采用面向对象(OOP)的策略。
我把代码分成了好几层(这里强烈建议大家也可以采用这种架构,写论文时特好吹):
下面这是我们模型的架构图,供大家参考:

这一天,键盘敲得冒火星子。我们引入了 Beam Search(集束搜索) 来寻找最优交易策略。当看到控制台终于打印出 Optimal Strategy: ['Sign_Star', 'Maintain'] 时,毫不夸张地说,当时的我激动得差点哭出来。
第三天下午,我们卡在了第五问:“关键球员受伤怎么办?” 此时距离结束还有30小时。常规的静态模型根本解不了这个问题。
“要不就瞎编一个策略?”
“不行,论文里这块是加分项。”
这时候,我在谷歌学术上翻到了一篇关于供应链管理的论文,灵光一闪:滚动时域控制(Rolling Horizon Control)! 把球员受伤看作是供应链断裂,把签短工看作是紧急补货。我们迅速手搓了一个 MILP(混合整数线性规划) 模型,对这一问进行求解。
这一招直接让我们的模型从“玩具”升级到了“工业级”。论文里的图表瞬间高大上起来——那条并在受伤期间止损回升的曲线,简直是艺术品。
最后12小时,就是纯纯的体力活。 Latex报错、图片格式不对、摘要写得像流水账... 负责写作的队友C已经神志不清了,一边打字一边念叨:“我不干了,我要回家种地。” 我们在今天早十六点钟终于生成了最终PDF,检查了两遍论文之后就提交了。提交的那一刻真是如释重负。
这部分是重点!美赛不仅考智商,还考工具链。工具选得好,哪怕模型一般,论文看起来也很专业。
Python (yyds):建议打数模竞赛的各位别用Matlab了(除非你是工科控制类大神),Python在处理数据和画图上是降维打击。
SciPy (scipy.optimize):做运筹优化的神器。我们在做第五问“受伤应对”时,用的就是 milp。它不需要你装庞大的Gurobi,直接能解0-1整数规划,绝对轻量级,好用!
Dataclasses:强烈推荐! 以前我定义球员都是用字典 player = {'name': 'Curry', 'age': 38},代码一多就乱。这次用了 @dataclass,代码清晰度提升了数倍!
@dataclass
class Player:
name: str
ws_current: float
salary: float
# 自动生成的构造函数,真香NetworkX:虽然这次没怎么用,但如果是做网络流或者传球路线分析,这个库是必不可少的。
Tare:字节推出的类VSCode的灵活性极高的编辑器工具,内部集成了超多大语言模型可以随时调用,还支持自主创建智能体,能大大提高代码编写与迭代的效率。
评委看论文,第一眼看摘要,第二眼就看图。图丑的基本就“凉凉”了。
下面来简单聊聊我们这次D题的几个核心逻辑(代码源码比较乱,就不贴在这里了,为大家准备了几个核心思路)。
大部分人只看 PER 或者 WS(竞技数据)。我们引入了一个 CAI (Commercial Attention Index) 指标。

这就解释了为什么老詹和库里哪怕打不动了,工资依然高,因为

系数极大。这一点在论文里是非常加分的。
我们没有用那种“一年一年算”的死板逻辑,而是用了 MDP(马尔可夫决策) + Beam Search。 简单说就是:站在2026年,往后看5年。每年有多种操作(签人、交易、摆烂)。因为可能性太多(指数爆炸),我们每一步只保留最好的5个策略(Beam Width = 5)。这样既保证了搜索深度,又不会算死机。
这是第五问。我们用的是 Rolling Horizon ILP(滚动时域整数规划)。 逻辑是:
美赛就像一场微型的科研模拟。 你会经历迷茫、争吵、绝望,也会经历灵感爆发、代码跑通的狂喜。 不管结果如何,这96小时里,你为了一个目标拼尽全力的样子,真的很帅。 希望大家都能拿到理想的奖项!如果这篇博客对你有帮助,点个赞再走呗~ 祝大家代码无Bug,论文全O奖!