基于VB的ANSYS的二次開發之優化算法
利用有限元法進行自動優化設計日益成為當前研究的熱點。ANSYS給用戶提供了兩種優化方法,分別是零階方法和一階方法,利用這兩種方法,ANSYS程序將循環進行“分析-評估-修正”的過程,直到獲得最優結果。優化可以針對所要分析的問題的各個方面,比如尺寸、形狀、支撐位置、材料等。
ANSYS優化分析的概念
ANSYS優化分析的概念可以通過下例問題來形象說明。某人租船從A港旅行到B港,全程100公里,船的每小時租金為200元,最大船速可達每小時40公里,假設每公里耗油量oil與速度v的平方成反比,即:

以上公式省略了單位,下同。汽油價格為每升7元,現要求在一小時內抵達,且盡量降低使用費用,試確定船的行進速度。這是一個典型的優化問題,其中速度v是要確定的變量,稱為設計變量,旅行時間t為狀態變量(t=100/v),而總花費為目標函數:
約束條件為:

設計變量(DVs)為自變量,優化結果的取得是通過改變設計變量的數值實現的,每個設計變量都有上下限,它定義了設計變量的變化范圍。ANSYS優化程序允許定義多大60個設計變量。狀態變量(SVs)是因變量,是設計 變量的函數(比如上例中t=100/v)狀態變量一般都有上下限,也可能只有單側限制,即只有上限或只有下限。ANSYS優化程序允許定義多大100個狀態變量。
目標函數是要盡量減小的數值。它必須是設計變量的函數,也就是說,改變設計變量的數值將改變目標函數的數值。在以上問題中,總話費是目標函數,是設計變量速度V的函數。
設計變量、狀態變量和目標函數統稱為優化變量。在ANSYS優化程序中,這些變量是由用戶定義參數來指定的。用戶需要定義設計變量及其約束范圍、狀態變量及其約束范圍以及目標函數。
ANSYS優化分析的目的是尋求滿足所有給定的約束條件(設計變量的約束和狀態變量的約束),并使目標函數達到最小值的設計變量。ANSYS分析結束后會給出若干設計序列,SET1、SET2等等。在這些設計序列中,一般情況下存在滿足約束條件的合理解釋以及滿足目標函數最小化的最優解,但有時也可能所有解都不滿足約束條件(說明用戶給定的約束條件不合理)。
ANSYS優化分析文件是一個命令流輸入文件,應包括一個完整的分析過程前處理、求解以及后處理(主要是提取相關參數),分析過程必須參數化。此外,還要在優化分析文件中指定變量、狀態變量及目標函數。由這個文件可以自動生成優化循環文件(Jobname.loop),并在優化計算中循環處理。每一次循環均執行一次分析文件。最后一次循環的輸出結果存儲在Jonname.opo中。
優化算法
理解ANSYS優化算法對于執行優化分析是很有必要的。ANSYS現有的優化算法主要有:零階方法、一階方法、單步運行、隨機搜索法、等步長搜索法、乘子計算法和最優梯度法。此外,用戶還可以通過UPFs定義自己的優化算法。下面重點說明零階方法和一階方法。
1.零階方法
由于優化過程中只用到因變量本身,而不利用因變量的導數,所以稱為零階方法。使用該方法的命令為:
optype,subp
零階方法是一種函數逼近優化方法,該種方法的本質是采用最小二乘法逼近,求取一個函數曲線或函數面來擬合解空間,然后再對該函數曲線或函數面求極值。這是一種普適的優化方法,不容易陷入局部極值點,但優化精度一般不是很高,因此多用來做前期優化。在零階函數逼近優化中,默認的最大循環次數為30,默認當連續出現7次不可行解時,就認為優化過程發散。用戶可通過OPSUB命令對最大循環次數及優化發散判斷標準進行調整,例如:
Opsub,500,10
以上命令調整后,最大循環次數為500,當連續出現10次不可行解時,認為優化過程發散。對于大多數分析,建議采用零階方法,因為該方法通用性強,且計算速度快。
零階方法的近似值:

其中,需要幾個設計序列來形成近視式。ANSYS產生隨機設計序列(默認為7個),或用優化數據庫中的現成設計,也可由隨機法或單步循環法(或任何其他方法)開始,以產生一些設計方案,然后只保留可行域內的或最好的n個設計。
2.一階方法
一階方法與零階方法相比,一階方法因變量的導數來決定搜索方向并獲得優化結果。因為優化過程中沒有近似值,所以這種方法更精確。每次迭代涉及多次分析(對分析文件的多次循環),以確定適當的搜索方向,因而需消耗較多的時機。使用該方法的命令為:
optype,first
用戶可以通過OPFRST命令來調整一階方法的設置:
OPFRST,NITR,SIZE,DELTA
其中,NITR是最大迭代次數(默認為10),SIZE及DELTA取默認值。
一階方法收斂判據是同時滿足以下兩個條件:
●改變目標函數,使當前設計和最優可行設計的目標函數之間的差值小于允差,即:
●改變目標函數,使當前設計和前一設計的目標函數之間的差值小于允差,即
3.其他優化方法
●單步運行:實現一次循環并求出一個FEA解。可以通過一系列的單次循環,每次求解前設定不同的設計變量來研究目標函數與設計變量的變化關系。
●隨機搜索法:進行多次循環,每次循環設計變量隨機變化。用戶可以指定最大循環次數和期望合理解的數目。隨機搜索法主要用來研究整個設計空間,并為以后的優化分析提供提供合理解。
●等步長搜索法:以一個參考設計序列為起點,生成幾個設計序列。它按照單一步長在每次計算后將設計變量在變化范圍內加以改變。對于目標函數和狀態變量整體變化評估可以用等步長搜索法實現。
●乘子計算法:是一個統計工具,用來生成由各種設計變量極限值組合設計序列。這種技術與稱之為經驗設計的技術相關,后者是用二階的整體和部分因子分析。主要目標是計算目標函數和狀態變量的關系和相互影響。
●最優梯度法:對用戶指定的參考設計序列,本工具計算目標函數和狀態變量對設計變量的梯度。使用本工具可以確定局部的設計敏感性。
●用戶二次開發的優化工具:用戶提供的優化工具,可以用外部過程(USEROP)替代ANSYS優化工具。將自己的方法和工具補充進去。
APDL優化設計步驟
1.生成分析文件
分析文件的生成是ANSYS優化設計的關鍵,ANSYS程序利用分析文件構造循環文件,以便進行循環分析。分析文件可以包括ANSYS提供的任意分析類型(結構、熱、電磁等)。
生成分析文件與通常的ANSYS分析并沒有很大的不同,唯一的區別就是:優化分析的分析文件必須是參數化的。也就是說,必須定義一些參量,至少要把所有的設計變量,狀態變量和目標變量定義為參量形式。而且,用于優化的參量只能是標量數值參量,而不是數組或者字符參量。 分析文件應該盡量簡單,不必要的語句,例如完成圖形顯示功能的命令應當從扽系文件中省略掉。
生成分析文件的具體過程為:首先建立參數化模型,接著求解,然今從中提取需要用到的優化參數,最后保存為分析文件即可。例如用lgwrite生成分析文件:
Lgwrite,’beam’,’lgw’,’D:\ansys16.0 work\’,comment
2.聲明優化變量
在完成了分析文件的建立以后,就可以進入優化處理器/OPT開始優化分析。首先讀入優化分析文件,命令為:
OPANL,Fname,Ext
其中,Fname為分析文件的文件名,Ext為文件的擴展名。
然后聲明優化變量。APDL命令為OPVAR,該命令用法如下:
OPVAR,Name,Type,MIN,MAX,TOLER
其中,Name為變量名,Type為優化變量類型(DV表示設計變量,SV表示狀態變量,OBJ表示目標函數,若為DEL則表示刪除該優化變量),MIN和MAX分別表示相應變量的最小、最大值(即約束范圍),TOLER為收斂相關的容差,Type不同則含義不同。
3.選擇優化方法。
命令為OPTYPE。除了前面介紹的零階和一階方法外,用戶可以使用OPTYPE,RAND命令激活隨機搜索法,用OPTYPE,RUN命令激活單步運行,用OPTYPE,FACT命令激活乘子計算法,用OPTYPE,GRAD命令激活最優梯度法,用OPTYPE,SWEEP命令激活等步長搜索法,此外用戶還可以用OPTYPE,USER命令激活由用戶子程序userop定義的用戶自定義優化算法。
4.設定循環控制參數。
每種優化方法都有相應的循環控制參數,且分別對應不同的命令。除了各優化方法自己的命令外,ANSYS還提供了幾個總體控制來控制優化過程中的數據存儲方法。比如OPDATA命令用于指定優化數據的存儲文件名,OPPRNT命令用于激活詳細的結果輸出,OPKEEP命令用于確定是否存儲最佳設計序列的數據等。
5.執行優化分析
對應命令是OPEXE,執行命令后ANSYS程序會根據分析文件生成優化循環文件。循環將在以下情況發生時終止:收斂;中斷(不收斂,但達到了最大循環次數或最大不合理設計循環序列);分析完成。
6.查看分析結果
可以通過OPLIST命令列出優化序列,也可以通過PLVAROPT命令查看變量隨迭代的變化情況。
APDL實現過程
首先清空內存,開始新的分析,并進入前處理器,給設計變量賦初值,然后建立有限元模型并求解:
!1.定義工作文件名及文件標題
!(1)定義工作文件名:
/FILNAME,shiyan_thermal,0
!(2)定義文件標題
/TITLE,shiyan of experiment
!2.定義單元類型及材料屬性
!(1)定義單元類型:
/PREP7
!*
ET,1,185
!(2)設置材料屬性
!*
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,1,,2e11
MPDATA,PRXY,1,,0.3
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,DENS,1,,7800
!3.建立幾何模型
!(1)顯示工作平面
WPSYYLE,,,,,,,,1
!(2)建立模型
BLOCK,0,10,0,20,0,2,
/REPLO
wpoff,3,5,0
/REPLO
CYLIND,1, ,0,10,0,360,
/REPLO
wpoff,0,10,0
CYLIND,1, ,0,10,0,360,
wpoff,0,-5,0
CYLIND,1, ,0,10,0,360,
wpoff,4,0,0
CYLIND,1, ,0,10,0,360,
wpoff,0,5,0
CYLIND,1, ,0,10,0,360,
wpoff,0,-10,0
CYLIND,1, ,0,10,0,360,
!(3)體布爾操作
FLST,3,6,6,ORDE,2
FITEM,3,2
FITEM,3,-7
VSBV, 1,P51X
!4.生成有限元模型
/REPLO
FINISH
/AUX12
FINISH
/PREP7
MSHAPE,1,3D
MSHKEY,0
!*
CM,_Y,VOLU
VSEL, , , , 8
CM,_Y1,VOLU
CHKMSH,'VOLU'
CMSEL,S,_Y
!*
VMESH,_Y1
!*
CMDELE,_Y
CMDELE,_Y1
CMDELE,_Y2
!*
!5.加載以及求解
!(1)加載
//REPLO
VPLOT
FINISH
/SOL
FLST,2,1,5,ORDE,1
FITEM,2,3
!*
/GO
DA,P51X,ALL,0
/REPLO
FLST,2,1,4,ORDE,1
FITEM,2,7
/GO
FLST,2,1,5,ORDE,1
FITEM,2,4
/GO
!*
SFA,P51X,1,PRES,1000
!*
/STATUS,SOLU
SOLVE
FINISH
接著進行后處理,提取參數。
/POST1
!*
PLDISP,2
!*
/EFACET,1
PLNSOL, S,EQV, 0,1.0
!參數化提取結果
nsort,u,z !以UY為基準點對節點排序
etable,volu,volu !建立單元體積表
etable,smax_i,nmisc,1 !smax_i=每個單元i結點處應力最大值
etable,smax_j,nmisc,3 !smax_j=每個單元j結點處應力最大值
ssum !單元表數據求和
*get,volume,ssum,,item,volu !獲得總體積
esort,stab,smax_i,,1 !按照smax_i絕對值的大小對單元排序
*get,smaxi,sort,,max !獲得smax_i最大值,存入smaxi
esort,eatb,smax_j,,1 !按照smax_j絕對值的大小對單元排序
*get,smaxj,sort,,max !獲得smax_j最大值,存入smaxi
smax=smaxi>smaxj !獲得最大應力值
finish
保存文件至當前工作目錄。
最后進入優化處理器,設計變量、狀態變量、目標函數、優化方法以及迭代步數等,然后進行優化分析并列出分析結果。
!進入優化處理器
/opt
opan1,solid,lgw
opvar,d,dv,0.01,0.03 !定義設計變量d及其范圍
opvar,smax,sv,0,3000000 !定義狀態變量最大應力smax及其范圍
opvar,volume,obj !定義總體積volume為目標函數
optype,subp !分析方法為1階
opsub,500 !最大迭代次數
opexe !開始優化分析
oplist,all !列出所有分析結果
參考文獻
[1] 師訪編.ANSYS二次開發及應用實例講解[M].中國水利水電出版社.2012.1
[2] 隋麗娜,遲劍,郭立峰編. Visual Basic范例開發大全[M].清華大學出版社.
[3] 廖孟柯編. 基于VB的ANSYS二次開發與應用[J].
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















