复杂形态钢结构设计培训班

首页 Dino结构笔记-公众号 [Dino笔记]粒子群算法在结构分析中的应用

[Dino笔记]粒子群算法在结构分析中的应用

【转自:Dino结构笔记-公众号】粒子群优化算法在钢结构优化分析中的应用
[小记]12月22日,昨天看了《黑客帝国4》的电影,电影有一幕鸟群觅食的动画,让我想起了粒子群的优化算法。以下是本篇笔记的相关内容:
下载资料提示: 点击【阅读原文】才可以下载
【点击下载】 
_PSO优化算法_python代码
【点击下载】 
_相关的ETABS与OPENSEES模型文件

粒子群优化算法,也叫鸟群觅食算法

上次已经介绍了基于OPENSEES的遗传算法在钢结构优化中的应用。这次介绍粒子群优化算法的使用,同样基于OPENSEES平台进行二次开发。粒子群算法(Particle Swam Optimization,简称PSO),是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。这个算法相对容易理解与实现,采用的随机优化算法,每次迭代需要进行结构计算,采用无界面的OPENSEES是好的选择。一般在优化算法的书或网页都有该算法的介绍,网上还可以下载相关的python代码。但是网上的算法只介绍优化算法的细节及对一个方程式的求解,并没有结构工程相关实例,那么本节笔记以一个简单的实例介绍算法应用的过程。
相关阅读:
http://dinochen.com/article.asp?id=362

一般学习优化算法在结构工程中的应用:
(1)了解算法的细节,可以下载python代码学习
(2)采用结构分析软件如OPENSEES,走通第一个结构分析的实例
(3)将结构分析代码化,把参数融入结构模型当中,实现改参数改模型
(4)编程控制结构分析程序迭代计算
(5)将计算结果提取计算适应度,生成下一步的结构模型参数。
 
粒子群优化算法的介绍
粒子群优化算法属于随机优化算法的一种,在结构工程能够较好的运用,结合OPENSEES进行二次开发以后就可以使用了。
具体优化计原理可以看这里:
https://cloud.tencent.com/developer/article/1424756

以一个二维方程的最大值求解为例,整个PSO的迭代过程动画如下图所示。PSO的经典算法的Python代码可以在下面下载。

以下求解方程是:y=100*(x1*x1-x2)^2+ (x1-1)^2

 
编制PSO优化算法求解曲面方程解

那么这一期的转自:Dino结构笔记-公众号就通过OPENSEES, ETABS等软件结合编程实现一个粒子群算法的计算,以一个曲线布置的钢桁架结构为例进行介绍吧。

实例:对一定总重量(恒定的)的曲线钢桁架结构进行结构优化,使桁架在重力荷载作用下(荷载如下图所示)的变形最小,也即是刚度最大。桁架上弦的节点的作用力为150kN,由于桁架是对称的,采用半跨建模,初始条件,全部截面的尺寸为4000mm2,统计一下,半跨的桁架的总重量约为2.359 ton。

计算简图如下图所示。通过粒子群优化算法确定每一节截面的大小,以保证在用钢量一定的情况下总刚度最大,变形最小。

  
钢桁架的计算简图
模型可以在CAD进行建模后,保存为DXF文件后导入ETABS程序中再进行建模。

(1) 这个实例我打算采用OPENSEES进行分析,那么首先我们建立ETABS模型,加入支座与荷载条件,如下图所示,导出S2K文件以供导入OPENSEES所用。
 

桁架在ETABS中建模

(2) 导入ETO生成OPENSEES的分析命令流文件,导入ETO以后处到桁架的构件编号如图所示。在OPENSEES中我们只需要输入点9 ,10 ,11 ,12 ,19 ,14的竖向位移,程序求解这几个节点竖向位移的最大值,做为粒子群算法的评分标准,也就是适应度,这些点的位移越小,评分越高,代表粒子群算法中的粒子接近目标点。
 钢桁架在OPENSEES中的建模
 
ETO展示模型的单元与节点编号

(3) OpenSEES的命令流如下所示,命令流分为3个部分:
第一部分:节点、材料与支座条件(分析过程中不发生改变)
第二部分:截面(分析过程中不断改变),采用引入文件  source section_1.tcl
第三部分:分析与结果提取,结果提取的命字改变,即:
recorder Node -file node.out -node 9 10 11 12 19 14 -dof 3 disp
不同的个体(粒子)分析存储的文件名不同, 分别是 node1~node50.out, 记录几个上弦节点的竖向位移,本算例的粒子群为50个粒子(size = 50)
基本TCL命令流如下:
model basic -ndm 3 -ndf 6
node 1 0.000E+000 0.000E+000 0.000E+000
………
node 20 7.500E+003 0.000E+000 4.238E+003
fix 1 1 1 1 1 1 1;
………
fix 21 0 1 0 1 1 1;
uniaxialMaterial Elastic 1 1.999E+005
source section_1.tcl
recorder Node -file node.out -node 9 10 11 12 19 14 -dof 3 disp

## Load Case = DEAD
pattern Plain 1 Linear {
load 9 0.000E+000 0.000E+000 -1.500E+005 0.000E+000 0.000E+000 0.000E+000
……
load 19 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) 桁架截面在粒子群优化算法的过程中是不断变化的,所以这个文件需要不断的修改,50个粒子群的文件存储,如其中一个粒子的相关截面文件section_1.tcl如下所示。
element truss 1 1 15 157.687 1
……
element truss 37 7 14 357.453 1

(5) 基本的OPENSEES的文件构造就搭好了,只要Run OpenSEES,程序就会计算出不同截面布置情况下的上弦节点的竖向位移,我们的目标就是让这些节点位移的最小。

 

整个简化PSO算法的流程图
图中g_best就是群组最优解,p_best单个粒子整个过程的最优解。

(6) 接下来我们就需要通过编程实现PSO优化算法,并控制OPENSEES不断计算。这里我采用DELPHI进行编程,编了一个简化的粒子群算法逻辑,详细可以参考PYTHON代码。流程图如下图所示。
粒子群算法的主要内容如下:
a). 随机生成50个母代桁架结构模型,截面是随机大小分布,总重量恒定
b). 采用OPENSEES作为计算核心计算出50个桁架的位移作为评分标准(适应度)
c). 对桁架进行排序,位移最小则最优,得到单个粒子最优位置及群粒子最优位置,通过这两个位置计算粒子下一步的速度向量v与更新位置x。
d). 根据向量计算得到的新的位置X计算得到新的50个桁架模型(更新桁架截面)。
f)把下一批50个粒子交给OPENEES进行计算,即执行b的操作,整个过程循环操作。
最后粒子群算法的程序编好,如图所示,迭代次数与上弦节点的竖向位移曲线如图所示。

基于OPENSEES的粒子群算法控制程序

证明,随着粒子群算法的不断迭代,桁架的刚度越来越大。上弦节点的位移从51.20降至18.91mm。ETABS对应的计算结果是51.07降到18.48mm。


 迭代次数与竖向位移值的关系


(7) 采用ETABS进行分析:原方案与最后优化方案的用钢量是相等
原方案:全部杆件的截面为4000mm2,14号节点竖向变形为51.07mm
优化方案:每个截面如下图表所示,14号节点竖向变形为18.48mm。刚度有了明显的提高。而这个算法的优化方向是指定的,虽然有可能不是最优,但是足够指导工程设计了。

  
原方案的ETABS计算结果
   

优化方案的ETABS计算结果


最终优化所得截面使位移最小


最初状态与优化后的钢结构桁架变形图对比


OPENSEES模型变形动画图

 
鸟群觅食图

总结:遗传算法与粒子群优化(鸟群觅食)算法一样思维都来自大自然,遗传算法是通过把样本往时间(世代)铺开进行迭代优化,把适应度高的东西保存下来,而粒子群优化是通过(多维)空间把大样本铺开,将接近最优空间点的样本找出来。鸟群觅食的小鸟会通过自身经验(粒子过程最优解)与打探消息(全局最优化解),根据这两者提供的方向作为综合考虑得到下一步解的方向,然后见一步走一步,最终求得最优解。
====本节完====

请关注我的微信公众号:DINOSTRU


更多有趣的结构分析知识分享


本文来自网络,不代表钢构人的立场,转载请注明出处。搜索工程类文章,就用钢构人网站。 https://www.ganggouren.com/2021/12/789d68e13c/
上一篇
下一篇

作者: ganggouren

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

17717621528

在线咨询: QQ交谈

邮箱: 1356745727@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部