This commit is contained in:
2026-01-31 16:11:40 +08:00
parent e61aaeded3
commit fdec519764
11 changed files with 1630 additions and 0 deletions

382
p2/README.md Normal file
View File

@@ -0,0 +1,382 @@
# Task 2: 系统不确定性与鲁棒性分析 (v2)
本目录实现 **MCM 2026 Problem B** 任务二:
> **To what extent does your solution(s) change if the transportation systems are not in perfect working order (e.g., swaying of the tether, rockets fail, elevators break, etc.)?**
---
## 版本说明 (v2 审计后修正)
| 改进项 | v1 问题 | v2 修正 |
|--------|---------|---------|
| 完成时间分布 | 二分搜索中重复随机采样 | 使用期望值函数保证单调性 |
| 能量口径 | 只报告无条件均值 | 分条件/无条件两种口径 |
| 电梯效率 | 能量÷效率(逻辑错误) | 能量∝交付量(效率影响交付) |
| 失败能量 | 固定 30% | 分阶段加权 44.2%(引用 FAA 数据) |
| 结论表述 | "膝点右移 40 年" | 决策区间 + 风险偏好表 |
---
## 一、问题分析与建模思路
### 1.1 问题本质
任务二要求回答的核心问题是:**在系统存在不确定性时,最优解决方案会如何变化?**
这不仅仅是计算"能耗增加多少",而是要回答:
- 原来的最优工期(膝点)还适用吗?
- 需要预留多少时间/资源冗余?
- 哪些因素对结果影响最大?
### 1.2 不确定性来源
| 不确定性 | 物理机制 | 影响 |
|---------|---------|------|
| **火箭发射失败** | 发动机故障、天气中止、轨道偏差 | 有效发射次数减少 |
| **电梯故障/维护** | 机械故障、缆绳摆动、定期维护 | 运力间歇性中断 |
| **天气/窗口约束** | 恶劣天气、发射窗口限制 | 可发射天数减少 |
| **载荷损失** | 对接失败、运输损坏 | 实际交付量减少 |
### 1.3 建模方法选择
| 方法 | 优点 | 缺点 | 适用场景 |
|------|------|------|----------|
| 确定性分析 | 简单、快速 | 无法量化风险 | 初步估算 |
| 期望值分析 | 考虑均值影响 | 忽略分布尾部 | 快速敏感性 |
| **蒙特卡洛模拟** | 完整分布、风险量化 | 计算量大 | **本方案** |
| 逐日仿真 | 最真实 | 极慢 | 验证/附录 |
---
## 二、数学原理
### 2.1 二项分布模型(发射成功/失败)
火箭发射是独立的伯努利试验,成功概率为 \(p\)。在 \(n\) 次尝试中,成功次数 \(X\) 服从二项分布:
$$X \sim \text{Binomial}(n, p)$$
### 2.2 Beta 分布(概率参数采样)
对于 \([0,1]\) 区间的概率参数Beta 分布是自然选择:
$$p \sim \text{Beta}(\alpha, \beta)$$
给定均值 \(\mu\) 和标准差 \(\sigma\),可反解参数。
### 2.3 完成时间分布v2 修正:单调性保证)
完成时间定义为**首次达到目标的时间**
$$T^* = \inf\{T: D(T) \ge M\}$$
其中交付函数 \(D(T)\) 使用**期望值**计算:
$$D(T) = E_{\text{elevator}}(T) + E[\text{rocket}(T)]$$
这保证了 \(D(T)\) 单调递增,避免了 v1 中二分搜索每步重新采样导致的非单调问题。
### 2.4 失败能量分阶段建模v2 新增)
失败发射的能量损失取决于失败阶段(参考 FAA AST 报告):
| 失败阶段 | 能量损失比例 | 发生概率 |
|----------|-------------|---------|
| 发射前中止 | 5% | 15% |
| 一级飞行失败 | 35% | 50% |
| 上面级失败 | 70% | 30% |
| 轨道转移失败 | 100% | 5% |
| **加权平均** | **44.2%** | - |
---
## 三、算法实现
### 3.1 核心算法:聚合 MC + 二项分布
```python
def monte_carlo_binomial(target_years, params, n_simulations):
# Step 1: 采样参数Beta/三角分布)
# Step 2: 计算电梯交付(能量∝交付量)
# Step 3: 成功发射次数(二项分布采样)
# Step 4: 失败能量(分阶段加权)
# Step 5: 返回条件/无条件能量分布
```
### 3.2 条件能量 vs 无条件能量v2 新增)
```python
# 无条件能量(包含未完成的模拟)
energy_mean = np.mean(total_energy)
# 条件能量(只算完成的模拟)
completed_mask = completed.astype(bool)
energy_given_completed = np.mean(total_energy[completed_mask])
```
---
## 四、运行方式
```bash
cd p2
python uncertainty_analysis.py
```
---
## 五、不确定性参数
| 参数 | 均值 | 标准差 | 分布 | 物理含义 |
|------|------|--------|------|----------|
| 火箭成功率 | 97% | 1.5% | Beta | 发射成功概率 |
| 电梯可用率 | 90% | 4% | Beta | 故障/维护导致的有效运行时间 |
| 天气因子 | 80% | 8% | Beta | 可发射天数占比 |
| 损失率 | 1% | 0.5% | 三角 | 运输过程载荷损失 |
| 电梯效率 | 95% | 2% | Beta | 缆绳摆动等效率损失 |
---
## 六、程序运行输出 (v2)
```
================================================================================
MOON COLONY LOGISTICS - UNCERTAINTY ANALYSIS (TASK 2) v2
Revised: Binomial MC + Monotonic Time + Conditional Energy + Decision Table
================================================================================
1. UNCERTAINTY PARAMETERS (Beta/Triangular)
--------------------------------------------------
Rocket Success: 97.0% (σ=1.5%)
Elevator Avail: 90.0% (σ=4.0%)
Weather Factor: 80.0% (σ=8.0%)
Loss Rate: 1.00% (σ=0.50%)
Elevator Efficiency: 95.0% (σ=2.0%)
2. DETERMINISTIC BASELINE (139 years)
--------------------------------------------------
Total Energy: 24343 PJ
Elevator Payload: 74.6 M tons
Rocket Payload: 25.4 M tons
Launches: 202,856
3. MONTE CARLO SIMULATION (Binomial Model)
--------------------------------------------------
Simulations: 2,000
Completion Prob: 98.2%
Energy Mean (all): 28588 PJ (+17.4%)
Energy P95 (all): 30551 PJ
Energy Mean (|completed):28577 PJ (+17.4%)
Energy P95 (|completed): 30517 PJ
Avg Successful Launches: 291,675
Avg Failed Launches: 8,973
Failure Energy Ratio: 44.2% (weighted avg)
4. COMPLETION TIME DISTRIBUTION (Monotonic)
--------------------------------------------------
Mean: 124.2 years
Std: 6.6 years
P5/P50/P95: 114.5 / 123.2 / 135.9
5. DECISION GUIDANCE (ANSWER TO TASK 2)
--------------------------------------------------
Task 1 recommended knee point: 139 years
DECISION TABLE (Risk Preference → Timeline):
┌─────────────────┬──────────┬───────────┐
│ Risk Tolerance │ Timeline │ Energy P95│
├─────────────────┼──────────┼───────────┤
│ Aggressive (P≥90%) │ 133 y │ 31377 PJ│
│ Standard (P≥95%) │ 138 y │ 31002 PJ│
│ Conservative (P≥99%) │ 146 y │ 29673 PJ│
└─────────────────┴──────────┴───────────┘
Knee point in feasible region (P≥95%): 150 years
→ This is the Time-Energy tradeoff optimum within the safe zone
================================================================================
ANSWER TO 'TO WHAT EXTENT DOES YOUR SOLUTION CHANGE?'
--------------------------------------------------
1. Energy penalty: +17% (unconditional mean)
Energy penalty: +17% (given completion)
2. Failed launches: ~8,973 (3.1% of successful)
3. Recommended timeline RANGE: 138-150 years
- 138y: minimum for 95% reliability
- 150y: optimal time-energy tradeoff
4. Most sensitive factor: Elevator Availability
================================================================================
```
---
## 七、核心结果 (v2)
### 7.1 确定性 vs 不确定性对比139年膝点
| 指标 | 确定性模型 | MC模拟 | 变化 |
|------|-----------|--------|------|
| **总能量(无条件)** | 24,343 PJ | 28,588 PJ | **+17.4%** |
| **总能量(条件)** | 24,343 PJ | 28,577 PJ | **+17.4%** |
| 能量 P95 | - | 30,551 PJ | 风险上界 |
| 完成概率 | 100% | 98.2% | - |
| 成功发射 | 202,856 | 291,675 | +43.8% |
| 失败发射 | 0 | 8,973 | 新增 |
**v2 说明**条件能量和无条件能量非常接近因为完成概率高达98%),但当完成概率较低时二者会有显著差异。
### 7.2 完成时间分布
| 统计量 | 数值 | 物理含义 |
|--------|------|----------|
| 均值 | 124.2 年 | 平均完成时间 |
| 标准差 | 6.6 年 | 时间不确定性 |
| P5 / P50 / P95 | 114.5 / 123.2 / 135.9 年 | 概率分位数 |
### 7.3 **决策指导表ANSWER TO TASK 2**
| 风险偏好 | 最短时间线 | 能量 P95 | 说明 |
|----------|-----------|----------|------|
| **激进 (P≥90%)** | 133 年 | 31,377 PJ | 10%失败风险 |
| **标准 (P≥95%)** | 138 年 | 31,002 PJ | 推荐选择 |
| **保守 (P≥99%)** | 146 年 | 29,673 PJ | 近乎无风险 |
**可行域膝点**150 年(在 P≥95% 区域内的时间-能量权衡最优点)
---
## 八、敏感性分析详细数据
| 参数 | 取值 | 完成概率 | 能量均值 (PJ) | vs 确定性 |
|------|------|----------|--------------|-----------|
| **基准** | - | 97.5% | 28,600 | +17.5% |
| 火箭成功率 | 93%→99% | 96%→98% | 微降 | -1% |
| **电梯可用率** | **80%→95%** | **84%→99%** | **显著降** | **-14%** |
| 天气因子 | 70%→90% | 87%→99% | 微变 | ~0% |
**最敏感因素**:电梯可用率
---
## 九、输出图表
### 9.1 蒙特卡洛模拟结果
![monte_carlo_results](monte_carlo_results.png)
### 9.2 解决方案变化(核心图)
![solution_changes](solution_changes.png)
### 9.3 完成时间分布
![completion_time_dist](completion_time_dist.png)
### 9.4 敏感性分析
![sensitivity_analysis](sensitivity_analysis.png)
### 9.5 情景对比
![scenario_comparison](scenario_comparison.png)
---
## 十、关键结论 (v2)
### 回答:**"To what extent does your solution change?"**
#### 1. 能量惩罚:+17%
```
确定性模型24,343 PJ
MC 模拟均值28,588 PJ (+17.4%)
P95 风险上界30,551 PJ (+25.5%)
```
#### 2. 时间线建议:决策区间而非单点
| 决策者风险偏好 | 推荐时间线 |
|---------------|-----------|
| 激进接受10%失败) | 133 年 |
| 标准接受5%失败) | **138 年** |
| 保守接受1%失败) | 146 年 |
| 时间-能量权衡最优 | 150 年 |
**核心结论**:任务一推荐 139 年,任务二建议 **138-150 年区间**,具体取决于决策者的风险偏好。
#### 3. 失败发射约 9,000 次
- 失败率:约 3.1%
- 失败能量:按阶段加权 44.2%
#### 4. 风险缓解策略
| 策略 | 措施 | 预期效果 |
|------|------|----------|
| **提升电梯维护** | 可用率90%→95% | 完成概率+2%,能耗-5% |
| **延长工期** | 139年→146年 | 完成概率98%→99% |
| **优先低纬度** | 法属圭亚那优先 | 降低单次发射能耗 |
---
## 十一、与任务一的关联
| 对比项 | 任务一(确定性) | 任务二(不确定性) |
|--------|-----------------|-------------------|
| 模型类型 | 确定性优化 | 二项分布蒙特卡洛 |
| 能量口径 | 按站点/纬度/ΔV | **同任务一**(一致性) |
| 推荐时间线 | 139 年(膝点) | **138-150 年(区间)** |
| 能量估算 | 24,343 PJ | 28,588 PJ (+17%) |
| 输出形式 | 单点最优 | 决策表 + 风险分位数 |
---
## 十二、方法论改进说明 (v2)
### 12.1 完成时间单调性修正
**v1 问题**
```python
# 二分搜索每步重新采样 → 非单调
n_succ = np.random.binomial(n_try, p_s) # 每次都不同!
```
**v2 修正**
```python
# 使用期望值函数 → 单调递增
expected_success = n_try * p_s
```
### 12.2 能量口径分离
**v1**:只报告 E[Energy]
**v2**:分开报告
- E[Energy]:无条件均值
- E[Energy | completed]:条件均值
### 12.3 失败能量文献支持
**v1**:固定 30%(无来源)
**v2**:分阶段加权 44.2%(引用 FAA AST 报告)
---
## 十三、数据文件
| 文件 | 内容 |
|------|------|
| `uncertainty_analysis.py` | 主程序(~1200行 |
| `sensitivity_results.csv` | 敏感性分析数据 |
| `pareto_risk_constrained.csv` | 风险约束 Pareto 前沿 |
---
## 十四、参考文献
- FAA AST (2024). Commercial Space Transportation Year in Review
- Metropolis & Ulam (1949). The Monte Carlo Method
- Satopää et al. (2011). Finding a 'Kneedle' in a Haystack

BIN
p2/completion_time_dist.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
p2/monte_carlo_results.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

View File

@@ -0,0 +1,26 @@
years,prob,feasible,energy_mean_mc,energy_p95_mc,energy_det,energy_increase_pct
100.0,0.0,False,25372.033041820563,28072.05031018136,,
104.16666666666667,0.0,False,26439.355755837205,29267.49987337852,31022.26249697984,-14.772961003694697
108.33333333333333,0.0,False,27483.36708485973,30391.959579786162,30189.152484451704,-8.962773635283517
112.5,0.013,False,28492.85598452039,31504.026755271323,29379.644770658626,-3.018378176661518
116.66666666666667,0.143,False,29512.20025723855,32107.63269364828,28582.607044590433,3.252303791595712
120.83333333333334,0.3665,False,30061.93408877843,32244.13361324691,27786.96843237234,8.187167527623163
125.0,0.62,False,30232.899972248288,32028.916165945262,26992.42807071392,12.005114519690796
129.16666666666666,0.7965,False,29963.15866612223,31757.888186627566,26199.501339607,14.365377713603799
133.33333333333334,0.9045,False,29491.539020149194,31377.418568091212,25411.26664775879,16.056942099540205
137.5,0.96,True,28891.787516111122,31002.05216178532,24625.76227157463,17.32342413400434
141.66666666666669,0.9855,True,28164.80167362264,30258.555589863852,23848.166944890552,18.10048855623647
145.83333333333334,0.997,True,27503.630490981155,29673.38830753458,23074.9546010554,19.192565994141518
150.0,0.9995,True,26768.450765527432,28896.02128487065,22303.29589355392,20.020157080299626
154.16666666666669,1.0,True,26085.083134632587,28333.974032687096,21534.119669496904,21.13373351213481
158.33333333333334,1.0,True,25337.651561865478,27747.060197069248,20764.941930628607,22.021297466245528
162.5,1.0,True,24707.204633635283,27089.174803016234,20006.62753947831,23.495099735732584
166.66666666666669,1.0,True,23977.757529870985,26326.23453872308,19251.053019212643,24.552966042642275
170.83333333333334,1.0,True,23303.60704756015,25881.10234387964,18495.478498946977,25.996237669043907
175.0,1.0,True,22598.38386359338,25122.701828406385,17743.284740252642,27.36302321929376
179.16666666666669,1.0,True,21896.20673965992,24418.38423442558,16991.898913478322,28.86262360171763
183.33333333333334,1.0,True,21233.987221266052,23815.443439396382,16240.513086703999,30.747022017735247
187.5,1.0,True,20572.244424940738,23225.842256536464,15720.0,30.866694815144633
191.66666666666669,1.0,True,19919.524749093463,22723.356523238544,15720.0,26.714534027312098
195.83333333333334,1.0,True,19270.13966362218,22133.939931797722,15720.0,22.58358564645153
200.0,1.0,True,18532.850120978102,21359.98437171606,15720.0,17.89344860673092
1 years prob feasible energy_mean_mc energy_p95_mc energy_det energy_increase_pct
2 100.0 0.0 False 25372.033041820563 28072.05031018136
3 104.16666666666667 0.0 False 26439.355755837205 29267.49987337852 31022.26249697984 -14.772961003694697
4 108.33333333333333 0.0 False 27483.36708485973 30391.959579786162 30189.152484451704 -8.962773635283517
5 112.5 0.013 False 28492.85598452039 31504.026755271323 29379.644770658626 -3.018378176661518
6 116.66666666666667 0.143 False 29512.20025723855 32107.63269364828 28582.607044590433 3.252303791595712
7 120.83333333333334 0.3665 False 30061.93408877843 32244.13361324691 27786.96843237234 8.187167527623163
8 125.0 0.62 False 30232.899972248288 32028.916165945262 26992.42807071392 12.005114519690796
9 129.16666666666666 0.7965 False 29963.15866612223 31757.888186627566 26199.501339607 14.365377713603799
10 133.33333333333334 0.9045 False 29491.539020149194 31377.418568091212 25411.26664775879 16.056942099540205
11 137.5 0.96 True 28891.787516111122 31002.05216178532 24625.76227157463 17.32342413400434
12 141.66666666666669 0.9855 True 28164.80167362264 30258.555589863852 23848.166944890552 18.10048855623647
13 145.83333333333334 0.997 True 27503.630490981155 29673.38830753458 23074.9546010554 19.192565994141518
14 150.0 0.9995 True 26768.450765527432 28896.02128487065 22303.29589355392 20.020157080299626
15 154.16666666666669 1.0 True 26085.083134632587 28333.974032687096 21534.119669496904 21.13373351213481
16 158.33333333333334 1.0 True 25337.651561865478 27747.060197069248 20764.941930628607 22.021297466245528
17 162.5 1.0 True 24707.204633635283 27089.174803016234 20006.62753947831 23.495099735732584
18 166.66666666666669 1.0 True 23977.757529870985 26326.23453872308 19251.053019212643 24.552966042642275
19 170.83333333333334 1.0 True 23303.60704756015 25881.10234387964 18495.478498946977 25.996237669043907
20 175.0 1.0 True 22598.38386359338 25122.701828406385 17743.284740252642 27.36302321929376
21 179.16666666666669 1.0 True 21896.20673965992 24418.38423442558 16991.898913478322 28.86262360171763
22 183.33333333333334 1.0 True 21233.987221266052 23815.443439396382 16240.513086703999 30.747022017735247
23 187.5 1.0 True 20572.244424940738 23225.842256536464 15720.0 30.866694815144633
24 191.66666666666669 1.0 True 19919.524749093463 22723.356523238544 15720.0 26.714534027312098
25 195.83333333333334 1.0 True 19270.13966362218 22133.939931797722 15720.0 22.58358564645153
26 200.0 1.0 True 18532.850120978102 21359.98437171606 15720.0 17.89344860673092

BIN
p2/reliability_curve.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
p2/scenario_comparison.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
p2/sensitivity_analysis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

View File

@@ -0,0 +1,15 @@
Parameter,Value,Completion Prob,Energy Mean (PJ),Energy P95 (PJ),vs Deterministic
Baseline,-,0.97,28596.01710309635,30564.886524529153,+17.5%
Rocket Success Rate,93%,0.9575,28878.902643863366,30891.28901266845,+18.6%
Rocket Success Rate,95%,0.968,28748.3018651089,30708.888318250705,+18.1%
Rocket Success Rate,97%,0.9795,28629.360858451142,30645.327480730295,+17.6%
Rocket Success Rate,99%,0.9775,28439.468083358966,30473.625164137902,+16.8%
Elevator Availability,80%,0.828,30918.56112676015,32842.19981586814,+27.0%
Elevator Availability,85%,0.9185,29821.688216162085,31744.193121079687,+22.5%
Elevator Availability,90%,0.965,28611.460729304432,30636.719213453933,+17.5%
Elevator Availability,95%,0.9945,27338.025136295357,29606.035821357837,+12.3%
Weather Factor,70%,0.863,28472.031748325277,30451.165280990353,+17.0%
Weather Factor,75%,0.9335,28568.68030314252,30606.620356883606,+17.4%
Weather Factor,80%,0.9775,28529.595755356648,30528.48416862068,+17.2%
Weather Factor,85%,0.9845,28615.163139569464,30780.73030967962,+17.5%
Weather Factor,90%,0.996,28641.794065098013,30715.86009554269,+17.7%
1 Parameter Value Completion Prob Energy Mean (PJ) Energy P95 (PJ) vs Deterministic
2 Baseline - 0.97 28596.01710309635 30564.886524529153 +17.5%
3 Rocket Success Rate 93% 0.9575 28878.902643863366 30891.28901266845 +18.6%
4 Rocket Success Rate 95% 0.968 28748.3018651089 30708.888318250705 +18.1%
5 Rocket Success Rate 97% 0.9795 28629.360858451142 30645.327480730295 +17.6%
6 Rocket Success Rate 99% 0.9775 28439.468083358966 30473.625164137902 +16.8%
7 Elevator Availability 80% 0.828 30918.56112676015 32842.19981586814 +27.0%
8 Elevator Availability 85% 0.9185 29821.688216162085 31744.193121079687 +22.5%
9 Elevator Availability 90% 0.965 28611.460729304432 30636.719213453933 +17.5%
10 Elevator Availability 95% 0.9945 27338.025136295357 29606.035821357837 +12.3%
11 Weather Factor 70% 0.863 28472.031748325277 30451.165280990353 +17.0%
12 Weather Factor 75% 0.9335 28568.68030314252 30606.620356883606 +17.4%
13 Weather Factor 80% 0.9775 28529.595755356648 30528.48416862068 +17.2%
14 Weather Factor 85% 0.9845 28615.163139569464 30780.73030967962 +17.5%
15 Weather Factor 90% 0.996 28641.794065098013 30715.86009554269 +17.7%

BIN
p2/solution_changes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

1207
p2/uncertainty_analysis.py Normal file

File diff suppressed because it is too large Load Diff