基于水平集的拓扑优化方法概述
1. 水平集方法思想
水平集(level set)的基本思想是将界面看成高一维空间中某一函数ψ(称为水平集函数)的零水平集,同时界面的演化也扩充到高一维的空间中。我们将水平集函数按照它所满足的发展方程进行演化或迭代,由于水平集函数不断进行演化,所以对应的零水平集也在不断变化,当水平集演化趋于平稳时,演化停止,得到界面形状。
2. 水平集函数
\psi \left( \mathbf{x},t \right) =\left\{\begin{array}{cc} <0 & {\mathbf{x} \in \Omega}\\ =0 & {\mathbf{x} \in \partial \Omega}\\ >0 & {\mathbf{x} \not \in \Omega }\\ \end{array} \right.
其中,t表示时间。
x是水平集设计变量,
\psi是水平集函数,
\Omega是作用域,D是设计空间,∂Ω∂Ω是作用域的边界。0水平集函数表示作用域的边界。
3. 拓扑优化流程
3.1 构建初始水平集函数
一般使用符号距离函数进行初始水平集函数的构建。符号距离函数为设计空间内任意点处到边界的最小距离,且如果该点在区域边界内部,值为正;在边界外部,值为负;在边界上,值为0。详细信息参见维基百科 Signed distance function。根据初始水平集函数确定的水平集范围,进行材料的初始分布。
3.2 构建拉格朗日函数
如果拓扑优化设计的目标是在给定最大体积V_{max}的情况下,最小化J,则构建的拉格朗日函数如下[1]:
L\left( \mathbf{x} \right)=J\left( \mathbf{x} \right)+ \lambda \mathbf{x} \left( {V \mathbf(x)-V_{max}} \right)+ \frac{1}{2\Lambda}\left( {V \mathbf(x)-V_{max}} \right)^2
其中,
J\left(\mathbf{x} \right)是优化目标函数,
V \mathbf(x)-V_{max}是给定的等式约束,
\lambda和
\Lambda是两个拉格朗日系数,更新策略为[2]:
\lambda^{k+1}=\lambda^k+\frac{1}{\Lambda^k}\left( {V \mathbf(x)-V_{max}} \right)\Lambda^{k+1}=\alpha\Lambda^k其中,权重系数α∈(0,1)α∈(0,1)
3.3 拉格朗日函数的拓扑敏感度
拓扑敏感度指当增加一个无限小的空时,元素点处的目标函数的变化程度[3]。示意图如图1所示[4]。
图1 拓扑敏感度示意图
拓扑敏感度计算方法如式所示
3.4拉格朗日函数的元素敏感度
元素敏感度指增加一个元素后,元素点处的目标函数的变化程度。
3.5 水平集函数更新策略
根据元素敏感度和拓扑敏感度确定每一个元素点处的更新速度,进行水平集函数的更新。
其中,
v\left( \mathbf{x} \right)为元素敏感度,根据3.4节方法进行计算。
g \left ( \mathbf{x} \right)=-sign\left( \psi \left( \mathbf{x}\right) \right) \delta_{t} L\left( \mathbf{x}\right)\delta_{t} L\left( \mathbf{x}\right)是拓扑敏感度,根据3.3节方法进行计算。-sign\left( \psi \left( \mathbf{x}\right) \right)为水平集符号函数。计算方法如下:
使用一阶格式法[5]进行\left | \nabla \psi \right | 的计算。
3.6 拓扑优化的流程
Step 1:使用符号距离函数法进行初始水平集函数的构建,并确定初始材料分布;
Step 2:根据设计目标和体积约束构建拉格朗日函数
Step 3:计算每一元素的拓扑敏感度和元素敏感度
Step 4:根据3.5节方法进行水平集函数的更新
Step 5:根据新的水平集函数确定新的材料分布和新的拉格朗日函数
Step 6:收敛性分析。如果收敛,优化结束;不收敛,从Step 2循环。
4. 常用参考资料
- 基于水平集法进行拓扑优化的开拓性论文1:Michael Yu Wang, X. W., Dongming Guo (2003). “A level-set method for structural topology optimization.” Comput. Methods Appl. Mech. Engrg. 192: 20.
- 基于水平集法进行拓扑优化的开拓性论文2:Allaire, G., et al. (2004). “Structural optimization using sensitivity analysis and a level-set method.” Journal of Computational Physics 194(1): 363-393.
- Matlab代码:Challis, V. J. (2010). “A discrete level-set topology optimization code written in Matlab.” Struct Multidisc Optim 41: 12.
- 水平集方法介绍: https://www.http://youtube.com/watch?v=B9soiDHr9bo&index
参考文献
[1] Luo, J., Z. Luo, L. Chen, L. Tong and M. Y. Wang (2008). “A semi-implicit level set method for structural shape and topology optimization.” Journal of Computational Physics 227(11): 5561-5581.
[2] Luo, J., Z. Luo, S. Chen, L. Tong and M. Y. Wang (2008). “A new level set method for systematic design of hinge-free compliant mechanisms.” Computer Methods in Applied Mechanics and Engineering 198(2): 318-331.
[3] Deng, S. and K. Suresh (2014). “Multi-constrained topology optimization via the topological sensitivity.” Structural and Multidisciplinary Optimization 51(5): 987-1001.
[4] Masaki Otomori, T. Y., Kazuhiro Izui, Shinji Nishiwaki (2015). “Matlab code for a level set based topology optimization method using a reaction diffusion equation.” Struct Multidisc Optim 51: 1159-1172.
[5] Allaire et al. Structural optimization using sensitivity analysis and a level-set method., 2004(194): 363-393.
题图来源于Google Image Search