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

news2024/12/24 21:26:15

使用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 λi0,i=1,m 是非线性不等式约束的拉格朗日乘子。

拉格朗日对偶 Ψ \Psi Ψ(λ)通过求解以下一系列简单的最小化问题而形成。
在这里插入图片描述
作为这些计算的一个自然部分,我们得到了xj (λ), yi(λ) 和 z(λ)的显式表达式。将这些重新插入(6)后,对偶问题可以表述为以下最大化问题
在这里插入图片描述由于对偶函数是凹的,(7)中的最大化问题是凸的(Andreasson et al. 2005)。当得到对偶问题的解时,可以通过将最优 λ 重新插入xj (λ)、yi(λ) 和 z(λ) 的表达式来计算最优原始解。如前所述,存在几种解决策略来解决(7)所述类型的优化问题。这里选择了原始/对偶方法,这意味着必须形成另一个拉格朗日方法,即。
在这里插入图片描述
η ∈ R m \eta \in \mathbb R^m ηRm 是一个拉格朗日乘子向量,要求满足i = 1, m时 η i ≥ 0 η_i≥0 ηi0 λ i ≥ 0 λ_i≥0 λi0 的条件。请注意,原始/对偶类型求解器现在将 λ λ λ 称为原始变量,将 η η η 称为对偶变量,而不是MMA子问题的原始和对偶变量。一阶最优性条件,即Karush-Kuhn-Tucker (KKT)条件(Luenberger and Ye 2008;Andreasson et al. 2005),可以表述为

在这里插入图片描述
然后采用内点法求解上述方程组。求解过程包括在每个互补松弛条件的右侧添加一个惩罚参数 μ,使条件变为 η i λ i = μ η_iλ_i = μ ηiλi=μ。对互补松弛条件的修正等价于在对偶函数上增加一个对数障碍,即 μ Σ i m = l o g ( η 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} λi1 η i η_i ηi 的对角线矩阵,e是1的向量。η的搜索方向如下所示
在这里插入图片描述
基于计算得到的搜索方向,执行直线搜索,使所有 η ′ s η's ηs λ ′ s λ's λs 都严格为正。这个要求等价于找到最大 θ ≤ 1 θ≤1 θ1,使得
在这里插入图片描述

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

最后,为了确保实现的鲁棒性,通过向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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vitepress+gitee pages搭建自己的博客网站

概述 “不写博客的GISer不是一个好程序员”。所以&#xff0c;好多程序员会保留着写博客的习惯&#xff0c;一方面记录自己的学习成果或者解决某个问题的方法&#xff0c;一方面能够帮助到他人&#xff0c;再一方面也能够督促自己多学点东西……这是一个一举N得的事情。上为其…

【C语言进阶】怎么可能不会?十分钟带你玩转枚举与联合

目录 &#x1f34a;前言&#x1f34a;&#xff1a; &#x1f95d;一、枚举&#x1f95d;&#xff1a; 1.枚举类型的定义&#xff1a; 2.枚举类型的优点&#xff1a; 3.枚举类型的使用&#xff1a; &#x1f353;二、联合&#xff08;共用体&#xff09;&#x1f353;&#x…

【实验报告NO.000002】MIT 6.858 Computer System Security - Lab 3

0x03.Lab 3: Symbolic execution 本 lab 将教大家使用 符号执行 &#xff08;symbolic execution&#xff09; 这一强大的技术来寻找软件中的漏洞&#xff0c;在 lab 的最后我们将建立一个可以在 zoobar web 应用中寻找触发多种漏洞的符号执行系统&#xff08;准确的说是一个混…

基于主从博弈的电热综合能源系统动态定价与能量管理附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

你真的了解缓存吗?(2)

在上一篇文章你真的了解缓存吗?(1)中&#xff0c;我介绍了引入缓存的利与弊&#xff0c;以及在选择一款缓存中间件时应该注意什么。在这一篇文章中&#xff0c;我们继续介绍在不同的业务场景下&#xff0c;如何进行缓存的选择&#xff0c;具体来说就是缓存的分类&#xff0c;和…

嵌入式分享合集123

一、简易大功率变压器电路图 本文介绍的电子变压器克服了传统硅钢片变压器体积、重量大、效率低、价格高的缺点&#xff0c;电路成熟&#xff0c;性能稳定。 本电子变压器工作原理与开关电源相似&#xff0c;电路原理图见图1&#xff0c;由VD1-VD4将市电整流为直流&#xff0c…

书店管理系统(基于MySQL存储)

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

对标测评YD云电脑和天翼云电脑公众版

最近听说YD也推出了自研云电脑产品&#xff0c;抱着吃瓜心态网上充值体验了一把YD云电脑&#xff0c;正好我手上有天翼云电脑&#xff0c;凑一对测试看看两家央企在云计算领域的技术实力究竟如何。 测试环境搭建在我的个人pc上&#xff0c;分别下载YD云和天翼云电脑最新Windows…

[思维模式-3]:《如何系统思考》-3- 认识篇 - 什么是系统?系统的特征?

目录 第1章 什么是系统 1.1 万事万物都是一个有机的系统 1.2 系统的科学定义 1.3 系统的构成 1.4 系统的分类 第2章 动态复杂系统的八大特征 2.1 目的性 2.8 边界 2.3 结构影响行为 2.4 总体大于部分之和 2.5 因果互动 2.6 反馈 2.7 动态稳定性&#xff08;动态自…

SAP ABAP 小工具 获取两个日期时间秒数和输出时间转换文本

SAP ABAP 小工具 获取两个日期时间秒数和输出时间转换文本 引言&#xff1a; 小工具 获取两个日期时间秒数和输出时间转换文本&#xff0c;用于加强用户交互直观性。 关键字&#xff1a;SAP ABAP 日期时间间隔 秒数 转换时间文本 文章目录SAP ABAP 小工具 获取两个日期时间秒…

[附源码]Python计算机毕业设计Django吾悦商城管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

计算机毕业设计springboot+vue基本微信小程序的小区防疫监管系统

项目介绍 编写工具用idea 、Maven包,后端数据库是mysql,Java语言,springboot框架。其间,在健康打卡位置和物资选购要调用接口才可实现其功能。 1、研究对象&#xff1a;小区居民普通用户和小区管理员 管理员权限&#xff1a;管理员是整个系统的操作者,系统的各个模块都能进行信…

python中pandas进行数据分析与可视化(3)

1.创建数据源 在前几篇博客中&#xff0c;都是手动创建少量数据充当数据源&#xff0c;这次通过随机生成&#xff0c;让数据量多一些 # 导入所有需要的库 import pandas as pd import numpy.random as np import openpyxl import xlrd import matplotlib.pyplot as plt#创建一…

Python基础 - 本地模块的绝对导入/引用

目录 1. 项目入口文件 2. 绝对导入 Python本地模块的引入是比较简单的&#xff0c;包括绝对引用和相对引用(相对引用的博客参考下一篇Python基础 - 本地模块的相对导入/引用)&#xff0c;个人比较推荐使用绝对引用&#xff0c;会避免掉很多错误&#xff0c;本篇文章主要介绍绝…

【Javassist】快速入门系列01 使用Javassist实现Hello World

系列文章目录 01 使用Javassist实现Hello World 文章目录系列文章目录前言引入Javassist jar包使用Javassist实现Hello World总结说明前言 本篇文章为Javassist入门系列文章&#xff0c;适合了解Java基础语法的人零基础学会使用Javassist实现一个Hello World程序。 引入Javas…

国企招聘: 中国雄安集团2023校园招聘,面向全国,不限户籍

中国雄安集团有限公司2023年校园招聘公告 中国雄安集团有限公司&#xff08;以下简称“中国雄安集团”&#xff09;成立于2017年7月18日&#xff0c;是雄安新区开发建设的主要载体和运作平台。结合雄安新区建设需要&#xff0c;中国雄安集团布局金融与投资、城市发展与城市资源…

高低电平报警器-(模电、数电电子课程设计,毕业设计)Multisim仿真图

目录1 背景与意义1.1 研究背景1.2 研究内容1.3 技术指标2 电路设计2.1 各单元电路设计2.1.1 步进电源电路设计2.1.2 比较电路设计2.1.3 报警电路设计2.2 总体电路设计3 Multisim电路仿真与调试3.1仿真过程3.1.1 步进电源仿真调试3.1.2 总体电路仿真与调试3.2仿真结果分析4 总结…

Java项目:SSM婚纱影楼摄影商城项目网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录…

R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

R语言 R语言学习笔记——高级篇&#xff1a;第十四章-主成分分析和因子分析 文章目录R语言前言一、R中的主成分和因子分析二、主成分分析2.1、判断主成分的个数2.2、提取主成分2.3、主成分旋转2.4、获取主成分得分三、探索性因子分析3.1、判断需提取的公共因子数3.2、提取公共…

uboot启动流程

目录 1. 从汇编到C语言 1. 从汇编到C语言 uboot整个程序的入口是 ./arch/arm/lib/vectors.S 的 start 其中&#xff0c;reset 来自于 ./arch/arm/cpu/armv7/start.S&#xff0c; ./arch/arm/cpu/armv7/start.S 程序的执行路径为 reset --> save_boot_params_ret --> cp…