校内数模练习赛 A 题 — 比赛出场顺序问题。本文构建了基于 Bradley-Terry 模型的得分率预测、马尔可夫链蒙特卡洛仿真与 Maximin 鲁棒优化的完整模型体系,获练习赛三等奖
一、问题背景与规则解析
"五羽轮比"是一种 50 分制双打接力赛,核心规则如下:
对阵双方各派出 5 名选手,出场顺序赛前确定后不可更改
任意一方率先得到 10、20、30、40 分时更换选手
出场组合构成首尾相接的循环序列:若出场顺序为 A1,A2,A3,A4,A5,则对阵组合依次为 (A1,A2)→(A2,A3)→(A3,A4)→(A4,A5)→(A5,A1)
该问题的核心矛盾在于:如何利用局部的历史对战数据,评估任意两人组合的对抗能力,并通过排列组合寻找到在特定博弈环境下的最优出场序列。
本题分为三个子问题:
问题
场景
难度
问题一
对方顺序固定,求我方最优
单边静态优化
问题二
对方针对我方反制,我方需稳健调整
不完全信息博弈
问题三
双方从 6 人中选 5 人,纳什均衡分析
零和博弈均衡
二、基础模型构建
2.1 得分率预测模型
设我方组合为 Aij=(Ai,Aj),对方组合为 Bkl=(Bk,Bl)。定义 E(Aij,Bkl) 为我方在单回合中赢下 1 分的期望概率。
对于有历史记录的组合,采用比分加权平均法:
E(Aij,Bkl)=SA+SBSA(1)
例如,(A1,A2) 对阵 (B1,B2) 的历史比分为 23:21、21:18、21:19,我方总得分 65,对方 58,得分率 E=65/123≈0.528。
对于无历史记录的组合,采用 Bradley-Terry 模型进行个体能力拆解:
E(Aij,Bkl)=sigmoid(2αi+αj+γij−2βk+βl−δkl)(2)
其中 αi、βk 为选手个体能力参数,γij、δkl 为双打协同度参数。通过交替最小二乘法(ALS)迭代求解,得到选手能力矩阵如下:
选手
A1
A2
A3
A4
A5
能力值
0.2683
0.2367
0.2208
-0.1021
-0.2399
选手
B1
B2
B3
B4
B5
能力值
0.1953
0.0655
-0.0810
-0.0160
-0.2521
由此可补全所有组合对阵的得分率矩阵 M,为后续仿真提供数据基础。
2.2 马尔可夫链蒙特卡洛赛事仿真
五羽轮比的动态特性在于每对组合的出场时间不固定(取决于比分达到整十分的速度),传统封闭式解析难以处理。我们构建马尔可夫链蒙特卡洛(MCMC)仿真模型:
设我方出场顺序 OA=[o1,…,o5],对方 OB=[B1,…,B5]。第 t 阶段的组合为:
CtA=(ot, o(tmod5)+1),CtB=(Bt, B(tmod5)+1)(3)
每一分的胜负服从伯努利分布:
Xt∼Bernoulli(pt),pt=M(CtA,CtB)(4)
仿真终止条件为 SA(n)≥50 或 SB(n)≥50。通过 N=3000 次独立仿真消除随机误差,得到任意出场顺序的期望胜率。
三、问题一求解:单边静态优化
已知对方出场顺序固定为 B1,B2,B3,B4,B5,求我方最优出场顺序。
3.1 求解方法
我方 5 名选手的全排列共 5!=120 种可行策略,解空间极小,采用全排列遍历 + MCMC 仿真求全局最优解:
OA∈ΩmaxPwin(OA,OB_fixed)(5)
3.2 结果分析
经仿真求解,最优出场顺序为 [A4,A5,A1,A2,A3],预期胜率 81.30%。
排名
出场顺序
胜率
组合序列
1
A4→A5→A1→A2→A3
81.30%
A4A5→A1A5→A1A2→A2A3→A3A4
2
A5→A4→A3→A2→A1
80.20%
A4A5→A3A4→A2A3→A1A2→A1A5
3
A3→A4→A5→A1→A2
79.50%
A3A4→A4A5→A1A5→A1A2→A2A3
4
A1→A5→A4→A3→A2
79.20%
A1A5→A4A5→A3A4→A2A3→A1A2
5
A2→A5→A1→A4→A3
78.00%
A2A5→A1A5→A1A4→A3A4→A2A3
最优顺序的阶段对位如下:
阶段
分阈值
我方组合
对方组合
得分率
1
10
(A4,A5)
(B1,B2)
0.3499
2
20
(A1,A5)
(B2,B3)
0.5505
3
30
(A1,A2)
(B3,B4)
0.5587
4
40
(A2,A3)
(B4,B5)
0.6372
5
50
(A3,A4)
(B1,B5)
0.5473
3.3 策略解读
最优顺序呈现出典型的田忌赛马式阶梯配置:
第一阶段以低得分率组合 (A4,A5) "避其锋芒",消耗对方的强势阶段
第二至第四阶段逐步释放 (A1,A2)、(A2,A3) 等高能力组合
第四阶段得分率高达 0.6372,在比赛后期关键分上最大化胜率
胜率排名前十的出场组合均呈现"高能力组合向中后阶段集中"的排布特征,印证了阶段权重与组合能力匹配是提升静态胜率的核心逻辑。
四、问题二求解:不完全信息博弈
我方原计划顺序 [A1,A2,A3,A4,A5],对方将从针对该顺序胜率最高的三种反制策略中择一。我方应如何调整?
4.1 对方反制策略识别
在零和博弈框架下,对方的决策目标为最小化我方胜率。对对方 120 种全排列逐一仿真,得到针对我方原定顺序胜率最低的 TOP3 反制策略:
编号
对方出场顺序
对方胜率
我方胜率
反制 1
B2→B5→B4→B3→B1
47.17%
52.83%
反制 2
B3→B4→B5→B2→B1
46.77%
53.23%
反制 3
B4→B5→B2→B1→B3
45.97%
54.03%
我方原定顺序在对方最狠的反制下,最坏胜率仅 52.83%,暴露了固定阵型易被针对性克制的脆弱性。
4.2 Maximin 鲁棒优化模型
采用博弈论中的 Maximin 极大极小准则构建鲁棒优化模型:
OA∗=argOA∈ΩAmax[OB∈BadvminPwin(OA,OB)](6)
内层 min :求解给定顺序在对方所有反制策略下的最坏场景胜率
外层 max :在所有可行顺序中,找到最坏胜率最高的鲁棒最优解
4.3 结果分析
经全排列遍历求解,鲁棒性排名前十的出场顺序如下:
排名
出场顺序
最坏胜率
平均胜率
1
A4→A5→A1→A2→A3
67.00%
69.11%
2
A1→A5→A4→A3→A2
65.83%
67.21%
3
A3→A4→A5→A1→A2
65.27%
66.52%
4
A1→A5→A3→A4→A2
65.17%
65.28%
5
A2→A5→A1→A4→A3
65.07%
66.59%
与初始顺序的对比:
评价指标
原定顺序
鲁棒最优顺序
提升
最坏场景胜率
52.83%
67.00%
+14.17 pp
平均胜率
53.36%
69.11%
+15.75 pp
4.4 策略解读
有趣的是,鲁棒最优顺序 [A4,A5,A1,A2,A3] 与问题一的静态最优顺序完全一致。这说明该顺序兼具:
静态最优性:在确定性对阵下胜率最高(81.30%)
鲁棒最优性:在敌方最佳反制下底线最高(67.00%)
该策略的核心逻辑是:将最强组合 (A2,A3) 放在第四阶段(分阈值 30→40),既可规避对方在前期的针对性压制,又能在比赛后半段的"决胜阶段"获得最大化得分优势。
五、模型性能验证
5.1 关键假设
假设
内容
合理性
A1
每分胜负独立同分布
常规统计假设
A2
历史数据能反映真实能力
数据量有限但覆盖主要组合
A3
个体能力可加性
Bradley-Terry 模型已验证有效
5.2 模型评价
计算效率:120 种排列 × 3000 次仿真 = 36 万次模拟,代码在单机上可在数分钟内完成
稳定性:3000 次独立仿真有效消除随机误差,重复实验胜率波动 < 1%
可推广性:模型框架可适配同类多人制、分阶段接力类团体赛事的出场策略优化
六、结论
静态最优:对方固定顺序下,最优出场顺序为 [A4,A5,A1,A2,A3],胜率 81.30%
鲁棒最优:不完全信息博弈下,同一顺序将最坏场景胜率从 52.83% 提升至 67.00%,实现抗克制与高胜率的统一
方法论:Bradley-Terry 个体能力拆解 + 马尔可夫链蒙特卡洛仿真 + Maximin 鲁棒优化的组合方法,有效解决了历史数据不完整、赛制动态性强、对抗信息不对称三大难题
附录:核心代码
得分率计算与 Bradley-Terry 模型
12345678910111213141516import numpy as npfrom itertools import permutationsdef calculate_score_rate(scores): """根据历史比分计算得分率""" my_total = sum(s[0] for s in scores) opp_total = sum(s[1] for s in scores) if my_total + opp_total == 0: return 0.5 return my_total / (my_total + opp_total)def sigmoid(x): return 1 / (1 + np.exp(-x))# Bradley-Terry 模型:个体能力 + 协同度拆解# E(A_ij, B_kl) = sigmoid((α_i+α_j)/2 + γ_ij - (β_k+β_l)/2 - δ_kl)
五羽轮比 MCMC 仿真
1234567891011121314151617181920212223242526272829303132333435363738394041class BadmintonRelaySimulator: def __init__(self, score_matrix): self.score_matrix = score_matrix def get_combinations(self, order): """根据出场顺序生成循环组合序列""" n = len(order) return [(order[i], order[(i + 1) % n]) for i in range(n)] def simulate_match(self, my_order, opp_order, num_simulations=3000): """蒙特卡洛仿真单场比赛""" my_combos = self.get_combinations(my_order) opp_combos = self.get_combinations(opp_order) wins = 0 for _ in range(num_simulations): my_score, opp_score = 0, 0 stage = 0 while my_score < 50 and opp_score < 50: my_pair = my_combos[stage] opp_pair = opp_combos[stage] p_win = self.score_matrix.get((my_pair, opp_pair), 0.5) # 模拟该阶段内的每一分 while my_score < 50 and opp_score < 50: if np.random.random() < p_win: my_score += 1 else: opp_score += 1 # 检查阶段切换 threshold = (stage + 1) * 10 if my_score >= threshold or opp_score >= threshold: stage = min(stage + 1, 4) break if my_score >= 50: wins += 1 return wins / num_simulations
全排列寻优与 Maximin 鲁棒优化
12345678910111213141516171819202122232425262728293031323334353637# 问题一:静态寻优my_players = ['A1', 'A2', 'A3', 'A4', 'A5']opp_order_fixed = ['B1', 'B2', 'B3', 'B4', 'B5']all_permutations = list(permutations(my_players))results = []for perm in all_permutations: win_rate = simulator.simulate_match(list(perm), opp_order_fixed) results.append((list(perm), win_rate))results.sort(key=lambda x: x[1], reverse=True)best_order, best_rate = results[0]print(f"最优顺序: {best_order}, 胜率: {best_rate*100:.2f}%")# 问题二:Maximin 鲁棒优化# 先识别对方的 TOP3 反制策略opp_results = []for opp_perm in all_permutations: my_win_rate = simulator.simulate_match( ['A1','A2','A3','A4','A5'], list(opp_perm) ) opp_results.append((list(opp_perm), my_win_rate))opp_results.sort(key=lambda x: x[1]) # 我方胜率最低 = 对方最优adv_strategies = [s[0] for s in opp_results[:3]]# Maximin:最大化最坏场景胜率robust_results = []for perm in all_permutations: my_order = list(perm) worst_win_rate = min( simulator.simulate_match(my_order, opp) for opp in adv_strategies ) robust_results.append((my_order, worst_win_rate))robust_results.sort(key=lambda x: x[1], reverse=True)
声明:本文的部分代码和结论分析由 kimi-2.5pro 辅助完成。题目来源为 2026 数模培优营数模练习赛 A 题。