基于MATLAB 與ANSYS 的結(jié)構(gòu)優(yōu)化設(shè)計
伴隨著數(shù)學(xué)、力學(xué)和計算機的發(fā)展,結(jié)構(gòu)優(yōu)化設(shè)計也逐漸發(fā)展、成熟起來。ANSYS 是最早開發(fā)結(jié)構(gòu)優(yōu)化設(shè)計模塊的有限元分析軟件之一,它提供兩種優(yōu)化方法,即零階方法和一階方法。二者均是將約束的優(yōu)化問題轉(zhuǎn)化為非約束的優(yōu)化問題來求解。零階方法只用到因變量而不用它的偏導(dǎo)數(shù),其全局搜索能力很強,而局部搜索能力較差,研究表明,該方法可以快速達(dá)到最優(yōu)解的80 %,但卻很難收斂到最優(yōu)解。一階方法使用因變量的導(dǎo)數(shù)值來確定搜索方向,其局部搜索能力很強,但全局搜索能力較差,很容易收斂到局部極小值點。遺傳算法是近些年逐漸發(fā)展起來的一種智能的優(yōu)化算法,它具有較強的全局搜索能力,并且可以與其他常規(guī)優(yōu)化算法相結(jié)合,進而高效、準(zhǔn)確地解決大多數(shù)的工程優(yōu)化問題。MATLAB 中的遺傳算法工具箱集成了當(dāng)前比較成熟的各種遺傳算子,借助它可以方便地完成各種問題的優(yōu)化求解。
本文通過在MATLAB 中將ANSYS 作為子程序調(diào)用的方法來研究遺傳算法在工程結(jié)構(gòu)優(yōu)化中的應(yīng)用。
1 遺傳算法及MATLAB 遺傳算法工具箱
1.1 遺傳算法基本思想
遺傳算法( GA) 最初是由美國Michigan 大學(xué)的John Holland 教授于1975 年提出的,它將達(dá)爾文的生物進化理論應(yīng)用于優(yōu)化設(shè)計中,把解空間的某個點集映射為生物學(xué)中的種群,將目標(biāo)函數(shù)映射為種群所處的環(huán)境,因此按照生物進化理論的觀點,種群中的個體會不斷向著適應(yīng)環(huán)境的方向進化,經(jīng)過若干代進化之后該種群所代表的解就會收斂到問題的最優(yōu)解。該方法最大的特點是全局搜索能力強,并且不需要編程人員對問題的優(yōu)化過程有太深的了解,只要選定了種群,指定了種群所處的環(huán)境,該方法就會自動的、智能地向最優(yōu)解進化。遺傳算法中最基本的操作是遺傳操作,包括選擇、交叉和變異。自然界中環(huán)境按照適者生存的原則來選擇優(yōu)良個體,使其優(yōu)良基因能夠傳遞到下一代,遺傳算法中的選擇操作即是模擬這一過程。首先計算種群中每個個體的適應(yīng)度( Fitness) ,然后按照適者生存的原則進行選擇操作。交叉操作是模擬生物進化中的有性繁殖過程,種群個體之間通過基因重組生成新的個體。生命體在進化過程中某些基因常常會發(fā)生變異,好的變異會被環(huán)境選擇并遺傳到下一代,而不好的變異則會被環(huán)境淘汰,因此這種基因變異對種群的進化有巨大的推動作用。遺傳算法中應(yīng)用這種變異來產(chǎn)生新的個體,使種群中的基因更加豐富,有利于算法的收斂。
1.2 MATLAB 遺傳算法工具箱(GAOT)
MATLAB 是矩陣實驗室的簡稱,它具有豐富的矩陣操作命令。使用MATLAB 來實現(xiàn)遺傳算法是非常方便的,即將種群的數(shù)據(jù)存入矩陣中,然后就可以對整個種群而不是單個個體進行操作,從而大大提高了計算效率。更重要的是,MATLAB本身還帶有遺傳算法工具箱,它集成了當(dāng)前
較成熟的各種遺傳操作算子和各種改進型遺傳算法,使遺傳算法優(yōu)化變的更加簡單、高效。其主程序ga. m 的調(diào)用格式如下:
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)
其中各參數(shù)說明如下:
x 為程序最終計算得到的最小值;
fval 為最小值點x 處的適應(yīng)度函數(shù)值;
reason 為算法終止的原因;
output 為算法輸出的結(jié)構(gòu)體,包含程序計算
中的各種相關(guān)信息;
population 為程序終止時的種群;
fitnessfcn 為適應(yīng)度函數(shù);
nvars 為設(shè)計變量個數(shù);
options 為遺傳算法的各種控制選項。
此外,也可使用工具箱的GUI 界面( 交互式圖形用戶界面) 來執(zhí)行遺傳操作,其特點是簡潔、直觀。
2 MATLAB 調(diào)用ANSYS
MATLAB 遺傳算法工具箱需要輸入適應(yīng)度函數(shù)。對于簡單問題,其適應(yīng)度函數(shù)很好編寫,但對于大型的工程問題,其目標(biāo)函數(shù)和狀態(tài)變量需要用有限元計算才能得到,因為僅使用MATLAB 語言編寫程序來實現(xiàn)往往是很復(fù)雜有時甚至是不可能的,必須借助于成熟的有限元計算程序,而ANSYS由于其自帶的APDL 語言則成為了有限元計算的首選。
2.1 MATLAB 與ANSYS 數(shù)據(jù)傳遞
若要實現(xiàn)MATLAB 對ANSYS 的調(diào)用,首先要能實現(xiàn)MATLAB 與ANSYS 的數(shù)據(jù)傳遞,而二者都有很強的文件操作功能,這使數(shù)據(jù)傳遞的實現(xiàn)成為可能。MATLAB 在調(diào)用ANSYS 時的數(shù)據(jù)流向如圖1。

MATLAB 打開并讀、寫數(shù)據(jù)文件的基本步驟如下:
fid = fopen( 'mta. txt', 'w + ')
fprintf( fid, format,dv ) /obj = fscanf ( fid, format)
fclose( fid)
其中, 'w + '表示以讀寫方式打開文件; dv 為設(shè)計變量; obj 為目標(biāo)函數(shù); format 表示以某種格式讀寫數(shù)據(jù),與C 語言相同。
ANSYS 打開并讀、寫數(shù)據(jù)文件的基本步驟如下:
讀取數(shù)據(jù)
* dim,dv,arrary,n
* vread,dv( 1) ,mta, txt,, ijk,n
( format)
其中,n 為設(shè)計變量個數(shù); format 為以某種格式讀取數(shù)據(jù),與FORTRAN 語言相同。
打開并寫入數(shù)據(jù)到數(shù)據(jù)文件
* cfopen,atm, txt
* vwrite,obj
( format)
* cfclose
2. 2 MATLAB 調(diào)用ANSYS
ANSYS 程序提供了batch ( 批處理) 運行方式,可以在不打開ANSYS 程序界面的情況下后臺運行計算,并輸出結(jié)果,這使得在其他程序中調(diào)用ANSYS 成為可能。MATLAB 調(diào)用ANSYS 的語句如下:
system( 'D: \Ansys \v100 \ANSYS \ bin \ intel \ ansys100- b - p ansys - product - feature - i input file - o out file. bat')
其中各參數(shù)說明如下:
- b batch 為運行模式;
- p 為產(chǎn)品代碼( 可以在ANSYS 的幫助文件里找到) ;
- i 為輸入文件( ANSYS 分析文件) ;
- o 為輸出文件。
此外,在調(diào)用ANSYS 時還可以輸入以下控制參數(shù):
- j 為工程名稱;
- m 為內(nèi)存大小;
- db 為數(shù)據(jù)庫打下。
3 結(jié)構(gòu)優(yōu)化算例
以一3 層4 跨平面鋼框架結(jié)構(gòu)為例,如圖2。

為了減少設(shè)計變量個數(shù),各層梁的尺寸( 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,拉壓許用應(yīng)力均為235 MPa。用混合遺傳算法優(yōu)化該結(jié)構(gòu),使其所用鋼材的體積最小。
為了對比,本文分別采用MATLAB 遺傳算法工具箱中的混合遺傳算法及ANSYS 中的零階方法、一階方法3 種方法對該結(jié)構(gòu)進行了優(yōu)化設(shè)計,對比結(jié)果見表1。

由表1 可以看出,3種優(yōu)化方法中基于MATLAB與ANSYS 的混合遺傳算法的精度最好,其最大應(yīng)力最接近鋼材的容許應(yīng)力,用鋼量最小。而零階方法的精度最差,其計算用鋼量與混合遺傳算法的計算用鋼量相比增大了16.8 %。一階方法的計算結(jié)果與零階方法的計算結(jié)果稍好,但其用鋼量仍然比混合遺傳算法增大了8 %。
4 結(jié)論
MATLAB 遺傳算法工具箱具有很強的優(yōu)化功能,且其操作簡單、直觀,而ANSYS 又是通用大型有限元分析軟件。本文充分利用了二者的優(yōu)勢,實現(xiàn)了MATLAB 與ANSYS 的數(shù)據(jù)傳遞和調(diào)用,對一典型鋼框架結(jié)構(gòu)進行了優(yōu)化設(shè)計,驗證了該方法的可行性。但從分析精度來看,基于MATLAB與ANSYS 的混合遺傳算法要優(yōu)于零階方法和一階方法。然而,從分析成本來看,混合遺傳算法的分析成本要遠(yuǎn)遠(yuǎn)的高于零階方法和一階方法,這是由于MATLAB 與ANSYS 的數(shù)據(jù)傳遞是間接的,每次循環(huán)過程計算機都要進行相應(yīng)文件的讀取與寫入操作,占用了大部分的分析時間。因此,將該方法應(yīng)用于大型結(jié)構(gòu)的優(yōu)化設(shè)計還需要進一步的探索與驗證。
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















