1. 赛题拆解与整体思路:E题到底在考什么
2026年美赛E题落在“Passive Solar Shading(被动式太阳能遮阳)”这个方向,其实一点都不意外。E题历来是“环境科学与可持续发展”类题目的主场,早年的光污染、生态系统服务价值、粮食系统韧性,到前几年的森林碳汇管理,都在反复验证同一个趋势:美赛越来越看重“一个工程决策背后的环境账怎么算”。
被动式太阳能遮阳,拆开看就两个关键词:被动、遮阳。被动意味着不消耗额外能源、不依赖机械设备,靠建筑自身的形态、材料、朝向来实现热环境调节;遮阳则是通过遮挡直射阳光,减少夏季过热、控制眩光,同时又要兼顾冬季得热和自然采光。它和主动式遮阳(比如电动百叶、空调系统)最大的区别是:你只有一次设计机会,一旦方案定下来,几十年内它就靠自己“工作”。
把这道题放到美赛E题的框架里,出题人真正想让你做的其实是三件事:
- 建立太阳辐射、建筑朝向、遮阳结构之间的物理几何关系;
- 用模型回答“在不同纬度、不同气候、不同建筑类型下,怎么设计遮阳装置最合理”;
- 把模型结果转化成可执行的工程建议,并且论证成本和收益。
所以别一上来就奔着“复杂模型”去。美赛E题的阅卷偏好里,“模型有效性”和“结果可解释性”的分量远高于“算法有多炫”。你做一个结构清晰、参数解释明确的热平衡模型,比堆一个没人看得懂的深度学习黑箱拿到的分要高很多。
我建议的整体建模思路是“几何—辐射—热平衡—优化”四个层次递进:
- 第一步用太阳几何模型算出任意地点、任意时刻的太阳高度角和方位角;
- 第二步把建筑简化成一个带窗户的立方体,算出透过窗户进入室内的太阳辐射得热;
- 第三步建立一个室内热平衡方程,把遮阳系数、墙体传热、通风换气、人体散热都放进去,求解室内温度随时间的响应;
- 第四步引入多目标优化,在“夏季遮阳降温”和“冬季得热升温”这对矛盾中找帕累托最优解。
这套路线的妙处在于:每一步都能画图、能出数据、能和文献对比验证,而且代码量完全可控。下面我逐个环节展开,把关键公式和代码思路都给你。
2. 太阳几何模型:一切问题的基础
做被动式遮阳设计,首先要搞清楚太阳到底从哪来。这不是常识能替代的——北京和悉尼的太阳轨迹完全相反,同一栋楼在不同纬度下,最佳挑檐长度可能差出一倍以上。太阳几何模型是整个题目地基中的地基。
2.1 太阳赤纬角与时角的计算
先说两个最基本的天文参数。
太阳赤纬角\delta是太阳直射点与地球赤道平面的夹角,在夏至日约+23.45°,冬至日约-23.45°。Cooper方程给出了一个精度足够高的近似:
delta = 23.45 * sin(360 * (284 + n) / 365)其中n是一年中的第几天。这个公式的误差在±0.5°以内,对建筑热工计算完全够用。
太阳时角h是描述地球自转带来的太阳视运动的量,正午为0°,每小时转过15°,上午取负值、下午取正值。这里有个很多人踩过的坑:工程计算里用的“当地时间”是钟表时间,不是太阳时。你需要先算当地经度与所在时区标准经度的差,再修正时差方程(Equation of Time),才能得到真正的太阳时。
# 太阳时角计算(含时差修正) import math def calculate_solar_hour(longitude, timezone, day_of_year, local_hour): # 时差方程(分钟) B = 2 * math.pi * (day_of_year - 81) / 364 EoT = 9.87 * math.sin(2 * B) - 7.53 * math.cos(B) - 1.5 * math.sin(B) # 经度修正:每度4分钟 longitude_correction = (timezone * 15 - longitude) * 4 # 真太阳时(小时) solar_time = local_hour + (EoT + longitude_correction) / 60 hour_angle = (solar_time - 12) * 15 # 单位为度 return hour_angle2.2 太阳高度角和方位角的完整求解
有了\delta和h,某地点(纬度\phi)在任意时刻的太阳高度角\alpha_s和方位角\gamma_s就可以确定了:
sin(alpha_s) = sin(phi)*sin(delta) + cos(phi)*cos(delta)*cos(h) sin(gamma_s) = -cos(delta)*sin(h) / cos(alpha_s)这里的方位角有个需要注意的地方:不同文献对零度方向的定义不一样(有的从正南起算,有的从正北起算),你写代码时一定要在注释里标明约定,否则后面做遮阳几何投影时会乱。
我建议你按“正南为0、偏西为正、偏东为负”来算,这个约定在建筑热工领域最常用。算完之后可以直接画出一整年的“太阳轨迹图”——把不同日期(通常是春分、夏至、秋分、冬至四天)的高度角-方位角曲线画在极坐标图里,这是后面设计遮阳构件的依据。
下面这段代码可以直接复现经典的太阳轨迹图:
import numpy as np import matplotlib.pyplot as plt def solar_trajectory(latitude, day_of_year, timezone, longitude): hours = np.arange(4, 20, 0.1) altitude = [] azimuth = [] for hour in hours: h = calculate_solar_hour(longitude, timezone, day_of_year, hour) delta = math.radians(23.45 * math.sin(2 * math.pi * (284 + day_of_year) / 365)) phi = math.radians(latitude) sin_alpha = math.sin(phi) * math.sin(delta) + math.cos(phi) * math.cos(delta) * math.cos(math.radians(h)) alpha = math.asin(np.clip(sin_alpha, -1, 1)) cos_gamma = (math.sin(delta) - math.sin(alpha) * math.sin(phi)) / (math.cos(alpha) * math.cos(phi)) gamma = math.acos(np.clip(cos_gamma, -1, 1)) if h > 0: gamma = -gamma # 下午偏西,按约定取负 altitude.append(math.degrees(alpha)) azimuth.append(math.degrees(gamma)) return np.array(azimuth), np.array(altitude)拿到全年的太阳轨迹后,你会直观看到:北半球中纬度地区,夏季太阳高度角高(接近70°-80°),冬季高度角低(30°左右)。这就给被动式遮阳提供了物理基础——挑檐做深一点,夏季高角度的阳光被挡住,冬季低角度的阳光照样能照进室内。这个“季节选择性”是所有被动遮阳设计追求的核心。
3. 遮阳构件的几何投影:从“太阳角”到“遮阳轮廓”
太阳几何是基础,但最终你交付的不是公式,而是“在窗户上装多长多宽的遮阳板”。所以第二步,必须把太阳光线通过一个具体的遮阳构件(水平挑檐、垂直翼板、格栅百叶)投射到窗户表面,算出遮挡区域和透光区域的边界。
3.1 水平遮阳板的三维投影计算
水平遮阳板是最常见的形式——窗顶出一块水平板,夏季太阳高度角大的时候,阴影正好盖住窗户;冬季高度角小时,阳光从板下射入室内。它的设计本质上是一个几何投影问题。
关键参数有三个:
- 遮阳板挑出长度L(从墙面向外的水平距离);
- 遮阳板距窗顶的垂直间距d(一般和窗顶平齐,即d=0);
- 窗户的高度H。
在任一时刻,太阳高度角为\alpha_s、方位角为\gamma_s,那么挑檐在窗面上的垂直投影深度v可以近似表示为:
v = L * sin(alpha_s) / tan(alpha_s) -- 等等,这个式子要推一下直接记忆公式容易错,我建议从几何关系推一遍:太阳光线与水平面的夹角是\alpha_s,所以光线在垂直方向的“下落”速度与水平方向“深入”速度的比值是tan(\alpha_s)。挑檐边缘点到窗户上沿的距离是L(水平向),那么影子在窗户上沿以下的高度就是:
shadow_depth = L * tan(alpha_s) / cos(gamma_s)其中\gamma_s是太阳方位角与墙面法线方向的夹角。当太阳在墙正前方时,\gamma_s=0,cos项取1,shadow_depth最大;当太阳斜射时,cos(\gamma_s)变小,影子深度反而要修正。
这个公式是设计挑檐长度的“万能钥匙”。假设窗户高1.5米,你希望夏季正午(高度角约75°)的阴影恰好覆盖整个窗户,取安全系数1.2,那么需要挑檐长度L满足:
L >= shadow_depth * cos(gamma_s) / tan(alpha_s) = 1.5 * 1.2 * cos(0) / tan(75°) = 1.8 / 3.73 ≈ 0.48米也就是说,在夏季正午条件下,大约0.5米深的挑檐就能挡住整个1.5米高的窗户。这个数字和实际建筑设计中的经验值很接近,验证了模型是可靠的。你可以用同一套公式,换不同纬度和不同窗户高度做敏感性分析。
3.2 用Python绘制全年遮阳时间表
光算单个时刻不够,一份合格的美赛论文应该给出“全年遮阳效果分布图”。我用的方法是:把全年每天的代表时刻(比如从早8点到晚6点,每半小时一个点)都代入投影公式,计算这个时刻窗户被遮挡的面积比例,然后画成热力图。
def shade_fraction(L, window_width, window_height, tilt, latitude, day_of_year, hour): """ 计算水平遮阳板在某时刻对矩形窗户的遮阳面积占比 参数: L: 挑檐伸出长度(米) window_width: 窗户宽度(米) window_height: 窗户高度(米) tilt: 墙面倾角(度,垂直墙面为0) latitude: 纬度(度) day_of_year: 年积日 hour: 当地时间(小时) """ # 计算太阳位置 delta = math.radians(23.45 * math.sin(2 * math.pi * (284 + day_of_year) / 365)) phi = math.radians(latitude) h = (hour - 12) * 15 * math.pi / 180 sin_alpha = math.sin(phi) * math.sin(delta) + math.cos(phi) * math.cos(delta) * math.cos(h) alpha = math.asin(np.clip(sin_alpha, -1, 1)) # 墙面朝向正南,计算太阳方位角与墙面法线的夹角 cos_gamma = (math.sin(delta) - math.sin(alpha) * math.sin(phi)) / (math.cos(alpha) * math.cos(phi)) gamma = math.acos(np.clip(cos_gamma, -1, 1)) if h > 0: gamma = -gamma wall_normal_angle = math.radians(0) # 正南墙的法线方向 beta = abs(gamma - wall_normal_angle) beta = min(beta, 2 * math.pi - beta) # 影子深度 if math.cos(beta) < 0.01 or alpha <= 0: return 0.0 # 太阳在墙面后方或无直射 shadow_depth = L * math.tan(alpha) / math.cos(beta) shadow_depth = max(0, min(shadow_depth, window_height)) # 假设水平挑檐在窗户上沿,阴影从上方均匀下移 return shadow_depth / window_height把这个函数跑遍全年的白天时刻,你就能得到一张365行×14列的矩阵,每一格代表该时刻的遮阳覆盖率。画成imshow热力图后,评审老师一眼就能看出你这套模型在“夏季遮挡充足、冬季让阳光进入”这个核心矛盾上处理得怎么样。
3.3 三种常见遮阳构型的对比
水平遮阳板、垂直翼板、复合式遮阳(水平板+竖向格栅)各有适用的窗墙朝向:
- 水平遮阳板适合南向窗:太阳方位角变化范围小,一年四季的高度角差异大,水平板能充分利用“夏高冬低”的自然规律;
- 垂直翼板适合东、西向窗:早晨和傍晚太阳低平且斜射,垂直翻转的翼板能在太阳偏转时快速形成遮挡;
- 复合式遮阳适合东南、西南向窗:同时应对高度角变化和方位角变化。
我在模型中通常把“遮阳类型”设为一个枚举变量,通过控制是否生成水平板、是否生成垂直板来模拟三类方案,然后让优化算法自动选择最佳构型。这样做的好处是:最后“南向用水平板、东西向用垂直板”这个看似常识的结论,是你用数据跑出来的,不是拍脑袋写上去的——这在美赛评卷中至关重要。
注意:方位角定义和角度的弧度转换是写代码时最容易翻车的地方。建议全部统一用弧度运算,只在输入输出时转换角度。上面代码里已经注意了这一点,但你自己扩展时千万小心。
4. 热平衡模型:遮阳效果到底有多大
有了“遮住多少阳光”还不够,评委想知道的是“这层遮阳降低了多少室内温度、省了多少空调电费”。这时候需要把遮阳覆盖率转化到建筑热平衡方程里,建立完整的传热模型。
4.1 建筑热平衡方程的建立
对于一个简化房间(单面外墙带窗),室内的热平衡可以写成:
C_air * (dT_room/dt) = Q_solar * (1 - SF) + Q_wall + Q_vent + Q_internal各项含义如下:
- C_air是室内空气的热容(空气密度×体积×比热容),代表室内空气吸收热量后温度上升的“惯性”;
- Q_solar * (1 - SF)是透过窗户进入室内的太阳辐射得热,SF就是前面算的遮阳覆盖率。无遮阳时SF=0,全部太阳辐射都进来;完全遮挡时SF=1,太阳直射得热为0;
- Q_wall是墙体传热,用墙体两侧温差除以总热阻来表示;
- Q_vent是自然通风换气带来的热量交换,由换气次数和内外温差共同决定;
- Q_internal是室内设备、照明、人体的散热。
这个方程看起来简单,却是整篇论文的核心引擎。它是“传热学+建筑物理”的标准简化模型,你完全可以在论文里引用ASHRAE Handbook或者ISO 13790标准来支撑建模依据。
把方程用有限差分法离散化,取时间步长\Delta t(比如15分钟),得到递推式:
T_room(t+dt) = T_room(t) + (dt / C_air) * [Q_solar*(1-SF) + Q_wall + Q_vent + Q_internal]这个递推式就是你能跑动态仿真、画24小时温度曲线的关键。
4.2 关键参数怎么取值
热平衡模型里最怕的是参数乱拍。我整理一套在美赛中比较稳妥的取值参考:
| 参数 | 参考取值 | 说明 |
|---|---|---|
| 混凝土墙体厚度 | 0.2 m | 常见外墙厚度 |
| 墙体导热系数 | 1.3 W/(m·K) | 混凝土典型值 |
| 窗户玻璃传热系数U | 2.8 W/(m²·K) | 双层中空玻璃典型值 |
| 玻璃太阳得热系数SHGC | 0.4~0.7 | 低辐射玻璃取低值,普通玻璃取高值 |
| 室内热容C_air | 房间体积×1200 J/(m³·K) | 考虑家具热容,取空气热容的1.5倍左右 |
| 换气次数ACH | 0.5~1.5次/小时 | 自然通风住宅典型值 |
| 人均散热 | 80~100 W | 轻体力活动状态 |
这些参数不需要精确到小数点,但要有出处、有合理性。建议在正文中写清楚“参考了XX标准/手册,并针对题目场景做了调整”,而不是正文里写“假设……”。你甚至可以做一个简单的参数敏感性分析——比如每隔半小时把换气次数从0.5调到1.5,看室内温度峰值差多少。这种做法是美赛论文拿“Outstanding”的关键习惯。
def simulate_room_temperature(param, weather_data, shade_frac): """ 热平衡递推仿真 参数: param: 字典,包含热容、传热系数、换气次数等 weather_data: DataFrame,包含外温、太阳辐射等逐时气象数据 shade_frac: 逐时遮阳覆盖率列表 """ dt = 0.25 # 小时 T_room = [param['initial_temp']] for i in range(1, len(weather_data)): T_out = weather_data['temp'].iloc[i] I_solar = weather_data['solar'].iloc[i] SF = shade_frac[i] # 墙体传热 Q_wall = (T_out - T_room[-1]) * param['wall_area'] / param['wall_resistance'] # 窗户传热 Q_window = (T_out - T_room[-1]) * param['window_area'] * param['U_window'] # 太阳辐射得热 Q_solar = I_solar * param['window_area'] * param['SHGC'] * (1 - SF) # 通风换气 Q_vent = param['air_change_rate'] * param['room_volume'] * 1.2 * 1005 / 3600 * (T_out - T_room[-1]) # 内部散热 Q_internal = param['internal_gain'] dT = (Q_wall + Q_window + Q_solar + Q_vent + Q_internal) / param['thermal_capacity'] * dt T_room.append(T_room[-1] + dT) return T_room代码很简单,但这里有一个非常关键的物理细节:太阳辐射得热和不透明围护结构传热的时间响应尺度不同。窗户得热几乎是瞬时的,而墙体传热有数小时的延迟(热惯性)。你要么把这个延迟也建模进去(比如用响应系数法),要么在论文里明确说明“本模型忽略墙体热惯性,偏保守估计峰值温度”。前者更高级,后者更稳妥。我的建议是:美赛时间有限,用后者,但在灵敏度分析里承认这一点。
4.3 从“温度差”到“节能效益”
室内温度算出来了,怎么变成节能效益?业界标准的做法是“度时数法”或“度日数法”。简单说:
- 你设定一个舒适温度区间(比如夏季26℃,冬季18℃);
- 统计全年逐时室内温度超出舒适上限的“过热时数”以及低于舒适下限的“过冷时数”;
- 把这部分温差(度)乘以时间(小时)叫做“度时数”,度时数越大,空调负荷越大;
- 对比无遮阳和有遮阳两种方案,度时数的下降比例就是你这份设计带来的节能率。
用度时数而不是直接用耗电量,是为了避开空调COP(能效比)、电价等不确定因素,让结论更普适。评委明确说过,他们看中的不是绝对数值,而是你的模型能不能体现出“遮阳带来的相对改善”。
如果题目要求给出经济和环境指标,你可以把度时数进一步换算成电量甚至碳排放:假设室内每多1度时数就需要额外0.05 kWh/m²的冷量(具体系数参考当地建筑能耗统计数据即可),再乘以面积和电价,就是年节省费用。换算过程写清楚假设,就没人会挑刺。
5. 多目标优化与方案决策:在矛盾中找到最优解
被动式遮阳的核心矛盾已经反复出现:遮阳太强,夏天凉快了但冬天没阳光;遮阳太弱,冬天暖和了但夏天热到不行。解决这类多目标权衡问题,典型方法有加权求和法和帕累托前沿法。我建议你用后者,因为帕累托前沿的可视化效果和工程决策价值都远胜前者。
5.1 优化目标和决策变量怎么设
决策变量建议设为遮阳板的几何参数:
- 水平板挑出长度L(0.1m~1.2m);
- 水平板在窗顶之上的高度位置(-0.1m~0.3m,正值表示高于窗顶);
- 垂直翼板的宽度(0~0.6m);
- 翼板间距(0.3m~1.0m)。
优化目标设两个,形成二维帕累托问题:
- 目标1:全年度时数(越小越好),代表热舒适和节能水平;
- 目标2:遮阳装置的年化成本(越小越好),可以用单位长度加权的简单造价函数来近似,比如水平板每米50元、翼板每米80元。
为什么要引入成本目标?因为美赛E题历来强调“工程的可实施性”,一个省电但不现实的方案(比如把整面窗都用不透光石板封死)显然不行。把成本和节能两个目标同时优化,逼出来的才是“既能用又省钱”的方案。
5.2 用NSGA-II算帕累托前沿
求解多目标优化,我推荐NSGA-II(带精英策略的非支配排序遗传算法)。它不要求目标可导,能跑离散和连续混合变量,而且Python生态里有现成库pymoo,几十行代码就能跑起来。
from pymoo.algorithms.moo.nsga2 import NSGA2 from pymoo.core.problem import Problem from pymoo.optimize import minimize from pymoo.operators.crossover.sbx import SBX from pymoo.operators.mutation.pm import PM from pymoo.operators.sampling.rnd import FloatRandomSampling class ShadingOptimizationProblem(Problem): def __init__(self, building_param, weather_data, location): super().__init__(n_var=3, n_obj=2, xl=[0.1, -0.1, 0.0], xu=[1.2, 0.3, 0.6]) self.building_param = building_param self.weather_data = weather_data def _evaluate(self, X, out, *args, **kwargs): results = [] for x in X: L, offset, wing_width = x # 调用前面的函数计算全年遮阳覆盖率 shade_frac = compute_yearly_shade_frac(L, offset, wing_width, self.building_param, self.weather_data) # 热平衡仿真得到全年度时数 discomfort = compute_annual_discomfort(self.building_param, self.weather_data, shade_frac) # 成本函数 cost = 50 * L + 80 * wing_width results.append([discomfort, cost]) out["F"] = np.array(results) problem = ShadingOptimizationProblem(...) algorithm = NSGA2(pop_size=50, sampling=FloatRandomSampling(), crossover=SBX(eta=15), mutation=PM(eta=20)) res = minimize(problem, algorithm, ('n_gen', 80), seed=42, verbose=False)跑完在散点图上画出帕累托前沿,通常你会看到一条“L形”曲线:拐点附近意味着“小幅增加成本能带来大幅舒适度提升”,而曲线尾段则是“再加钱也没什么效果了”。选方案时选拐点附近的解,工程上叫“性价比最高点”。在论文里把这个拐点画出来,并解释为什么选它,你的决策逻辑就严密了。
5.3 加权法和TOPSIS的综合排序
和帕累托分析相辅相成的,是TOPSIS(逼近理想解排序法)。这个方法很适合美赛中的“多方案排序”场景:你从帕累托前沿里挑出20个代表性方案,按节能性、成本、采光影响、美观度这4个指标打分,然后找“最接近正理想解、最远离负理想解”的方案。
TOPSIS步骤很简单:
- 构造决策矩阵(方案×指标);
- 无量纲化处理(极差归一化或向量归一化);
- 设定指标权重(比如舒适0.4、成本0.3、采光0.2、美观0.1);
- 计算每个方案到正理想解和负理想解的欧氏距离;
- 按相对贴近度排序,选最高者。
TOPSIS的好处是“透明”——评委能看清你给了什么权重、凭什么选它。而“权重从哪来”这个问题,你可以在灵敏度分析里用三种不同的权重组合各跑一遍,如果排序结果变化不大,就说明你的方案有鲁棒性;如果变化剧烈,就诚实说明这种不确定性并给出建议。这种处理方式比特意调权重让结果好看要高明得多。
6. 气象数据的获取与处理:别让数据拖了后腿
很多队伍卡在美赛E题,不是模型不行,而是数据不知道怎么找。这里给你一份“开箱即用”的数据路线。
6.1 三个可靠的数据源
- NSRDB(美国国家太阳辐射数据库):免费提供美国及周边地区逐小时的太阳辐射、气象数据,直接生成TMY3典型气象年文件。做美国赛题首选;
- EnergyPlus Weather Data(EPW):全球数千个站点的逐时气象文件,含干球温度、湿球温度、太阳直射/散射辐射等,格式规范,直接可以解析进模型;
- 中国气象数据网/CSWD(中国建筑热环境分析专用气象数据集):做国内城市的建筑能耗分析时用,数据质量可靠。
import pandas as pd import epw def load_epw_data(file_path): """读取EPW格式气象文件并提取关键字段""" with open(file_path, 'r') as f: # EPW前8行是文件头信息 header = [f.readline() for _ in range(8)] df = pd.read_csv(file_path, skiprows=8, header=None) df.columns = ['year', 'month', 'day', 'hour', 'minute', 'dry_bulb_temp', 'dew_point_temp', 'relative_humidity', 'atmospheric_pressure', 'extraterrestrial_horizontal_radiation', 'extraterrestrial_normal_radiation', 'horizontal_infrared_radiation', 'global_horizontal_radiation', 'direct_normal_radiation', 'diffuse_horizontal_radiation', ...] # 提取需要的列 weather = df[['month', 'day', 'hour', 'dry_bulb_temp', 'global_horizontal_radiation']].copy() weather['solar_w'] = weather['global_horizontal_radiation'] return weather6.2 数据处理的三个坑
第一个坑是“时区”。EPW里的时间是当地标准时间,不是太阳时,你算太阳位置时必须先按前面的公式转换。第二个坑是“辐射量单位”。EPW里很多辐射字段单位是Wh/m²(每小时的累计量),但有些数据库给的是W/m²(瞬时功率),两者数值上可以直接比较但物理含义不同,必须搞清楚。第三个坑是“无效数据”。EPW里缺测值通常用-9999标记,读取后要填充或剔除,否则仿真结果会飞掉。
我见过不少队伍栽在处理气象数据上,一整天都在纠结为什么仿真温度是负几百摄氏度。不管模型多漂亮,数据处理一崩,全场成绩就完了。
你拿到的题目通常会指定一个城市(比如菲尼克斯、波特兰、亚特兰大),建议选取该地EPW气象文件后,再额外选取一个对比城市(比如明尼阿波利斯)做“模型可移植性”验证——同一个遮阳方案在不同气候区的表现差异,本身就是一道很好的分析题。E题很吃“气候分区对比”这一点,因为被动式遮阳设计的核心就是“因地制宜”。
7. 美赛实战:论文结构与可视化策略
最后说一下论文的呈现,这部分我觉得和模型同等重要——你模型再对,讲不清楚一样白搭。
7.1 一定要有的五张图
第一张:研究框架图,展示“太阳几何—遮阳投影—热平衡—多目标优化”的逻辑链条,让评委30秒内知道你的思路。第二张:太阳轨迹图,包含四个关键节气的日轨曲线,叠加遮阳角范围阴影,直观看出设计的季节选择性。第三张:遮阳覆盖率热力图(时间×遮阳率),这是全文最直观的模型输出。第四张:室内温度逐时曲线对比图,放“无遮阳 vs 有遮阳”两条线,用阴影标出舒适温度区间。第五张:帕累托前沿散点图,标出最终推荐方案的位置。
这五张图不是锦上添花,是每张都对应正文中的一个核心结论。做题时先列这五张图,再围绕它们写文字,效率和逻辑都会好很多。
7.2 论文写作的个人心得
美赛E题的Summary Sheet,我个人建议第一句话直接给数字——“本研究针对XX城市某办公楼南向窗户,设计了水平挑出0.55米的被动遮阳方案,在夏季降低室内峰值温度约4.2°C,全年过热时数降低61%,同时将冬季得热损失控制在8%以内。”一句话把“对象、方法、核心结果、指标改善”全说清楚,比“本文提出了一个基于XX的方法”强十倍。
正文里我习惯用小标题的“结论前置”写法——每一节开头先写“结论:XXX”,然后给推导过程。这样即使评委只花10分钟快速翻你的论文,也能在每一页抓到重点。竞赛评委不是审论文的教授,他们要在短时间内看几百份作品,你帮他省时间,他帮你提分。
代码部分,不要全贴代码。把核心计算函数和关键公式对应起来贴,其他自定义工具函数放附录。美赛论文不是GitHub README,评委看的是你的建模逻辑,不是你会不会调包。
7.3 这支队伍踩过的坑
分享几个我们在模拟和实战中真实踩过的坑,希望你绕开。
第一,太阳方位角算法选错。网上很多教程用“从正北起算”的方位角公式,和建筑热工领域的“从正南起算”不一致,导致投影计算时符号全反。我的建议是,统一用前面代码里的“正南为0”约定,并且每个函数里都写明约定,别靠心算记。
第二,把遮阳覆盖率直接当成“能量削减比例”。实际上玻璃有SHGC(太阳得热系数),窗框有遮挡,阴影区域内的散射辐射也没有完全消失。更精确的做法是:遮阳覆盖率只削减“直射辐射成分”,散射辐射成分保留一定比例。如果不想做得太细,至少要写一句假设:“模型假设遮阳仅削减直射辐射,对散射辐射无遮挡。”否则审稿人一眼就看出模型过粗。
第三,直接对整面墙做优化,忽略了窗户朝向的差异。真正的被动式遮阳分析必须按朝向分别建模——南向、东向、西向的遮阳设计逻辑完全不同。整面墙统一处理会把很多关键物理现象抹平。
第四,实测发现“冬季得热损失”被过度夸大。很多队伍用“全年度时数”作为唯一目标,结果优化算法直接把遮阳板做成0.1米——因为冬季不能有一点遮挡。但现实中还要考虑眩光控制、夏季极端高温等,所以多目标设计里要加一个“最小挑出长度”约束(比如0.3米),保证遮阳的基本功能。
第五,最后一晚不要改模型。无论你觉得现在的方案有多“不够高级”,稳定地交出一篇结构完整的作品永远比冒险重构要强。把夜间时间留给论文润色和图件完善,收益远高于再调一轮参数。
被动式遮阳这道题整体难度中等偏上,但只要你把“太阳几何—投影遮阳—热平衡—多目标优化”这条主线走扎实,再加一组可靠的气象数据和五张逻辑严密的图,最后的成绩一定不会差。做美赛这么多年,我越发觉得真正拉开差距的不是谁用了更复杂的算法,而是谁把简单模型用得更扎实、验证得更充分、讲得更清楚——这在E题上表现得尤为明显。