个人
多学科优化里的 MDF 和 IDF
用一架双座电动多旋翼的尺寸优化作业,解释 MDF 和 IDF 两种多学科优化架构的区别、重量螺旋,以及简单模型会在哪里算错。
设计飞机要好几个学科一起算。气动算升力和功率,动力选电机和电池,结构估机体重量,而每个学科的输入都来自别的学科的输出。多学科设计优化(MDO)研究的就是怎么让这些互相依赖的计算一起收敛到最好的设计。这篇用我在密歇根大学 MDO 课上的一份作业,讲其中最基本的两种架构,MDF 和 IDF。
重量螺旋
作业的对象是一架双座电动多旋翼,目标是在满足功率和电量要求的前提下,让起飞重量尽量轻。
难点在于重量会自己往上滚。悬停功率大约和总质量的 1.5 次方成正比,飞机重了,需要的功率涨得更快;功率大了,电机和电池也要更重;结构质量按起飞重量的 30% 估算,又跟着变重。算下来每多装 1 公斤电池,整机要重大约 1.43 公斤。质量决定功率,功率又反过来决定质量,两边的数必须对上。
MDF:先对齐再交方案
可以把优化器想成老板,各学科是部门。MDF(多学科可行)的做法是,老板每提一个设计方案,各部门先内部反复迭代,直到质量和功率的数字吻合,再把结果交上去。
这样老板看到的每个方案在物理上都成立,中途停下来也有一个能用的设计,要管的变量也少。缺点是每个方案背后都有一轮内部迭代,分析越慢,每一步就越慢;内部迭代不收敛的话,整个优化就卡住了。作业里 MDF 用牛顿法做内部迭代,每一步都把质量和功率之间的误差压到 10⁻⁹ 以下。
IDF:各算各的,最后对账
IDF(单学科可行)换了一种做法。老板先给大家一个假设的总质量,各部门拿这个数分头计算,不用互相等,可以并行,同时加一条约束:假设的质量最后必须等于算出来的质量。
没有内部迭代,各学科互相独立,分工和拼装模块都更方便。代价是优化变量和约束变多,一般要多迭代几轮,而且优化过程中的方案在物理上并不自洽。
为了看 IDF 稳不稳,我故意从一个很离谱的起点开始:假设总质量 3000 公斤,实际算出来只有 500 公斤左右。优化过程中,两者的差距从 10³ 量级一路降到了 10⁻¹⁰。
优化器会钻空子
如果那条对账约束写得不够严,IDF 的优化器会找到一条捷径:假设一个很轻的质量,不管实际算出来有多重,比如假设 500 公斤、实际 1000 公斤,然后报告找到了一个很轻的设计。优化器只按写下来的目标和约束做事,约束漏掉的地方它就会去利用。给 AI 定目标时也一样。
结果
两种架构最后收敛到同一个最优解,538.44 公斤。选 MDF 还是 IDF 不影响答案,差别在计算代价和实现的灵活性上:MDF 需要的优化迭代更少,IDF 更方便把学科拼在一起。
两种优化算法的对比也类似。梯度法 SLSQP 每一步都知道哪个方向下降最快,14 次迭代就收敛了;无梯度的 COBYLA 只能在周围试探方向,用了 19 次。
简单模型在哪里出错
作业最后比较了两个模型,一个只算悬停,一个包含爬升和下降等阶段的完整任务剖面。两者算出的整机质量只差 0.5% 左右(538.44 和 541.35 公斤),驱动电机的质量却差了约 30%(16.35 和 21.32 公斤),因为简单模型只按悬停选电机,而真实任务里垂直爬升需要的峰值功率更高。
只看整机质量,会觉得简单模型够用了;按它去选电机,飞机爬升时可能功率不够。这是这份作业里我印象最深的一点:模型的总数算得准,某个部件照样可能算错。
数量级
质量是几百公斤,能量是几千万焦耳。直接把这些数交给优化器,能量那一项的梯度会盖过其他所有项。解决办法是给每个变量设一个参考值做缩放,让它们都在 1 左右。优化不收敛的时候,原因有时就是变量之间的数量级差得太远。
完整报告在项目页。