使用MMA解决拓扑优化问题的并行框架

仅个人论文学习笔记。
本文的重点是用c++实现的完全并行拓扑优化框架(线性求解器和优化算法),将MMA(Method of Moving Asymptotes)优化算法并行化,作为代码的基本部分。

实现一个拓扑优化问题

在并行框架中实现任何给定的拓扑优化问题都遵循本节中介绍的两个步骤。该程序由图3所示的Stokes流优化问题举例说明。这里的目标是使压降最小化,受30%的体积限制以及出口1和2的质量流量限制。

虽然流问题不是一个多物理问题,但它需要定义两个状态场,velocity和pressure,因此具有与全耦合问题(如具有大带宽系统矩阵的鞍点系统)相同的特征。

实现的第一步是创建解决状态和优化问题所需的元素。这包括PDE的离散化以及优化问题的目标、约束和敏感性。在c++框架中,元素类遵循预定义的、通用的接口,即利用继承和虚拟方法的概念。用户只需定义与特定元素相关的方法,而其他方法可以留空。图3的例子问题可以很好地说明这一点。为了解决这个问题,总共需要写5类,即两个体积和三个边界条件条件对象。第一个体积元件单独解决流动问题,并用于进口和出口。这个元素只需要指定3个方法;read()从输入文件解析输入,SetDOF()设置dof, SetMat()计算并将元素贡献添加到全局切线矩阵中。第二个体积元素解决了设计域内的流动问题。除了前面提到的三种方法之外,这个元素还需要定义额外的优化方法,即返回对目标、约束和敏感度的贡献的方法。最后三个单元为边界单元,分别对应进口、出口和无滑移边界条件。这些元素的方法遵循与前面描述的两个方法相同的逻辑。

因此,在框架内实现PDE约束优化问题只需要用户能够将PDE问题以离散形式表示,例如有限元形式或任何其他具有空间局部性的方法,并提供目标、约束和灵敏度的表达式。用户不需要掌握并行通信和分区、网格和节点表、DOF编号、组装过程等知识。因此,尽管该框架不是为高级用途而设计的,例如Comsol Multiphysics,但实现一个新的物理或多物理问题的方法是类似的。实现的第二步也是最后一步是创建一个执行实际优化任务的驱动程序。驱动程序具有与所考虑问题的拓扑优化流程图相同的结构。对于Stokes流问题,流程图和驱动程序可以表述为

  1. 初始化问题参数并分配DOFs
  2. 声明矩阵、向量和优化结构,并为状态和伴随问题选择线性求解器(和预处理器)。
  3. 循环直到收敛:
    • 组装并求解状态问题。
    • 计算目标和约束条件。
    • 求解伴随矩阵和计算灵敏度。
    • 更新设计并检查收敛性。
  4. 结束
    当然,驱动程序的实际实现需要多写几行代码,但总体结构如上所述。

MMA子问题的并行生成和求解

本节将介绍一个可以使用所提出的并行框架解决的一般优化问题。不等式约束优化问题可以表述为
n 是设计变量的数量,m 是约束的数量。
我们假设目标函数和约束函数 g0 和 gi 是光滑的、非线性的、非凸的。用(2)所述的形式直接解决问题是困难的。求解式(2)所给出的非线性规划问题的一种行之有效的方法是生成并求解一系列近似子问题。MMA中考虑了这种类型的解决策略。

MMA子问题

MMA的思想是解决一系列近似的子问题,而不是原来的非线性问题。这意味着(2)中的函数 g0(x) 和 gi(x) 是由一些适当的函数逼近的。为了得到一个数值上易于处理的优化问题,近似值必须是凸的。由于近似仅在展开点附近有效,因此必须重复生成和求解子问题的过程,从而产生解序列xk,其中 k 为迭代计数器。这个过程重复进行,直到满足指定的收敛条件。

在MMA中,近似是基于这类型的凸函数
其中U和L分别是上渐近线和下渐近线,它们就是方法名称的(一半)。系数和渐近线,即pij, qij, ri, U, L,在每次迭代时都基于当前设计变量xk更新,在 xk 求函数值,即 g0(xk) 和 gi(xk),以及灵敏度∂g0(xk)/∂xj 和 ∂gi(xk)/∂xj。如果有的话,还会使用历史设计变量。Svanberg(1987)详细描述了MMA子问题系数的生成表达式。

MMA子问题利用人工或“弹性”变量来确保子问题总是有一个可行的解决方案。下面用 yi≥0 表示弹性变量,从约束中减去弹性变量,并在目标中加上惩罚。

MMA子问题最常见的公式还包括一个额外的变量z,它可以用来解决非光滑问题,如最小-最大问题。在这里给出的实现中也包含了这样一个变量。

综上所述,MMA子问题可以表述为
当用对偶方法来解决子问题时,z 和 yi 的二次项是必要的,但对于原始方法可以省略(例如Luenberger和Ye 2008)。

MMA子问题可以使用几种不同的方法来解决。在提出的c++框架中,我们实现了一个原始/对偶求解器和一个对偶求解器。原始/对偶求解器同时解决原始变量(即x, y和z)的子问题,以及约束对应的拉格朗日乘子集。拉格朗日乘数在这里被称为对偶变量(Andreasson et al. 2005)。对偶方法包括重写(4)中的优化问题为一个单独的拉格朗日乘数的问题。最后,应该注意的是,一旦开发出子问题求解器,就很容易实现Svanberg(2002)所描述的全局收敛MMA。

对偶求解器

在提出的优化框架中,使用内点法求解MMA子问题(4)的对偶问题。下面将展示这个子问题求解器的完整形式,以演示如何并行实现简单的MMA。构造求解器的第一步是获得(4)中MMA子问题的对偶。这是通过形成增广拉格朗日函数L来实现的。
其中,这些项被组织起来说明子问题的可分性,λi≥0,i=1,mλ_i ≥ 0,i = 1, mλi​≥0,i=1,m 是非线性不等式约束的拉格朗日乘子。

拉格朗日对偶Ψ\PsiΨ(λ)通过求解以下一系列简单的最小化问题而形成。

作为这些计算的一个自然部分,我们得到了xj (λ), yi(λ) 和 z(λ)的显式表达式。将这些重新插入(6)后,对偶问题可以表述为以下最大化问题
由于对偶函数是凹的,(7)中的最大化问题是凸的(Andreasson et al. 2005)。当得到对偶问题的解时,可以通过将最优 λ 重新插入xj (λ)、yi(λ) 和 z(λ) 的表达式来计算最优原始解。如前所述,存在几种解决策略来解决(7)所述类型的优化问题。这里选择了原始/对偶方法,这意味着必须形成另一个拉格朗日方法,即。

η∈Rm\eta \in \mathbb R^mη∈Rm 是一个拉格朗日乘子向量,要求满足i = 1, m时 ηi≥0η_i≥0ηi​≥0 和 λi≥0λ_i≥0λi​≥0 的条件。请注意,原始/对偶类型求解器现在将 λλλ 称为原始变量,将 ηηη 称为对偶变量,而不是MMA子问题的原始和对偶变量。一阶最优性条件,即Karush-Kuhn-Tucker (KKT)条件(Luenberger and Ye 2008;Andreasson et al. 2005),可以表述为


然后采用内点法求解上述方程组。求解过程包括在每个互补松弛条件的右侧添加一个惩罚参数 μ,使条件变为 ηiλi=μη_iλ_i = μηi​λi​=μ。对互补松弛条件的修正等价于在对偶函数上增加一个对数障碍,即μΣim=log(ηi)μ \Sigma ^m_i=log(η_i)μΣim​=log(ηi​),并解释 ηi>0η_i >0ηi​>0作为松弛变量(Andreasson et al. 2005)。修正后的KKT方程组可以用牛顿法求解。由此产生的线性系统大小为2m × 2m,但可以重写为m × m系统的形式
其中 Λ\LambdaΛ 和 Ω\OmegaΩ 是对角线上分别为 1λi\frac{1}{λ_i}λi​1​ 和 ηiη_iηi​ 的对角线矩阵,e是1的向量。η的搜索方向如下所示

基于计算得到的搜索方向,执行直线搜索,使所有 η′sη'sη′s 和 λ′sλ'sλ′s 都严格为正。这个要求等价于找到最大 θ≤1θ≤1θ≤1,使得

对于所有i = 1, m。当θ = 1时,这相当于一个完整的牛顿步长。将每个障碍问题求解到一个使KKT残差的无穷范数小于0.9μ的容限,即 ∣∣KKT∣∣∞<0.9μ||KKT||_\infty < 0.9μ∣∣KKT∣∣∞​<0.9μ,之后μ减小为原来的10倍。该过程一直持续到μ<10−7μ < 10^{−7}μ<10−7。

最后,为了确保实现的鲁棒性,通过向Hessian中添加一个缩放的单位矩阵来更新(10)中的Hessian,即γI。参数γ可以通过应用Levenberg-Marquardt算法(Andreasson et al. 2005)或启发式更新来确定。在提出的实现中,使用了启发式更新,使γ被选择为10−5 tr(Hessian)或10−7的最大值。除了Hessian的启发式更新之外,还要求搜索方向实际上是上升方向。当搜索方向与(8)的梯度之间的内积大于零时,就满足这个条件。这些检查应该确保Hessian的正定性,并且搜索方向始终是上升方向。

论文:Parallel framework for topology optimization
using the method of moving asymptotes.

使用MMA解决拓扑优化问题的并行框架相关推荐

  1. ToPY-用于拓扑优化的开源PYTHON框架

    ToPY-用于拓扑优化的开源PYTHON框架 拓扑优化是几何优化的新方向. 为参数优化,形状优化提供了新的思路. 所谓拓扑优化,是指优化过程中可以引入空洞等改变了几何体拓扑的形状.这也是常规的形状优化 ...

  2. 拓扑优化 mma法

    %=========================================================================% % 2019.03.15 BIT 宇航学院 DO ...

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

    最近有很多人私信我咨询如何入门拓扑优化的研究,为了避免重复劳动,我在这篇文章里做一个统一回复. 首先必须声明,我自己也是拓扑优化研究领域的新人,因此本文仅代表我作为一个新人的一些浅薄的看法,大家切记不 ...

  4. 拓扑优化科研(持续更新帖)

    Topology code web DTU丹麦技术大学开发的算法和APP. 有效的3D拓扑代码和软件. Recommended books <有限元分析及应用>曾攀 <MATLAB有 ...

  5. workbench拓扑优化教程_轻量化及拓扑优化软件GENESIS介绍——可集成到Workbench

    GENESIS是一个将有限元求解器和高级优化算法集于一体的结构优化软件,主要用于结构轻量化和拓扑优化设计.用户可以直接使用ANSYS.Nastran.Abaqus等有限元软件的网格模型和载荷工况来进行 ...

  6. comsol如何定义狄利克雷边界_如何使用拓扑优化结果创建几何模型

    拓扑优化是一种优化技术,可以将模拟域划分为需要保留或删除的区域.优化使用要删除区域中物理场的近似表示,因此我们应从几何图形中删除这些区域并进行新的仿真以验证优化结果.借助 COMSOL  软件,我们可 ...

  7. C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度

    目录标题 引言 数据并行:将数据集分割成多个子集,分配给多个线程或处理器并行处理. 延迟执行与乱序执行:对指令的执行顺序进行调整,提高指令流水线的利用率和性能. 延迟执行 乱序执行 任务并行:将程序分 ...

  8. matlab对拓扑的处理,Matlab的图形处理器并行计算及其在拓扑优化中的应用

    Journal of Computer Applications 计算机应用,2016,36(3):628-632,652 ISSN 1oo1.9081 C0DEN JYIIDU 2016-03一l0 ...

  9. TopOpt | 99行拓扑优化程序完全注释

    博客搬家到自己搭建的 主页 啦q(≧▽≦q),大家快来逛逛鸭! The Corresponding Files (Click to Save): Code:            top.m Refe ...

最新文章

  1. linux shell find命令 查找指定时间范围内的文件
  2. Python: zip()的使用
  3. css修改select选择框option被选中的背景颜色_5个容易忽视的 CSS 属性
  4. Linux vim 的编码格式,linux下的文件编码,vim编码
  5. Django REST framework 认证、权限和频率组件
  6. thymeleaf 中 通用的分页方法
  7. mysql汽车租赁管理系统
  8. 中介效应调节效应分析对比及操作详解
  9. 利用 UPnP 的反射攻击分析
  10. php 获取农历,PHP获取农历、阳历转阴历
  11. 网络正常且开启了代理Chrome不能正常上网的解决方法
  12. java JPG等图片格式转成PGM
  13. ios error90096 错误
  14. 将条码软件中的标签转化成PDF
  15. 安装python与编译工具vs code(中文版)和pycharm(中文版)
  16. 入驻华为严选商城性能测试案列
  17. Unity DOTween Yoyo循环运动
  18. 制作nextcloud私人云盘
  19. tensorflow入门实战----VGG16完成猫狗分类
  20. BlackBerry高级UI设计

热门文章

  1. 带栩字的优美古诗句_栩字取名的寓意 带栩字好听大气的名字女孩
  2. 2D变形:平移、旋转、缩放、倾斜
  3. Druid数据库连接池监控的使用
  4. .c文件和.h文件之间的联系
  5. OSGearth学习(一)
  6. 11、每日最新新闻接口,免费好用
  7. Java中如何实现数组反转,将数组元素倒过来排列?【含详细解析】
  8. BZOJ 1909 Berth Allocation
  9. caret包介绍学习之train函数介绍
  10. 5月16日第壹简报,星期一,农历四月十六