Files
2026_mcm_b/p1/README.md
2026-01-31 13:30:38 +08:00

408 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`**
混合方案(电梯优先 + 火箭补齐),输出组合方案能量-工期曲线,并生成 **100300 年**区间三方案同图对比。
- **`pareto_optimization.py`**(新增)
**Pareto 前沿 + “膝点knee point”**分析:在**组合方案可行区间(约 101186 年)**内,寻找“时间–能量”双目标权衡的拐点,并输出推荐决策点与图表/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`** | **100300 年区间**:纯火箭、纯电梯、混合方案的“年份-能量”折线同图对比 |
| **`pareto_combined_range.png`** | **组合方案101186 年Pareto 前沿 + 膝点检测**(多方法对比、边际收益、构成变化) |
| **`combined_decision.png`** | 组合方案101186 年)推荐拐点的“决策图”(更适合直接放报告) |
| `launch_capacity_analysis.png` `launch_capacity_physical.png` `launch_capacity_predictions.png` | (可选)火箭发射能力上限/趋势拟合与预测 |
#### 数据文件(如存在)
- `launch_capacity_results.csv`
- `rocket_launch_counts.csv`
- `launch_sites.csv`
- `rocket launch counts.txt`
---
### 图表总览(本目录所有 PNG
为便于写报告/插图,这里把当前目录下的所有 PNG 统一列出(按主题分组)。如果你只想看关键结论,优先看 **`three_scenarios_comparison.png`**。
<details>
<summary><strong>1) 比能量与纬度效应(地面 vs 电梯、发射场纬度)</strong></summary>
#### `specific_energy_comparison.png`
![specific_energy_comparison](specific_energy_comparison.png)
#### `latitude_effects.png`
![latitude_effects](latitude_effects.png)
</details>
<details>
<summary><strong>2) 纯火箭方案(排布与敏感性)</strong></summary>
#### `rocket_launch_timeline.png`
![rocket_launch_timeline](rocket_launch_timeline.png)
#### `rocket_comprehensive.png`
![rocket_comprehensive](rocket_comprehensive.png)
#### `launch_distribution_min.png`
![launch_distribution_min](launch_distribution_min.png)
#### `launch_distribution_mid.png`
![launch_distribution_mid](launch_distribution_mid.png)
#### `launch_frequency_analysis.png`
![launch_frequency_analysis](launch_frequency_analysis.png)
</details>
<details>
<summary><strong>3) 混合方案与三方案对比(核心结论图)</strong></summary>
#### `combined_scenario_analysis.png`
![combined_scenario_analysis](combined_scenario_analysis.png)
#### `scenario_comparison.png`
![scenario_comparison](scenario_comparison.png)
#### `three_scenarios_comparison.png`100300 年折线同图对比)
![three_scenarios_comparison](three_scenarios_comparison.png)
</details>
<details>
<summary><strong>4)(可选)火箭发射能力上限/趋势拟合</strong></summary>
#### `launch_capacity_analysis.png`
![launch_capacity_analysis](launch_capacity_analysis.png)
#### `launch_capacity_physical.png`
![launch_capacity_physical](launch_capacity_physical.png)
#### `launch_capacity_predictions.png`
![launch_capacity_predictions](launch_capacity_predictions.png)
</details>
<details>
<summary><strong>5) Pareto 前沿与“膝点”(组合方案 101186 年)</strong></summary>
> 说明:`pareto_optimization.py` 与其输出(图片/CSV均在本目录中。
#### `pareto_combined_range.png`
![pareto_combined_range](pareto_combined_range.png)
#### `combined_decision.png`
![combined_decision](combined_decision.png)
</details>
<details>
<summary><strong>6) 其它历史遗留图</strong></summary>
本目录还包含 `earth_moon_transfer_analysis.png`(早期“地月转移:载荷–燃料/能量关系”图)。当前目录下未发现对应的 `earth_moon_transfer.py` 源码文件;如果你需要我把该脚本补回并与现有口径统一,我可以再加一个文件。
#### `earth_moon_transfer_analysis.png`
![earth_moon_transfer_analysis](earth_moon_transfer_analysis.png)
</details>
### 依赖安装
建议使用 Python 3.10+。
```bash
pip install numpy matplotlib pandas
```
如需运行 `launch_capacity_analysis.py`(含曲线拟合),还需要:
```bash
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比能量与纬度效应
```bash
python specific_energy_comparison.py
```
输出(示例)会包括不同发射场的 ΔV 损失、燃料比、能量MJ/kg并生成
- `specific_energy_comparison.png`
- `latitude_effects.png`
#### 2纯火箭方案工期-能量与排布
```bash
python rocket_launch_scenario.py
```
会生成:
- `rocket_launch_timeline.png`
- `rocket_comprehensive.png`
- `launch_distribution_min.png``launch_distribution_mid.png`
- `launch_frequency_analysis.png`
**部分运行输出(示例)**
```text
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混合方案 + 100300 年三方案同图对比
```bash
python combined_scenario.py
```
会生成:
- `combined_scenario_analysis.png`
- `scenario_comparison.png`
- **`three_scenarios_comparison.png`100300 年折线同图对比)**
**部分运行输出(示例)**
```text
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×** 量级)。
#### 4Pareto 前沿与“膝点”(只在组合方案 101186 年区间内找拐点)
> 这个分析回答“在可行区间内,选择多少年最划算”的决策问题:既不想太慢、也不想能耗太高。
> 我们把目标写成双目标:**最小化完工时间 \(T\)** 与 **最小化总能量 \(E\)**,并在 \(T\in[101, 186]\) 年上寻找“边际收益开始明显递减”的拐点knee point
在本目录运行:
```bash
python pareto_optimization.py
```
会生成:
- `pareto_combined_range.png`
- `combined_decision.png`
- `pareto_combined_range.csv`(组合区间的 Pareto 数据)
- `pareto_knee_analysis.png`(完整 100300 年范围的膝点分析)
- `decision_recommendation.png`(完整范围的决策建议图)
- `pareto_front_data.csv`(完整范围数据)
**组合区间101186 年)推荐膝点(示例输出)**
| 推荐方法 | 年份 | 总能量 (PJ) | 电梯占比 | 火箭占比 |
|---|---:|---:|---:|---:|
| 最大距离法(最稳健) | **139** | **24361** | **74.6%** | **25.4%** |
解读要点:
- **101→139 年**:多给一些时间,能量下降很快(大量火箭任务转移到电梯/低纬火箭站)。
- **139→186 年**:继续拉长工期仍能省能量,但**边际节省明显变小**186 年达到纯电梯可独立完成的极限点。
---
### 发射场10 个)与纬度效应(月球任务场景)
本项目按纬度从低到高优先分配火箭发射(“低纬优先”贪心策略),站点列表与纬度如下(与题目一致):
| 发射场 | 近似纬度 | 备注 |
|---|---:|---|
| French GuianaKourou | 5.2° | 低纬优势明显 |
| Satish DhawanIndia | 13.7° | 低纬 |
| TexasBoca Chica | 26.0° | 美国 |
| FloridaCape Canaveral | 28.5° | 美国 |
| CaliforniaVandenberg | 34.7° | 美国 |
| VirginiaWallops | 37.8° | 美国 |
| TaiyuanChina | 38.8° | 中国 |
| MahiaNew Zealand | 39.3° | 新西兰(南半球,按 \(|\varphi|\) 处理) |
| KazakhstanBaikonur | 45.6° | 哈萨克斯坦 |
| AlaskaKodiak | 57.4° | 高纬,惩罚最大 |
对应曲线可在下图直观看到:
![latitude_effects](latitude_effects.png)
---
### 三方案“年份能量”折线对比100300 年)
下图是你要求的 **100300 年**区间三条折线同图(不可完成的年份用空缺表示):
![three_scenarios_comparison](three_scenarios_comparison.png)
读图要点:
- **100186 年**:只有混合方案可完成(电梯能力不足、火箭也不够快)。
- **186219 年**:电梯可完成;火箭仍无法完成;混合与电梯曲线重合(优先用电梯)。
- **≥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`:赤道基准 ΔVm/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 年**,能耗介于两者之间,并随着工期增加逐步趋近纯电梯能耗。
- **在混合方案可行区间101186 年)内**,用 Pareto/膝点法可给出一个“最划算”的折中点:本模型下约 **139 年**(约 **2.44×10⁴ PJ**,电梯约 **75%**、火箭约 **25%**)。