定日镜场优化:光学效率分解与阴影遮挡离散化判断策略
发布时间:2026/9/18 19:10:11 锦皓数字建站

简介一份面向2023年全国大学生数学建模竞赛优秀论文的深度解析资料聚焦定日镜场输出热功率优化问题适合正在备赛数学建模的高校学生与指导老师参考学习。论文完整呈现问题一至问题三的建模与求解流程包括镜场坐标系与镜面坐标系的转换、基于反射定律的镜面姿态确定、阴影遮挡与集热器截断效率的离散化计算方法以及变步长搜索算法、二分法等优化求解手段并给出三类优化策略下的具体参数与结果数据便于读者理解从模型构建到工程应用的完整链路。资源为PDF格式共1个文件包体大小约11.06MB已有383人学习下载。通过阅读这份优秀论文读者可以系统把握国赛论文的摘要、关键词、问题重述、模型建立与求解细节学习规范的论文结构与图表表达提升建模实战能力特别适合作为赛前论文阅读与仿写范文。1. 数学建模国赛定日镜场题卡住多数人的不是优化算法而是光学效率分解2023 年数模国赛 A 题“定日镜场的输出功率优化”拿到手时很多队伍的第一反应是“这不就是个单目标优化嘛遍历加网格搜索就能交差”真正动手才发现目标函数里任何一个光学效率分量都不是查表能拿到的。定日镜场的输出热功率依赖镜面法向量、阴影遮挡、集热器截断这三层物理过程每一层都要做坐标变换和离散化判断稍有偏差优化结果从 36MW 变成 60MW 都是可能的。这篇 2023 年国赛优秀论文 A127数学建模竞赛优秀论文最值得参考的地方就是它把“光学效率可计算”这件事做到了工程级可复现把阴影遮挡拆成塔挡、阴影、挡光三类损失把锥形光线离散成向量做圆柱面求交。对准备数模竞赛的人或者在做塔式光热电站前期方案设计的工程师这篇论文的坐标系搭建和离散化判断策略比最终优化结果更有迁移价值。2. 坐标系转换与镜面法向量定日镜姿态解算的向量化实现定日镜的姿态解算是整个优化模型的几何基座。论文的做法是建立两套坐标系镜场坐标系 XYZ 以圆形定日镜场中心为原点正东为 X 轴、正北为 Y 轴、垂直地面向上为 Z 轴镜面坐标系 xyz 以定日镜中心为原点镜面左右方向为 x 轴、上下方向为 y 轴、镜面外法向为 z 轴。两套坐标系之间通过坐标转换矩阵 T 完成换算光线向量从镜面坐标系转到镜场坐标系用Rg Ra · T。2.1 入射光线向量与反射光线向量的构造要确定镜面法向量必须先得到入射光方向向量和反射光方向向量。入射光向量由太阳高度角 αs 和太阳方位角 γs 确定import numpy as np def incident_vector(alpha_s, gamma_s): 根据太阳高度角和方位角计算入射光线方向向量镜场坐标系 alpha_s: 太阳高度角, rad gamma_s: 太阳方位角, rad I np.array([ -np.cos(alpha_s) * np.sin(gamma_s), -np.cos(alpha_s) * np.cos(gamma_s), -np.sin(alpha_s) ]) return I这里入射光向量的 z 分量取负值表示太阳光从上方斜射到镜面方向指向镜面。太阳高度角和方位角由纬度 ϕ、太阳赤纬角 δ、太阳时角 ω 共同决定其中赤纬角和时角的计算直接依赖日期 D 和当地时间 ST。反射光向量则简单得多它恒定为定日镜中心 Pi 指向集热器中心 I 的单位向量因为定日镜控制系统始终把反射光对准集热器中心。2.2 镜面法向量的几何意义与代码实现反射定律在向量层面的表达是入射单位向量与反射单位向量的差向量方向恰好沿镜面法向。这是因为入射光和反射光关于法向量对称且两者都是单位向量平行四边形法则下对角线方向就是法向量方向。论文用的正是这个结论ni (Ri - Ii) / |Ri - Ii|。def mirror_normal(I_vec, R_vec): 由入射光单位向量和反射光单位向量求镜面法向量 I_vec: 入射光方向向量已归一化 R_vec: 反射光方向向量已归一化 diff R_vec - I_vec norm np.linalg.norm(diff) if norm 1e-12: return np.array([0.0, 0.0, 1.0]) return diff / norm这里要注意反射光向量 R_vec 必须事先归一化否则差向量方向会偏。实际写代码时常见错误是用I - R而不是R - I得到的法向量朝向反方向后续计算余弦效率时符号全乱。论文在式 (6) 中已经用绝对值号做了约束代码里再显式归一化一次避免浮点误差累积。2.3 海拔、DNI 与光学效率链路的参数传递镜面法向量只是第一步。定日镜场输出热功率的计算链路为E_field DNI * sum(Ai * ηi)其中 DNI 是法向直接辐射照度由太阳常数 G0、海拔 H 和太阳高度角 αs 决定。论文给出的 DNI 形式是G0 * (a b * exp(-c / sin(αs)))其中 a、b、c 是海拔的函数。这里最容易踩的坑是DNI 公式里的 sin(αs) 在清晨和傍晚趋近于 0指数项会剧烈变化所以时间步长不能取太大。论文后面用变步长搜索时时间离散精度直接影响了年均光学效率的收敛值。def dni(h_alt, alpha_s, G01.366): 计算法向直接辐射照度 DNI, 单位 kW/m^2 h_alt: 海拔高度, m alpha_s: 太阳高度角, rad # a, b, c 为海拔相关的拟合系数这里给出常见形式 a 0.4237 - 0.00821 * (6.5 - h_alt / 1000) ** 2 b 0.5055 0.00595 * (6.5 - h_alt / 1000) ** 2 c 0.2711 0.01858 * (2.5 - h_alt / 1000) ** 2 return G0 * (a b * np.exp(-c / np.sin(alpha_s)))这段代码的参数 a、b、c 是工程上常用的经验拟合形式实际国赛题目会给出具体取值表。重要的是理解参数传递顺序海拔 H 和太阳高度角 αs 先确定 DNIDNI 再与镜面面积、光学效率相乘得到单镜输出功率。如果把 DNI 当成常数问题一的计算误差会直接传导到问题二、三的优化目标里。3. 阴影遮挡效率与集热器截断效率离散化判断策略的完整拆解定日镜光学效率的表达式为η ηsb * ηcos * ηat * ηtrunc * ηref五个分量中镜面反射率 ηref 和大气透射率 ηat 是相对容易处理的前者按常数处理后者是关于镜面中心到集热器中心距离 dHR 的二次函数。真正的难点在阴影遮挡效率 ηsb 和集热器截断效率 ηtrunc这两项没有任何解析闭式解必须靠几何离散化判断。3.1 阴影遮挡损失的三种来源与处理边界论文把阴影遮挡损失拆成三类塔挡损失、阴影损失、挡光损失。塔挡损失指吸收塔圆柱形集热器在太阳光下形成的阴影落在某些定日镜上阴影损失指前排定日镜的阴影落在后排定日镜镜面上挡光损失指反射光在传播过程中被前排定日镜拦截未能到达集热器。三者几何机制不同处理方式也不同。塔挡损失的处理有个关键简化论文判断定日镜中心是否位于塔挡区域内而不是对整面镜子做区域求交。这个简化成立的前提是题目约束吸收塔附近 100m 内没有定日镜塔挡阴影的尺寸相对镜面尺寸更大用中心点判断足以近似。对镜面离散化后阴影损失和挡光损失则采用逐点判断策略。3.2 “无效点判断策略”的逻辑与实现所谓“无效点”是指定日镜镜面离散化后的某个网格点要么落在阴影区域无法接收入射光要么反射光线被其他定日镜遮挡无法到达集热器。判断一个点是否有效分两步先判断入射光方向上是否有遮挡物再判断反射光方向上是否有遮挡物。def is_valid_point(point, mirror_grid, incident_dir, tower_region): 判断镜面上某个离散点是否为有效点 point: 当前点坐标 mirror_grid: 所有定日镜面离散点的集合 incident_dir: 入射光线方向向量 tower_region: 塔挡区域定义 # 1. 塔挡判断点是否在塔挡阴影区域内 if point_in_region(point, tower_region): return False # 2. 阴影判断沿入射光反方向是否有其他镜面点遮挡 shadow_hit trace_ray(point, -incident_dir, mirror_grid) if shadow_hit: return False # 3. 挡光判断沿反射光方向是否有其他镜面点遮挡 reflect_hit trace_ray(point, reflect_dir, mirror_grid) if reflect_hit: return False return True这里 trace_ray 本质上是光线与矩形平面的求交测试。实现时要注意不能把当前点所在镜面自身算进遮挡物集合否则每个点都会被判定为无效。常见的做法是给每面定日镜一个唯一 ID遍历遮挡物时跳过同 ID 的镜面点。3.3 集热器截断效率的圆柱面求交法集热器是圆柱形截断效率指反射光线能真正打到集热器表面的比例。论文的思路是对锥形光线离散化把太阳光锥离散成若干条光线向量每条光线携带一部分辐射能然后求该光线所在直线与集热器圆柱面的交点交点在圆柱面有效高度范围内则计入截断。这里的关键是圆柱面的参数化方程和交点判断条件。参数含义典型取值h0吸收塔高度集热器中心高度由题目给定l圆柱形集热器高度约 8~12 mr圆柱形集热器底面半径约 4~7 mdHR镜面中心到集热器中心距离随镜位变化圆柱面求交的代码实现关键在于把三维直线方程代入圆柱面方程时先判断光线方向是否近似平行于圆柱轴线若是则直接跳过该光线def intersect_cylinder(ray_origin, ray_dir, tower_center, r, h_min, h_max): 计算光线与圆柱集热器的交点 ray_origin: 光线起点镜面离散点 ray_dir: 光线方向向量已归一化 tower_center: 集热器中心坐标 r: 圆柱底面半径 h_min, h_max: 圆柱高度区间 # 将光线平移到以集热器中心为原点的坐标系 p ray_origin - tower_center dx, dy, dz ray_dir # 求解光线在 XY 平面上与圆的交点参数 t a dx*dx dy*dy if a 1e-12: return None b 2 * (p[0]*dx p[1]*dy) c p[0]*p[0] p[1]*p[1] - r*r disc b*b - 4*a*c if disc 0: return None t1 (-b - np.sqrt(disc)) / (2*a) t2 (-b np.sqrt(disc)) / (2*a) for t in sorted([t1, t2]): if t 0: continue z_hit p[2] dz * t if h_min z_hit h_max: return t return None这段代码的物理含义是光线与圆柱面在 XY 平面投影成圆求直线与圆的交点再检查交点对应的 z 坐标是否落在集热器高度范围内。如果两个交点都在高度范围之外说明光线从集热器上方或下方掠过截断失败。实现时还有个细节反射光的起点在镜面离散点上方向向量由镜面法向量和入射光方向算出不能用入射光方向替代。3.4 余弦效率与大气透射率的串行计算余弦效率被定义为ηcos,i cosθi -Ii · ni / (|Ii| * |ni|)这里负号来源于 θ 是 Ii 与 ni 夹角的补角。很多队伍在这里忽略了负号导致余弦效率出现负值。大气透射率则是简单的二次函数1.97e-8 * dHR^2 - 0.0001176 * dHR 0.99321注意 dHR 的单位是米若坐标用了千米二次项系数会放大 10^6 倍。4. 从单镜效率到全场寻优分区域同心圆排布与变步长搜索算法问题一解决的是“给定布局算效率”问题二、三反过来给定额定功率 60MW要求设计吸收塔位置、定日镜尺寸、安装高度和排布方案使输出热功率最大化。论文的核心策略是先降低搜索维度再用变步长搜索和二分法找出最优参数组合。4.1 吸收塔选址策略太阳辐射分布的几何约束论文提出根据当地太阳辐射能分布确定吸收塔位置结论是吸收塔坐标仅位于 Y 轴负半轴。这个结论的物理基础是在北半球太阳方位角的变化范围决定了镜场南侧Y 负方向的辐射资源更丰富吸收塔偏向南侧可以减小北侧定日镜的反射距离和遮挡损失。选址策略用约束条件表达为constraints { tower_x: 0, # 吸收塔 X 坐标固定为 0 tower_y_range: (-150, 0), # 吸收塔 Y 坐标限制在负半轴 min_distance: 100 # 吸收塔与定日镜最小距离 }这个约束极大缩小了搜索空间。如果不加这个约束吸收塔位置是二维自由变量搜索量至少翻一个数量级。4.2 分区域同心圆规划策略的规则设计分区域同心圆规划策略把圆形定日镜场从内到外划分成若干个环形区域每个区域内定日镜的排布原则不同。内圈靠近吸收塔定日镜之间间距要留够避免挡光外圈距离远余弦效率和大气透射率下降需要靠更大镜面面积或更高安装高度补偿。给定镜面宽度 Wa、镜面高度 Wb、安装高度 hi 和镜间距 L0 后每层定日镜数量和坐标可以唯一确定区域排布原则间距系数适用条件内圈环形等间距1.0~1.2 L0靠近吸收塔挡光敏感中圈环形等间距径向偏移1.2~1.5 L0兼顾密度与遮挡外圈径向分层排布1.5~2.0 L0距离远截断效率低这里的间距系数不是拍脑袋定的而是和镜面尺寸挂钩。论文的设定是镜间距至少大于镜面宽度的某个倍数否则相邻定日镜在低太阳高度角时的阴影遮挡会非常严重。代码实现时每层定日镜坐标由极坐标生成按方位角均匀分布def generate_mirror_positions(radius_start, radius_end, mirror_w, spacing_factor, tower_pos): 生成一个环形区域内定日镜中心的位置坐标 positions [] r radius_start while r radius_end: # 该半径处的圆周长度决定可容纳的定日镜数量 circumference 2 * np.pi * r n_mirrors int(circumference / (spacing_factor * mirror_w)) angles np.linspace(0, 2*np.pi, n_mirrors, endpointFalse) for theta in angles: x tower_pos[0] r * np.cos(theta) y tower_pos[1] r * np.sin(theta) positions.append((x, y)) r spacing_factor * mirror_w return positions这段代码更准确地说是“径向逐层推进”的同心圆排布每一层的半径和数量由间距系数控制。间距系数越大镜间距越大遮挡损失越小但单位面积镜面数量下降输出功率可能不足。4.3 变步长搜索与二分法的配合使用问题二用变步长搜索算法求解最佳参数。变步长的核心思想是先在大范围内用大步长粗搜锁定最优参数所在的区间再在该区间内缩小步长精搜。代码骨架如下def variable_step_search(objective, param_ranges, coarse_step, fine_step, max_iter): 变步长搜索算法 objective: 目标函数输入参数返回输出热功率 param_ranges: 参数范围字典 coarse_step: 粗搜步长 fine_step: 精搜步长 best_params None best_value -np.inf # 第一轮粗搜 current {k: v[0] for k, v in param_ranges.items()} while current[list(param_ranges.keys())[0]] param_ranges[list(param_ranges.keys())[0]][1]: val objective(current) if val best_value: best_value val best_params current.copy() current[list(param_ranges.keys())[0]] coarse_step # 第二轮在 best_params 附近精搜 for k, v in param_ranges.items(): v0 best_params[k] current[k] max(v[0], v0 - coarse_step) while current[k] min(v[1], v0 coarse_step): val objective(current) if val best_value: best_value val best_params[k] current[k] current[k] fine_step return best_params, best_value这里的目标函数每调用一次都要完整跑一遍全年逐时或典型日逐时的光学效率计算计算量非常大。变步长搜索之所以比网格搜索高效是因为它先用大步长排除明显差的区域再用小步长在最优邻域内细分。问题三在此基础上叠加了二分法用来在定日镜规格分区域的情况下快速确定每个区域的镜面宽度和安装高度。4.4 问题二与问题三的求解结果对比问题二的结果是定日镜场年平均输出热功率 60.1189MW年平均光学效率 0.6028吸收塔位置 (0,−79)定日镜尺寸 5.5×5.5m安装高度 2.75m总镜面数 3385 面。问题三允许不同区域使用不同规格结果变为输出热功率 61.8593MW光学效率降到 0.5446单位面积功率 0.5307kW/m²总镜面数减少到 2846 面用了 7 种不同安装高度。对比之下有个反直觉的结论总功率提升了但光学效率反而下降了。原因在于问题三为了减少镜面数量、降低建设成本外圈使用了更大的镜面和更高的安装高度这些镜子的余弦效率和截断效率天然偏低拉低了全场平均值。这说明“光学效率”和“单位面积输出功率”是两个不同的优化目标前者衡量能量利用质量后者衡量经济性。5. 判断一个定日镜场模型是否可靠单位面积功率与截断效率的联动校验论文的模型跑完之后先不要急着把结果写进表格。我一般会用两个指标做交叉校验单位面积镜面年平均输出热功率和截断效率的变化趋势。单位面积功率的定义是全场输出热功率除以总镜面面积它直接反映了镜场布局的“经济密度”。问题一的单位面积功率是 0.5888kW/m²问题二降到 0.5871kW/m²问题三进一步降到 0.5307kW/m²。这个下降趋势是合理的越追求额定功率越需要铺设更多低效率边远镜面单位面积贡献必然下降。一个实用的校验技巧是把单位面积功率对镜场半径做分段统计。如果外圈镜面的单位面积功率比内圈低 30% 以上说明吸收塔高度和镜面安装高度的匹配有问题如果反而升高说明内圈排布过密遮挡损失异常。论文中问题三用了 7 种安装高度本质就是让外圈镜面抬高减少前排挡光这个做法会直接改善截断效率。截断效率另一个容易出错的地方是锥形光线离散的精度。离散光线数太少截断效率会随机波动优化算法会被噪声带偏离散太多计算量成倍增长。实际操作中我会先固定一个典型时刻比如春分日 12:00把离散光线数从 100 逐步增加到 1000观察截断效率是否收敛到 0.1% 以内。论文没有给出具体离散数但问题一的结果能稳定复现到 0.6051 的光学效率说明收敛性没有问题。最后建议把论文中的分区域同心圆策略改造成自适应间距搜索不要固定间距系数而是让每个区域的间距系数也成为优化变量目标函数改为单位面积输出功率。这样得到的布局会比固定间距的布局在同等功率下少用 3%~5% 的镜面。这也是把数模论文成果落地到工程方案设计时最值得扩展的一点。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。