馬 超
(河北省水利水電第二勘測設(shè)計研究院,河北石家莊050021)
基于C#和Mat1ab混合編程遺傳算法的平原區(qū)水閘優(yōu)化設(shè)計
馬 超
(河北省水利水電第二勘測設(shè)計研究院,河北石家莊050021)
以某平原區(qū)水閘為例,采用遺傳算法對水閘進(jìn)行優(yōu)化研究。以水閘工程造價最小為目標(biāo),以過流總凈寬、閘墩厚度、閘室長度、閘門位置、閘底板厚度與鋪蓋長度為設(shè)計變量,以水閘幾何尺寸為幾何約束,以穩(wěn)定安全系數(shù)、基底大小應(yīng)力比及防滲長度作為性態(tài)約束,建立了水閘的數(shù)學(xué)優(yōu)化模型,并介紹了遺傳算法、C#和Mat1ab混合編程遺傳算法的原理。通過優(yōu)化水閘布置,減少了工程造價。計算結(jié)果表明該優(yōu)化設(shè)計方法可以提高設(shè)計效率,是合理可行的。
水閘;遺傳算法;優(yōu)化設(shè)計;工程造價;C#和Mat1ab混合編程
水閘是一種利用閘門擋水和泄水的多建于河道、渠系及水庫的低水頭水工建筑物。水閘在水利工程中的應(yīng)用十分廣泛,但許多水閘的設(shè)計依舊停留在經(jīng)驗設(shè)計階段,存在不經(jīng)濟(jì)、不合理等許多問題,所以水閘設(shè)計的合理性和經(jīng)濟(jì)性就成為亟待解決的問題,進(jìn)行水閘優(yōu)化設(shè)計十分必要。
水閘設(shè)計很復(fù)雜,數(shù)學(xué)模型的建立需要對設(shè)計過程進(jìn)行必要簡化[5],最終選取水閘過流總凈寬、閘墩厚度、閘室段長度、閘門位置、閘底板厚度與鋪蓋長度作為優(yōu)化變量。
1.1 目標(biāo)函數(shù)
以工程造價為目標(biāo)函數(shù),設(shè)第i種材料的單位綜合造價為Ci,在設(shè)計中所占的體積為Vi,則目標(biāo)函數(shù)可表示為:
1.2 約束條件
(1)幾何約束:x1≤xi≤xu,xi為變量的下限;xu為變量的上限。
(2)性態(tài)約束:①閘室穩(wěn)定安全系數(shù):Fs≥②基底大小應(yīng)力比:③防滲長度:L≥CΔH。
1.3 最終優(yōu)化的數(shù)學(xué)模型
設(shè)計變量在滿足給定的約束條件的情況下,求得目標(biāo)函數(shù)最小。
2.1 遺傳算法
遺傳算法首先用隨機(jī)方式產(chǎn)生一個初始群體,群體中的每一個個體稱為染色體,對應(yīng)優(yōu)化問題中變量空間中的一個點;組成染色體的元素稱為一個基因,對應(yīng)優(yōu)化問題中的設(shè)計變量。染色體的適應(yīng)度反映可能解的優(yōu)劣,根據(jù)優(yōu)勝劣汰的原則進(jìn)行選擇,適應(yīng)度大的被選擇的機(jī)會大,通過連續(xù)遺傳操作不斷產(chǎn)生新的群體,經(jīng)過若干代進(jìn)化以后,就可能生成最佳個體。
基于對自然界中生物遺傳與進(jìn)化機(jī)制的模仿,Go1dberg[6]總結(jié)出了一種統(tǒng)一的最基本的遺傳算法——基本遺傳算法(Simp1e GeneticA1gorithms,簡稱SGA)。其遺傳進(jìn)化操作過程簡單,容易理解,是各種遺傳算法的基本框架,可不依賴于問題的領(lǐng)域和種類,具有一定的應(yīng)用價值。
2.2 C#與MATLAB混合編程
C#與MATLAB混合編程采用動態(tài)鏈接庫技術(shù)實現(xiàn)C#對MATLAB函數(shù)的調(diào)用。動態(tài)鏈接庫是由MATLAB的Dep1oyment Too1將編寫好的m文件或m腳本文件編譯成動態(tài)鏈接庫,C#通過調(diào)用動態(tài)鏈接庫中的函數(shù)來完成與MATLAB的參數(shù)調(diào)用。
2.2.1 MATLAB創(chuàng)建動態(tài)鏈接庫(DLL)
在MATLAB中根據(jù)向?qū)陆―ep1oyment工程后把已經(jīng)編寫好的m函數(shù)添加進(jìn)去進(jìn)行編譯,生成DLL文件即可被C#引用。具體步驟如下:
(1)按照遺傳算法的計算原理,根據(jù)需要編寫創(chuàng)建動態(tài)鏈接庫時所需的文件,遺傳算法主函數(shù)文件(ycsf.m)、目標(biāo)函數(shù)文件(mbhs.m)和約束條件函數(shù)文件(ystj.m)。其中ycsf.m文件主要代碼如下:
(2)創(chuàng)建DLL。在MATLAB中創(chuàng)建DLL工程,編譯完成之后在上面輸入的存儲位置下即可找到創(chuàng)建完成的ycsf.d11文件。
2.2.2 C#調(diào)用DLL
首先我們應(yīng)該把上述生成的DLL引入計算程序才能調(diào)用。引入后在使用之前實例化該DLL類,具體如下:
2.2.3 數(shù)據(jù)類型轉(zhuǎn)換
完成C#對ycsf.d11的引用之后,如何實現(xiàn)將計算參數(shù)從C#傳遞到MATLAB,并且如何將MATLAB的計算結(jié)果返回給C#,并通過C#把計算結(jié)果展示出來,就成了C#與MATLAB混合編程的關(guān)鍵。由于C#與MATLAB的數(shù)據(jù)類型不同,所以為實現(xiàn)2者之間數(shù)據(jù)類型的相互轉(zhuǎn)換,主要要用到MATLAB提供的MWA rray接口。因此,還需要添加對MWArray的引用,并在C#的頭文件中添加。
(1)C#數(shù)據(jù)向MATLAB數(shù)據(jù)轉(zhuǎn)換。若是數(shù)據(jù)類型不需要轉(zhuǎn)換,如是數(shù)組類型則通過MWArray轉(zhuǎn)換。如:MWNumericArray A1=A,其中A為C#中的doub1e型數(shù)組,經(jīng)過賦值之后A被轉(zhuǎn)換為MATLAB中的doub1e型數(shù)組A1。
(2)MATLAB數(shù)據(jù)向C#數(shù)據(jù)轉(zhuǎn)換。
訪問resu1t數(shù)組中的元素時還需要做相應(yīng)的強(qiáng)制類型轉(zhuǎn)換。轉(zhuǎn)換如下:
上句轉(zhuǎn)換中0表示resu1t數(shù)組的第一個元素,訪問resu1t[0]中的某一元素時可用out_Arr[i]表示,代碼如下:
2.3 C#與M ATLAB混合編程的其他方法
因為MATLAB提供了C#可以直接調(diào)用的接口文件,所以C#與MATLAB混合編程除采用上述方法外,還可以采用C#直接調(diào)用MATLAB可執(zhí)行文件進(jìn)行計算。
對2種方法的計算結(jié)果進(jìn)行了對比,發(fā)現(xiàn)結(jié)果一致,只與輸入的參數(shù)有關(guān)系。在本優(yōu)化算法中采用前述方法進(jìn)行優(yōu)化設(shè)計。
3.1 工程概況
某干渠位于武邑縣城南約6.3km,其中某水閘位于清涼江側(cè)江河干渠渠首,設(shè)計流量45m3/s,閘下設(shè)計水位17.731m。上游設(shè)計擋水位為10年一遇洪水位17.88m。
3.2 基本資料
(1)綜合比價:閘室:閘墩:鋪蓋:擋土墻= 900∶800∶700∶900。
(2)幾何約束:①總凈寬≤x1≤建閘寬度;②0.9≤x2≤1.5;③2.0ΔH≤x3≤3.5ΔH;④0.2≤x4≤0.8;⑤0.7≤x5≤2.0;⑥3.0ΔH≤x6≤5.0ΔH,ΔH為上下游水位差。
(3)性態(tài)約束為:①穩(wěn)定安全系數(shù)不小于1.3;②基底大小應(yīng)力比不小于1.5;③防滲長度不小于CΔH。
3.3 優(yōu)化結(jié)果
經(jīng)過遺傳算法初擬計算后得到的優(yōu)化結(jié)果見表1。
表1 優(yōu)化前后結(jié)果
本文計算中采用的Mat1ab是一個功能強(qiáng)大的計算工具,利用C#和Mat1ab混合編程遺傳算法效果好,結(jié)果準(zhǔn)確,對于優(yōu)化設(shè)計提供了新思路,對其他水利工程的優(yōu)化設(shè)計具有一定的實際應(yīng)用和推廣價值。優(yōu)化設(shè)計前后工程造價相差23.5%,表明水閘優(yōu)化設(shè)計十分必要。由于水閘設(shè)計本身十分復(fù)雜,所以本優(yōu)化算法進(jìn)行了適當(dāng)?shù)暮喕糜谒l的初擬設(shè)計、初擬布置是可行的,具有很好的參考價值。
[1]王海娟,辛全才,馬紅娜.基于MATLAB的覆蓋層地基上混凝土面板堆石壩斷面優(yōu)化設(shè)計[J].水資源與水工程學(xué)報,2009,20(05):120-122.
[2]平巍巍,趙艷.基于改進(jìn)遺傳算法的混凝土面板堆石壩優(yōu)化設(shè)計[J].電網(wǎng)與水力發(fā)電進(jìn)展,2008,24(01):64-67.
[3]錢令希.工程結(jié)構(gòu)優(yōu)化設(shè)計[M].北京:中國水利電力出版社,1983:1-9.
[4]蔡新,郭興文,張旭明.工程結(jié)構(gòu)優(yōu)化設(shè)計[M].北京:中國水利水電出版社,2003:191-207.
[5]周明,孫樹棟.遺傳算法原理及應(yīng)用[M].北京:國防工業(yè)出版社,1999:4-64.
[6]王小平,曹立明.遺傳算法—理論、應(yīng)用與軟件實現(xiàn)[M].西安:西安交通大學(xué)出版社,2002:1-122.
[7]錢治航.混合離散優(yōu)化算法及工程應(yīng)用研究[D].華中理工大學(xué),1993.
[8]劉浩,韓晶.MATLAB R2014a完全自學(xué)一本通[M].北京:電子工業(yè)出版社,2015.
[9]趙忠海,張洪文,劉秀峰.基于C#與MATLAB混合編程實現(xiàn)變形預(yù)測分析[J].測繪與空間地理信息,2012,35(05):122-124.
[10]姚光強(qiáng),陳立平.基于COM技術(shù)的C#與Mat1ab混合編程[J].計算機(jī)工程,2008,34(14):87-89.
TV66
B
1672-2469(2017)03-0083-03
DO I:10.3969/j.issn.1672-2469.2017.03.030
2017-01-17
馬 超(1984年—),男,工程師。