2026年MCM美赛问题E公布那晚,我对着“被动式太阳能遮阳”这六个字发了十几分钟呆。第一反应是这题对建模基本功要求很高,得会太阳几何、传热和优化;第二反应是大多数队伍会一头扎进复杂物理公式里,把题目做成一篇“建筑物理课程论文”,最后被评委打回“像教科书没像决策”。在MCM的题目里,问题E从来不要求你把某个物理过程算到多精确,它考的是你能不能把一个现实环境问题拆成可以量化、可以决策的框架。被动式太阳能遮阳,初看是建筑物理题,骨子里是一道加了一点热力学和最优化的政策题。
这篇文章把我从拆题到建模、写代码、画图、组织论文的全过程完整梳理一遍。无论你是第一次打美赛的新手,还是已经打过两三场比赛、想冲M奖以上的老手,里面关于太阳几何、遮阳系数、热负荷模拟和寻优的代码逻辑,都可以直接改成你队伍自己的框架。尤其是代码部分,我会把“怎么从零开始跑通一版完整模型”的细节写透,方便你复现和扩展。
1. 题目拆解:被动式太阳能遮阳题,出题人真正想考什么
1.1 问题E的“政策题”底色,决定了和ABC题完全不同的打法
MCM从2024年以来,问题E一直走“环境可持续性+政策建议”的路线。这类题目的最大特点,是答案不能只是一堆公式和图表,你得在最后给出一份能够直接交给城市规划部门、建筑设计师或者社区决策者阅读的“备忘录”。
具体到被动式太阳能遮阳这个场景,最终产出大概是一份“针对某地区、某类型建筑的外遮阳设计指南”:哪种遮阳形式效果好、挑出多长、应该在什么朝向优先安装、安装后能带来多少制冷采暖能耗变化、成本回收周期大概多长。评委在看你的论文时,核心关注点不是你的微分方程多好看,而是模型能不能支撑这些决策结论。
所以拿到题第一件事,不是急着写公式,而是先定义清楚决策变量和输出对象。我通常把问题E的评分维度拆成四块:题目理解是否到位、建模思路是否清晰且有依据、数据与灵敏度分析是否扎实、政策建议是否具体可落地。后面所有的章节,都是围绕这四块来准备的。
1.2 把“被动式太阳能遮阳”翻译成可建模的物理过程
“被动式”是一个很容易被忽略的定语。它的意思是不依靠机械系统,比如空调、风机、遮阳帘电机,只靠建筑自身的朝向、构造和外加遮阳装置来调节室内热环境。这意味着你要模拟的不是一个复杂的暖通空调系统,而是太阳辐射、建筑围护结构传热、遮阳构件几何关系这几样基础物理过程。
拆开来看,“太阳能”是热量的来源,“遮阳”是在合适的时候把热量挡在外面。但麻烦在于,冬季我们往往希望阳光照进室内减少采暖负担,夏季又希望把它完全挡住降低制冷能耗。同一个遮阳装置,可能在某个季节是助力、在另一个季节是阻力。建模的核心,就是在“减少夏季过热”和“保留冬季得热”这两个目标之间找到平衡。
具体到建模动作,我们需要做以下几件事:
- 选定建筑类型,通常用单层办公或住宅模块,固定在某个朝向,这样太阳辐射和墙体传热都可以简化。
- 确定遮阳形式,水平遮阳板是最经典的被动式构件,适合南向窗户;垂直遮阳板适合东、西向;也可以考虑百叶、植被、光伏板等变体。
- 引入气候数据,用典型气象年逐时数据模拟全年得热,温度、太阳辐射照度都是逐小时变化的。
- 量化遮阳装置的几何遮挡效果,不同时刻、不同季节,遮阳板投下的阴影能盖住窗户的多少比例,这个比例直接决定太阳能得热的削减程度。
- 建立建筑热平衡模型,分别计算有遮阳和无遮阳两种情况下全年制冷和采暖负荷,从而得到净能耗收益。
- 做参数寻优,遮阳板挑出长度、安装高度、反光度这些参数,哪些组合在全年尺度上最优。
- 做灵敏度和鲁棒性分析,气候变化、朝向偏移、使用习惯变化会不会让结论翻盘。
下面每一章,我都按这条链路往下走,每一步给到可以直接写进代码或论文里的东西。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 建模核心:从太阳几何到建筑热平衡,一个可落地的物理框架
2.1 先算太阳在哪:太阳高度角、方位角与时角
凡是涉及太阳辐射的题目,太阳位置计算都是第一块地基。太阳位置算错,后面所有的遮阳阴影和得热量都是错的。
三个核心角度参数:
- 太阳高度角 αs:太阳光线与水平面的夹角。
- 太阳方位角 γs:太阳光线在地面上的投影方向与正南方向(或正北)的夹角,常用于描述太阳在东西方向上的偏转。
- 太阳赤纬角 δ:太阳直射点所在的纬度,随日期变化,春分秋分为0°,夏至约23.45°,冬至约-23.45°。
在不考虑大气折射、忽略地球自转轴章动的情况下,计算公式如下。
赤纬角用Cooper方程近似:
δ = 23.45° × sin(2π/365 × (284 + n))
其中n是年积日,1月1日为第1天。
时角H按下式计算,每小时时角变化15°,正午为0°,上午为正,下午为负:
H = 15° × (当地太阳时 - 12)
这里有一个新手很容易踩的坑:“当地太阳时”不是北京时间或手表时间,要用当地经度做实打实的修正。标准经度和当地经度每差1°,时间差4分钟;另外还有地球公转速度不均匀引起的时差修正,叫作均时差。
太阳高度角的计算公式:
sin αs = sin φ × sin δ + cos φ × cos δ × cos H
其中φ是当地纬度。
太阳方位角的常用计算式:
cos γs = (sin δ - sin αs × sin φ) / (cos αs × cos φ)
这个公式在部分日期会出现方位角象限不唯一的问题,实践中一般结合时角符号做判断:上午太阳偏东,下午偏西。
对于南向垂直墙面,还有一个很好用的中间量,叫作“垂直剖面角”θp,表示太阳光线在墙面法线所在竖直平面内的投影与水平面的夹角:
tan θp = tan αs / cos γs_wall
γs_wall是太阳方位角相对于墙面法线的夹角。对于正南墙,γs_wall就是太阳方位角本身;对于非正南朝向,需要先做墙面朝向的坐标旋转。
2.2 量化遮阳效果:阴影深度与窗户遮挡比例
有了太阳位置,下一步就是把遮阳构件的几何遮挡效果定量算出来。以最经典的水平遮阳板为例:遮阳板固定在窗户上方,挑出长度P,窗上沿到遮阳板底面的垂直间隙是G,窗户高度是Hw。
太阳光线从挑板边缘照下来,会在窗面上形成一个阴影。这个阴影的垂直高度Hshadow可以由垂直剖面角算出:
Hshadow = P × tan θp
θp越大,阴影越深,这正是夏季正午时太阳高度角高、剖面角大、遮阳效果最强的物理来源。
窗户实际被遮挡的比例,要看Hshadow相对于窗顶位置:
- 若Hshadow ≤ G,说明阴影还没落到窗面上,遮挡比例为0。
- 若G < Hshadow < G + Hw,说明阴影落在窗户上半部分,遮挡比例 = (Hshadow - G) / Hw。
- 若Hshadow ≥ G + Hw,说明整窗被完全遮住,遮挡比例为1。
这里面还有一个细节:水平遮阳板在日出日落时段,太阳可能从侧面斜射进来,单纯用垂直剖面角会高估遮挡效果。更严格的做法是对窗户做矩形-多边形求交,但MCM比赛中用简化比例法完全够用,后面在灵敏度分析里把这种近似误差如实讨论一下,反而能加分。
对于垂直遮阳板或可调百叶,逻辑是类似的:把几何关系转到水平剖面,计算水平方向的遮挡深度,再和窗户宽度做比较。我建议第一版模型先把水平遮阳板做扎实,垂直遮阳板作为扩展方向,这样代码结构更清晰,论文的故事线也不会乱。
2.3 把建筑热负荷转化为关于遮阳参数的目标函数
遮阳改变了窗户获得的太阳辐射量,但建筑能耗还取决于墙体和屋顶的传热、室内外温差、通风、室内设备得热。一个能跑通的数据模型可以这样做。
建筑热平衡简化模型:
Q_total = Q_conduction + Q_solar_gain + Q_internal + Q_ventilation
其中:
- Q_conduction是墙体、屋顶和窗户因温差产生的传热负荷,用UA×ΔT描述。U是传热系数,A是面积,ΔT是室内外温差。
- Q_solar_gain是经窗户进入室内的太阳辐射得热,等于太阳辐照度×窗户面积×遮阳系数。
- Q_internal是照明、设备、人体散热,可以设为一个固定值。
- Q_ventilation是通风换气带来的负荷,按换气次数和空气热容简化。
遮阳装置的作用对象是Q_solar_gain。定义无遮阳时窗户的太阳得热系数为SHGC,有遮阳时有效得热系数变为:
SHGC_effective = SHGC × (1 - f_shade)
f_shade就是前面算出的窗户遮挡比例。于是,一年逐小时的太阳能得热可以这样算:
Q_solar_gain(t) = SHGC × (1 - f_shade(t)) × A_window × I_window(t)
I_window(t)是t时刻垂直墙面上的太阳总辐射强度,包括直射和散射两部分。建筑能耗中,我们把一天内的逐小时负荷按制冷和采暖分开累加:当室内温度高于设定上限时,需要制冷,记录制冷量;低于下限时,需要采暖,记录采暖量。
年能耗目标函数:
E_annual(P, G) = Σ_t max(0, Q_total(t)) × COP_cooling + Σ_t max(0, -Q_total(t)) / η_heating
优化问题就是选择合适的P和G,使得E_annual最小,同时遮阳装置的材料成本也要控制在一定范围内。这里的P是遮阳板挑出长度,G是安装高度,它们是唯一的两个决策变量,已经足以支撑完整的比赛文章。
3. 代码落地:从太阳轨迹到自动寻优的完整方案
3.1 项目结构与依赖选择
我建议用Python组织整个项目,原因很简单:numpy做数组运算、pandas处理时间序列、matplotlib画图、scipy做优化,所有工具链都是现成的,而且评委中间也会关注你的代码可读性。
目录按功能分成几个文件:
code复制solar_shading/
├── config.py # 所有参数集中管理
├── solar_geometry.py # 太阳位置计算
├── shading.py # 遮阳几何遮挡比例
├── thermal.py # 热负荷计算
├── simulate.py # 全年逐时模拟主循环
├── optimize.py # 参数寻优
├── sensitivity.py # 灵敏度分析
├── visualization.py # 图表绘制
└── main.py # 一键跑完整流程
依赖只用numpy、pandas、matplotlib、scipy,不需要额外安装任何重量级库。比赛时安装环境的稳定性很重要,这四个库在任何机器学习镜像里都有,不会出幺蛾子。
3.2 太阳位置计算的Python实现
直接给一个完整可运行的太阳位置计算模块,注释写清楚每一步对应哪个公式。
python复制import numpy as np
import pandas as pd
def day_of_year(dates):
return dates.dayofyear.to_numpy()
def solar_declination(n):
return 23.45 * np.sin(2 * np.pi / 365 * (284 + n))
def equation_of_time(n):
b = 2 * np.pi / 365 * (n - 81)
return 9.87 * np.sin(2 * b) - 7.53 * np.cos(b) - 1.5 * np.sin(b)
def local_solar_hour(dates, longitude, standard_meridian):
n = day_of_year(dates)
# 当地钟表时间(小时)
clock_hour = dates.hour + dates.minute / 60.0 + dates.second / 3600.0
# 经度修正: 每度4分钟,转成小时除以60
lon_correction = 4 * (standard_meridian - longitude) / 60.0
eot = equation_of_time(n) / 60.0
solar_time = clock_hour + lon_correction + eot
return solar_time
def solar_position(latitude, longitude, dates, standard_meridian=120):
phi = np.radians(latitude)
n = day_of_year(dates)
delta = np.radians(solar_declination(n))
solar_time = local_solar_hour(dates, longitude, standard_meridian)
hour_angle = np.radians(15 * (solar_time - 12))
sin_alt = np.sin(phi) * np.sin(delta) + np.cos(phi) * np.cos(delta) * np.cos(hour_angle)
altitude = np.arcsin(np.clip(sin_alt, -1, 1))
cos_az = (np.sin(delta) - np.sin(phi) * np.sin(altitude)) / (
np.cos(phi) * np.cos(altitude) + 1e-10
)
azimuth = np.arccos(np.clip(cos_az, -1, 1))
# 下午方位角取负
azimuth = np.where(solar_time < 12, azimuth, 2 * np.pi - azimuth)
return altitude, azimuth
这段代码里面有两个地方需要特别提醒。第一个是arccos的值域问题,我用clip把传入值限制在[-1,1],避免浮点误差导致NaN。第二个是方位角象限修正,上午太阳在东南方向用角度本身,下午在西南方向用2π减去角度,否则后续算墙面入射角会出大问题。
3.3 遮阳深度与窗户遮挡比例的计算
接下来是遮阳几何模块。这里我采用南向水平遮阳板作为第一版模型,因为它是被动式遮阳最普遍的形式,物理过程直观,论文里也好解释。计算遮挡比例需要用到太阳高度角和相对于墙面法线的方位角。
python复制def shading_fraction(altitude, azimuth_wall_relative, overhang, gap, window_height):
"""
计算水平遮阳板对窗户的遮挡比例
altitude: 太阳高度角, 弧度
azimuth_wall_relative: 太阳方位角相对于墙面法线的夹角, 弧度
overhang: 遮阳板挑出长度, m
gap: 窗上沿到遮阳板的垂直间隙, m
window_height: 窗户高度, m
"""
# 垂直剖面角
tan_profile = np.tan(altitude) / (np.cos(azimuth_wall_relative) + 1e-10)
profile_angle = np.arctan(tan_profile)
# 阴影垂直高度
shadow_height = overhang * np.tan(profile_angle)
# 遮挡比例
fraction = np.zeros_like(shadow_height)
mask1 = shadow_height > gap
mask2 = shadow_height > gap + window_height
fraction[mask1] = (shadow_height[mask1] - gap) / window_height
fraction[mask2] = 1.0
fraction = np.clip(fraction, 0.0, 1.0)
return fraction
有一个小细节:cos(azimuth_wall_relative)在日出或傍晚可能接近0,导致tan_profile爆炸。我加了1e-10防止除零,再通过arctan把角度限制在合理范围内。后面哪怕出现极端值,遮挡比例经过clip也会落在[0,1]里,不会污染最终结果。
3.4 全年逐时热负荷模拟主循环
太阳位置是随日期和时刻变化的,遮阳比例也是,所以最稳妥的做法是把典型气象年数据按小时拆开,逐小时算一遍,再累加成全年负荷。典型气象年数据可以从EnergyPlus官网下载,选你研究的城市对应的TMY3或TMYx文件,提取干球温度和水平面总辐射就可以。
简化处理时,可以用一个正弦函数拟合全年逐时温度,用天文辐射公式估算晴空辐射;但既然要拿奖,我强烈建议直接用真实气象数据,数据来源在论文里写明,评审可信度完全不一样。
python复制def simulate_annual_energy(weather_df, latitude, longitude, building_params, shading_params):
dates = weather_df.index
altitude, azimuth = solar_position(latitude, longitude, dates)
# 南向墙面法线方位角为0(以正南为0度)
wall_azimuth = np.pi / 2 # 南向墙面法线的方位角(从正北顺时针,南向是180度即pi)
# 太阳方位角(从正北顺时针)相对墙面法线的夹角
rel_azimuth = azimuth - wall_azimuth
frac = shading_fraction(
altitude, rel_azimuth,
shading_params['overhang'],
shading_params['gap'],
building_params['window_height']
)
# 垂直墙面上的太阳辐射简化计算
# 这里用水平面辐射乘以一个取决于太阳高度角的系数近似
I_window = weather_df['GHI'] * np.sin(altitude) * 0.85 + weather_df['DHI'] * 0.6
# 太阳得热
Q_solar = (
building_params['SHGC'] * (1 - frac) *
building_params['window_area'] * I_window
)
# 导热量
Q_conduction = (
building_params['UA_total'] *
(weather_df['T_out'] - building_params['T_set'])
)
# 内部得热和通风
Q_internal = np.full(len(weather_df), building_params['internal_gain'])
Q_vent = (
building_params['ventilation_coeff'] *
(weather_df['T_out'] - building_params['T_set'])
)
Q_total = Q_conduction + Q_solar + Q_internal + Q_vent
# 制冷负荷: 需要从室内排出的热量
cooling_load = np.maximum(0, Q_total) / building_params['COP']
# 采暖负荷: 需要补充的热量
heating_load = np.maximum(0, -Q_total) / building_params['heating_efficiency']
annual_energy = cooling_load.sum() + heating_load.sum()
return annual_energy
这个模拟器把能耗计算压缩到30行以内,核心思想是:所有与时间相关的量都按小时做数组运算,numpy的广播机制会帮你处理一切。运行速度非常快,一个城市的三千多个小时序列,不到一秒钟就能算完,这对后面做参数扫描和寻优非常有利。
有人会担心模型太“朴素”。我的观点是MCM比赛中,模型的简化是有意为之,你只要在论文里诚实交代假设:墙体传热用稳态UA模型、忽略热惯性、太阳散射用当量系数,就已经是合格的工程近似了,没有人会要求你用CFD去做建筑能耗模拟。
3.5 参数寻优:从网格搜索到差分进化
有了快速计算年能耗的函数,参数寻优就变成很标准的优化问题了。决策变量是遮阳板挑出长度P和安装间隙G,目标是年总能耗最小。
先做网格搜索,把P从0到1.5米、G从0到0.3米各取20个点,算400个组合。这个方案的好处是可以直接画能耗等高线图,非常直观,而且能直观验证目标函数是否光滑。
python复制import numpy as np
from scipy.optimize import differential_evolution
def objective(x):
overhang, gap = x
energy = simulate_annual_energy(
weather_df, latitude, longitude,
building_params,
{'overhang': overhang, 'gap': gap}
)
return energy
bounds = [(0.0, 1.5), (0.0, 0.3)]
result = differential_evolution(objective, bounds, seed=42)
print("最优遮阳板挑出长度: %.3f m" % result.x[0])
print("最优窗上间隙: %.3f m" % result.x[1])
print("最小年能耗: %.1f kWh" % result.fun)
差分进化是scipy内置的全局优化算法,对这类低维、非光滑、可能有多峰的目标函数非常稳。赛后如果你想升级,可以再加入材料成本约束,变成“能耗-成本”双目标问题,用NSGA-II之类的多目标进化算法求帕累托前沿。不过我建议比赛第一版用单目标就好,能耗最小的方案算出来之后,把成本和回收周期作为后处理分析。
3.6 灵敏度分析与鲁棒性检验
MCM评委对灵敏度分析的重视程度,经常超过对模型本身的重视。常见的做法是OAT(one-at-a-time),逐一改变输入参数,观察年能耗和最优解的变化。
必做的几组灵敏度测试包括:
- 气候数据换成邻近城市或直接用另一个年份的气象数据,看最优P和G是否大幅漂移。
- 将窗墙比从0.3调到0.5,看遮阳方案是否仍然合理。
- 将建筑朝向从正南旋转15度、30度,看东、西向遮阳需求的变化。
- 将SHGC从0.4调到0.6,代表不同玻璃类型对结果的影响。
- 给气象数据加上±1℃的温度扰动,检验结果对气候波动的鲁棒性。
这些分析做完之后,你会得到一组非常有说服力的图表:x轴是某个参数的变化范围,y轴是最优能耗或最优P值,展示出模型对于哪些参数敏感、对哪些参数不敏感。这段内容写进论文,立刻就能把文章逼格拉高一个档次。
4. 数据与可视化:把模型结果变成一眼能看懂的决策证据
4.1 全年热照图与太阳轨迹剖面图
建模的结果最终要靠图表说服人,MCM论文里图表是评委第一眼看到的东西。被动式太阳能遮阳题有几个非常出彩的可视化选择。
全年热照图是最有冲击力的一张图。横轴是日期,纵轴是时刻,颜色代表窗户遮挡比例或太阳得热量。这种图类似建筑能耗领域常用的“solar chart heatmap”,可以直接看出夏季正午遮阳比例接近1,冬季整日遮阳比例很低。
python复制import matplotlib.pyplot as plt
# 假设 frac_matrix 是 365天×24小时 的遮挡比例矩阵
plt.figure(figsize=(14, 5))
plt.imshow(frac_matrix.T, aspect='auto', origin='lower',
extent=[1, 365, 0, 24], cmap='viridis')
plt.colorbar(label='Shading fraction')
plt.xlabel('Day of year')
plt.ylabel('Hour of day')
plt.title('Window shading fraction over the year')
plt.show()
还有一张太阳轨迹图:把全年每天的太阳高度角和方位角画在极坐标或者二维图上,叠加不同季节的遮阳边界曲线。这张图能直观说明为什么南向遮阳板在夏季有效、冬季不影响采光——因为太阳轨迹在不同季节的高度角差异非常大。
4.2 帕累托前沿与方案对比
单目标优化得到的是一个最优点,但实际决策者还关心成本。遮阳板挑出越长,材料成本越高,安装结构也要更坚固。这就引出了双目标问题:年能耗和安装成本。
按最简单的材料成本估算:
Cost = c_material × P × W
P是挑出长度,W是窗户宽度,c_material是单位面积遮阳板成本(含支架)。
跑一组不同P值下的能耗-成本组合,画成二维散点图,就能得到帕累托前沿。这张图的决策意义非常强:决策者可以在“节能效果”和“前期投入”之间做权衡,不需要额外解释。
如果还想更进一步,可以画一张不同城市的方案对比图。比如南方炎热地区最优P值大、北方寒冷地区最优P值小,这个结论直接可以上升为政策建议:“遮阳板挑出长度应随纬度调整,低纬度地区宜加长,高纬度地区宜缩短或选用可调节遮阳”。
5. 论文写作:问题E的备忘录写法与评分点把控
5.1 从技术报告到政策备忘录的思维转变
许多队伍在问题E上栽跟头,不是因为模型差,而是因为写成了纯技术报告。你想象一下评委:他在4天里要看几十份论文,每份都是公式图表,他最先希望看到的是一份像政府报告摘要那样的开头:问题是什么、我们做了什么、结论是什么、建议是什么。
美赛问题E的答复对象通常是“市议会”或“规划委员会”,所以正文应该使用半正式、面向决策者的语气。论文里要有“我们建议在低纬度城市优先推广深挑出遮阳板,预计降低年制冷能耗10%-15%”这样的句子,而不是只说“模型结果表明P=0.8m时能耗最小”。
两个常见错误:
- 在备忘录里反复推导公式,把politician都讲晕了。
- 从头到尾没有任何具体数值,只给变化趋势。
正确做法是:技术细节放在附录和模型说明里,正文每一段都围绕“发现了什么、建议怎么做”来展开。
5.2 摘要不要写成算法清单
美赛摘要页是决定是否进入“决赛圈”的关键。好的摘要应该在300词以内完成闭环:问题背景复述、建模思路、关键结果、具体建议。不要罗列“本文用了遗传算法、有限差分、蒙特卡洛”,而是把重点放在“我们算出了什么、建议给什么政策”。
我常用的摘要结构是:
- 一句背景:城市建筑夏季过热与冬季失热是能耗增长的重要来源。
- 一个建模核心:建立了基于太阳位置和建筑热平衡的逐时能耗模型,将遮阳板挑出长度、安装间隙作为决策变量。
- 一个关键结果:模型优化后,某城市年总能耗可降低12.3%,其中制冷能耗降低21.5%。
- 一个政策建议:建议南向窗户优先配置挑出1.0-1.2米的固定水平遮阳板,低纬度城市可加大挑出长度。
这样的摘要,评委10秒内就知道你做了一件什么事情、结果有多重要。
5.3 图表排版与附录:把“代码”变成“支撑材料”
问题E要求提交的除了论文之外,很多参赛者会附上代码和数据来源说明。虽然MCM不需要交代码,但论文附录里写明数据来源、参数假设、代码框架结构,能极大提升可信度。
图表方面,我把最重要的几类做了优先级排序:
| 图表类型 | 作用 | 优先级 |
|---|---|---|
| 全年热照图 | 展示遮阳比例随季节时刻变化 | 高 |
| 优化前后能耗对比柱状图 | 直观展示节能效果 | 高 |
| 参数寻优等高线图 | 展示最优区域和参数敏感度 | 高 |
| 帕累托前沿图 | 支撑决策权衡分析 | 中 |
| 太阳轨迹图 | 解释物理机理 | 中 |
| 传感器数据对比图(如有) | 验证模型 | 低 |
排版上,表格不要超过一页,图表要有自明性,不能离开正文就看不明白。MCM论文评审速度非常快,标题层级清晰、图表指向明确的文章天然占优势。
6. 一些比建模更重要的赛场经验
最后聊几句可能对成绩影响更大的经验。第一,时间分配要严格遵守,不要在第一版模型上过度打磨,先把“完整链路”跑通,再回来优化。我的建议是第一天完成题目拆解和基础模型,第二天实现代码和图表,第三天做灵敏度分析和参数扩展,第四天只用来写论文和检查排版。如果前三天还在调太阳位置公式,论文肯定写不完。
第二,代码仓库要统一管理,队伍三人对同一套config.py的修改必须及时同步,不然模型参数和论文里的数值对不上,最后审校阶段会非常痛苦。
第三,灵敏度分析不是“讨好评委”的摆设,它真的能救你。我遇到过最优方案在某组气候数据下表现得很好,但换一个邻近城市就失效的情况。如果没有做鲁棒性测试,整篇论文的结论都会站不住脚。
第四,不要迷信复杂的“高阶”方法。建筑能耗模型中,一个考虑主要物理过程、透明假设、完整灵敏度分析的简化模型,得分远高于黑箱式的神经网络张量模型。MCM问题E的核心始终是“用模型帮助做决策”,而不是“展示你会多少算法”。
被动式太阳能遮阳题是一个非常典型的“政策+工程”混合体,只要掌握了太阳几何、遮阳几何、热负荷模拟和参数寻优这条主线,你的论文就已经具备M奖水平的基础。后续如果要继续升级,可以往多目标优化、碳减排量估算、城市尺度推广分析这些方向扩展。各位备赛顺利。
