天洑软件 发表于 2019-11-7 16:02:46

采用模拟退火算法改进悬索结构找形

采用通用有限元结构分析软件进行悬索结构找形是一个经典的问题,比如这样一个典型案例:在水平跨距L=120m,纵向高差h=20m的两端有一悬索,悬索截面积为:
http://www.njtf.cn/ueditor/net/upload/2016-11-25/01bf92be-3dcf-4f9a-8982-3ff1ba9fc202.jpg
单位长度的重量为γ=65N,弹性模量为:
http://www.njtf.cn/ueditor/net/upload/2016-11-25/07470d21-d82d-4dea-87ba-73c98fed604b.jpg
求悬索在水平张力为9000N时的悬索形状和对应悬索的原始长度。一般情况下主要的分析流程是:
1. 在弦长位置建立初始几何模型。2. 给定一个很小的初始应变。3. 计算此时在重力作用下的响应。4. 判断此时的水平张力的大小。5. 如果此时的水平张力的大小大于给定的水平张力,则根据误差的大小,人为将模型更新比例系数设置成几个档。6. 重复计算步骤3~6,直到水平张力小于给定的水平张力,或是达到给定的误差允许范围。7. 后处理得到原始悬索的长度。通过上述流程,基本可以完成悬索的找形。但是在找形过程中存在以下问题:1. 在循环迭代过程中,人为给定的误差范围,有时可能造成迭代找形发生跳跃。即在某次迭代过程中误差大于迭代收敛误差,当更新模型后,误差小于迭代收敛相对误差,但相对误差(绝对值)又大于迭代收敛相对误差。从而错过了有效解,进而在后续的迭代过程中没法返回,导致出现死循环。2. 在循环过程中,实际参与的变量数目有相对误差控制数值,模型更新比例系数。因此,要人为给定多档合理的数值往往需要多次尝试,甚至,即使多次尝试也不能得到较好的结果。另外,当设定好每个档的数值以后,当原始参数改变时,又需要重新调整。为了解决上述问题,采用模拟退火算法,即模型更新的比例系数随着相对误差的大小变化。当相对误差较给定相对误差大时,取模型更新系数为1,当相对误差小于给定相对误差的相反数时,采用退火算法,并构建相对误差与模型更新系数的函数:
http://www.njtf.cn/ueditor/net/upload/2016-11-25/aa6619b3-a998-4384-bf02-923b4ce1ce70.jpg其中:factor为模型更新比例系数,A为待定系数,err为相对误差值这样人为需要调整的参数就只有待定系数A。这里的负号确保了即使再迭代的时候错过了有效解,也可以退回去,确保迭代的有效进行。
也可根据输出文件,绘制误差和水平张力随迭代次数的曲线。
http://www.njtf.cn/ueditor/net/upload/2016-11-25/d729a3e2-d001-470d-9ca9-496494f82e07.jpghttp://www.njtf.cn/ueditor/net/upload/2016-11-25/e5693ace-48e8-4dd9-a190-13a47ea33885.jpg

由以上2个曲线可知,随着迭代的进行,相对误差和水平张力急剧下降,从而减少了迭代的次数。另外模拟退火算法本质是一种贪婪算法,收敛的精度与快慢与给定的模型更新比例系数关系非常大。当采用定值更新系数时,更新比例系数越小时,其收敛的精度越高,但是收敛越慢;当更新的比例系数越大时,其收敛精度越低,同时有可能因为过大,导致错过了有效解,而陷入死循环;在设置时需要综合考虑。

页: [1]
查看完整版本: 采用模拟退火算法改进悬索结构找形