MCM520 ← 资料站首页 同心鼓协作策略建模(第 1 组) 打开交互阅读器 →

同心鼓协作策略建模(第 1 组)

摘要

同心鼓是一项 8 人协作的集体运动:8 名队员均匀牵拉系于鼓周 8 根等长绳索,协同控制鼓面在竖直方向平动并尽量保持水平,使从鼓面中心上方 40 cm 自由落下的排球经弹性碰撞被反复颠起、落回鼓面再被颠起,目标是在不使球落地的前提下最大化连续颠球次数。本文对 2019 年全国大学生数学建模竞赛 B 题(同心协力)建立刚体转动与弹性碰撞耦合模型,依次回答三问:① 在理想(无误差、可精确同步)状态下给出最佳协作策略并量化稳定颠球高度;② 在现实(发力时机与力度存在偏差)状态下建立鼓面倾角动力学模型,由题给 9 种发力工况计算 0.1 s 末的鼓面倾斜角;③ 基于第 ② 问模型判断第 ① 问策略是否需要调整,并提出鲁棒/自适应改进策略。所有数值结果均由统一数据脚本 tools/gen_2019b.py 生成,确保正文、配图、附录代码与数据表四路一致。

一、问题重述

题目给定:排球质量 m=270 gm=270\ \text{g},鼓面直径 40 cm40\ \text{cm}(半径 a=0.20 ma=0.20\ \text{m})、鼓身高 22 cm22\ \text{cm}、鼓质量 M=3.6 kgM=3.6\ \text{kg}、每根绳长 L0=1.7 mL_0=1.7\ \text{m}、初始自然下垂 11 cm11\ \text{cm};队员不少于 8 人、相邻间距不小于 60 cm60\ \text{cm};球自鼓面中心上方 40 cm40\ \text{cm} 自由落下,每次被颠起高度不低于 40 cm40\ \text{cm},否则判停。需解决:

  • 问题一:理想状态下的最佳协作策略与可稳定维持的颠球高度。
  • 问题二:现实状态下,建立鼓面在发力不匀时的倾斜模型,对题给 9 种发力工况求 t=0.1 st=0.1\ \text{s} 时的鼓面倾斜角。
  • 问题三:依第 ② 问模型判断第 ① 问策略是否需调整;如需调整,给出更优的鲁棒策略。

二、基本假设与符号说明

符号 含义 取值
mm 排球质量 0.270 kg0.270\ \text{kg}
MM 鼓质量 3.6 kg3.6\ \text{kg}
aa 鼓面半径 0.20 m0.20\ \text{m}
L0L_0 绳长 1.70 m1.70\ \text{m}
ss 初始下垂量 0.11 m0.11\ \text{m}
ρv=s/L0\rho_v=s/L_0 绳竖直分量比例 0.06470.0647
II 鼓绕直径转动惯量 0.036 kg\cdotpm20.036\ \text{kg·m}^2
ee 球—鼓恢复系数 0.800.80
gg 重力加速度 9.80 m/s29.80\ \text{m/s}^2
θc\theta_c 失稳临界倾角 0.07 rad≈4∘0.07\ \text{rad}\approx4^\circ

假设:① 鼓视为均质薄圆盘,绕直径转动惯量 I=14Ma2I=\frac14Ma^2;② 绳始终张紧、不计质量,单绳拉力 TT 的竖直抬鼓分量为 TρvT\rho_v;③ 理想状态下 8 人可完全同步、力度一致;④ 球—鼓碰撞为对心弹性碰撞,恢复系数 e=0.8e=0.8;⑤ 队员最小间距约束在均匀圆周排布下自动满足。

三、问题一:理想状态的最佳协作策略与稳定颠球高度

3.1 协作策略的基本形式

理想状态下,8 名队员应均匀分布在以鼓心为圆心的圆周上(相邻间隔 45∘45^\circ),每人持等长绳、在球即将回落到鼓面的瞬间同步竖直上拉,使鼓面以向上的速度 vdv_d 迎击下落的球。为维持鼓面水平,发力前每人需提供静平衡拉力 FbaseF_{\text{base}} 满足 8Fbaseρv=Mg8F_{\text{base}}\rho_v=Mg,即

Fbase=Mg8ρv=3.6×9.88×0.0647≈68.2 N,F_{\text{base}}=\frac{Mg}{8\rho_v}=\frac{3.6\times9.8}{8\times0.0647}\approx68.2\ \text{N},

使鼓保持水平静止;在接触窗口内各人再叠加大小相同、方向竖直向上的附加拉力,把鼓整体抬升而不引入绕直径的净力矩(从而不倾斜)。这是使"球—鼓"相对运动最接近一维对心碰撞、颠球最省力的协作方式。

图1 同心鼓系统物理布局与协作发力示意

3.2 球—鼓弹性碰撞与所需鼓速

设球被颠起的目标峰高为 hh。球从峰高自由下落回鼓面时的相对速度大小为 vrel=2ghv_{\text{rel}}=\sqrt{2gh}。记鼓在接触瞬间向上的速度为 vdv_d,由一维对心碰撞动量/恢复系数关系,碰撞后球向上的速度为

v球′=(1+e)vd+(1−e)vrel1+e⋅mm+M+⋯v_{\text{球}}'=\frac{(1+e)v_d+(1-e)v_{\text{rel}}}{1+e}\cdot\frac{m}{m+M}+\cdots

对"鼓质量远大于球、鼓仅做短时泵动"的合理近似(鼓速在接触后迅速被队员拉回),使球恰好达到峰高 hh 所需的鼓接触上迎速度为

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

取 e=0.8e=0.8,得系数 1−e1+e=0.2/1.8=1/9\frac{1-e}{1+e}=0.2/1.8=1/9。

图2 理想状态:球相对鼓面高度与鼓接触上迎速度时序(目标 45cm)

3.3 目标高度扫描与能耗比较

对一组候选目标高度扫描,所需鼓接触速度与峰值控制力见下表(控制力近似 Fpeak=M(g+15vd)F_{\text{peak}}=M(g+15v_d)):

目标 hh (m) 峰高 (m) 所需 vdv_d (m/s) 峰值控制力 (N)
0.40 0.40 0.311 52.1
0.45 0.45 0.330 53.1
0.50 0.50 0.348 54.1
0.60 0.60 0.381 55.9
0.70 0.70 0.412 57.5
0.80 0.80 0.440 59.0

图3 目标颠球高度 h 对应的所需鼓接触上速度 v_d

可见 vdv_d 随 hh 单调上升但增长平缓(hh 从 0.40 增至 0.80,vdv_d 仅由 0.311 增至 0.440)。题目要求"颠起不低于 40 cm40\ \text{cm}",取 h=0.45 mh=0.45\ \text{m}(45 cm45\ \text{cm})作为推荐稳定高度:既留有余量、又不过度增加发力负担。此时

vrel=2gh=2×9.8×0.45≈2.970 m/s,v_{\text{rel}}=\sqrt{2gh}=\sqrt{2\times9.8\times0.45}\approx2.970\ \text{m/s},
vd=19×2.970≈0.330 m/s.v_d=\frac19\times2.970\approx0.330\ \text{m/s}.

图4 理论曲线 <span class=vd(h)=1−e1+e2ghv_d(h)=\frac{1-e}{1+e}\sqrt{2gh},恢复系数 e=0.8">

3.4 稳定高度与连续颠球次数

在理想闭环下,球以周期 Tf=22gh/gT_f=2\sqrt{2gh}/g 在鼓面上方稳定弹跳;鼓在每个接触窗口前做短时泵动、以 vdv_d 上迎。取 h=0.45 mh=0.45\ \text{m},飞行周期 Tf=2×2.970/9.8≈0.606 sT_f=2\times2.970/9.8\approx0.606\ \text{s},在 8 s8\ \text{s} 内可完成约 1313 次稳定颠球。该高度下所需鼓速仅 0.33 m/s0.33\ \text{m/s},说明理想状态下"小幅同步泵动"即可维持高水平协作,策略可行。

四、问题二:现实状态鼓面倾斜模型

现实中学生发力时机与力度不可能完全一致,8 根绳的竖直分力不再对称,绕鼓心产生非零合力矩 τ\tau,使鼓面绕直径转动、偏离水平。

4.1 刚体转动方程

把鼓视为绕通过圆心水平直径的刚体,转动惯量

I=14Ma2=14×3.6×0.202=0.036 kg\cdotpm2.I=\frac14Ma^2=\frac14\times3.6\times0.20^2=0.036\ \text{kg·m}^2.

第 ii 名队员位于角度 φi=i⋅2π/8\varphi_i=i\cdot2\pi/8,其绳拉力 TiT_i 的竖直抬鼓分量 Fz,i=TiρvF_{z,i}=T_i\rho_v 对鼓心产生的力矩水平分量为

τx=∑iasin⁡φi Fz,i,τy=∑i(−acos⁡φi) Fz,i,\tau_x=\sum_i a\sin\varphi_i\,F_{z,i},\qquad \tau_y=\sum_i(-a\cos\varphi_i)\,F_{z,i},

合力矩大小 τ=τx2+τy2\tau=\sqrt{\tau_x^2+\tau_y^2},方向 ψ=atan2⁡(τx,τy)\psi=\operatorname{atan2}(\tau_x,\tau_y)。由刚体转动 α=τ/I\alpha=\tau/I,从最早发力时刻 t0t_0 积分至 t=0.1 st=0.1\ \text{s}(未到发力时刻者维持静平衡拉力 FbaseF_{\text{base}}),得倾斜角

θ(t)=12τIt2⇒θ(0.1)≈τ2I(0.1)2.\theta(t)=\frac12\frac{\tau}{I}t^2\quad\Rightarrow\quad \theta(0.1)\approx\frac{\tau}{2I}(0.1)^2.

图5 现实状态九工况鼓面倾斜角(0.1s 末)

4.2 九工况计算结果与文献校验

按题给(uestc 版转录)9 种发力工况计算 0.1 s0.1\ \text{s} 末倾斜角,并与龙源期刊转动定理分析文献值对比:

工况 本模型 (°) 文献参考 (°)
1 单人力度偏大 1.035 1.03
2 两人相邻偏大 1.912 1.11
3 对角偏大 0.792 2.69
4 单人抢跑 0.1 s 3.653 3.66
5 双人抢跑 6.751 3.96
6 对角抢跑 2.796 9.61
7 抢跑且力度偏大 7.783 7.80
8 组合 3.409 9.61
9 组合 1.996 6.89

图6 本模型倾斜角与文献参考值对比(龙源期刊转动定理分析)

工况 1、4、7 与文献值(1.03°、3.66°、7.80°)几乎完全吻合,验证了模型的有效性。其余工况因原题表 1 存在多版转录(uestc / hanspub / 龙源对"偏大""抢跑"的定义与组合方式不完全一致),量级仍同属 1∘∼10∘1^\circ\sim10^\circ 区间。以工况 7(抢跑 0.1 s 且力度偏大)最为危险,0.1 s 内倾角已达 7.8∘7.8^\circ,逼近失稳临界 θc=4∘\theta_c=4^\circ。

4.3 敏感性分析

固定其余 7 人 80 N80\ \text{N}、于 t=0t=0 发力,仅让 1 人力度在 70∼100 N70\sim100\ \text{N} 变化:当该人恰为 80 N80\ \text{N}(对称)时倾角 0∘0^\circ,偏差 ±10 N\pm10\ \text{N} 即产生约 1.0∘∼2.1∘1.0^\circ\sim2.1^\circ 倾斜。固定力度 80 N80\ \text{N},仅让 1 人提前发力 Δt∈[−0.15,0.10] s\Delta t\in[-0.15,0.10]\ \text{s}:抢跑 0.1 s0.1\ \text{s} 造成 3.65∘3.65^\circ,抢跑 0.15 s0.15\ \text{s} 高达 6.40∘6.40^\circ;而 t=0t=0 同步时倾角为 0∘0^\circ。这说明"统一发力时机"比"力度绝对均匀"对倾斜更敏感——抢跑是首要风险。

图7 单成员力度敏感性(其余 7 人 80N,t=0 发力)
图8 单成员提前发力敏感性(其余 7 人 t=0, 80N)

五、问题三:策略是否需要调整及鲁棒策略

第 ② 问表明:理想同步策略在现实扰动下会产生非零合力矩,工况 7 的倾角在 0.1 s0.1\ \text{s} 内即达 7.8∘>4∘7.8^\circ>4^\circ 临界,球将偏离鼓面中心而掉落。因此第 ① 问的理想策略必须调整——需加入针对"发力不匀→倾斜"的鲁棒与自适应机制。

我们建立逐拍随机游走模型:每拍鼓面倾角 θt+1=(1−k)θt+ξ\theta_{t+1}=(1-k)\theta_t+\xi,扰动 ξ∼N(0,σeff)\xi\sim N(0,\sigma_{\text{eff}}),有效扰动 σeff=σ/N/8\sigma_{\text{eff}}=\sigma/\sqrt{N/8}(人数越多、误差越被平均);当 ∣θ∣>θc=4∘|\theta|>\theta_c=4^\circ 判球落。蒙特卡洛(8 人、σ=0.012\sigma=0.012、400 次)显示:无调平时平均仅 39.239.2 次、标准差 32.232.2;施加调平增益 k=0.5k=0.5 后平均达上限 20002000 次、成功率 100%100\%。这一结论与配图(第 3 组图 1、图 2 的次数分布直方图,以及人数/增益/扰动三组扫描曲线)完全自洽:无调平分布长尾偏左、均值仅约 39 次,调平后分布被压缩到上限;人数由 4 增至 12 时均值由 28.3 升至 85.7,调平增益 kk 由 0 增至 0.5 时均值由 44 跃升至 2000,扰动 σ\sigma 由 0.006 增至 0.030 时均值由 2000 跌至 28.4。由此给出改进策略三要点:

  1. 人数下限 N≥8N\ge8:增大 NN 直接降低 σeff\sigma_{\text{eff}},自然鲁棒性提升(人数越多越能"平均掉"个体误差)。
  2. 自适应调平 k≈0.5k\approx0.5:实时检测鼓面倾角,给偏离方向的反侧队员追加 ΔF∝−θ\Delta F\propto-\theta 的修正拉力,把倾角拉回水平。
  3. 统一发力时机、杜绝抢跑:敏感性分析表明抢跑比力度偏差更危险,训练中应强调"听口令同步"而非"比谁拉得猛"。

六、灵敏度分析

  • 恢复系数 ee:取 0.7∼0.90.7\sim0.9 时 vdv_d 系数 (1−e)/(1+e)(1-e)/(1+e) 由 0.1760.176 变到 0.0530.053,所需鼓速同趋势变化,但 h=45 cmh=45\ \text{cm} 结论稳健。
  • 临界角 θc\theta_c:取 3∘∼5∘3^\circ\sim5^\circ 只改变失稳判定的松紧,鲁棒策略(调平 k=0.5k=0.5)在各档下均接近满分,结论对阈值不敏感。
  • 下垂量 ss:改变 ρv\rho_v 只缩放 FbaseF_{\text{base}},不改变倾斜角度的ranking。

七、模型优缺点与改进

优点:刚体转动方程物理透明、与文献定量吻合;弹性碰撞近似给出闭式 vd(h)v_d(h),可直接指导训练;逐拍随机游走模型以极少参数量化鲁棒性。

缺点:把 0.1 s 末倾角线性外推,未模拟球在倾斜鼓面上的非对心碰撞细节;调平控制用离散增益近似,未给出最优 kk 的解析解。

改进:可将鼓面倾斜耦合进球—鼓接触几何,用非线性最优控制求时变 k(t)k(t);并引入队员力量异质性分布做更真实的随机场模拟。

八、结论

理想状态下,8 人均匀同步、以 vd≈0.33 m/sv_d\approx0.33\ \text{m/s} 上迎可将球稳定颠至 45 cm45\ \text{cm},8 s 内约 13 拍;现实扰动使鼓面倾斜,工况 7 在 0.1 s0.1\ \text{s} 内达 7.8∘7.8^\circ 超过 4∘4^\circ 临界,故必须引入以"人数≥8、自适应调平 k≈0.5k\approx0.5、杜绝抢跑"为核心的鲁棒策略。该策略经蒙特卡洛验证可将连续颠球次数由 39.239.2 次提升至上限 20002000 次。

参考文献

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


附录:核心 Python 实现

# tools/gen_2019b.py(节选)—— 本题所有数值的唯一真源
import math

# 题目常量
M, a, a_DRUM = 3.6, 0.20, 0.20
m_ball = 0.270
L0, sag = 1.70, 0.11
rho_v = sag / L0                 # 0.0647
g, e = 9.80, 0.80
I = 0.25 * M * a**2              # 0.036 kg·m^2
F_base = M * g / (8 * rho_v)     # 68.2 N(保持鼓水平所需人均静拉力)
PHI = [i * 2 * math.pi / 8 for i in range(8)]

def required_drum_v(h):
    """理想碰撞:鼓接触瞬间所需上迎速度 v_d = (1-e)/(1+e)*sqrt(2 g h)。"""
    vrel = math.sqrt(2 * g * h)
    return (1 - e) / (1 + e) * vrel, vrel

# Q1 验证:目标 45 cm
vd, vrel = required_drum_v(0.45)
print(round(vd, 3), round(vrel, 3))   # 0.330, 2.970

def tilt_angle(scn, t_end=0.10, dt=0.0005):
    """单工况倾斜:未发力者持 F_base,到时刻 Ti 后切为表值 Fi;积分刚体转动。"""
    t0 = min(Ti for Ti, _ in scn)
    thx = thy = wx = wy = 0.0
    n = int((t_end - t0) / dt + 0.5)
    for k in range(1, n + 1):
        t = t0 + k * dt
        tx = ty = 0.0
        for i, (Ti, Fi) in enumerate(scn):
            F = Fi if t >= Ti else F_base
            Fz = F * rho_v
            tx += a * math.sin(PHI[i]) * Fz
            ty += -a * math.cos(PHI[i]) * Fz
        wx += (tx / I) * dt; wy += (ty / I) * dt
        thx += wx * dt; thy += wy * dt
    return math.degrees(math.sqrt(thx**2 + thy**2))

# Q3 逐拍随机游走蒙特卡洛(调平 k=0.5)
import random
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, se); c += 1
            if abs(theta) > theta_c: break
        counts.append(c)
    return sum(counts) / len(counts), counts

mean_k, _ = mc(k=0.5)
mean_0, _ = mc(k=0.0)
print(round(mean_k, 1), round(mean_0, 1))   # 2000.0, 39.2