简介2023年高教社杯全国大学生数学建模竞赛A题围绕定日镜场优化设计展开这份资源打包了完整的解题方案与MATLAB程序适合备赛学生、建模爱好者以及从事光热发电研究的工程技术人员。压缩包内共23个文件以Word文档中的xml结构文件为主用于保存正文内容、样式定义与相互关系同时配有6张png图片和1张jpg图片直观呈现镜场布局、太阳轨迹及能量收集效果。整个压缩包仅844KB下载与解压都很方便。截至目前已有44人浏览学习具有一定的参考价值。内容不仅包括太阳位置模型、镜面朝向和角度的计算方法还深入分析了镜场规模布置以及材料、安装、运维等成本因素形成多目标优化建模思路。附带的MATLAB代码支持太阳光轨迹模拟、参数优化与结果可视化可帮助读者快速复现赛题模型验证不同设计变量对光热转换效率的影响从而系统掌握数学建模与编程实现的完整流程。1. 定日镜场优化一道让新手误以为是几何题的约束优化问题定日镜场是塔式光热电站的核心能量收集单元成百上千面镜子把阳光反射到吸热塔顶的集热器上。这道A题表面上是算镜面坐标怎么摆骨子里却是一个高维、非线性、带耦合约束的优化问题。很多队伍拿到题第一反应是画同心圆、排对称阵结果发现年均光学效率怎么算都不对真正卡住他们的不是几何公式而是目标函数本身就写错了一半。这个模型的难点在于镜面效率不是常数它由余弦效率、阴影遮挡效率、截断效率、大气衰减效率四项耦合而成而每一项都同时依赖太阳位置、塔高和每一面镜子的坐标。更反直觉的是镜面尺寸不是越大越好对称排列也不一定最优盲目增加镜子密度反而会因阴影遮挡和截断损失拉低总输出。这篇文章按我平时做这类优化问题的顺序展开先把效率模型拆成能写进Matlab的数学形式再给出可直接运行的代码框架然后讲优化算法选型和参数设定最后列几个最容易翻车的坑。适合正在备赛的参赛者也适合做光热镜场初步布局验证的从业者照着这套流程能把一个镜场优化问题从模型一路推到结果。2. 从光学效率到设计变量把A题拆成能写进Matlab的数学形式拿到这类题我一般不会先画布局图而是先把评价函数写出来。定日镜场优化的所有目标最终都落到“全年累计输出热功率”上而这个功率由太阳直接法向辐射DNI和镜场光学效率共同决定。光学效率不拆开后面写代码就是在黑匣子里瞎试。下面把每个效率项逐一拆开讲清楚。2.1 光学效率的四项主成分余弦、阴影遮挡、截断、大气衰减第一项是余弦效率它是镜场效率里权重最大、也最好算的一项。太阳光以某个角度入射到镜面镜面再把光反射到塔顶镜面法向要取入射方向和反射方向的角平分线。设太阳方向单位向量为s反射方向单位向量为t则余弦效率为 η_cos sqrt((1 s·t) / 2)。中午前后正南侧的镜子反射方向接近正北上方s·t接近1效率能到0.95以上清晨和傍晚太阳从东侧低角度入射大部分镜子要大幅倾斜镜面余弦效率往往掉到0.7以下。这项可以直接用向量点积算是整个模型里最不容易出错的部分。第二项是阴影遮挡效率这是最让新手头疼的。阴影指入射光被前排镜子挡住遮挡指反射光在去往吸热塔的路上被其他镜子挡住。清晨太阳高度角低南方镜子会遮住北方镜子的入射光而所有镜子反射光都朝塔中心汇聚近塔镜子可能恰好挡在远塔镜子的反射光路上。严格计算需要逐对镜面做投影重叠判断复杂度是O(N²)级别的。很多队伍为省时间只判断同环相邻镜面算出来的效率在冬季早晨会偏高得离谱。第三项是截断效率。镜面反射的不是理想平行光太阳本身有约4.65 mrad的张角加上镜面面积有限反射光斑传到塔顶会扩散成一定尺寸的圆或椭圆。集热器窗口半径固定光斑越大落入窗口的比例就越低。远端镜子距离塔几百米光斑半径可能从几十厘米扩到几米截断效率骤降。这就是镜场半径不是越大越好的根本原因。第四项是大气衰减效率光在镜面到塔顶的斜距上传播会被大气吸收散射斜距越长损失越大常用工程经验式 η_atm 0.99321 - 0.0001176d 1.97e-8d² 来估算。把四项效率乘起来再乘以镜面反射率ρ一般取0.92就是单面镜子在某个时刻的光学效率。注意这里每一项都用的是瞬时值太阳位置随时间变所以效率也随时间变。全年逐时算一遍才能得到年均效率任何拿“正午一个时刻”代表全天效率的做法都会严重失真。2.2 设计变量与三类硬约束中心坐标、安全间距和场地边界设计变量很直接在镜面尺寸、塔高、场地半径都给定的前提下变量的就是每面定日镜的中心坐标一个N×2的矩阵pos。N面镜子的横纵坐标全放开就是2N维的连续优化问题。这里不要试图去优化镜面尺寸或塔高赛题给定了就按给定的来变量维度每多一维收敛难度就成倍增加。约束条件有三类写优化器之前必须都列清楚。第一类是安全间距约束任意两面镜子的中心距不能小于一个安全值D_safe避免镜面边缘碰撞或相邻遮挡过密。我一般按最保守的取法D_safe取镜面对角线长度再加0.5到1米的安全间隙也就是D_safe sqrt(w² h²) gap。第二类是塔基安全约束镜子中心不能离塔太近中心到塔基的距离要大于塔体半径加安全裕量。第三类是场地边界约束镜子中心可以在圆内但镜面边缘不能越出圆形场地等价于中心到塔基距离不能超过R_field减去镜面对角线一半。这三类约束里最容易写漏的是第三类。很多同学只判断“中心距小于场地半径”就以为万事大吉实际上镜子有物理尺寸中心距接近场地半径时镜面早就伸出去了。这类错误在坐标优化里极其隐蔽因为它不影响最优点附近的梯度方向只会在最终布局里埋下一个违规解。我建议把约束统一写成向量形式交给非线性约束函数一起处理后面第3章的代码会直接给出写法。2.3 目标函数全年逐小时累加与单位镜面面积输出功率目标函数我习惯写成全年平均热功率最大化。设某一时刻的DNI为D(t)第i面镜子在该时刻的光学效率为η_i(t)镜面面积为A_m则全镜场在t时刻的输出热功率为 ρ · A_m · Σ_i D(t)·η_i(t)。把一年中所有有效日照时刻累加再取平均就是年均输出热功率。注意日照时刻要滤掉太阳高度角小于等于0的时段那些时刻DNI通常为0但数值上要防止出现“负功率”或除零。赛题还会要求单位镜面面积输出功率不低于某个阈值用来防止“堆一大堆镜子但每面镜子产出都很低”的粗放布局。这个要求我一般处理成约束条件而不是目标函数目标函数专注最大化年均热功率单位面积功率作为非线性约束传给优化器。因为如果把它写进目标函数就得手动调两个目标的权重而权重初值怎么定本身就是个麻烦事。这里还有个容易被忽略的点DNI数据是按时刻给的但镜场效率依赖于太阳位置太阳位置又依赖于时刻和地理纬度。所以目标函数必须把DNI和太阳位置放在同一个时间轴上对齐。如果赛题的DNI表是按“某月某日某时”组织的就先把日期转成年积日再按真太阳时计算太阳位置最后插值DNI。顺序反了数据错位全年效率曲线会异常得莫名其妙。3. Matlab实现从零搭出可运行的镜场效率计算框架数学形式定下来后写代码就有明确边界了。我给出一套可运行的Matlab骨架按“参数初始化→太阳位置→单镜效率→全镜场目标函数”四层搭起来。这套骨架不依赖任何第三方工具箱只要能跑基础函数就能用优化阶段再引入全局优化工具箱。3.1 参数初始化与同心圆坐标生成镜场参数都放在一个结构体里方便后续改塔高、改镜面尺寸时不动函数签名。初始布局先用同心圆加层间角度错位的方式生成保证最小间距可控这也是镜场优化的常用起点。% 镜场参数与初始布局生成 function pos init_circular(layers, param) r_start param.r_tower param.D_safe * 1.5; % 避开塔基安全区 r_end param.R_field - param.mirror_diag / 2; % 扣除镜面半对角线 pos []; for k 1:layers r r_start (r_end - r_start) / (layers - 1) * (k - 1); n_ring floor(2 * pi * r / param.D_safe); % 该环最多放多少镜 angles (0:n_ring-1) * 2 * pi / n_ring k * pi / 5; % 层间错位 pos [pos; r * cos(angles), r * sin(angles)]; end pos pos(1:param.N_mirror, :); % 截取前N面镜 end坐标系采用x轴向东、y轴向北、z轴天顶塔基坐标取原点。r_start从塔基安全区外开始r_end预留了镜面半对角线确保最外圈镜子不越界。层间错位用k*pi/5目的是让相邻环的镜子错开角度避免径向对齐造成严重的阴影遮挡。n_ring用floor向下取整天然满足安全间距要求。调用这段代码前需要先定义param结构体至少包含H_tower塔高、R_field场地半径、mirror_w和mirror_h镜面宽高、r_tower塔体半径、D_safe安全中心距、N_mirror镜面数量、rho反射率。镜面对角线mirror_diag直接由宽高算出来。如果生成的坐标数量不足N_mirror说明层数太少或安全间距太大加层数或减小gap即可这一步只是初始猜测不必追求精确。3.2 太阳位置计算用真太阳时和赤纬角估算的方向向量太阳位置是效率计算的时间基准。用简化天文公式计算赤纬角和太阳高度角方位角以正南为0、向西为正返回东、北、天顶三分量构成的方向向量。这个简化足够支撑赛题精度不需要引入高精度天文库。% 太阳方向向量返回东、北、天顶三分量 function s sun_vector(day, hour, lat_deg) decl 23.45 * sin(2 * pi * (284 day) / 365) * pi / 180; % 赤纬角 lat lat_deg * pi / 180; omega (hour - 12) * 15 * pi / 180; % 时角正午为0 sin_alt sin(lat) * sin(decl) cos(lat) * cos(decl) * cos(omega); alt asin(max(-1, min(1, sin_alt))); % 太阳高度角 if alt 0 s [0 0 0]; % 夜间返回零向量 return; end cos_az (sin(decl) - sin(lat) * sin(alt)) / (cos(lat) * cos(alt)); cos_az max(-1, min(1, cos_az)); az acos(cos_az); % 方位角正南为0 if hour 12 az -az; % 上午偏东取负 end s [-cos(alt) * sin(az), cos(alt) * cos(az), sin(alt)]; end这段代码里最容易被忽略的是方位角正负号。正南为0度、向西为正时上午太阳在东侧方位角为负东向分量 -cos(alt)*sin(az) 自然为正下午反过来。高度角小于0时直接返回零向量调用方就可以跳过这个时刻避免后续除零和NaN。day是年积日1月1日为112月31日为365hour是真太阳时不是北京时间赛题给的DNI表若按地方时记录需要先做时差修正否则效率曲线会整体偏移。3.3 单镜光学效率计算函数单镜效率函数输入一面镜子的坐标和一个太阳方向向量输出该时刻的光学效率。这里把余弦效率、大气衰减、截断效率都算清楚阴影遮挡先用占位符设为1完整版在5.3节给出替换方案。% 单面镜子在某时刻的光学效率 function eta mirror_efficiency(pos_i, s, param) if norm(s) 0 eta 0; return; end tower_top [0, 0, param.H_tower]; t tower_top - [pos_i, 0]; t t / norm(t); % 反射方向单位向量 st max(-1, min(1, s * t)); % 防止数值越界 eta_cos sqrt((1 st) / 2 1e-12); % 余弦效率 d norm(tower_top - [pos_i, 0]); % 斜距 eta_atm 0.99321 - 1.176e-4 * d 1.97e-8 * d^2; % 大气衰减 eta_atm max(0, min(1, eta_atm)); A_m param.mirror_w * param.mirror_h; r_spot sqrt(A_m / pi) d * tan(4.65e-3); % 光斑半径估计 eta_trunc min(1, (param.r_receiver / r_spot)^2);% 截断效率 eta_sb 1; % 占位后面替换 eta eta_cos * eta_atm * eta_trunc * eta_sb * param.rho; end这里有个容易写错的地方余弦效率用的是eta_cos sqrt((1 s·t)/2)不是直接取s和t的点积。原因是镜面法向是入射和反射方向的角平分线余弦效率是入射方向与法向夹角的余弦数学上转换后就是sqrt((1s·t)/2)。s*t 在Matlab里是行向量乘列向量得到标量注意维度方向写反会得到矩阵而不是标量。eta_atm的系数是工程经验值d用斜距而不是水平距单位是米。eta_trunc用光斑半径和集热器窗口半径的平方比做近似若要精细计算应该按光斑与窗口的重叠面积比例来算这个在第5章会再展开。3.4 全镜场逐时效率与目标函数拼装目标函数采用“12个月第15天作为代表日、每小时一个采样点”的策略共288个时刻先跑通流程优化收敛后再换成全年8760小时精算。这样做的原因是初期调参时目标函数会被调用几百上千次全时刻直接算会让一次迭代就要等几十分钟。% 年均热功率先用12个代表日简化计算 function P annual_power(pos, param) rep_days [15 46 74 105 135 166 196 227 258 288 319 349]; P 0; for m 1:12 for h 1:24 s sun_vector(rep_days(m), h - 0.5, param.lat); if norm(s) 0 continue; end DNI dni_table(m, h); % 按赛题数据格式读取 eta_sum 0; for i 1:size(pos, 1) eta_sum eta_sum mirror_efficiency(pos(i, :), s, param); end P P DNI * eta_sum * param.mirror_w * param.mirror_h * param.rho; end end P P / 288; enddni_table需要你自己按赛题附带的DNI表读进来常见做法是readtable后reshape成12×24矩阵行对应代表月列对应小时。h-0.5表示取每个小时中点的太阳位置避免用整点时刻导致的计算偏差。外层两层循环是时间内层是镜面循环这个三重结构在精度要求高时会很慢所以先用288时刻版本调优化算法确定布局趋势后再把代表日换成全年每天。这段代码跑通后就拥有了一个可微分性不存在的黑盒目标函数下一步要解决的核心问题是怎么在2N维的连续空间里找到最优坐标。直接上fmincon大概率会失败原因和应对策略在下一章讲。4. 优化算法选型与关键参数为什么不能直接跑fmincon很多同学拿到目标函数第一反应就是调fmincon。我对这个选择的评价是可以跑但几乎必坑。镜场优化问题的数学性质决定了它不适合默认配置下的梯度优化器理解这一点比调参数更重要。4.1 非凸、高维、无梯度直接求导的三个障碍第一个障碍是非凸性。阴影遮挡效率在镜面间距接近安全阈值时不连续两片镜子从“刚好不遮”到“开始遮挡”的效率变化是阶跃式的。镜面距离这个变量出现在约束和目标函数里都带绝对值整个目标函数在可行域内存在大量鞍点和平坦区域。第二个障碍是高维几百面镜子意味着上千维变量fmincon的内点法在每轮迭代都要近似求解一个大规模线性系统内存和时间开销都很夸张。第三个障碍是无梯度。镜场效率没有解析梯度fmincon默认用有限差分估计梯度而有限差分步长选小了会被数值噪声淹没选大了又跨过遮挡判别阈值差分结果失真。实际表现就是迭代十几轮后目标函数不再下降优化器报出“目标函数在初始点不可行”或“退出”等各种莫名其妙的信息。所以我的选择是避开纯梯度算法。工程上更稳的路径是“全局粗搜局部精修”两段式第一段用可枚举的布局参数做全局扫描第二段用patternsearch或遗传算法对坐标做局部微调这两类算法对噪声目标函数的容忍度远高于fmincon。4.2 两段式优化全局布局扫描加局部坐标精修全局粗搜不直接搜坐标而是搜布局参数环数、每环镜数、半径缩放比例。这些参数从个位数到十几组合数量有限完全枚举也能跑完。每个候选布局算一次288时刻的年均热功率排序后取最优作为局部优化的起点。局部精修阶段再用patternsearch对坐标做有限步长的模式搜索。% 第一段全局布局参数扫描 cand []; for layers 6:2:14 pos0 init_circular(layers, param); val -annual_power(pos0, param); % 取负转最小化 cand [cand; {pos0, val}]; end [~, idx] min([cand{:, 2}]); pos_start cand{idx, 1}; % 第二段patternsearch 坐标精修 lb -param.R_field * ones(size(pos_start)); ub param.R_field * ones(size(pos_start)); opts optimoptions(patternsearch, UseParallel, true, ... MaxIterations, 200, Display, final); pos_opt patternsearch((p) -annual_power(p, param), pos_start, ... [], [], [], [], lb, ub, (p) field_constraints(p, param), opts);patternsearch按模式在坐标邻域内尝试步进不依赖梯度目标函数噪声大也能继续跑。UseParallel设为true后它会用并行池同时计算多个模式方向的候选点加速比接近核心数。lb和ub用场地半径上下界框住所有镜子坐标防止坐标跑飞到场地外但注意这只是箱式约束真正的圆边界约束要由field_constraints这个非线性约束函数来保证。field_constraints返回[c, ceq]c是三个约束条件的违反量向量任意两镜中心距减去D_safe、塔基安全半径减去中心距、中心距减去场地边界安全半径ceq为空。patternsearch每轮都会检查这个函数违规的候选点会被罚掉。如果说fmincon是“顺着坡往下滑”patternsearch更像是“在附近试方向”后者更适合这个目标函数不光滑的问题。4.3 关键参数设置与加速技巧参数设置直接决定两段式优化能不能在可接受时间内收敛。我按自己的经验总结了一份推荐表照着设能避开大部分明显的坑。参数推荐值说明安全间隙gap0.5~1 m太小遮挡严重太大浪费场地先给1 m粗算初始布局环数8~12太少浪费远场太多近塔遮挡重每环镜数floor(2πr / D_safe)天然保证相邻镜面中心距代表日采样12个月第15天粗优化用288时刻精优化再换全时刻局部优化器patternsearch比fmincon抗噪支持并行MaxIterations200超过200轮基本收益很小表格之外最有效的加速技巧是把效率计算从“逐镜调用函数”改成“矩阵化批量计算”。把所有镜面坐标一次性传入反射方向向量组成N×3矩阵太阳方向向量用repmat扩展成N×3这样余弦效率可以一次矩阵运算算完N面镜子大气衰减和截断效率同理。阴影遮挡部分虽然省不掉逐对判断但可以先按方位角排序只检查同一方位扇区内的镜子把复杂度从N²降到N log N量级。还有一个小技巧优化初期把DNI表做一次“平滑”比如把整点DNI值做三小时滑动平均。这样做能降低目标函数的高频抖动让优化器更早收敛到有潜力的区域等布局定型后再用原始DNI数据做一次精校。严格说这不是最优解但对比“精确但跑不动”的模型能出结果比什么都重要。5. 定日镜场优化中的5个常见坑与排查方法这一章写的都是我见过真实发生的翻车案例覆盖效率计算、代码实现、约束写法和性能优化几个层面。每一条都是现象到原因再到解决办法的顺序排查时可以直接对着表格找。5.1 截断效率把光斑当点光源年均效率虚高到0.7朋友A同学做完第一版模型年均光学效率高达0.72比公开文献里的塔式电站效率高出一大截。检查代码发现他把截断效率设成了恒等于1也就是假设所有反射光都能被集热器完整接收。原因是他在推导时把镜面反射理想化为平行光忽略了太阳张角。解决办法是用光斑扩散模型替换点光源假设。光斑半径r_spot sqrt(A_m / pi) d * tan(4.65e-3)其中A_m是镜面面积d是斜距4.65 mrad是太阳半径对应张角tan值约0.00465500米距离光斑半径会增加2.3米。把3.3节里的eta_trunc公式换成这个效率立刻降到合理区间。如果赛题给了集热器具体口径更准确地是按光斑与窗口的圆交叠面积比例计算而不是平方比近似。5.2 太阳方向向量维度没对齐优化目标全是NaN某次调试中目标函数返回了一堆NaN优化器在第一次迭代就报错退出。定位到问题出在批量计算余弦效率时把太阳方向向量s1×3和反射方向矩阵tN×3写成了s * t结果得到一个N×N矩阵再和eta向量逐元素相乘时维度炸了。这里的关键是分清矩阵乘法和元素乘法的使用场景。单镜效率用s * t 得到标量批量计算用s_matrix * t 得到N×1列向量。写代码时养成习惯先对单镜跑通再扩展成批量任何维度不匹配的报错先检查每一处乘法和点乘的左右尺寸。另外太阳高度角小于0时返回零向量如果不跳过这个时刻后面norm(s)等于0再除零也会产出NaN。5.3 阴影遮挡只判断相邻镜北侧镜场效率被高估有位开发者把阴影遮挡简化为“只检查同一环相邻镜面”结果冬季早晨北侧镜场的效率竟然高于南侧完全违背物理直觉。原因很明确冬季太阳从东南方向升起南侧镜子把入射光挡住被挡的恰好是北侧镜子的下侧区域同时北侧镜子的反射光在射向塔顶时会穿过南侧镜子区域反射遮挡同样跨越了多个环。解决办法是把遮挡判断从“相邻”改成“同方位扇区”。具体骨架是对每面镜子沿入射方向做投影遍历其他镜子计算相对位置向量在入射方向上的投影长度如果投影大于0且横向距离小于镜面半径就判定存在阴影遮挡。反射方向同理只是方向向量换成t。这个O(N²)循环在Matlab里跑288时刻会比较慢可以先按方位角排序只查正负30度扇区内的镜子精度损失很小但速度能快一个数量级。5.4 全年8760小时逐层嵌套循环跑一天都没收敛第一次做全年精算时三重循环的复杂度大约是时间8760乘以镜数N再乘以遮挡判断N跑到第二天早上还没完成第一个月。原因不是机器配置差而是目标函数在优化器里要被调用上千次精确模型根本喂不饱迭代。解决办法分两步走。第一步粗优化阶段用12个代表日、每小时一个采样点共288时刻覆盖太阳位置从低到高的主要变化足够区分不同布局的优劣。第二步布局基本定型后再用全年8760时刻精算一次作为最终结果。如果连288时刻都慢就把镜场效率计算改成矩阵化并打开patternsearch的UseParallel。记住一个原则优化器只需要“比较布局好坏”不需要精确到小数点后三位精度留给最后一步评估。5.5 边界约束用中心点判断镜面悄悄伸出场地一个看起来“所有约束都满足”的布局画出来后最外圈镜子的边缘明显越过了场地边界。问题出在约束函数只判断了中心坐标满足sqrt(x²y²) ≤ R_field没有把镜子本身的尺寸考虑进去。镜面是矩形外接圆半径是sqrt(w²h²)/2中心距场地边界小于这个值时镜面在某个角度下必然越界。解决方法是把场地约束的右端项改成R_field - sqrt(w²h²)/2同时把塔基安全约束的左端项加上镜面半对角线。修改约束后还要画图验证用patch或rectangle把每面镜子按实际宽高画出来肉眼检查最外圈是否有悬空或越界。约束函数里的小数点误差在单面镜子上看不出来几百面镜子叠加后就是明确的违规。6. 结果验证与进阶用法从可视化诊断到参数灵敏度优化收敛不代表问题做完我一般会在出数据前画三张诊断图。第一张是月均输出热功率的柱状图正常形状应该夏季高冬季低如果冬季出现异常高点先查DNI数据和太阳位置是否对上了。第二张是全镜场年均效率热力图用scatter画坐标点并按年均效率着色过密区域会呈现明显低效率色块说明局部遮挡严重。第三张是典型日逐时功率曲线看中午是否有突变或掉零如果有多半是拦截效率或太阳位置计算出了问题。% 镜场年均效率热力图 eta_annual zeros(size(pos, 1), 1); for i 1:size(pos, 1) eta_sum 0; for t 1:288 s sun_vector(rep_days(mod(t-1,12)1), (mod(t-1,24)1)-0.5, param.lat); eta_sum eta_sum mirror_efficiency(pos(i,:), s, param); end eta_annual(i) eta_sum / 288; end scatter(pos(:,1), pos(:,2), 30, eta_annual, filled); colorbar; axis equal;布局验证通过后再做参数灵敏度扫描才有意义。常见做法是对塔高做±10%范围的扫描每个候选塔高都跑一遍两段式优化记录年均热功率和单位镜面面积输出功率。这两个指标随塔高变化的曲线通常是先升后降拐点就是当前镜场尺寸下的推荐塔高。镜面尺寸和场地半径同理扫完能看出当前方案的性能天花板也能答出赛题里“参数变化时结果如何变化”这类问题。如果还想往更深做可以引入多目标优化把年均热功率最大化和单位镜面面积输出功率最大化同时作为目标用NSGA-II这类算法求帕累托前沿前沿上的每个点都对应一个镜场布局决策者可以从前沿上挑一个符合约束的解。这个思路的好处是不用拍脑袋定权重让优化结果告诉你“多放镜子的边际收益什么时候开始下降”。我现在拿到一个优化好的布局第一件事永远是先跑全年曲线和三张诊断图确认没有孤立低效镜面再谈下一步调参。这个习惯帮我避开了很多次“目标函数数值没问题物理上完全说不过去”的尴尬情况也希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?