先说结论:如果2026年美赛MCM问题B真往“space elevator + lunar base”这个方向走,千万别被“太空电梯”四个字唬住。它本质上是轨道力学、材料强度、物资调度三件事的组合,题目看起来科幻,实际能用的工具反而不复杂。这类题的通用套路是把大系统拆成“几何构型—受力平衡—工程可行性—运营调度—敏感性分析”五层,每一层都有明确模型和输出,最后拼成一篇能说服评委的论文。这篇分享就把我对这道题的完整拆解、建模思路、可运行的代码骨架、论文写法一次性写清楚,适合第一次参加MCM、碰到偏工程题的队伍参考。
我先提醒一句:美赛的Problem B通常是“离散+建模+写方案”的混合体,很少要求你真正设计一根能用的缆绳。评委更在意你能不能把一个看似科幻的问题转化成可量化、可推导、可验证的数学模型,并且给出清晰的工程判断。下面我按实际备战顺序展开。
1. 题目拆解与破题思路:从“建基地”到“牵一根线”
1.1 太空电梯到底算不算硬科幻?
在很多同学印象里,“太空电梯”是《三体》或者科幻电影里才有的东西,会下意识觉得没法建模。但换个说法你可能就熟悉了:地月之间有一根只受拉力的柔性连接体,一端固定在月面,另一端挂在动平衡点附近,货物的来往由攀爬器沿缆绳运动完成。这不就是一根超长的“塔吊钢索”加一部“垂直列车”吗?
月球基地为什么适合用太空电梯?因为月球没有大气层、自转周期恰好等于它的公转周期(潮汐锁定)、表面重力只有地球的六分之一,而且它的引力场相对干净,附近还有天然的平衡点可以用来“挂住”缆绳。你可以把它理解成:地球电梯最大的困难是缆绳必须自己扛住几十吨/km的重量,而月球电梯所在的重力井很浅,材料要求和能耗比地球版本低好几个数量级。所以这道题如果出现在竞赛里,本质不是在“造科幻”,而是在“做可行性论证”。
我破题时的第一反应是:先问三个问题。第一,月球基地放在哪,缆绳另一端接到哪?第二,缆绳有多长、多粗、用啥材料,能不能拉得住自己的重量?第三,建设基地需要多少吨物资,用电梯一吨一吨往上爬,多少天能送完?这三个问题正好对应轨道力学、材料力学、运筹优化,也就是后期主力模型的来源。
1.2 从赛题拆出可交付的5层答案
一道工程类建模题最怕的是“从头到尾只做了一个宏观概念”。拿这道题来说,如果只写“计划用碳纳米管建造月球电梯,然后输送物资建基地”,那基本等于没建模型。我会把它拆成五层,每一步都强制要求输出一个量化结果,再进入下一层。
第一层是几何与轨道层:需要先算出缆绳挂在哪个位置最合理。用圆形限制性三体问题求解地月L1点位置,得到缆绳的长度范围。第二层是静力与材料层:以缆绳微元受力平衡建立张力方程,计算不同材料、不同截面设计下缆绳最大张力和安全系数。第三层是建造方案层:基地由指挥舱、生命保障、电力、采矿、加工等模块组成,需要确定“先运什么、后运什么”。第四层是运营调度层:把运力看成一条单轨运输线,采用线性规划或整数规划优化攀爬器的班次与载荷配比。第五层是综合分析层:做参数敏感性分析和风险分析,回答“如果缆绳材料打折、攀爬速度降低、需求用量变化,方案还成不成立”。
这样拆完,模型之间的依赖关系非常清楚:没有L1点就没有长度,没有长度就算不出张力,没有张力就选不了材料,选不了材料就不知道运力上限,不知道运力上限就没法排调度。整篇论文的逻辑线也自然出来了,后面每个H2基本对应一层。其实这也是竞赛论文最稳妥的推进方式:一个输入接着一个输出,不要东一榔头西一棒子。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心物理模型:太空电梯“立得住”的关键动力
2.1 为什么要把缆绳末端放在L1点,而不是更远的地方
地月系统里存在五个平动点,其中最常被讨论的是L1。L1位于地球和月球连线上,靠近月球一侧,约在距月心5.8万公里的地方。你可能会问:为什么非得选它?因为在一个旋转参考系里,处于该点的物体受到的地球引力、月球引力与旋转惯性力恰好平衡,宏观上可以“悬浮”,不需要消耗推进剂。缆绳的自由端放在这样的位置,受力条件最干净。
可别小看这个选择,它是整根缆绳建模的边界条件。如果末端不在动平衡点,就需要额外的推进系统或者配重质量持续调整姿态,那样问题就复杂得多。用L1点实际上是经典的“末端绑在动平衡点上”思路,就好比你和朋友在旋转木马上各拉绳子一端,只要两端运动状态匹配,绳子就能稳定绷住。月球由于潮汐锁定,表面某固定点和L1点的相对几何关系基本不变,这就给了太空电梯一个天然的“固定锚”。
具体数值上,如果用无量纲化的圆形限制性三体问题求解,地月质量比约为0.01215,地月L1在地质中心坐标系里的x坐标约为0.8369。乘以平均地月距离384400公里后,可以得到月球中心到L1点约为5.8万公里,这个距离就是缆绳的参考长度。实际设计还要考虑月球半径1737公里,所以缆绳从月表到L1净长约5.6万公里。这个长度看着吓人,但和地球静止轨道位于约35786公里相比,放大了不到两倍;放在月球弱引力环境里,工程压力远小于地球太空电梯。
2.2 缆绳受力的基础方程:一个微元就推导完
缆绳建模不能凭感觉说“它受力很大”或“还能承受”。最常用也最简单的一维模型是:把缆绳划分成无数微元段,每段长为dr,只考虑沿缆绳轴向的张力变化。对于位于距月心r处的微元,它受到的作用主要包括月球引力、地球潮汐引力、以及旋转坐标系引起的惯性离心力。
可以定义沿缆绳指向端点的等效加速度:
g_eff(r)= -G M_M / r^2 + G M_E / (D - r)^2 + ω^2 r
其中D是地月平均距离,ω是地月系统公转角速度。这个式子的意思是:月心引力把缆绳往月面拉,地球引力和旋转离心力把缆绳往外部拉。张力的变化率就由等效加速度和缆绳线密度决定,写成微分形式就是:
dT/dr = -ρ A(r) g_eff(r)
如果缆绳采用等截面积A和等密度ρ,那么从末端(T=0)往月面积分,就能求出月面锚点需要承受的张力。这个方程只要会数值积分就能解,用上限2000个网格点,30秒内跑完,非常适合作论文里的“基准模型”。
但有几个坑必须提前说。缆绳是柔性体,只能受拉不能受压。计算g_eff(r)时如果出现某些区段等效加速度为负,积分得到“负张力”,那就说明该区段缆绳会松弛,一维拉力模型不再成立。处理办法不是硬写“模型有误差”,而是回到结构设计层面:可以通过加配重球、多段缆绳、主动张紧器,或者把自由端从L1略微向外移到L1外侧某个半径,保证整根绳子始终处于受拉状态。这是论文里一道很好的“自圆其说”题,写到这步往往能体现建模者对工程真实约束的理解。
2.3 材料判断:为什么碳纳米管总是“理论最优答案”
结构强度问题归根结底是材料问题。太空电梯缆绳要承受的主要不是载荷,而是自身重量产生的重力梯度。工程上常用“断裂长度” 这个概念来衡量材料: 一根材料垂直悬挂,刚好能被自身重量拉断时的长度,就是断裂长度,公式为 σ_allow / (ρ g)。在地球表面,普通钢材的断裂长度只有十几公里; 凯夫拉能到两三百公里; 碳纳米管理论可达到数千公里,这也是为什么大多数太空电梯设计都把它作为候选材料。
但在建模比赛里,不能只抛结论说“选碳纳米管”。要做三件事:第一,列表对比多种材料的抗拉强度、密度、断裂长度,并且换算到月球表面重力下,因为月球g只有1.62 m/s²,材料能力相当于被“放大”了约6倍。第二,需要计算实际所需的安全系数,通常取不低于3,因为缆绳还要承受攀爬器动载荷、微陨石撞击、温差循环。第三,给碳纳米管留个真实折扣,因为工程实际中批量制造的碳纳米管束性能远低于实验室单管值,可以做敏感性分析说明即使强度打五折方案仍可行。
这类型的选择题在竞赛里非常加分:别人只写“用碳纳米管”,你写“给强度打八折后还满足3倍安全系数”,一下就从科普变成了工程决策。材料选型的结论也会自然影响后续缆绳质量估计。缆绳如果总质量很大,会影响地面端建设难度;质量小则容易部署。
2.4 把“殖民地”落成可量化的功能模块
“在月球建立殖民地”赛题语言非常宏大,如果直接建模会很痛苦。实际操作中我会先建一张“基地功能拆解表”:生命保障、发电储能、月壤采集、矿物加工、居住舱、通信导航、科学研究、维修仓库八大类,每类再换算成吨位和优先级。比如生命保障模块优先级肯定最高,没有它后续建设无从谈起;矿物加工设备虽然重,但可以原地生产缆绳锚固材料,所以要尽早送。
对初始建设期,可以假设物资总量约在300到500吨之间。理由很简单:先期无人基地不需要送人上去过日子,而是送可远程操控的设备,用来熔炼月壤、铺路、连接锚点、架设光伏板。真正有人常驻阶段可以放到二期,需要的居住舱、再生生命保障、食物、水等再单独算一笔。分两期建模有两个好处:第一,无人建设期逻辑简单、数据好估;第二,有人常驻期能体现系统思维,而且二期需求量会差一个量级,凸显一期“基建先行”的必要性。
这个拆解过程其实不是纯数学,但它决定了后面调度优化的需求和约束条件。不然调度模型里物资种类、优先级、吨位全靠编,评审会质疑你的数据来源。我会在论文里明确写:“物资清单参考公开的月球科研前哨模块设计草案,结合NASA/ESA公开报告中单人或单模块的质量估算,取合理范围。”这样数据来源有据可查,模型才有说服力。
3. 完整建模与核心代码:手把手把流程跑通
3.1 用二分法求地月L1点位置
代码第一步不是搭缆绳,而是先把L1点算出来。我习惯于修改CR3BP模型的无量纲平衡方程,直接用二分法求解。代码需要定义月球相对地球的质量比mu,然后在地球与月球之间的区间搜索根。这里有点编程细节需要注意:不要把坐标写成以地球为原点的公里数,否则后面公式里分母上的距离立方很容易溢出。无量纲化能把所有数字变成0到1左右,数值稳定性高很多。
python复制import numpy as np
# 地月质量比
mu = 0.012153 # 月球质量/(地球+月球)
# CR3BP旋转系中Lgrange点平衡方程,x为无量纲坐标
def f_lagrange(x):
r_earth = abs(x + mu) # 到地球的无量纲距离
r_moon = abs(x - 1.0 + mu) # 到月球的无量纲距离
return x - (1 - mu) * (x + mu) / r_earth**3 - mu * (x - 1.0 + mu) / r_moon**3
# L1点位于地球与月球之间,搜根区间设为两者坐标之间
left, right = -mu + 1e-10, 1.0 - mu - 1e-10
for _ in range(80):
mid = (left + right) / 2
if f_lagrange(left) * f_lagrange(mid) <= 0:
right = mid
else:
left = mid
x_L1 = (left + right) / 2
print("L1 dimensionless coordinate:", x_L1)
# 换算到公里
D_em = 384400.0 # 地月平均距离,km
x_moon = 1.0 - mu # 月球中心的x坐标
r_L1_from_moon_center = (x_moon - x_L1) * D_em
print("distance from Moon center to L1: %.0f km" % r_L1_from_moon_center)
print("cable length approx: %.0f km" % (r_L1_from_moon_center - 1737.0))
跑出来的结果大约是x_L1=0.8369,离月球中心约5.7万至5.8万公里。如果你的二分代码输出0.836左右,那基本没问题。如果跑出来的数字偏到0.5以下或者0.99以上,大概率是函数写错,优先检查第二项的坐标差符号。这个步骤必须准确,因为后续所有长度、质量、张力估计都是在这根“尺子”上量出来的。
3.2 缆绳张力、材料安全系数与质量估算的数值实现
拿到缆绳长度后,接着求张力。我会在代码里建立从月表到L1点的径向网格,逐段计算g_eff,并做梯形积分。为了不让代码一上来就卡在复杂的变截面优化上,先用等截面圆柱缆绳跑通流程。缆绳截面积先给一个假设值,比如1平方厘米,密度取碳纳米管束的1300 kg/m³。积分结果可以用来反推应力,后面再做变截面优化。
下面这段代码是可运行骨架,放到Jupyter里就能出数值。真实论文里需要再加单位换算,建议全程用国际单位。
python复制G = 6.674e-11
M_moon = 7.342e22
M_earth = 5.972e24
D_em_m = 3.844e8 # 地月平均距离,m
omega = 2 * np.pi / (27.3 * 86400) # 月球公转/自转平均角速度
R_moon = 1.737e6 # 月球半径,m
r_L1_m = r_L1_from_moon_center * 1000.0 # 由上一段换算,m
# 定义有效等效加速度,正方向为离开月心指向L1
def g_eff(r):
return -G * M_moon / r**2 \
+ G * M_earth / (D_em_m - r)**2 \
+ omega**2 * r
# 径向网格
N = 2000
r = np.linspace(R_moon, r_L1_m, N)
g = g_eff(r)
rho_c = 1300.0 # 碳纳米管束密度,kg/m3
A = 1e-4 # 暂用截面积 0.0001 m^2 = 1 cm^2
# 从自由端向月面累加张力,若g>0说明该段有向外的净趋势,缆绳拉紧
dr = r[1] - r[0]
T = np.zeros(N)
for i in range(N - 2, -1, -1):
T[i] = T[i + 1] + rho_c * A * max(g[i], 0.0) * dr
T_anchor = T[0]
stress = T_anchor / A
print("anchor tension: %.3e N" % T_anchor)
print("anchor stress: %.3e Pa" % stress)
这段代码体现了一个非常重要的工程注意点:我只累加g>0的贡献。因为缆绳是柔性体,g<0代表该微元没有“向外拉扯”的趋势,不需要缆绳额外承受压力。跑完后你会发现,即使截面积只有1平方厘米,用碳纳米管束的密度算出来,锚点应力也远低于碳纳米管束的理论强度。结论是:仅从静力角度看,月球电梯材料可行性比预想要乐观。
但请注意,竞赛评分不是只看“算出来没事”,而是看你有没有讨论模型局限。这版代码用的是等截面、忽略挠曲、忽略攀爬器动载,真实设计显然不是这么简单。论文里可以在灵敏度分析板块中补一个“变截面优化”:让截面积越往上越细,或者越接近锚点越粗,以减小总质量。变截面方程的推导也很常规,本质上就是每层材料和缆绳必须承载下方重量的自然结果,改进后能显著降低总质量,可以作为拓展方向。
3.3 物资调度的整数线性规划骨架
物理模型确认“电梯拉得住”以后,下一步解决“如何用电梯建基地”。我自己很容易在这个环节犯一个错:想建一个包含时间变量的复杂仿真。但竞赛时间有限,更现实的做法是建一个按建设周期划分的线性规划,把需求物资分优先级,约束电梯运力和时间窗口。如果连线性规划都还没用过,后面的复杂模型更不要急着上。
下面用Python的PuLP库实现一个简化版本。假设建设周期为360天,电梯单次最大载重为10吨,单次往返用时12天,总班次约30次;五种物资各有需求吨数和优先级,模型负责在满足运力上限的前提下,尽量把高优先级物资送齐。
python复制from pulp import LpProblem, LpMinimize, LpVariable, LpStatus, lpSum, value
demand = {
"life_support": 30, # 生命保障模块,吨
"power_system": 60, # 光伏和储能
"solar_panel": 45, # 额外太阳电池阵
"regolith_drill": 70, # 月壤钻探/采矿设备
"cable_anchor_kit": 90, # 锚点建设耗材
}
priority = {
"life_support": 5,
"power_system": 4,
"solar_panel": 3,
"regolith_drill": 2,
"cable_anchor_kit": 1,
}
trips = 30
capacity = 10.0
prob = LpProblem("lunar_base_supply", LpMinimize)
x = {(i, j): LpVariable(f"x_{i}_{j}", lowBound=0) for i in demand for j in range(trips)}
miss = {i: LpVariable(f"miss_{i}", lowBound=0, upBound=1) for i in demand}
# 目标:最小化加权未满足比例
prob += lpSum(priority[i] * miss[i] for i in demand)
# 每类物资累计运输量 + 未满足量 >= 需求量
for i in demand:
prob += lpSum(x[i, j] for j in range(trips)) + miss[i] * demand[i] >= demand[i]
# 每趟电梯载重约束
for j in range(trips):
prob += lpSum(x[i, j] for i in demand) <= capacity
# 每类物资总运输量不超过需求
for i in demand:
prob += lpSum(x[i, j] for j in range(trips)) <= demand[i]
prob.solve()
print("status:", LpStatus[prob.status])
for i in demand:
print(i, "transported", value(lpSum(x[i, j] for j in range(trips))), "tons")
这个模型虽然简单,但输出能直接回答决策层问题:在给定电梯班次下,哪个模块的缺口最严重?如果需要调整,最有效的杠杆是增加班次还是提高单趟载重?把所有参数打印出来,再画一张柱状图,论文的“运营方案”部分就基本成型了。后面有时间,还可以把它扩展为多阶段模型:一期工程到第180天先满足生命保障和电力,二期再送采矿设备。
3.4 竞赛论文需要哪些可视化图表
建模比赛里,图表就是模型思路的说明书。我通常会在代码里提前把绘图函数写好,方便反复调参数。第一张图建议画地月L1点示意,用无量纲坐标把地球、月球、L1位置标出来,旁边标注缆绳长度约5.6万公里。第二张图画缆绳沿线的g_eff曲线,x轴是从月表到L1点的距离,这能直观说明缆绳哪个位置受拉趋势最强。第三张图是张力沿缆绳分布曲线,用来支撑“锚点位置受力最大”的结论。第四张图是材料对比柱状图,画不同材料的断裂长度和应力安全系数。第五张图是物资调度结果堆叠柱状图,展示每个具体模块在若干批次中的累计运输量。
画图推荐matplotlib。有一个容易被忽略的坑是中文显示,MCM论文是英文,但如果画中文草稿给自己看,需要提前设置中文字体,否则图上全是方块,会干扰检查。建议early阶段就用英文标签画图,后期做论文时正好无缝嵌入。坐标轴单位必须统一,x轴长度如果写m,图里会出现“5e7”这种不直观的数字,可以换算成“万公里”显示出来。图注要写成完整句子,例如“图3:不同缆绳半径下锚点张力随材料密度的变化”,而不是只写“张力图”,这些细节最容易被评委注意到。
4. 论文怎么组织才能让评委“少费劲”
4.1 一页纸摘要:不能是目录复述
很多队伍到交稿前才意识到,摘要页才是决定奖项天花板的因素。美赛的评审时间有限,摘要经常是第一关也是最后一关。不要把摘要写成“本文首先建立了L1点模型,然后建立了缆绳张力模型,最后优化了物资调度”这种流水账,而是要让评委读完第一段就知道你解决了什么问题、用了什么模型、得到什么关键数字。
我更愿意把摘要写成一个“问题—方法—结果—管理建议”四段式。第一段用三句话说清任务背景和要回答的决策问题。第二段交代你选了哪些关键模型:用CR3BP求L1点,用微元张力方程评估缆绳材料,用LP模型做物资调度。第三段给出核心数字结论:缆绳长度约5.6万公里,锚点最大张力约多少牛,最优方案下高优先级物资可在多少天内全部运达。第四段写结论稳健性:针对最关键参数做敏感性分析后,方案在材料强度下降30%时仍满足安全系数要求。最后再用两句话给你写给题设中“殖民地管理层”的建议,比如“建议将缆绳末端锚定在L1点,选用碳纳米管束并优先建设光伏与生命保障模块”。
摘要里出现的数字全部要在正文能找到,不能摘要写一个数,正文里另一个数。否则会让评委对可信度产生怀疑。另外,摘要页不要放公式堆砌,会有一种“为了展示建模而写”的观感;公式和推导留给正文。
4.2 正文模型章节的常见误区
正文最忌讳的是把所有假设堆在开头,后面建模时没有任何呼应。比如你假设“缆绳质量均匀”,后面又讨论变截面,等于自己打自己。我在写论文时会把假设分成两类:基础假设和模型改进假设。基础假设诸如“月球公转为圆轨道”、“缆绳视为连续弹性体”、“攀爬器对缆绳的扰动忽略不计”,在基准模型中使用;而模型改进章节单独列出“取消等截面假设,允许截面积按应力递减”,这样逻辑就不会乱。
每建立完一个模型,一定要做“量纲检验”。MCM是数学建模比赛,和纯工程报告不同,量化结果要能落到“决策建议”上。比如缆绳长度只要算一次就行,但锚点张力会随截面和材料变化,最后要综合成一张“选型表”,写明直径、材料、安全系数、最大应力。让读者一眼看清“为什么选这个方案”,而不是看一个孤立的计算结果。这样一来,建模、求解、结论三者的闭环就做好了。
4.3 别忘了写给决策层的Memo部分
近年来MCM Problem B经常要求提交一页“给非技术决策层的备忘录”,这不是论文主体,但非常影响观感。备忘录写得越像真实工作邮件越好,不堆公式,重点是用自然语言说清楚“我们建议怎么做、为什么可行、大概多少预算/时间”。打个比方:论文正文是给工程师的技术文档,备忘录是给项目负责人的简报。二者用词完全不同。
Memo里我会写五件事。第一,说明目标:在月球建立前哨基地,用太空电梯作为主要货运通道。第二,推荐方案:缆绳连接月表站点与地月L1点,材料选用碳纳米管束,缆绳总长约5.6万公里。第三,可行性结论:静力分析表明锚点张力处于材料安全范围内,翻倍安全系数后依然可接受。第四,建设节奏:先送生命保障和光伏,后送采矿和锚点耗材,总建设周期约多少天。第五,风险提示:材料批量生产性能可能存在不确定性,建议进一步开展小型月面锚点验证试验。每段三到五句话足够,别写成第二篇摘要。
5. 常见问题与排坑实录:这些坑我都替你踩过
5.1 代码数值爆炸,往往是单位问题而不是模型问题
我在跑CR3BP和张力代码时遇到的所有“灵异结果”,最后核对下来十有八九是单位不统一。比如把地月距离用公里代入,但引力常数G是标准国际单位,最后得到的加速度单位完全对不上,数字大的离谱。解决办法是开头就定义一个全局参数表,全部换算成米、千克、秒,之后所有建模只引用这些变量。半途临时换算最容易出错,尤其是竞赛时间紧张的状态下。
另一个很容易忽略的是“角度制与弧度制”。月球公转周期如果写27.3天,角速度是2π/(27.386400),别误写成360/(27.386400)。用角度制算离心力会完全错乱。建议所有计算都用弧度制,输出结果时再按需转换。
