基于MATLAB 与ANSYS 的结构优化设计

伴随着数学、力学和计算机的发展,结构优化设计也逐渐发展、成熟起来。ANSYS 是最早开发结构优化设计模块的有限元分析软件之一,它提供两种优化方法,即零阶方法和一阶方法。二者均是将约束的优化问题转化为非约束的优化问题来求解。零阶方法只用到因变量而不用它的偏导数,其全局搜索能力很强,而局部搜索能力较差,研究表明,该方法可以快速达到最优解的80 %,但却很难收敛到最优解。一阶方法使用因变量的导数值来确定搜索方向,其局部搜索能力很强,但全局搜索能力较差,很容易收敛到局部极小值点。遗传算法是近些年逐渐发展起来的一种智能的优化算法,它具有较强的全局搜索能力,并且可以与其他常规优化算法相结合,进而高效、准确地解决大多数的工程优化问题。MATLAB 中的遗传算法工具箱集成了当前比较成熟的各种遗传算子,借助它可以方便地完成各种问题的优化求解。
本文通过在MATLAB 中将ANSYS 作为子程序调用的方法来研究遗传算法在工程结构优化中的应用。
1 遗传算法及MATLAB 遗传算法工具箱
1.1 遗传算法基本思想
遗传算法( GA) 最初是由美国Michigan 大学的John Holland 教授于1975 年提出的,它将达尔文的生物进化理论应用于优化设计中,把解空间的某个点集映射为生物学中的种群,将目标函数映射为种群所处的环境,因此按照生物进化理论的观点,种群中的个体会不断向着适应环境的方向进化,经过若干代进化之后该种群所代表的解就会收敛到问题的最优解。该方法最大的特点是全局搜索能力强,并且不需要编程人员对问题的优化过程有太深的了解,只要选定了种群,指定了种群所处的环境,该方法就会自动的、智能地向最优解进化。遗传算法中最基本的操作是遗传操作,包括选择、交叉和变异。自然界中环境按照适者生存的原则来选择优良个体,使其优良基因能够传递到下一代,遗传算法中的选择操作即是模拟这一过程。首先计算种群中每个个体的适应度( Fitness) ,然后按照适者生存的原则进行选择操作。交叉操作是模拟生物进化中的有性繁殖过程,种群个体之间通过基因重组生成新的个体。生命体在进化过程中某些基因常常会发生变异,好的变异会被环境选择并遗传到下一代,而不好的变异则会被环境淘汰,因此这种基因变异对种群的进化有巨大的推动作用。遗传算法中应用这种变异来产生新的个体,使种群中的基因更加丰富,有利于算法的收敛。
1.2 MATLAB 遗传算法工具箱(GAOT)
MATLAB 是矩阵实验室的简称,它具有丰富的矩阵操作命令。使用MATLAB 来实现遗传算法是非常方便的,即将种群的数据存入矩阵中,然后就可以对整个种群而不是单个个体进行操作,从而大大提高了计算效率。更重要的是,MATLAB本身还带有遗传算法工具箱,它集成了当前
较成熟的各种遗传操作算子和各种改进型遗传算法,使遗传算法优化变的更加简单、高效。其主程序ga. m 的调用格式如下:
x = ga( @ fitnessfcn,nvars,options)
或
[x, fval]= ga( @ fitnessfcn,nvars,options)
或
[x, fval, reason]= ga ( @ fitnessfcn,nvars,options)
或
[x,fval,reason,output] = ga ( @ fitnessfcn,nvars,options)
或
[x, fval, reason,output,population]= ga( @ fitnessfcn,nvars,options)
其中各参数说明如下:
x 为程序最终计算得到的最小值;
fval 为最小值点x 处的适应度函数值;
reason 为算法终止的原因;
output 为算法输出的结构体,包含程序计算
中的各种相关信息;
population 为程序终止时的种群;
fitnessfcn 为适应度函数;
nvars 为设计变量个数;
options 为遗传算法的各种控制选项。
此外,也可使用工具箱的GUI 界面( 交互式图形用户界面) 来执行遗传操作,其特点是简洁、直观。
2 MATLAB 调用ANSYS
MATLAB 遗传算法工具箱需要输入适应度函数。对于简单问题,其适应度函数很好编写,但对于大型的工程问题,其目标函数和状态变量需要用有限元计算才能得到,因为仅使用MATLAB 语言编写程序来实现往往是很复杂有时甚至是不可能的,必须借助于成熟的有限元计算程序,而ANSYS由于其自带的APDL 语言则成为了有限元计算的首选。
2.1 MATLAB 与ANSYS 数据传递
若要实现MATLAB 对ANSYS 的调用,首先要能实现MATLAB 与ANSYS 的数据传递,而二者都有很强的文件操作功能,这使数据传递的实现成为可能。MATLAB 在调用ANSYS 时的数据流向如图1。
MATLAB 打开并读、写数据文件的基本步骤如下:
fid = fopen( 'mta. txt', 'w + ')
fprintf( fid, format,dv ) /obj = fscanf ( fid, format)
fclose( fid)
其中, 'w + '表示以读写方式打开文件; dv 为设计变量; obj 为目标函数; format 表示以某种格式读写数据,与C 语言相同。
ANSYS 打开并读、写数据文件的基本步骤如下:
读取数据
* dim,dv,arrary,n
* vread,dv( 1) ,mta, txt,, ijk,n
( format)
其中,n 为设计变量个数; format 为以某种格式读取数据,与FORTRAN 语言相同。
打开并写入数据到数据文件
* cfopen,atm, txt
* vwrite,obj
( format)
* cfclose
2. 2 MATLAB 调用ANSYS
ANSYS 程序提供了batch ( 批处理) 运行方式,可以在不打开ANSYS 程序界面的情况下后台运行计算,并输出结果,这使得在其他程序中调用ANSYS 成为可能。MATLAB 调用ANSYS 的语句如下:
system( 'D: \Ansys \v100 \ANSYS \ bin \ intel \ ansys100- b - p ansys - product - feature - i input file - o out file. bat')
其中各参数说明如下:
- b batch 为运行模式;
- p 为产品代码( 可以在ANSYS 的帮助文件里找到) ;
- i 为输入文件( ANSYS 分析文件) ;
- o 为输出文件。
此外,在调用ANSYS 时还可以输入以下控制参数:
- j 为工程名称;
- m 为内存大小;
- db 为数据库打下。
3 结构优化算例
以一3 层4 跨平面钢框架结构为例,如图2。
为了减少设计变量个数,各层梁的尺寸( bb × bh)均相同,梁宽bb 的变化范围为0. 1 ~ 0. 3 m,梁高的变化范围为0. 2 ~ 0. 4 m,各层柱均为方柱( cb ×cb) ,柱宽的变化范围为0. 2 ~ 0. 5 m。初始截面尺寸为bb = 0. 2 m、bh = 0. 3 m、cb = 0. 3 m。顶层承受200 kN 的均布荷载,其余各层均承受100 kN的均布荷载。材料弹性模量为210 GPa,拉压许用应力均为235 MPa。用混合遗传算法优化该结构,使其所用钢材的体积最小。
为了对比,本文分别采用MATLAB 遗传算法工具箱中的混合遗传算法及ANSYS 中的零阶方法、一阶方法3 种方法对该结构进行了优化设计,对比结果见表1。
由表1 可以看出,3种优化方法中基于MATLAB与ANSYS 的混合遗传算法的精度最好,其最大应力最接近钢材的容许应力,用钢量最小。而零阶方法的精度最差,其计算用钢量与混合遗传算法的计算用钢量相比增大了16.8 %。一阶方法的计算结果与零阶方法的计算结果稍好,但其用钢量仍然比混合遗传算法增大了8 %。
4 结论
MATLAB 遗传算法工具箱具有很强的优化功能,且其操作简单、直观,而ANSYS 又是通用大型有限元分析软件。本文充分利用了二者的优势,实现了MATLAB 与ANSYS 的数据传递和调用,对一典型钢框架结构进行了优化设计,验证了该方法的可行性。但从分析精度来看,基于MATLAB与ANSYS 的混合遗传算法要优于零阶方法和一阶方法。然而,从分析成本来看,混合遗传算法的分析成本要远远的高于零阶方法和一阶方法,这是由于MATLAB 与ANSYS 的数据传递是间接的,每次循环过程计算机都要进行相应文件的读取与写入操作,占用了大部分的分析时间。因此,将该方法应用于大型结构的优化设计还需要进一步的探索与验证。

工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
