15 KiB
Moon Colony Logistics(地月运输建模与对比)
本目录包含针对 MCM 2026 Problem B(见 prob/en_B.md)的一组可运行脚本:用简化的轨道力学 + 火箭方程估算把 1 亿吨(100 million metric tons)物资送到月球轨道/基地的时间线与能量消耗,并对比:
- 纯火箭方案(10 个既有发射场,每站每日 1 发)
- 纯太空电梯方案(3 个电梯港口持续转运)
- 混合方案(电梯优先,剩余由火箭补齐,且随着工期变长更多任务转移到低纬发射场以降低纬度惩罚)
本项目的“能量”口径:
- 火箭:用推进剂化学能近似 (E \approx m_\text{fuel}\cdot e_s)(
e_s为燃料比能,默认 LH2/LOX 约 15.5 MJ/kg)。- 太空电梯:用“提升能 + 顶端火箭段能量”的总比能量近似(默认 157.2 MJ/kg,即 157.2 GJ/吨)。
这是一种用于对比量级与趋势的工程近似,不等同于严格的热力学效率或完整任务能量收支。
目录结构与脚本索引
核心脚本
specific_energy_comparison.py
地面发射 vs 太空电梯:比能量、燃料比、纬度影响(包含指定发射场列表)。rocket_launch_scenario.py
纯火箭方案(10 发射场 * 每日 1 发)排布与能量-工期曲线;并做发射频率敏感性分析。combined_scenario.py
混合方案(电梯优先 + 火箭补齐),输出组合方案能量-工期曲线,并生成 100–300 年区间三方案同图对比。pareto_optimization.py(新增)
**Pareto 前沿 + “膝点(knee point)”分析:在组合方案可行区间(约 101–186 年)**内,寻找“时间–能量”双目标权衡的拐点,并输出推荐决策点与图表/CSV。launch_capacity_analysis.py
(可选)对历史火箭年发射量做 Logistic / Gompertz / Richards 拟合与预测,生成launch_capacity_*.png与launch_capacity_results.csv。
主要输出图表(均在本目录)
| 图表文件 | 含义 |
|---|---|
specific_energy_comparison.png |
地面 vs 电梯的比能量/燃料比对比,含 ΔV 敏感性 |
latitude_effects.png |
月球任务场景下:纬度→自转速度损失→燃料/能量增加趋势(并标注指定发射场) |
rocket_launch_timeline.png |
纯火箭方案:完成年限 vs 总能量(工期变长→更多低纬→能量略降) |
rocket_comprehensive.png |
纯火箭方案综合图:能量趋势 + 分配饼图等 |
launch_frequency_analysis.png |
发射频率敏感性:每站每日发射数提升→完工年限显著下降 |
combined_scenario_analysis.png |
混合方案:总能量/电梯能量/火箭能量随工期变化 + 电梯占比 + 需要启用的火箭站点数 |
scenario_comparison.png |
elevator-only / rocket-only / combined 的完工时间与能量柱状对比 |
three_scenarios_comparison.png |
100–300 年区间:纯火箭、纯电梯、混合方案的“年份-能量”折线同图对比 |
pareto_combined_range.png |
组合方案(101–186 年)Pareto 前沿 + 膝点检测(多方法对比、边际收益、构成变化) |
combined_decision.png |
组合方案(101–186 年)推荐拐点的“决策图”(更适合直接放报告) |
launch_capacity_analysis.png launch_capacity_physical.png launch_capacity_predictions.png |
(可选)火箭发射能力上限/趋势拟合与预测 |
数据文件(如存在)
launch_capacity_results.csvrocket_launch_counts.csvlaunch_sites.csvrocket launch counts.txt
图表总览(本目录所有 PNG)
为便于写报告/插图,这里把当前目录下的所有 PNG 统一列出(按主题分组)。如果你只想看关键结论,优先看 three_scenarios_comparison.png。
2) 纯火箭方案(排布与敏感性)
rocket_launch_timeline.png
rocket_comprehensive.png
launch_distribution_min.png
launch_distribution_mid.png
launch_frequency_analysis.png
3) 混合方案与三方案对比(核心结论图)
combined_scenario_analysis.png
scenario_comparison.png
three_scenarios_comparison.png(100–300 年折线同图对比)
4)(可选)火箭发射能力上限/趋势拟合
launch_capacity_analysis.png
launch_capacity_physical.png
launch_capacity_predictions.png
5) Pareto 前沿与“膝点”(组合方案 101–186 年)
说明:
pareto_optimization.py与其输出(图片/CSV)均在本目录中。
pareto_combined_range.png
combined_decision.png
6) 其它历史遗留图
本目录还包含 earth_moon_transfer_analysis.png(早期“地月转移:载荷–燃料/能量关系”图)。当前目录下未发现对应的 earth_moon_transfer.py 源码文件;如果你需要我把该脚本补回并与现有口径统一,我可以再加一个文件。
earth_moon_transfer_analysis.png
依赖安装
建议使用 Python 3.10+。
pip install numpy matplotlib pandas
如需运行 launch_capacity_analysis.py(含曲线拟合),还需要:
pip install scipy
数学模型(简化版)概览
1)火箭方程:燃料-载荷的线性比例(在固定 ΔV 与 Isp 下)
火箭方程: [ \Delta V = v_e \ln\left(\frac{m_0}{m_f}\right),\quad v_e = I_{sp} g_0 ]
当任务 ΔV、发动机 (I_{sp}) 固定时,质量比 (R=\exp(\Delta V/v_e)) 为常数。若进一步采用结构系数近似: [ m_s=\alpha m_\text{fuel} ] 则可解得燃料与载荷满足: [ \boxed{m_\text{fuel}=k,m_p}\quad(\text{其中 }k\text{ 为常数,取决于 }\Delta V, I_{sp}, \alpha) ]
这解释了为什么在同一任务与发动机参数下,“载荷–燃料”是近似线性关系。
2)能量口径(用于对比)
-
火箭推进剂能量(近似): [ E_\text{rocket}\approx m_\text{fuel},e_s ] 其中 (e_s) 为燃料比能(默认 15.5 MJ/kg)。
-
太空电梯总比能量(本项目用常数近似): [ E_\text{elevator}\approx \epsilon_\text{elevator},m_p ] 默认 (\epsilon_\text{elevator}=157.2\text{ MJ/kg})(可在脚本中改)。
3)纬度导致的自转“损失”近似
地球表面自转线速度: [ v(\varphi)=\omega R_E\cos(\varphi) ] 相对赤道的速度差近似为 ΔV 惩罚: [ \Delta v_\text{loss}=v(0^\circ)-v(\varphi) ]
在月球任务场景下(允许进入与发射场纬度相匹配的倾角、避免昂贵的纯平面变轨),纬度主要通过该项影响火箭能耗。
如何运行(会生成图片)
1)比能量与纬度效应
python specific_energy_comparison.py
输出(示例)会包括不同发射场的 ΔV 损失、燃料比、能量(MJ/kg)等,并生成:
specific_energy_comparison.pnglatitude_effects.png
2)纯火箭方案:工期-能量与排布
python rocket_launch_scenario.py
会生成:
rocket_launch_timeline.pngrocket_comprehensive.pnglaunch_distribution_min.png、launch_distribution_mid.pnglaunch_frequency_analysis.png
部分运行输出(示例):
Total payload: 100 million metric tons
Payload per launch: 125 metric tons
Total launches needed: 800,000
Number of launch sites: 10
Minimum completion time: 219.2 years
Energy reduction (Extended vs Minimum time): 2.4%
解释:
- 由于“每站每日 1 发、载荷 125 吨”的硬约束,纯火箭最短也要约 219 年完成。
- 工期拉长后,可把更多发射集中到低纬站点,能量仅小幅下降(约几个百分点)——纬度惩罚相对火箭整体能耗并不占主导。
3)混合方案 + 100–300 年三方案同图对比
python combined_scenario.py
会生成:
combined_scenario_analysis.pngscenario_comparison.pngthree_scenarios_comparison.png(100–300 年折线同图对比)
部分运行输出(示例):
Elevator-only completion: 186.2 years
Minimum completion (all systems): 100.7 years
1. Minimum Time (~101 years): Total energy: 31537 PJ
4. Elevator Only (186 years): Total energy: 15720 PJ
Rocket Only (219 years): Total energy: 50609 PJ
解释:
- 混合方案把最短工期从电梯单独的 ~186 年压缩到 ~101 年(靠火箭补齐),但能量高于纯电梯。
- 当工期 ≥ 186 年时,电梯即可独立完成,混合方案会自动退化为纯电梯曲线(能耗趋于同一水平)。
- 纯火箭能耗显著更高(本模型下约为纯电梯的 3× 量级)。
4)Pareto 前沿与“膝点”(只在组合方案 101–186 年区间内找拐点)
这个分析回答“在可行区间内,选择多少年最划算”的决策问题:既不想太慢、也不想能耗太高。
我们把目标写成双目标:最小化完工时间 (T) 与 最小化总能量 (E),并在 (T\in[101, 186]) 年上寻找“边际收益开始明显递减”的拐点(knee point)。
在本目录运行:
python pareto_optimization.py
会生成:
pareto_combined_range.pngcombined_decision.pngpareto_combined_range.csv(组合区间的 Pareto 数据)pareto_knee_analysis.png(完整 100–300 年范围的膝点分析)decision_recommendation.png(完整范围的决策建议图)pareto_front_data.csv(完整范围数据)
组合区间(101–186 年)推荐膝点(示例输出):
| 推荐方法 | 年份 | 总能量 (PJ) | 电梯占比 | 火箭占比 |
|---|---|---|---|---|
| 最大距离法(最稳健) | 139 | 24361 | 74.6% | 25.4% |
解读要点:
- 101→139 年:多给一些时间,能量下降很快(大量火箭任务转移到电梯/低纬火箭站)。
- 139→186 年:继续拉长工期仍能省能量,但边际节省明显变小;186 年达到纯电梯可独立完成的极限点。
发射场(10 个)与纬度效应(月球任务场景)
本项目按纬度从低到高优先分配火箭发射(“低纬优先”贪心策略),站点列表与纬度如下(与题目一致):
| 发射场 | 近似纬度 | 备注 |
|---|---|---|
| French Guiana(Kourou) | 5.2° | 低纬优势明显 |
| Satish Dhawan(India) | 13.7° | 低纬 |
| Texas(Boca Chica) | 26.0° | 美国 |
| Florida(Cape Canaveral) | 28.5° | 美国 |
| California(Vandenberg) | 34.7° | 美国 |
| Virginia(Wallops) | 37.8° | 美国 |
| Taiyuan(China) | 38.8° | 中国 |
| Mahia(New Zealand) | 39.3° | 新西兰(南半球,按 ( |
| Kazakhstan(Baikonur) | 45.6° | 哈萨克斯坦 |
| Alaska(Kodiak) | 57.4° | 高纬,惩罚最大 |
对应曲线可在下图直观看到:
三方案“年份–能量”折线对比(100–300 年)
下图是你要求的 100–300 年区间三条折线同图(不可完成的年份用空缺表示):
读图要点:
- 100–186 年:只有混合方案可完成(电梯能力不足、火箭也不够快)。
- 186–219 年:电梯可完成;火箭仍无法完成;混合与电梯曲线重合(优先用电梯)。
- ≥219 年:三种方案都可完成,但纯火箭能耗最高。
为了写报告时更快引用,下面给出几组关键年份的能量读数(与脚本运行输出一致,单位 PJ):
| 年份 | 混合方案 | 纯电梯 | 纯火箭 |
|---|---|---|---|
| 110 | 29852 | N/A | N/A |
| 150 | 22257 | N/A | N/A |
| 186 | 15720 | 15720 | N/A |
| 220 | 15720 | 15720 | 50605 |
| 300 | 15720 | 15720 | 50187 |
可调参数(最常改的地方)
火箭相关(rocket_launch_scenario.py / combined_scenario.py)
TOTAL_PAYLOAD:总物资(吨)PAYLOAD_PER_LAUNCH:单次发射载荷(吨,默认 125)ISP、ALPHA、NUM_STAGES:推进系统与结构参数SPECIFIC_FUEL_ENERGY:燃料比能(J/kg)DELTA_V_BASE:赤道基准 ΔV(m/s)LAUNCH_SITES:发射场纬度列表(可自行替换/增减)
太空电梯相关(combined_scenario.py)
NUM_ELEVATORS:电梯数量(默认 3)ELEVATOR_CAPACITY_PER_YEAR:每个电梯年运力(吨/年)题面是 179,000 t/year;若你要用 17,900 t/year,直接改此值即可。
ELEVATOR_SPECIFIC_ENERGY:电梯总比能量(J/吨),默认 157.2 GJ/吨
重要假设与局限(写报告时建议明确)
- 脉冲变轨/固定 ΔV:将复杂轨道机动用固定 ΔV 预算概括。
- 恒定比冲/结构系数:忽略发动机工况变化、分级差异、载具设计差异。
- “能量”是工程近似口径:火箭取推进剂化学能;电梯取提升+顶端段合并比能量。
- 完美运行:未考虑失败率、维护停机、窗口约束、天气/法规等运营因素。
- 排布算法为贪心:火箭发射按“低纬优先”分配以降低纬度惩罚;未做更复杂的成本/容量优化(可扩展为线性规划/整数规划)。
一句话结论(便于写 Summary)
- 纯火箭在“10 站 * 每日 1 发 * 125 吨/发”的约束下,最短约 219 年,且能耗约 5×10⁴ PJ 量级。
- 纯电梯能耗最低(约 1.57×10⁴ PJ),但最短约 186 年。
- 混合方案能把工期压到约 101 年,能耗介于两者之间,并随着工期增加逐步趋近纯电梯能耗。
- 在混合方案可行区间(101–186 年)内,用 Pareto/膝点法可给出一个“最划算”的折中点:本模型下约 139 年(约 2.44×10⁴ PJ,电梯约 75%、火箭约 25%)。















