# MCM 2026 Problem A - O-Prize Grade Figure Generation 完整的15张图生成系统,用于MCM 2026问题A的高质量论文配图。 ## 文件结构 ``` ZJ_v2/ ├── config.yaml # 配置文件(参数、场景定义) ├── plot_style.py # 统一绘图样式 ├── validation.py # 质量验证工具 ├── requirements.txt # Python依赖 ├── run_all_figures.py # 主执行脚本 ├── fig01_macro_logic.py # 图1: 总体流程图 ├── fig02_system_interaction.py # 图2: 系统交互图 ├── fig03_ocv_fitting.py # 图3: OCV拟合验证 ├── fig04_internal_resistance.py # 图4: 内阻3D曲面 ├── fig05_radio_tail.py # 图5: 网络尾流效应 ├── fig06_cpl_avalanche.py # 图6: CPL反馈环路 ├── fig07_baseline_validation.py # 图7: 基准动力学验证 ├── fig08_power_breakdown.py # 图8: 功率分解图 ├── fig09_scenario_comparison.py # 图9: 场景对比(含GPS影响) ├── fig10_tornado_sensitivity.py # 图10: 龙卷风灵敏度图 ├── fig11_heatmap_temp_signal.py # 图11: 温度-信号热力图 ├── fig12_monte_carlo.py # 图12: 蒙特卡洛路径 ├── fig13_survival_curve.py # 图13: 生存曲线 ├── fig14_lifecycle_degradation.py # 图14: 老化轨迹 ├── fig15_radar_user_guide.py # 图15: 雷达建议图 ├── figures/ # 输出目录(自动创建) │ ├── Fig01_*.pdf/png │ ├── Fig02_*.pdf/png │ └── ... └── artifacts/ # 验证报告 └── figure_build_report.json ``` ## 图表清单 ### 第一部分:模型架构(4张) 1. **Fig01** - 宏观逻辑流程图(3阶段) 2. **Fig02** - 系统边界与变量交互 3. **Fig05** - 网络尾流效应示意 4. **Fig06** - CPL反馈环路机制 ### 第二部分:物理建模(2张) 5. **Fig03** - OCV曲线拟合(R²≥0.99) 6. **Fig04** - 内阻R₀(T,z)三维曲面 ### 第三部分:基准结果(2张) 7. **Fig07** - 基准放电4联图(SOC/V/I/T) 8. **Fig08** - 功率成分堆叠面积图 ### 第四部分:场景分析(3张) 9. **Fig09** - 多场景对比(标注GPS影响) 10. **Fig10** - 龙卷风灵敏度排名 11. **Fig11** - 双参数热力图(温度×信号) ### 第五部分:不确定性(2张) 12. **Fig12** - 蒙特卡洛意大利面图(N=100) 13. **Fig13** - 生存/可靠性曲线 ### 第六部分:长期影响(2张) 14. **Fig14** - 全生命周期老化(SOH&TTE) 15. **Fig15** - 用户建议雷达图 ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` **注意**: Graphviz需要单独安装系统级可执行文件: - Windows: https://graphviz.org/download/ - 安装后将 `bin/` 目录添加到系统PATH ### 2. 生成所有图像 ```bash python run_all_figures.py ``` ### 3. 查看输出 - **图像**: `figures/` 目录(每张图有PDF和PNG两种格式) - **验证报告**: `artifacts/figure_build_report.json` ## 配置说明 所有参数在 `config.yaml` 中定义: ```yaml global: seed: 42 # 随机种子(确保可重复) dpi: 300 # PNG分辨率 battery_params: Q_full: 2.78 # 电池容量 (Ah) E0: 4.2 # OCV参数 R_ref: 0.1 # 参考内阻 (Ω) # ...更多参数 scenarios: baseline: {...} # 基准场景 navigation: {...} # 导航场景(GPS开启) # ...其他场景 ``` ## 质量保证 ### 自动验证 - **Fig03**: R² ≥ 0.99 - **Fig07**: 电压-电流负相关(CPL特征) - **Fig09**: ΔTTE标注与计算一致 - **Fig13**: 生存曲线单调递减 ### 输出标准 - 所有图像300 DPI - PDF矢量格式 + PNG光栅格式 - Times New Roman字体 - 统一配色方案 ## 特色功能 ### 1. 确定性输出 - 固定随机种子 - 明确的rcParams设置 - 无系统时间依赖 ### 2. GPS影响可视化 - **Fig09**: 专门标注导航场景的ΔTTE - **Fig15**: GPS最佳实践建议 ### 3. 多维度分析 - **Fig11**: 温度×信号耦合效应 - **Fig12**: 蒙特卡洛不确定性 - **Fig14**: 多周期老化预测 ### 4. 数据完整性 - 所有数据从config读取 - 无硬编码路径 - 缺失配置时清晰报错 ## 使用场景 ### 论文写作 1. 第1-2节引用 Fig01-02(架构) 2. 第3节引用 Fig03-06(建模) 3. 第7节引用 Fig07-08(基准) 4. 第8-9节引用 Fig09-11(场景) 5. 第10节引用 Fig12-13(UQ) 6. 第11节引用 Fig14(老化) 7. 第12节引用 Fig15(建议) ### 演示汇报 - 使用PDF格式(矢量,放大无损) - 关键图:Fig03(验证), Fig09(GPS), Fig12(UQ) ### 调试验证 - 检查 `figure_build_report.json` - 所有指标一目了然 ## 常见问题 **Q: Graphviz图像不生成?** A: 确保Graphviz可执行文件在PATH中,运行 `dot -V` 测试。 **Q: 如何修改参数?** A: 编辑 `config.yaml`,重新运行 `run_all_figures.py`。 **Q: 如何单独生成某一张图?** ```python import yaml from fig03_ocv_fitting import make_figure config = yaml.safe_load(open('config.yaml')) result = make_figure(config) print(result['computed_metrics']) ``` **Q: 图像风格如何统一?** A: 所有脚本都调用 `plot_style.set_oprice_style()`。 ## 技术细节 ### 数据生成策略 - **Fig03-04, 07-08**: 基于物理模型的确定性数据 - **Fig09**: 多场景仿真对比 - **Fig12-13**: 蒙特卡洛随机采样 - **Fig14**: 老化模型外推 ### 验证逻辑 见 `validation.py`: - 文件存在性检查 - 尺寸非零检查 - 图表特定指标检查 ### 模块化设计 每个图脚本独立,结构一致: ```python def make_figure(config): # 1. 设置样式 set_oprice_style() # 2. 生成数据 # ... # 3. 绘图 # ... # 4. 保存 save_figure(fig, output_base) # 5. 返回结果 return { "output_files": [...], "computed_metrics": {...}, "validation_flags": {...}, "pass": True/False } ``` ## 版本历史 - **v2.0** (2026-02-02): 完整15图系统,O奖级质量 - **v1.0**: 初始ZJ版本(仅Fig03, Fig07) ## 许可与引用 本代码为MCM 2026竞赛准备,遵循竞赛规则。 --- **生成日期**: 2026年2月2日 **目标**: O Prize (Outstanding Winner) **团队**: MCM 2026 Problem A