MMA算法的推导及3D简支梁拓扑优化代码详解
Posted 蓝羽浅葱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MMA算法的推导及3D简支梁拓扑优化代码详解相关的知识,希望对你有一定的参考价值。
MMA算法的推导及代码详解
对于变密度的参数化方法,设计变量x为材料相对密度,在已知材料的物性,包括弹性模型、密度以及给定载荷的条件下,我们希望简支梁的柔度最小,或者说使得结构势能最小(结构在力作用下的位移,该力做的功也就是势能)。那么当材料总体积保持为常数不变,给定载荷不变的情况下柔度最小可以理解为结构刚度最强。
问题描述
在结构力学相关设计中,通常会出现结构冗余的情况,例如受到一定载荷作用下的悬臂梁和简支梁其结构质量可以进一步减小。这一点在桥梁等设计中体现的更为明显。但是传统的桥梁设计方案是根据经验选择合适的桁架结构然后不断迭代设计方案。这种做法十分繁琐,目前我们可以通过拓扑优化的技术在概念设计阶段就提出最优方案,减少材料的浪费。
目前拓扑优化的参数化方法种类有很多,例如变密度法、水平集法、构型理论等。其中比较常见的是变密度法。密度法假设有一种材料密度可以在0-1之间变化。以这种参数为设计变量,密度为1代表材料存在,密度为0代表材料不存在。这样就在拓扑优化问题与材料分布问题之间建立了联系。
拓扑优化问题与传统最优化问题在基本原理上互通,其数学本质为求多元函数的极值问题。其基本形式可以进行如下抽象:
设
x
=
(
x
1
,
x
2
,
⋅
⋅
⋅
x
n
)
T
\\mathbfx = \\left( x_1,x_2, \\cdot \\cdot \\cdot x_n \\right)^T
x=(x1,x2,⋅⋅⋅xn)T为n维欧氏空间
R
n
\\mathbfR^n
Rn内一点,
f
(
x
)
,
g
i
(
x
)
(
i
=
1
,
2
,
⋅
⋅
⋅
,
m
)
f\\left( \\mathbfx \\right),g_i\\left( \\mathbfx \\right)\\left( i = 1,2, \\cdot \\cdot \\cdot ,m \\right)
f(x),gi(x)(i=1,2,⋅⋅⋅,m)和
h
j
(
x
)
(
j
=
m
+
1
,
⋅
⋅
⋅
,
p
)
h_j\\left( \\mathbfx \\right)\\left( j = m + 1, \\cdot \\cdot \\cdot ,p \\right)
hj(x)(j=m+1,⋅⋅⋅,p)均为定的n元函数。最优化问题可表述为:在如下的约束条件下:
g
i
(
x
)
≤
0
i
=
1
,
2
⋅
⋅
⋅
m
g_i\\left( \\mathbfx \\right) \\leq 0~~~~i = 1,2 \\cdot \\cdot \\cdot m
gi(x)≤0 i=1,2⋅⋅⋅m
h j ( x ) = 0 j = m + 1 , ⋅ ⋅ ⋅ p h_j\\left( \\mathbfx \\right) = 0~~~~j = m + 1, \\cdot \\cdot \\cdot p hj(x)=0 j=m+1,⋅⋅⋅p
求 f ( x ) f(x) f(x)的最小值(或最大值)。通常称 f ( x ) f(x) f(x)为目标函数, g i ( x ) ≤ 0 g_i\\left( \\mathbfx \\right) \\leq 0 gi(x)≤0为不等式约束条件, h j ( x ) = 0 h_j\\left( \\mathbfx \\right) = 0 hj(x)=0为等式约束条件, x x x为设计变量。通用的表达形式为:
min
f
(
x
)
s
.
t
.
g
i
(
x
)
≤
0
i
=
1
,
2
,
⋅
⋅
⋅
m
h
j
(
x
)
=
0
j
=
m
+
1
,
⋅
⋅
⋅
p
x
∈
R
n
\\left\\ \\beginmatrix \\min~~~~f\\left( \\mathbfx \\right) \\\\ s.t.~~~~g_i\\left( \\mathbfx \\right. )\\leq 0~~~~i = 1,2, \\cdot \\cdot \\cdot m~ \\\\ h_j\\left(\\mathbfx \\right.) = 0~~~~j = m + 1, \\cdot \\cdot \\cdot p \\\\ x \\in R^n \\\\ \\endmatrix \\right.
⎩⎪⎪⎨⎪⎪⎧min f(x)s.t. gi(x)≤0 i=1,2,⋅⋅⋅m hj(x)=0 j=m+1,⋅⋅⋅px∈Rn
上式又称优化列式,是待求解问题的表达式。
令 R = x | g i ( x ) ≤ 0 , i = 1 , 2 , ⋅ ⋅ ⋅ m ; h j ( x ) = 0 , j = m + 1 , ⋅ ⋅ ⋅ p R = \\left\\ x \\middle| g_i\\left( x \\right) \\leq 0,i = 1,2, \\cdot \\cdot \\cdot m;h_j\\left( x \\right) = 0,j = m + 1, \\cdot \\cdot \\cdot p \\right\\ R=x∣gi(x)≤0,i=1,2,⋅⋅⋅m;hj(x)=0,j=m+1,⋅⋅⋅p称 x ∈ R x \\in R x∈R为上述问题的一个可行解集。
算法推导
基于OC算法并不适用于求解多约束条件的复杂问题,这时候学术界更多使用基于一阶泰勒展开的移动渐近线法[1]。OC算法的详细推导和2D拓扑优化可以看我的另一篇文章https://blog.csdn.net/qq_42183549/article/details/122369170
这样复杂的优化问题一般可以被描述为:
P
:
P:
P:
m
i
n
f
0
(
x
)
f
i
(
x
)
≤
f
i
^
f
o
r
i
=
1
,
…
,
m
x
j
m
i
n
≤
x
j
≤
x
j
m
a
x
\\begincases min~~~~~f_0(x)\\\\ f_i(x)\\le\\widehatf_i~~~~~for~i=1,\\dots,m\\\\ x_jmin\\le~x_j\\le~x_jmax \\endcases
⎩⎪⎨⎪⎧min f0(x)fi(x)≤fi
for i=1,…,mxjmin≤ xj≤ xjmax
对该问题的简化分为四步:
- 选择合适的初始值
- 计算迭代后得到的 x ( k ) x^(k) x(k)以及每个约束函数的梯度
- 产生原问题严格凸子问题 P ( k ) P^(k) P(k)
- 利用迭代产生的结果求解子问题,并返回第二步
所以求解该问题的关键在于生成严格凸的子问题。
对于第k步迭代产生的变量
x
(
k
)
x^(k)
x(k)
L
j
(
k
)
<
x
j
(
k
)
<
U
j
(
k
)
L_j^(k)<x_j^(k)<U_j^(k)
Lj(k)<xj(k)<UjMMA安装及使用优化