找回密码
 立即注册
查看: 599|回复: 17

我如何优化翼型之遗传算法思路讲解

[复制链接]
发表于 2022-1-1 13:45 | 显示全部楼层 |阅读模式
翼型的优化可以看成在一个N维空间上的单值函数求最值问题。具体单值函数怎么确定之后再说,我们现在先来研究如何求N维空间上单值函数的最值。
翼型的优化最常见的是遗传算法。遗传的同时意味着种群的进化,这对应着找到取到更大值的自变量组。
遗传过程

首先,需要有一个足够大的种群。如果种群太小容易近亲通婚,翻译成数学语言就是容易局限在局部最优解;
其次,种群内可以自由交配,也就是基因重组;
再次,每次重组过程中有一定概率发生基因突变;
最后,每次得到的新基因要经过环境考验,生存能力强的可以获得或者甚至获得更多的生育权,生存能力弱的获得更少的生育权甚至直接被淘汰。
数学语言描述遗传过程

有一组参数,各自有一定取值范围。这些参数通过一个函数可以确定一个值,这个函数就叫评估函数。
定义一个循环步骤叫一代,每一代的过程中,每组参数都有不同的几率和另一组参数结合,通过平均或者其他方式得到重组值。
每次重组的过程中,每个参数都加上一个随机游走的量,游走的范围应该相对较小,并且最好随着单值函数的值的增加而降低。
最后,计算每个重组后的参数对应的值,这些值会记录下来,并且影响接下来的一系列操作的概率。概率为0即意味着被淘汰。
还有一个很重要的部分就是停止条件,定义为代差小于某个设定值时就停止。代差可以是一代的平均值,也可以是一代的最高值。
翼型优化的实现

以下的分析以CADC限距载重空投的翼型为设计目标。

  • 翼型种群初始化
首先得有一个足够大的翼型种群。单靠我们所知道的可用的翼型,如mh114,s1223,完全不够撑起这个种群的数量。如前所述,容易造成翼型局限于这两者之间,忽略了可能存在的其他形式的更佳的翼型。
所以我们需要一个参数化绘制翼型的程序。这个程序下一次和大家介绍。所谓参数包括相对厚度及其位置,最大弯度及其位置,实际编写中可能还会有更多的参数。通过这些参数在一个合理范围内的变动,比如一个参数取n为10的等差数列,4个参数就可以有一万个初始种群数量。

  • 翼型的重组与变异
两个翼型的融合,除了所有参数两两平均,参数随机选取父本或母本,更直观的办法就是两个翼型直接融合。最后一种是更值得尝试的,因为在初始化本地翼型库的时候,应该采用不同的生成手段,这样一来参数就可能不能互用(即使参数的意义相同,这一点将在以后提及)。
此外,融合之后还需要变异。翼型的变异肯定不是完全随机的变异,很多荒唐的结果完全可以实现排除。那么如何实现变异呢?
可以从profili导出足够多的不限任何参数的翼型,作为变异的种子库。每次变异过程中,重组翼型随机选择一个种子翼型进行融合,但是种子翼型的权值必须取足够小。

  • 评估函数的选择
1) 评估函数的难点
单值函数的确定问题是整个优化设计过程中最难的,也是最核心的问题。因为实际上评判一个翼型的优劣是一个多值问题,例如:
评判一个极限一公斤的翼型优劣上,首先看  是否足够大,根据一般经验,大约 是设计迎角,假设升力系数小于 的都不考虑。(这里又牵涉到一个问题,就是在初代标准太高会导致样本数量急剧下降,所以单纯的翻译为 时评估函数值为 是不可取的。)
但是就算升力系数足够大,假设 好了,就一定行吗?如果阻力一不小心也达到了 ,升阻比才 而已,显然性能也不够好。
除了  和  ,还有很多因素需要考虑,比如  的最大值所在位置与巡航迎角的关系,  在最大值附近的平坦程度,失速迎角的大小,俯仰力矩系数在巡航迎角附近的稳定程度等等。
这些值的量化本身就比较困难,还需要一一考虑进单值函数的构造。那么如何构造呢?
2) 评估函数的构造
假设只有两个参数  和  需要考虑。
如果单值函数设计为 ,可以看出升力系数几乎影响不了什么,因为升阻比太大了,一个波动就把升力系数吞了。
所以构造新函数 是合理的参考值,比如期望值。这样,升力系数和升阻比之间的关系就有了可比性。
但是这个函数也不合理。假设得到一个升力系数是参考值  倍,升阻比却非常小以至于只有 的翼型,两者相加有 。但是参考值本身才  ,明显参考值的翼型更均衡,与评估矛盾。
再构造一个新函数, ,实际上参考值作为一个常数完全可以拿走,但是除完之后更加直观。之前的极限翼型函数值变为 ,显然小于参考值。
但是这个函数仍有缺陷。假设有两个翼型,一个升力系数比值是 ,升阻比比值是 ,得到的函数值与参考值相同。但是我们知道,CADC一公斤飞机的设计存在升力系数派和升阻比派,如果我是个升力派,我可能觉得前者比参考值更好,如何调整函数值呢?
接下来就要介绍一个最强大的评估函数: 。其中 是第 项需要考虑的参数,而 是其对应的参考值。它的性质感兴趣的读者可以自行去探索,并不需要很高深的数学知识。
小结

今天主要介绍了翼型优化中遗传算法的主要思路,重点介绍了评估算法的选取。其余细节的实现见后期文章。
都看到这了,留个赞呗~
发表于 2022-1-1 13:55 | 显示全部楼层
哇,西工大的大佬啊。
首先我要说,设计要有针对性,没有一劳永逸的策略。
如果你说的是一公斤,设计点在于25m内能起飞的最大重量,这是与升力阻力都相关的一个函数,而不是单纯的升力系数或者阻力系数。
如果单纯说你说的案例,可能是个普通飞机,确定了巡航升力系数后尽量做到减阻。那么还需要考虑的比如失速迎角,这个和包线有关,最大升力系数的话,我能想的就是和失速迎角有关吧(失速前升力系数对迎角基本是线性的)。这时候可以对你想要的参数设置一个约束条件,约束函数可以是二值得也可以是非线性的,如逻辑斯蒂函数。
而我在这篇文章中提到的,和你说的不是同一件事。我这是没有给初始条件的优化,也就是说是在做不到一开始就满足什么升力系数要求的情况下开始的,逐步根据评价函数像设计点收拢的优化过程。这时候最大升力系数就作为一个影响因子,根据重要性乘上权重系数加到评价函数里即可。
发表于 2022-1-1 13:57 | 显示全部楼层
整个工程耗时最多的地方在于gambit和fluent的有限元计算,速度快慢很大程度依赖于此,特别是在三维机翼优化过程中。另外本身整个进化算法都差不多,效率在分布式计算机上运行可以很快,这一点OpenAI已经验证过了。工程领域的优化算法会使用代理模型方法去优化,单机效率较遗传算法还是有比较大的提高的,另外不算是matlab包办,matlab中的优化算法比较有限,需要可以使用达索的isight,里面有非常多常用的工程优化算法。北理有老师开这个课,选这课的同学都做了一遍翼型优化,优化再往下做可以是多目标优化,使用ansy做结构优化,使用optistruct做拓扑优化。
发表于 2022-1-1 13:59 | 显示全部楼层
这一块我之前做过了。用的是弦函数扰动(这个有点忘了),不是像你这种取两个翼型之间的融合比例,是从一个初始翼型上开始扰动,设置扰动上下界。优化的前端用过fluent 和 xfoil,后端用过matlab 和 isight。优化从软件结果上是有效的,但具体结果很大层度依赖前端的准确性。因为缺少风动数据,不能对比仿真设置的参数是否有效,所以最后出的结果无法评估。
发表于 2022-1-1 14:04 | 显示全部楼层
扰动是完全随机的?听你的描述似乎看不到优化算法的影子,可能效率不高呀……
发表于 2022-1-1 14:07 | 显示全部楼层
最后一项评估函数的出处在哪?有对最后一项评估函数的介绍么?
发表于 2022-1-1 14:14 | 显示全部楼层
扰动是由参数决定,参数是优化变量,优化算法在matlab和isight里面,是整个工程的后端,算法可以是很多种,遗传算法作为进化算法本身效率就不高,但是free gradient以及对全局最优的搜索是优点。
发表于 2022-1-1 14:15 | 显示全部楼层
就是评价函数的一种嘛,百度搜一下求解多目标规划问题,有眼花缭乱的评价函数
发表于 2022-1-1 14:21 | 显示全部楼层
噢,这一点Matlab包办了的意思?遗传算法效率是不高,但是对问题的要求不高。翼型的优劣往往就在于很小的波动,评价函数的图像也许是非常尖锐的,我不确定其他的优化算法能否满足需求。而且遗传算法中本身也有变异,不然无法进行下去。
发表于 2022-1-1 14:30 | 显示全部楼层
对于翼型优化,通常来说如果给定升力系数减阻,通常来说升阻极曲线会像设计点收拢,最大升力系数等参数可能出现变化,从而影响一些比较重要的机翼性能。想问下像最大升力系数这种参数是怎样考虑的?
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 11:42 , Processed in 0.138371 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表