结构优化的方法有很多种,中间有的涉及到非常系统的工程优化算法,如之前介绍的单纯体法(算是比较简单的),在这里推荐大家一本好书《工程优化方法》陈卫东写的。结构设计中很多时候我们并不是要得到最最优解,相对优化对工程师就很不错了,但是太复杂的算法会让工程师很难把控,特别是计算时间长,因此遗传算法作为只是找到相对最优解的方法在工程上能很好地被利用。正所谓“遇事不决,量子力学,不知解法,遗传算法”。
结构优化的方法有很多种,中间有的涉及到非常系统的工程优化算法,如之前介绍的单纯体法(算是比较简单的),在这里推荐大家一本好书《工程优化方法》陈卫东写的。
结构设计中很多时候我们并不是要得到最最优解,相对优化对工程师就很不错了,但是太复杂的算法会让工程师很难把控,特别是计算时间长,因此遗传算法作为只是找到相对最优解的方法在工程上能很好地被利用。正所谓“遇事不决,量子力学,不知解法,遗传算法”。
遗传算法的背后思想就是优胜劣汰的自然法则z
在这里我们只是把遗传算法的思想应用在结构工程上,可以说是似遗传算法,并不是工程优化研究或算法研究中的复杂的遗传算法。在MARK SARKISIAN的《DESIGNING TALL BUILDINGS》(非常推荐大家去看)的书上提到这种遗传算法的应用。
MARK SARKISIAN的《DESIGNING TALL BUILDINGS》应用介绍
那么这一期的Dino结构笔记就通过OPENSEES, ETABS等软件结合编程实现一个遗传算法的计算,以一个桁架结构为例进行介绍吧。
实例:对一定总重量的钢桁架结构进行结构优化,使桁架在重力荷载作用下的跨中变形最小,也即是刚度最大。桁架上弦的节点的作用力为150kN,由于桁架是对称的,采用半跨建模,初始条件,全部截面的尺寸为4000mm2,统计一下,半跨的桁架的总重量约为2.285 ton。
计算简图如下图所示。通过遗传算法确定每一节截面的大小,以保证在用钢量一定的情况下总刚度最大。
桁架的计算简图
(1) 这个实例我打算采用OPENSEES进行分析,那么首先我们建立ETABS模型,加入支座与荷载条件,如下图所示,导出S2K文件以供导入OPENSEES所用。
桁架在ETABS中建模
(2) 导入ETO生成OPENSEES的分析命令流文件,导入ETO以后桁架的构件编号如图所示。在OPENSEES中我们只需要输入点13的竖向位移,做为遗传算法的评分标准,点13的位移越小,评分越高,代表遗传算法中的后代更加优秀。
桁架在OPENSEES中的建模
(3) OpenSEES的命令流如下所示,命令流分为3个部分:
第一部分: 节点、材料与 支座 条件(分析过程中不发生改变)
第二部分: 截面(分析过程中不断改变),采用引入文件 source section_1.tcl
第三部分: 分析与结果提取,结果提取的 名 字改变,即:
recorder Node -file node1.out -time -node 13 -dof 3 disp
不同的个体分析存储的文件名不同, 分别是 node1~node8.out, 记录13号点的竖向位移
model basic -ndm 3 -ndf 6
node 1 0.000E+000 0.000E+000 0.000E+000
……….
node 17 1.000E+004 0.000E+000 0.000E+000
fix 1 1 1 1 1 1 1;
……….
fix 17 0 1 0 1 1 1;
uniaxialMaterial Elastic 1 1.999E+005
source section_1.tcl
recorder Node -file node1.out -node 13 -dof 3 disp
pattern Plain 1 Linear {
load 4 0.000E+000 0.000E+000 -1.500E+005 0.000E+000 0.000E+000 0.000E+000
……….
load 15 0.000E+000 0.000E+000 -1.500E+005 0.000E+000 0.000E+000 0.000E+000
}
constraints Plain
numberer Plain
system BandGeneral
test EnergyIncr 1.0e-6 200
algorithm Newton
integrator LoadControl 1
analysis Static
analyze 1
(4) 桁架截面在遗传算法的过程中是不断变化的,所以这个文件需要不断的修改,8个子代就有8个不同的文件存储,如其中一个子代的截面文件 section_1.tcl如下所示。
element truss 1 2 3 9267.198 1
………
element truss 31 17 11 1215.233 1
(5) 基本的OPENSEES的文件构造就 搭 好了,只要Run OpenSEES,程序就会计算出不同截面布置情况下的13号节点的竖向位移,我们的目标就是让这个位移变小。
整个简化遗传算法的流程图
(6) 接下来我们就需要通过编程实现遗传算法,并控制OPENSEES不断计算。这里我采用DELPHI进行编程,编了一个简化的遗传算法逻辑。流程图如下图所示。
遗传算法的主要内容如下:
a). 随机生成8个母代桁架结构模型,截面是随机大小分布,总重量恒定
b). 采用OPENSEES作为计算核心计算出8个母代桁架的位移作为评分标准
c). 对母代桁架进行排序,位移最小则最优,得到较大的交配概率为26.7%
d). 根据交配概率抽取2个母代桁架进行杂交,生成新的子代桁架,进行8次
e). 子代桁架需要出现变异,以保证多样性,抽取个别构件截面放大150%与缩小66.7%,以这个操作代表变异性。
f)把子代进行OPENEES计算,即执行b的操作,整个过程循环操作。
最后遗传算法的程序编好,如图所示,迭代次数与13号节点的位移曲线如图所示。
证明,随着遗传算法的不断迭代,桁架的刚度越来越大。13号节点的位移从413降至187mm。
基于OPENSEES的遗传算法控制程序
迭代次数与竖向位移值的关系
(7) 采用ETABS进行分析:原方案与最后优化方案的用钢量是相等
原方案:全部杆件的截面为4000mm2,13号节点竖向变形为350mm
优化方案:每个截面如下图表所示,13号节点竖向变形为185mm。刚度有了明显的提高。而这个算法的优化方向是指定的,虽然有可能不是最优,但是足够应用于工程了。
原方案的ETABS计算结果
优化方案的ETABS计算结果
优化方案的ETABS计算结果(虚功分布图)
总结:大自然总能给工程师与科学家启发,特别是优化算法的研究领域,如蚁群算法,狼群算法,人工神经网络算法等等。自然经过以亿年为单位的时间进行演化,从中有太多的规律可以被发现并为工程师学习与应用。作为工程师通过简单的编程实现遗传算法在工程计算中的应用,那一种喜悦是非常特别的。