作者:周平章
链接:https://www.zhihu.com/question/52008623/answer/187927508
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不知道这个问题提出来有多久了,我是拓扑优化方向的PhD,下面是我自己的一点感受,未必准确。

-------------------------------------------------------

首先说结论:从现在的情形来看,水平集法以及其余所有方法都不能在短时间内超越变密度法。

  1. 变密度法源于均一化方法,相对于均一化方法,变密度法所需要的设计变量数目大大减少了。目前通常所说的变密度法均是指基于单元(或者节点)伪密度方法的拓扑优化方法。
  2. 这种方法思路清晰,程序设计流程简单,也比较容易与现有商业有限元软件进行集成。因此现有的所有商业软件中的拓扑优化功能都是基于变密度方法来实现的。
  3. 变密度法相对于其余所有方法的最大优势是:适用于任意形状的设计域。对于复杂几何形状的设计域的天然普适性是目前所有其他拓扑优化方法所不具备的。这一点可能在学术界做research的时候感受还不明显(因为做research的时候大家都会用非常规则化的可行设计域,不是一块平板就是一个立方体),但一旦到了工业界这个问题就会非常重要。
  4. 很多水平集相关的论文均所称赞的,水平集方法相对于变密度法的优势是,水平集方法能够获得显式(explicit)、清晰(crisp)的拓扑边界。而这种称赞的后面一般都跟着鄙视一下变密度法所得结果所具有的模糊边界。对这个问题,我从两个角度谈我的看法。(1)拓扑优化方法本身在产品设计的周期中多用于概念设计阶段,也就是产品设计的初期。因此,工程师在使用拓扑优化方法的时候可能并不需要知道这根梁的直径到底是10.1mm还是10.5mm。在这个产品的大致形状确定之后,还有一系列的工作要做,在强度校核等过程中,产品的尺寸是会精确地确定下来的。也就是说,即使你用水平集方法得到了显式清晰的边界,这个边界也绝不会直接被当做最终产品的尺寸。(2)在2010年以后到现在这七年里,变密度法又得到了一些发展,现在用变密度法的时候大多会配合使用一些投影(projection)技术,这样,通过变密度法得到的设计结果也可以得到很清晰的拓扑构型。
  5. 从计算量的角度,水平集和变密度法的计算量都不小,从设计变量的个数上来说,二者没什么差别,都取决于网格的规模:或者等于节点数目,或者等于网格数目。但水平集法所需要求解的是扩散方程,而变密度法所需要求解的是一个优化问题,一般均认为水平集法所求解的数学问题要比变密度法更难一些。值得注意的是,近年来不断有学者从各个角度尝试降低拓扑优化中的设计变量数目,思路很多,比如大连理工的郭旭老师所提出的MMC方法等等。我自己在这方面也有一些思考,这一块确实还是大有可为的。
  6. 我曾经跟圈内很多人聊过关于变密度法和水平集方法的对比问题,我记得周明老师是这么说的,变密度法和水平集方法,这两者的共同点要远远多于它们的不同点。近年来不断有人提出类似的观点,从这两种方法的发展来看,它们均在不断地借鉴对方的一些优点。所以,如果将来这两种方法在更高层次的数学模型中得到了完全统一,我也不会表示很惊奇。
 
 
作者:菲兹
链接:https://www.zhihu.com/question/52008623/answer/156931579
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

SIMP 法:

优点: 结构设计变量(单元密度)和优化问题直接挂钩对应,即拓扑结构explicitly dependent on设计变量。优化算法收敛好,灵敏度简单易算。可以直接进行基于有限元的离散设计灵敏度计算。适用于结合更复杂的非线性结构拓扑,比如几何非线性和材料非线性问题。

缺点:优化出来的拓扑结构边界不够清晰,特别是当过滤半径比较大的时候。 这些灰度区域没有物理意义,设计如果无后处理无法直接用于制造。

Level-set 法:

优点:用一个高纬度的水平集implicitly表达拓扑结构的边界,从而解决了SIMP法的灰度区域问题。拓扑结果边界清晰,无灰度区域,设计可以直接用于制造。

缺点:由于设计变量间接与优化问题挂钩,中间涉及一些被水平集切割的有限单元的近似,从而影响优化精度。水平集方程需要用PDE方程来更新,中间还需要重置水平集方程来保证PDE的持续更新,从而大大降低优化收敛速度或者甚至无法收敛。PDE需要连续形状灵敏度来更新,相比SIMP的离散设计灵敏度更难。线弹性体的连续形状灵敏度已经发展很成熟,但是非线性结构连续形状灵敏度非常难求,需要很高的数学基础。

PS: 水平集是高维的,但是实现起来并不复杂。在原来有限元网格基础上再增加一个水平集网格就好了。

拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了的更多相关文章

  1. lua中 table 重构index/pairs元方法优化table内存占用

    转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...

  2. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  3. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  4. .Net中的AOP系列之《方法执行前后——边界切面》

    返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...

  5. 在.net中读写config文件的各种方法

    阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...

  6. 【跟着子迟品 underscore】如何优雅地写一个『在数组中寻找指定元素』的方法

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  7. iOS中UI阶段常用的一些方法

    UI 即 UserInterface(用户界面 1.iOS系统版本,每年都有更新.对我们开发者而言,主要的是观察API的变化. 2.iPhone新手机发布,会产生不同尺寸的屏幕,现在市面上有4种尺寸, ...

  8. 不修改代码就能优化ASP.NET网站性能的一些方法

    阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...

  9. Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

    Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...

随机推荐

  1. Why is one loop so much slower than two loops?

    Question: Suppose a1, b1, c1, and d1 point to heap memory and my numerical code has the following co ...

  2. webpack4 系列教程(一): 打包JS

    webpack 本身就是为了打包js所设计,作为第一节,介绍怎么打包js. 1. 检验webpack规范支持 webpack支持es6, CommonJS, AMD. 创建vendor文件夹,其中mi ...

  3. js+springMVC 提交数组数据到后台

    1.ajax 代码 var ids =new Array(); $.ajax({ type: "POST", url: "/user/downReport", ...

  4. 2017-10-29 用中文命名API的意义和途径

    "中文编程"知乎专栏原链 在前文对在代码中使用中文命名的质疑与回应中阐述了在代码中使用中文命名的益处. 此文将从软件使用者的角度阐述对API中文化的意义并探讨实现途径. 当然, 文 ...

  5. 根据需要扩展java中的ThreadPoolExecutor

    经常被重写的三个方法 ThreadPoolExecutor是可扩展的,通过查看源码可以发现,它提供了几个可以在子类化中改写的方法:beforeExecute,afterExecute,terminat ...

  6. 安卓开发_数据存储技术_SharedPreferences类

    SharedPreferences类 供开发人员保存和获取基本数据类型的键值对. 该类主要用于基本类型,例如:booleans,ints,longs,strings.在应用程序结束后,数据仍旧会保存. ...

  7. Android RecycleView 自定义Item的使用

    自定义布局的RecycleView需要自己实现Adapter,ViewHolder和布局: 自定义Adapter继承RecycleView.Adapter,重写getItemCount(),onBin ...

  8. 如何打jar包

    一.制作只含有字节码文件的jar包1.最简单的jar包——直接输出hello2.含有两个类的jar包——通过调用输出hello3.有目录结构的jar包——通过引包并调用输出hello 二.制作含有ja ...

  9. python接口测试—get请求(一)

    python 做借口测试用到的是requests模块,首先要导入requests库,pip install requests 1.get直接请求方式 以豆瓣网为例: url = 'https://re ...

  10. BOM 清除

    [root@test3 11]# gcc 11.2.c11.2.c:1: 错误:程序中有游离的 ‘\357’ 8进制,相当于16进制 ef11.2.c:1: 错误:程序中有游离的 ‘\273’11.2 ...