MCM520 ← 资料站首页 同心鼓鲁棒协作策略与蒙特卡洛量化(第 3 组) 打开交互阅读器 →

同心鼓鲁棒协作策略与蒙特卡洛量化(第 3 组)

摘要

本文聚焦 2019 年全国大学生数学建模竞赛 B 题"同心协力"的第三问——鲁棒策略量化评估。在前两组分别建立"理想碰撞高度模型"与"鼓面倾斜刚体动力学"的基础上,本文把"现实扰动→鼓面倾斜→颠球中断"抽象为逐拍随机游走 + 调平控制模型:θt+1=(1−k)θt+ξ\theta_{t+1}=(1-k)\theta_t+\xi,ξ∼N(0,σ/N/8)\xi\sim N(0,\sigma/\sqrt{N/8}),∣θ∣>θc=4∘|\theta|>\theta_c=4^\circ 即判球落。通过大规模蒙特卡洛(每设定 200~400 次试验)系统扫描人数 NN、调平增益 kk、扰动幅度 σ\sigma 的影响,定量给出:无调平时 8 人平均仅连续颠球 39.239.2 次,施加 k=0.5k=0.5 自适应调平后均值触顶上限 20002000 次、成功率 100%100\%;人数由 4 增至 12 均值由 28.328.3 升至 85.785.7;扰动 σ\sigma 由 0.0060.006 增至 0.0300.030 均值由 20002000 跌至 28.428.4。据此提出"人数≥8、自适应调平 k≈0.5k\approx0.5、杜绝抢跑"三位一体的鲁棒策略。全文与配图、附录代码、数据表四路一致,源自 tools/gen_2019b.py。

一、问题重述与模型定位

同心鼓要求 8 名队员牵拉 8 根绳,使排球在鼓面上方被反复颠起、不落地、次数最大化。三问为:① 理想状态最佳策略与稳定高度;② 现实发力不匀的鼓面倾斜模型与 9 工况 0.1 s0.1\ \text{s} 倾斜角;③ 判断第 ① 问策略是否需调整并给出鲁棒策略。前两组已得:理想稳定高度 h=0.45 mh=0.45\ \text{m}(所需鼓速 vd≈0.330 m/sv_d\approx0.330\ \text{m/s}),9 工况倾斜角为 [1.035,1.912,0.792,3.653,6.751,2.796,7.783,3.409,1.996]∘[1.035,1.912,0.792,3.653,6.751,2.796,7.783,3.409,1.996]^\circ,其中工况 7(抢跑+力度偏大)达 7.78∘7.78^\circ 已超 4∘4^\circ 临界。本组据此回答第 ③ 问:把"倾斜→失稳"过程建为可统计的随机模型,用蒙特卡洛量化鲁棒性,并反推最优策略参数。

二、基本假设与符号

符号 含义 取值
NN 队员数 4∼124\sim12
σ\sigma 单拍扰动标准差 0.006∼0.0300.006\sim0.030
σeff=σ/N/8\sigma_{\text{eff}}=\sigma/\sqrt{N/8} 有效扰动 —
kk 调平增益 0∼0.80\sim0.8
θc\theta_c 失稳临界角 0.07 rad≈4∘0.07\ \text{rad}\approx4^\circ

假设:每拍扰动独立同分布于高斯;调平把当前倾角乘以 (1−k)(1-k) 拉回;球落当且仅当某拍 ∣θ∣>θc|\theta|>\theta_c。

三、问题一与问题二的要点回顾

理想状态下 8 人同步、合力矩为零,鼓面水平;所需鼓接触上迎速度

vd(h)=1−e1+e2gh=192gh,v_d(h)=\frac{1-e}{1+e}\sqrt{2gh}=\frac19\sqrt{2gh},

取 h=0.45 mh=0.45\ \text{m} 得 vd≈0.330 m/sv_d\approx0.330\ \text{m/s}、8 s 内约 1313 拍。现实中发力不匀使鼓面绕直径转动,9 工况倾斜角见前文;维持水平所需人均静拉力 Fbase=Mg/(8ρv)≈68.2 NF_{\text{base}}=Mg/(8\rho_v)\approx68.2\ \text{N}。这些结果是第 ③ 问"为什么需要鲁棒策略"的物理根据:理想策略对倾斜零容错,而现实必然产生倾斜。

四、问题三:鲁棒策略的随机模型与蒙特卡洛

4.1 逐拍随机游走模型

把每拍鼓面倾角演化为

θt+1=(1−k)θt+ξ,ξ∼N ⁣(0, σN/8).\theta_{t+1}=(1-k)\theta_t+\xi,\qquad \xi\sim N\!\left(0,\ \frac{\sigma}{\sqrt{N/8}}\right).

直观含义:未加调平时(k=0k=0),倾角纯随机游走,越走越易越过临界;施加调平(k>0k>0),每拍把当前倾角按比例拉回水平,显著降低越界概率。人数 NN 越大,有效扰动 σeff\sigma_{\text{eff}} 越小("平均掉"个体误差)。选择随机游走而非确定性微分方程,是因为真实队员发力误差本质上是不可预测的随机扰动,只有概率模型才能给出"平均能颠多少下"这一赛题真正关心的统计量。

4.2 无调平 vs 调平:次数分布

对 8 人、σ=0.012\sigma=0.012、400400 次蒙特卡洛:无调平(k=0k=0)的连续颠球次数分布长尾偏左,均值仅 39.239.2 次、标准差高达 32.232.2;调平(k=0.5k=0.5)的分布被完全压缩到上限 20002000 次、成功率 100%100\%。两图并置即说明:鲁棒性的瓶颈不在"拉得多齐",而在"是否实时纠偏"。

图1 无调平(k=0) 连续颠球次数分布(8人, σ=0.012, 400 次 MC)
图2 调平(k=0.5) 连续颠球次数分布(8人, σ=0.012, 400 次 MC)

两图对比揭示了一个反直觉事实:无调平分布呈"低均值、高方差"的长尾形态——大多数试验只颠几下就因某拍随机越界而中断,极少数靠运气走运才能较高;而调平分布几乎全部贴在上限,方差趋近于零。这说明"连续颠球次数"在无调平时是一个被随机性主宰的量,靠队员天赋或运气极不可靠;调平则把它从"概率事件"变成"确定性能力"。对训练而言,真正要练的不是"某次颠很多下"的峰值,而是"每次都能把鼓面拉平"的闭环纠偏习惯。

4.3 人数越多越鲁棒

固定无显式调平(k=0k=0)、σ=0.010\sigma=0.010,扫描人数:N=4,6,8,10,12N=4,6,8,10,12 时平均连续颠球次数依次为 28.3, 41.6, 58.1, 69.8, 85.728.3,\ 41.6,\ 58.1,\ 69.8,\ 85.7。增长源于 σeff∝1/N\sigma_{\text{eff}}\propto1/\sqrt{N}——人数翻倍(8→16 等效)使有效扰动降为 1/21/\sqrt2。这解释了赛题"队员不少于 8 人"的下限:低于 8 人时平均掉误差的能力骤减。

图3 人数越多、误差越被平均:无调平连续颠球次数随 N 变化

4.4 调平增益的最优区间

固定 8 人、σ=0.012\sigma=0.012,扫描 kk:k=0,0.2,0.4,0.6,0.8k=0,0.2,0.4,0.6,0.8 对应均值 44.2, 1503.9, 1994.3, 2000, 200044.2,\ 1503.9,\ 1994.3,\ 2000,\ 2000。kk 由 00 增至 0.50.5 是"质变区间"(44→2000),0.50.5 之后收益饱和。故 k≈0.5k\approx0.5 为性价比拐点——再大只会增加队员出力负担而无额外收益。

图4 调平增益 k 对连续颠球次数的影响(8人, σ=0.012)

4.5 扰动幅度的鲁棒边界

固定 8 人、k=0.5k=0.5,扫描 σ=0.006,0.010,0.015,0.022,0.030\sigma=0.006,0.010,0.015,0.022,0.030:均值 2000, 2000, 1913.2, 187.5, 28.42000,\ 2000,\ 1913.2,\ 187.5,\ 28.4。存在明显阈值效应——σ≲0.015\sigma\lesssim0.015 时几乎满分,σ≳0.022\sigma\gtrsim0.022 时急剧崩溃。这划定了"自适应调平能救活的扰动上限":当队员动作抖动标准差超过约 0.020.02 弧度/拍,单靠 k=0.5k=0.5 调平也无力回天,必须回到训练降低个体抖动。

图5 扰动幅度 σ 对连续颠球次数的影响(8人, k=0.5)

4.6 人数 × 调平的联合收益

同一人数下对比无调平(k=0k=0)与调平(k=0.5k=0.5)(σ=0.012\sigma=0.012):N=4N=4 时 21.821.8 vs 14681468;N=8N=8 时 37.037.0 vs 20002000;N=12N=12 时 59.059.0 vs 20002000。调平带来的提升随人数放大——人数越少,调平越不可或缺(4 人时把均值从 22 拉到 1468,提升约 67 倍)。这一"联合增益"可从公式理解:σeff=σ/N/8\sigma_{\text{eff}}=\sigma/\sqrt{N/8} 越小、且 (1−k)(1-k) 把倾角逐拍衰减,二者乘积决定越界率;当 NN 小到使 σeff\sigma_{\text{eff}} 本身偏大时,只有靠调平 kk 把衰减系数压得更低才能弥补。因此"少人队伍更依赖纠偏"是必然结论,也提示在人数受限的实战中(如伤病减员)应优先强化调平而非盲目加人。

图6 不同人数下 无调平 vs 调平(k=0.5) 平均连续颠球次数

4.7 鲁棒性雷达综合评估

以五维(连续次数、成功率、稳定指数、调平增益、抗扰动)归一化对比无调平与调平:无调平除"调平增益"轴为 0 外其余均低(连续次数 0.020.02、成功率 0.270.27、稳定指数 0.180.18、抗扰动 0.270.27);调平各项接近满分(连续次数 1.01.0、成功率 1.01.0、稳定指数 1.01.0、调平增益 0.6250.625、抗扰动 1.01.0)。两者形成鲜明反差,量化印证"调平是鲁棒性的决定因素"。

图7 鲁棒性雷达:无调平/调平(k=0.5) 五维对比(各轴归一化)

4.8 鲁棒协作策略闭环

综合以上,提出闭环策略(见图 8):① 实时检测鼓面倾角 θ\theta;② 判定 ∣θ∣>θc|\theta|>\theta_c?越界即中断;③ 未越界则对反侧队员追加 ΔF∝−θ\Delta F\propto-\theta(增益 k≈0.5k\approx0.5)调平;④ 循环并计数。配套三条铁律:人数 N≥8N\ge8、统一发力时机杜绝抢跑、把个体抖动 σ\sigma 控制在 0.0150.015 以下。

该闭环可由廉价传感器落地:在鼓面安装倾角/加速度计,实时估计 θ\theta 与 θ˙\dot\theta,由控制器按 ΔFi∝−θ⋅sin⁡φi\Delta F_i\propto-\theta\cdot\sin\varphi_i(即"对倾斜反侧追加拉力")下发到各人对应的绳张力调节装置(或语音/震动提示)。本模型已给出各参数的合理取值区间(k≈0.5k\approx0.5、σ<0.015\sigma<0.015、N≥8N\ge8),可直接作为控制器的设定基准,无需重新调参即可获得接近满分的鲁棒性。

图8 鲁棒协作策略闭环:检测—判定—调平—循环

五、灵敏度分析

  • 临界角 θc\theta_c:取 3∘∼5∘3^\circ\sim5^\circ 只平移失稳松紧,调平策略在各档下均接近满分,结论不敏感。
  • 恢复系数 ee 与下落高度:只影响第 ①② 问的 vdv_d 与理想高度,不改变第 ③ 问"调平决定鲁棒性"的定性结论。
  • 扰动分布形态:若由高斯改为有界均匀,极端长尾消失,无调平均值略升,但调平仍显著占优。

六、模型优缺点与改进

优点:仅用 N,k,σ,θcN,k,\sigma,\theta_c 四个参数就复现了"人数、调平、扰动"三个维度的系统行为,计算极轻、可解释强;阈值效应与拐点 k≈0.5k\approx0.5 给出明确训练指标。

缺点:随机游走假设每拍扰动独立,未刻画队员间的协方差(真实团队可能存在共同节奏偏差);调平用比例增益近似,未给出 k(t)k(t) 的最优控制解。

改进:引入队员力量/时序的联合相关矩阵,模拟"系统性抢拍"而非纯随机;用动态规划或 LQR 求时变最优增益 k∗(t)k^*(t)。

七、结论

第 ③ 问的答案是明确的:第 ① 问的理想同步策略在现实中必须调整。蒙特卡洛量化表明,无调平平均仅 39.239.2 次,而"人数≥8 + 自适应调平 k≈0.5k\approx0.5 + 杜绝抢跑(控 σ<0.015\sigma<0.015)"三位一体策略可把连续颠球次数提升至上限 20002000 次、成功率 100%100\%。人数与调平存在联合增益,且调平是鲁棒性的决定因素。

值得强调的是,本结论与第 ② 问的刚体模型在物理上自洽:第 ② 问证明"发力不匀→非零合力矩→倾斜",第 ③ 问则证明"倾斜可用调平增益 kk 抵消"。两条线索合起来给出完整的工程闭环——先用量化模型定位风险源(抢跑、力度偏差),再用随机模型找到最优对策(k≈0.5k\approx0.5 的实时纠偏),最终把"靠手感"的民间技巧升级为"可测量、可复现、可移交"的科学训练方案。这也正是数学建模之于体育协作的价值所在。

参考文献

[1] 2019 高教社杯全国大学生数学建模竞赛 B 题"同心协力".
[2] 龙源期刊网. 同心鼓问题的转动定理分析.
[3] 电子科技大学. 同心鼓协作策略建模报告.


附录:核心 Python 实现

# tools/gen_2019b.py(节选)—— 鲁棒策略蒙特卡洛唯一真源
import random, math

def mc(N=8, sigma=0.012, k=0.5, trials=400, seed=2019, theta_c=0.07, cap=2000):
    """逐拍随机游走 + 调平控制;返回 (均值, 次数序列)。"""
    rnd = random.Random(seed); counts = []
    for _ in range(trials):
        theta = 0.0; c = 0
        se = sigma / math.sqrt(N / 8.0)          # 人数越多有效扰动越小
        for _ in range(cap):
            theta = (1 - k) * theta + rnd.gauss(0.0, se)
            c += 1
            if abs(theta) > theta_c:             # 越界即球落
                break
        counts.append(c)
    return sum(counts) / len(counts), counts

# 无调平 vs 调平(8 人, σ=0.012)
m0, _ = mc(k=0.0); mk, _ = mc(k=0.5)
print(round(m0, 1), round(mk, 1))        # 39.2, 2000.0

# 人数扫描(无调平, σ=0.010)
print([(N, round(mc(N=N, sigma=0.010, k=0.0, trials=200)[0], 1)) for N in (4,6,8,10,12)])
# -> [(4,28.3),(6,41.6),(8,58.1),(10,69.8),(12,85.7)]

# 调平增益扫描(8 人, σ=0.012;与图4一致,使用 seed=7)
print([(k, round(mc(N=8, sigma=0.012, k=k, trials=200, seed=7)[0], 1)) for k in (0,0.2,0.4,0.6,0.8)])
# -> [(0,44.2),(0.2,1503.9),(0.4,1994.3),(0.6,2000.0),(0.8,2000.0)]

# 扰动扫描(8 人, k=0.5)
print([(s, round(mc(N=8, sigma=s, k=0.5, trials=200)[0], 1)) for s in (0.006,0.010,0.015,0.022,0.030)])
# -> [(0.006,2000.0),(0.010,2000.0),(0.015,1913.2),(0.022,187.5),(0.030,28.4)]