如何入门拓扑优化研究(转自知乎 周平章博士的文章 很有启发)

最近有很多人私信我咨询如何入门拓扑优化的研究,为了避免重复劳动,我在这篇文章里做一个统一回复。

首先必须声明,我自己也是拓扑优化研究领域的新人,因此本文仅代表我作为一个新人的一些浅薄的看法,大家切记不可奉为圭臬。

一、内功心法:知识体系的构建

如果你仅仅是想“用”拓扑优化技术解决一个实际的工程问题,那么很显然你并不需要什么知识体系,简单地找一款商业软件(如Optistruct/TOSCA/ABAQUS/ANSYS etc.)然后读一下软件的manual,跟着做几个例子,你就可以出师去干活(搬砖)了。所以如果你是这种情形,那么下面的内容可以不用浪费时间去读了。

如果你是拓扑优化方向的研究生或者博士生,那夯实知识体系应该是非常重要的一件事情。我认为在学术研究中,内功心法要比招式重要得多。试想一下,一个连“形函数”、“Gauss积分”这种最基本的计算力学概念都不清楚的孩子怎么可能做出很优秀的research。

拓扑优化是计算力学下的一个分支,而计算力学是力学下的一个分支。所以,作为拓扑优化方向的researcher,大家应该首先把力学和计算力学的基础打好。我自己是直博生,所以有比较充足的时间修习相关的课程体系:

  • 张量分析、弹塑性力学、固体力学;
  • 有限元分析与应用、计算固体力学、计算动力学;
  • 高等固体力学。

如果是硕士的话,可能没有那么多的时间去修完全部这些课程。作为保底的方案,至少得修《弹性力学》和《有限元分析》这两门课程。

二、武功招式:自己搭建一个有限元程序库

我自己的经验,在掌握了前述内功心法之后,应该有能力自己动手写一个完整的有限元软件包了。还是那句话,拓扑优化是计算力学的分支,计算力学就意味着你一定得会编程。因此,自己动手写一个完整的有限元工具箱是锻炼自己编程能力、同时检验自己力学基础的一个绝佳方法。

在写程序的时候,一般有两种方案:

  • 以“基本语言”为编程工具,例如Fortran/C/C++ etc. 这种方案的好处是,写好的程序通用性很好,且很容易扩展到计算超大规模的问题,能够解决工程实际问题。缺点是,所花时间较长。
  • 以“高级语言”为编程工具,如MATLAB。作为一个使用MATLAB多年的老PhD,我强烈推荐大家以MATLAB来入门计算力学。这种方案的好处是,你站在巨人的肩膀上,因此可以避免去写大量的底层程序(例如,Gauss消元法解线性方程组、Lanzcos法求大型稀疏矩阵的特征值,等等)的代码。你只需要专注于有限元计算的基本流程即可,所用到的底层程序MATLAB都已经为你准备好了。这种方案的缺点是,作为解释性语言,MATLAB有太多的trick。如果不掌握这些trick,你所写的程序很可能慢得一塌糊涂,根本算不了大规模问题。但即使是这样,通过MATLAB你也能够掌握一个有限元程序包的基本流程和编程方法。

三、登堂入室:正式学习拓扑优化相关技术

到这里,你就可以轻松入门拓扑优化了。总的说来,拓扑优化方法目前分为两大类:

第一类:变密度方法及其变形。

这一类方法发源于Bendsoe和Kikuchi的均一化方法,后来在Rozvany/Bendsoe/周明/Sigmund/Olhoff等一批人的一系列工作之下,现在意义下的变密度法得以成形。值得注意的是,目前所有商业软件中拓扑优化模块所用的技术都是基于变密度方法的。我在知乎上的另一个问题下的也曾说过,变密度法相对于其余方法的最大优势是:对于任意形状的可行设计域具有普适性。如果想了解变密度法的相关知识,Bendsoe和Sigmund写于2003年的经典教材《Topology Optimization: Theory and Applications》一定是不可错过的。不过就我个人的看法,这本教材的起点较高,不大适合新人入门,更适合于新人入门的是Sigmund大名鼎鼎的99行程序《A 99 line topology optimization code written in MATLAB》。当然,Sigmund的99行程序按照今天的观点来看,有很多地方可以改进。针对99行程序的改进后来又出现了88行程序、针对3D问题的程序、等等。

[1]. Sigmund O (2001) A 99 line topology optimization code written in Matlab. Structural and Multidisciplinary Optimization

[2]. Andreassen E, Clausen A, Schevenels M, Lazarov BS, Sigmund O (2010) Efficient topology optimization in MATLAB using 88 lines of code. Structural and Multidisciplinary Optimization doi: 10.1007/s00158-010-0594-7

[3]. Talischi C, Paulino GH, Pereira A, Menezes IFM (2012) PolyTop: A Matlab implementation of a general topology optimization framework using unstructured polygonal finite element meshes. Structural and Multidisciplinary Optimization 45(3):329-357 doi:
10.1007/s00158-011-0696-x

[4]. Liu K, Tovar AE (2014) An efficient 3D topology optimization code written inMatlab. Structural and Multidisciplinary Optimization:1175-1196 doi: 10.1007/s00158-014-1107-x

澳大利亚RMIT的谢亿民老师及其团队提出的ESO/BESO方法中保留了变密度法的一些痕迹,但加入了他们自己的一些新想法。ESO/BESO方法试图解决传统SIMP方法中的灰色单元问题。感兴趣的同学可以参考谢亿民老师的相关文献。特别指出,谢亿民老师出了一本教材专门用来介绍他们的ESO/BESO方法:

[5]. Huang X, Xie M (2010) Evolutionary topology optimization of continuum structures: Methods and applications: John Wiley & Sons.

第二类:边界演化方法。

变密度法认为拓扑优化问题是一个材料本构模型的插值问题,与之相反,边界演化方法试图通过显式地控制实边界的演化过程来实现拓扑优化。显然,这两种方法从一开始的出发点就不同,前者相信星星之火可以燎原,主张通过微观层次材料本构参数的变化最终实现宏观层次结构拓扑构形的变化;后者一开始就高屋建瓴抓住拓扑二字的本质,直面边界演化。据我所知,目前边界演化方法里较为成熟的方法包括:

(1)Level-set方法。这一方法由香港中文大学的Michael Yu Wang提出,认为实体的边界可由更高一维的函数的等高面来描述,在每次迭代时通过求解Jacobi扩散方程确定边界的演化过程。当然,现在level-set方法经过大量学者的改进跟王老师最开始提出来的level-set方法已经不太一样了,感兴趣的同学可以自行查阅相关的文献。

[6]. Wang MY, Wang X, Guo D (2003) A level set method for structural topology optimization. Comput. Methods Appl. Mech. Engrg. 192(1):227-246 doi: 10.1016/S0045-7825(02)00559-5

[7]. Wang SY, Lim KM, Khoo BC, Wang MY (2007) An extended level set method for shape and topology optimization. Journal of Computational Physics 221(1):395-421

[8]. van Dijk NP, Maute K, Langelaar M, van Keulen F (2013) Level-set methods for structural topology optimization: A review. Structural and Multidisciplinary Optimization 48(3):437-472

(2)MMC/MMV方法。这一方法由大连理工的郭旭老师的团队提出。该方法认为实体的边界可由显式的函数进行描述,从而将拓扑优化问题转化为拓扑描述函数的基本参数的参数优化问题。很显然,这种思路下,优化问题的计算规模大大缩减了,但随之而来的问题是如何寻找到普适的、能够描述任意复杂形状的拓扑描述函数。郭旭老师近年来十分活跃,有很多很不错的工作,感兴趣的同学可以关注他们的文章:

[9]. Zhang W, Yang W, Zhou J, Li D, Guo X (2017) Structural topology optimization through explicit boundary evolution. Journal of Applied Mechanics-Transactions of the ASME 84(0110111) doi: 10.1115/1.4034972

[10].Zhang W, Chen J, Zhu X, Zhou J, Xue D, Lei X, Guo X (2017) Explicit three dimensional
topology optimization via Moving Morphable Void (MMV) approach. Computer Methods in Applied Mechanics and Engineering 322(590-614 doi: 10.1016/j.cma.2017.05.002

[11].Zhang W, Zhou J, Zhu Y, Guo X (2017) Structural complexity control in topology
optimization via moving morphable component (MMC) approach. Structural and
Multidisciplinary Optimization 56(3):535-552 doi: 10.1007/s00158-017-1736-y

(3)相场(Phase-field)方法。这个方面我了解不多,不太清楚具体情形,感兴趣的同学可以自行查阅文献。

四、选一把好的装备:优化求解器(optimizer)

经评论区同学的提醒,我补充上关于数值优化方面的一些基本信息。

拓扑优化,从名字上就决定了我们本质上是在求解一个优化问题,因此对于数值优化方面的一些基本了解是必不可少的。事实上,能否选一个好的优化求解器将直接决定你在做research的时候的效率以及最终结果的美观性等等。

拓扑优化问题肯定是一个优化问题,但又不是那么简单的优化问题,拓扑优化本身的一些特点决定了必须十分谨慎小心地选择合适的optimizer:

  • 问题规模超大。在变密度法中,一个三维问题动辄就是十万、百万规模的设计变量,对于绝大多数优化算法和优化求解器来说,面对如此大规模的问题很可能束手无策。
  • 在大多数情况下,仅能够获得一阶导数(也就是所谓的灵敏度)信息。这决定了不大可能采用那些强烈依赖于二阶导数(Hessian矩阵)的方法。当然,BFGS提够了另一种思路。
  • 每次迭代的计算成本很大。每计算一次目标函数/约束条件,就需要完整地执行一次有限元分析,这种计算量是很多只搞数值优化的人所不了解的。

上述特点反映在拓扑优化研究领域的一个直接后果就是,长期以来,拓扑优化领域的学者不信任通用的数值优化算法。一个在本领域内流行的观点是,通用数值优化算法由于对精度要求过高,在用于求解拓扑优化问题时的迭代次数以及随之而来的计算量是无法接受的。在这种观点的指导下,从上世纪七、八十年代开始,拓扑优化领域的学者就致力于发展适用于本领域的数值优化算法,这其中的佼佼者包括:优化准则法、MMA、CONLIN等等。

我们现在所处的时代跟我们的老前辈们很不一样,老前辈们当年的一些困难(如内存、CPU计算速度等)在今天很可能已经不是困难了。因此当前的拓扑优化领域内也出现了一种声音,认为现在已经能够将通用数值优化算法直接应用于拓扑优化问题了。在SAMO上最近有越来越多的年轻学者(我也是其中之一)更愿意使用通用优化算法。

关于通用数值优化算法(如现在比较流行的内点法、SQP方法等等)与拓扑优化领域内长期使用的传统方法之间的对比,在这儿不便展开,我(强烈)推荐下面的文献:

[12]. Rojas-Labanda S, Stolpe M (2015) Benchmarking optimization solvers for structural topology optimization. Structural and Multidisciplinary Optimization 52(3):527-547

关于通用数值优化方面的知识,肯定是越多越好,我推荐下面的两本鸿篇巨著,如能通读肯定会浑身通畅,但读的过程可能不会太舒服。

[13]. Nocedal J, Wright SJ (2006) Numerical optimization: Springer.

[14]. Boyd S, Vandenberghe L (2004) Convex optimization. Stanford: Cambridge University Press.

关于本领域内的经典算法MMA,做一些必要的了解是你在这个领域内交流所必不可少的(你的审稿意见中总会出现MMA这个词,所以,你懂的)。MMA在历史上经过了多次改进,大家不妨直接学习最新版:

[15]. Svanberg K (2007) MMA and GCMMA, versions September 2007

在做一个拓扑优化的research时,首先是研究问题本身,然后提出数学模型(mathematical formulation)。此后最重要也是最复杂的部分就是推导目标函数和约束条件的灵敏度信息。其实说白了,推导灵敏度就是求一个函数 的一阶导数。如果大家的微积分基础还可以的话,这块应该不是问题。很可能需要补充的是关于矩阵函数求导的知识,这块内容说白了也很简单,就是每个分量分别关于自变量求导。但这一块有很多初学者不知道的黑科技,我推荐以下资源作为参考:

[16]. Matrix calculus - Wikipedia

[17]. The Matrix Cookbook

在读拓扑优化的文献时,大家肯定会遇到一个词叫做“伴随灵敏度分析”(adjoint method),我当时被这个词吓了一大跳,以为是多么高明、高深的东西。其实理解了之后就会发现,本质上和传统的直接微分法(direct differential method)是完全等价的。如果想详细了解这两种分析方法,我推荐杜建镔老师的教材,其中有一章专门讲这个问题:

[18]. 杜建镔. 结构优化及其在振动和声学设计中的应用[M]. 清华大学出版社, 2015.

原文地址:https://www.cnblogs.com/hyb221512/p/8981900.html

时间: 2024-10-29 02:59:25

如何入门拓扑优化研究(转自知乎 周平章博士的文章 很有启发)的相关文章

基本概念 深度神经网络压缩与优化研究_王征韬

深度神经网络压缩与优化研究 文献来源:王征韬. 深度神经网络压缩与优化研究[D].电子科技大学,2017. 摘要:深度学习是近年来机器学习领域最有影响力的研究方向,在计算机视觉.自然语言处理的许多问题上都取得了突出的效果.深度学习的本质是大数据支撑下,由多层人工神经网络堆叠形成的信号处理系统,具有参数数目多,计算复杂度高等特点.深度学习的训练和运行都需要大量的运行空间与并行计算设备,这些需求阻碍了深度学习在资源有限的设备,如手机.平板电脑和嵌入式设备上的应用.另一方面,神经网络中普遍存在过参数化

Oracle的update语句优化研究

最近研究sql优化,以下文章转自互联网: 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation set join_state='1'whereyear='2011' 更新年度为“2011”的数据的join_state字段为“1”.如果更新的字段加了索引,更新时会重建索引,更新效率会慢. 多表关联,并把一个表的字段值更新到另一个表中的字段去: update 表a set a.字段1 = (sele

SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。

偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完全基于CPU处理的抗锯齿解决方案.对于游戏厂商使用的MSAA抗锯齿技术不同,Intel最新推出的MLAA将跨越边缘像素的前景和背景色进行混合,用第2种颜色来填充该像素,从而更有效地改进图像边缘的变现效果,这就是MLAA技术. 其实就是这个是由Intel的工程师先于2009年提出的技术,但是由AMD将

关于嵌在WEBVIEW中的网页游戏的载入优化研究

---------------------------------------------------故事开始----------------------------------------------------------------------------------------- 前端时间,实习公司里要做一个WEB_app  在安卓平台上,具体是什么就不细说了. 在APP中 ,几乎所有的页面都是网页 ,有WEBVIEW来显示的结构. 当中有一个画面是比较复杂的,有较多的动画和交互,原定是

最佳路径分析实现思路及优化研究

最近在实现基于路网数据的最佳路径功能的实现 要求:查询两点间的最佳路径,包括时间最短.距离最短.绕开高速(这三种基于行车),以及对障碍物的规避.并实现对车行和人行的适用方案. 数据存储:路网数据全部存放在postgis数据库中 数据处理: 1.将现有的路网线数据进行拓扑关系的建立,这个可以在一些商业平台上建立,如arcMap和supermap desktop都可以. 2.将数据导入进postgis库中,存储线的长度,平均行驶速度,是否车行,是否人行,道路等级,道路名称等字段进行完善. 3.建立索

R入门<二>-时间序列研究

续之前那篇随笔 前天写完随笔后,很自豪的拿出来去跟带我入数据挖掘和SAS基础的大牛@八公炫耀,然后收获了一堆时间序列的材料,非常感谢大牛! ARIMA就是看图形,ACF和PACF,原理不需要知道,因为软件已经帮我们解动态方程了 总结下来就是 1)ARIMA关键是看图形,看ACF和PACF,公式啥的不一定要了解的很清楚,因为软件已经帮忙解动态方程了. 2)据说auto.arima是根据AIC统计量选取的,不是一直都能得到最稳健的结果.所以自己手工调试还是很重要的(还是要看数据) 3)关键点是序列的

新手入门SEO优化技巧

外链向来在我们SEOer人员心目中都是有着很重要的地位,外链的重要性在这里就不再赘述了,今天我们就直奔主题,给大家分享最全的外链寻找途径. 1.domain+网址    基本上这个就可以看到对手或者一些网站的所发的外链情况,当然如果想要效果更好点的,也可以去百度站长平台,找到外链分析,看详细的外链组成. 2.intitle:关键词+Powered by+平台(网站)   举几个例子大家就明白了    intitle:广告区 Powered by discuz   intitle:广告区 Powe

[转]Oracle的update语句优化研究

原文地址:http://blog.csdn.net/u011721927/article/details/39228001 一.         update语句的语法与原理 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation set join_state='1'whereyear='2011' 更新年度为"2011"的数据的join_state字段为"1".如果

深入研究 Win32 结构化异常处理(好多相关文章)

摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的最基本概念讲起. Matt Pietrek 著董岩 译Victor 转载自 Xfocus 并整理 在所有 Win32 操作系统提供的机制中,使用最广泛的未公开的机制恐怕就要数结构化异常处理(structured exception handling,SEH)了.一提到结构化异常处理,可能就会令人想起