联调通过后是周末,张辰难道没去项目组,而是在家好好的休息了两天。
说是休息,但是张辰也没有闲着,他把联调通过的日志翻出来又看了一遍,确认没有遗漏。周日整理了之前钱老讲的随机最优控制笔记,为后面的多目标优化做准备。
由于周一早上要开会,两人早早的就到了办公室,放下东西后便直奔三楼。
小会议室的门开着,周明已经坐在里面了,面前摊着几份文件。看到他们进来,他指了指对面的椅子,道:“坐。”
张辰和钱瑾姝坐下后,周明把一份文件推到桌子中间。
“总师的意思,判据和弹道优化模块已经纳入了总体流程,后续的维护和迭代你们继续跟。但同时,要开始一个新任务。”
张辰翻开文件,封面上写着“某型号高超音速飞行器气动与弹道联合优化”,级别比之前的高了一档,页角盖着“机密”的红章。
“高超音速?”钱瑾姝抬起头。
周明点了点头,“五马赫以上。热防护、气动外形、弹道、控制,这几个模块要耦合在一起算。之前你们做的是单独模块,现在要把它们串起来。”
“时限呢?”张辰问道。
“三个月出初算结果,半年内完成全流程验证。”
张辰心里估算了一下,道:“没问题!”。
周明站起来,拍了拍文件夹,叮嘱道:“总体组的接口你们已经熟悉了,新模块的数据流转图在文件里,回去看。这是机密任务,不可泄露!!当然,钱老例外。”
周明走后,会议室里安静下来。
张辰翻开文件,第一页是项目概述。
高超音速飞行器的气动热环境极其恶劣,表面温度超过两千度,传统的热防护材料不够用,需要从气动外形和弹道设计上主动降低热流。目标函数是多目标的——热流最小、射程最远、控制代价最低。
“三个目标互相冲突~~”钱瑾姝凑过来看了一眼,“热流小了,射程就短。射程远了,控制代价就大。”
“所以需要权衡。”张辰翻到下一页,是技术路线图,分了三个阶段。第一阶段是理论建模,第二阶段是算法开发,第三阶段是验证。
两个人把文件从头到尾过了一遍,花了将近一个小时。合上文件的时候,张辰看了一眼墙上的钟,快十一点了。
“第一阶段的理论建模,钱爷爷之前讲的那些能用得上。随机最优控制、多目标优化。”
“嗯。”,钱瑾姝点了点头,“咱们先自己研究,如果实在有苦难再问我爷爷!”
回到办公室,张辰把新项目的文件夹放在桌上,翻开第一页的技术要求,开始列清单。气动模型、热环境模型、弹道模型、控制模型,四个大块,每块下面又分若干子项。钱瑾姝在旁边做同样的事,把约束条件一条一条地列出来。
下午刚上班,周明又过来了,手里拿着一个U盘。
“这是新项目的初始数据和基线结果,你们先跑一遍,熟悉一下流程。”
张辰接过U盘,插上电脑。数据包不小,解压后占了几个G。他把基线结果调出来——现有方案的计算结果,热流峰值高,射程也没达到指标。
“基线结果不太理想。”钱瑾姝站在他身后,看着屏幕上的曲线。
“所以才要优化。”张辰把数据包拷贝到自己的工作目录,建了一个新分支。
接下来两天,两个人都在熟悉新项目的数据和流程。张辰把气动模型和弹道模型接在一起,跑了一组简单测试,发现两个模型的数据格式不匹配——气动模型输出的是压力分布,弹道模型需要的是气动力系数。
“中间加一个转换模块。”钱瑾姝说道。
“你来写?”
“行。”
钱瑾姝花了半天时间写了一个转换函数,把压力分布积分成气动力系数,又做了曲线拟合,保证插值精度。
周三下午,张辰把转换模块嵌进流程,跑通了第一组耦合计算。结果比基线好了一些,但离指标还差得远。
“方向对了,参数还得调。”张辰道。
钱瑾姝凑过来看输出数据,指着热流曲线的一个峰值,“这里的峰值太高了,可能是气动外形的参数设置问题。把迎角调小一度试试。”
张辰改了参数,重新跑。热流峰值降了一点,但射程也跟着降了。
“这就是多目标优化的难点。动一个参数,好几个目标一起变。”,张辰靠在椅背上,揉了揉眉心道。
“所以才要用我们之前做的内点法。把那套东西搬过来,约束条件重新列一下。”
张辰想了想,点了头,“明天开始改。”
周四和周五,两个人都在做这件事。张辰把内点法的主循环适配到新项目,输入参数从二十三个变成了三十多个,约束条件从十四项变成了二十多项。
钱瑾姝则重新推导了目标函数的光滑逼近,把热流、射程、控制代价三个目标加权合成一个标量函数。
周五下午,去钱老家之前,两个人把适配后的代码跑了一遍。程序运行正常,收敛到了一个可行解,但比基线提升不大。
“路对,参数没调好。”张辰把结果保存,合上电脑。
“不着急,下周慢慢调。咱们先回家!”,钱瑾姝把笔记本塞进帆布包。
到了钱家,钱文忠看了张辰一眼,摘下老花镜,“新项目拿到了?”
“拿到了,高超音速,气动和弹道联合优化。”
钱文忠点了点头,从书架上抽出一本讲义,翻开夹着书签的那一页。
“今天讲多目标优化的帕累托前沿。你们的三个目标互相冲突,单靠加权求和找不到所有的最优解。要学会看帕累托前沿,在不同的工况下选择合适的权重。”
张辰和钱瑾姝在对面坐下,打开笔记本。钱老讲得不快,从帕累托最优的定义开始,讲到怎么用数值方法逼近帕累托前沿,最后讲了权重自适应的策略。
从钱老家回来的路上,张辰的脑子一直在高速运转着,下午的课再加上项目中遇到的困惑,让张辰有了一丝明悟,却始终没有抓住重点。
张辰靠着车窗,脑子里还在转钱老讲的那几个图——帕累托前沿的形状,不同工况点的分布,权重变化时最优解的移动轨迹。
加权求和把三个目标压成一个,算起来简单,但权重怎么定?拍脑袋定?还是跟着工况走?
他想起钱老说的那句话:“在不同的工况下选择合适的权重。”,话虽然没说完,但意思到了。
权重不该是固定的,应该随着飞行状态变化。
“对,就是这样!”,张辰一拍脑门,恍然自语。
周六一早,两人刚到了办公室,张辰便开口道:“钱爷爷讲的帕累托前沿,我想明白了。”
“明白什么了?”钱瑾姝道。
“权重不该是固定的。起飞段热流压力大,权重应该偏热流;巡航段射程优先,权重偏射程;末端控制为主,权重偏控制代价。”
钱瑾姝想了想,瞬间明白什么意思了,于是接口道:“自适应权重。用飞行状态做自变量,权重函数是状态的分段线性插值。”
“对。”张辰在纸上画了一条折线,“状态变量可以用马赫数或者动压。马赫数从零到五,分三段:上升段、巡航段、下降段。”
钱瑾姝接过笔,在折线旁边标注了三个区间的端点,“三段不够,过渡区要平滑。用样条曲线,权函数在区间端点连续可导。”
张辰看了她一眼,“你来推导权函数的表达式?”
“行。你改内点法的目标函数,把固定权重换成自适应权重。”
两个人分工。钱瑾姝花了半天时间推导了三段样条权函数的表达式,用马赫数作为状态变量,写了三页纸。张辰把内点法的目标函数拆开,把原来那个标量权重系数换成了一个函数调用。
直到周二上午,新方案跑通了。
张辰把结果调出来——热流峰值比固定权重方案降了百分之十二,射程增加了百分之八,控制代价基本持平。三条曲线的形状也比之前平滑得多,没有突变。
“这才是真正的多目标优化。”钱瑾姝站在他身后,看着屏幕上的曲线。
“还得验证。”张辰把三组标准工况跑了一遍,结果稳定。
“可以了!!”,钱瑾姝看着结果道。
“嗯,我发给周哥!”,张辰道。
张辰把新方案整理成报告,发给了周明。备注里写了一句话:“多目标优化采用自适应权重方案,基于马赫数的三段样条权函数。热流降12%,射程增8%。”
不一会儿,周明便回复了:“自适应权重。谁的主意?”
“钱老讲的帕累托前沿,我们改成了工程实现。”张辰道。
周明:“继续往下做。下个月之前,把全流程跑通。”
张辰:“好!”
“下一步做什么?”钱瑾姝问道。
“热流计算精度不够。气动模型和热环境模型的数据传递还有误差,得把耦合迭代做紧一些。”
“我来改数据传递接口。”
“行。”
接下来几天,两个人都在做耦合迭代的优化。
张辰把内点法的主循环和外层迭代的收敛判据重新写了一遍,减少了冗余计算。
钱瑾姝把热环境模型的输出精度提高了一个数量级,用插值方法填补了数据空缺。
周五上午,两个人把全流程跑了一遍。结果比上周又好了不少,热流峰值再降了五个百分点。
张辰保存结果,合上电脑,“下周继续!!”
— 本章完 —