馬 超
(河北省水利水電第二勘測設計研究院,河北石家莊050021)
基于C#和Mat1ab混合編程遺傳算法的平原區水閘優化設計
馬 超
(河北省水利水電第二勘測設計研究院,河北石家莊050021)
以某平原區水閘為例,采用遺傳算法對水閘進行優化研究。以水閘工程造價最小為目標,以過流總凈寬、閘墩厚度、閘室長度、閘門位置、閘底板厚度與鋪蓋長度為設計變量,以水閘幾何尺寸為幾何約束,以穩定安全系數、基底大小應力比及防滲長度作為性態約束,建立了水閘的數學優化模型,并介紹了遺傳算法、C#和Mat1ab混合編程遺傳算法的原理。通過優化水閘布置,減少了工程造價。計算結果表明該優化設計方法可以提高設計效率,是合理可行的。
水閘;遺傳算法;優化設計;工程造價;C#和Mat1ab混合編程
水閘是一種利用閘門擋水和泄水的多建于河道、渠系及水庫的低水頭水工建筑物。水閘在水利工程中的應用十分廣泛,但許多水閘的設計依舊停留在經驗設計階段,存在不經濟、不合理等許多問題,所以水閘設計的合理性和經濟性就成為亟待解決的問題,進行水閘優化設計十分必要。
水閘設計很復雜,數學模型的建立需要對設計過程進行必要簡化[5],最終選取水閘過流總凈寬、閘墩厚度、閘室段長度、閘門位置、閘底板厚度與鋪蓋長度作為優化變量。
1.1 目標函數
以工程造價為目標函數,設第i種材料的單位綜合造價為Ci,在設計中所占的體積為Vi,則目標函數可表示為:

1.2 約束條件
(1)幾何約束:x1≤xi≤xu,xi為變量的下限;xu為變量的上限。
(2)性態約束:①閘室穩定安全系數:Fs≥②基底大小應力比:③防滲長度:L≥CΔH。
1.3 最終優化的數學模型
設計變量在滿足給定的約束條件的情況下,求得目標函數最小。
2.1 遺傳算法
遺傳算法首先用隨機方式產生一個初始群體,群體中的每一個個體稱為染色體,對應優化問題中變量空間中的一個點;組成染色體的元素稱為一個基因,對應優化問題中的設計變量。染色體的適應度反映可能解的優劣,根據優勝劣汰的原則進行選擇,適應度大的被選擇的機會大,通過連續遺傳操作不斷產生新的群體,經過若干代進化以后,就可能生成最佳個體。
基于對自然界中生物遺傳與進化機制的模仿,Go1dberg[6]總結出了一種統一的最基本的遺傳算法——基本遺傳算法(Simp1e GeneticA1gorithms,簡稱SGA)。其遺傳進化操作過程簡單,容易理解,是各種遺傳算法的基本框架,可不依賴于問題的領域和種類,具有一定的應用價值。
2.2 C#與MATLAB混合編程
C#與MATLAB混合編程采用動態鏈接庫技術實現C#對MATLAB函數的調用。動態鏈接庫是由MATLAB的Dep1oyment Too1將編寫好的m文件或m腳本文件編譯成動態鏈接庫,C#通過調用動態鏈接庫中的函數來完成與MATLAB的參數調用。
2.2.1 MATLAB創建動態鏈接庫(DLL)
在MATLAB中根據向導新建Dep1oyment工程后把已經編寫好的m函數添加進去進行編譯,生成DLL文件即可被C#引用。具體步驟如下:
(1)按照遺傳算法的計算原理,根據需要編寫創建動態鏈接庫時所需的文件,遺傳算法主函數文件(ycsf.m)、目標函數文件(mbhs.m)和約束條件函數文件(ystj.m)。其中ycsf.m文件主要代碼如下:

(2)創建DLL。在MATLAB中創建DLL工程,編譯完成之后在上面輸入的存儲位置下即可找到創建完成的ycsf.d11文件。
2.2.2 C#調用DLL
首先我們應該把上述生成的DLL引入計算程序才能調用。引入后在使用之前實例化該DLL類,具體如下:


2.2.3 數據類型轉換
完成C#對ycsf.d11的引用之后,如何實現將計算參數從C#傳遞到MATLAB,并且如何將MATLAB的計算結果返回給C#,并通過C#把計算結果展示出來,就成了C#與MATLAB混合編程的關鍵。由于C#與MATLAB的數據類型不同,所以為實現2者之間數據類型的相互轉換,主要要用到MATLAB提供的MWA rray接口。因此,還需要添加對MWArray的引用,并在C#的頭文件中添加。
(1)C#數據向MATLAB數據轉換。若是數據類型不需要轉換,如是數組類型則通過MWArray轉換。如:MWNumericArray A1=A,其中A為C#中的doub1e型數組,經過賦值之后A被轉換為MATLAB中的doub1e型數組A1。
(2)MATLAB數據向C#數據轉換。
訪問resu1t數組中的元素時還需要做相應的強制類型轉換。轉換如下:

上句轉換中0表示resu1t數組的第一個元素,訪問resu1t[0]中的某一元素時可用out_Arr[i]表示,代碼如下:

2.3 C#與M ATLAB混合編程的其他方法
因為MATLAB提供了C#可以直接調用的接口文件,所以C#與MATLAB混合編程除采用上述方法外,還可以采用C#直接調用MATLAB可執行文件進行計算。
對2種方法的計算結果進行了對比,發現結果一致,只與輸入的參數有關系。在本優化算法中采用前述方法進行優化設計。
3.1 工程概況
某干渠位于武邑縣城南約6.3km,其中某水閘位于清涼江側江河干渠渠首,設計流量45m3/s,閘下設計水位17.731m。上游設計擋水位為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)性態約束為:①穩定安全系數不小于1.3;②基底大小應力比不小于1.5;③防滲長度不小于CΔH。
3.3 優化結果
經過遺傳算法初擬計算后得到的優化結果見表1。

表1 優化前后結果
本文計算中采用的Mat1ab是一個功能強大的計算工具,利用C#和Mat1ab混合編程遺傳算法效果好,結果準確,對于優化設計提供了新思路,對其他水利工程的優化設計具有一定的實際應用和推廣價值。優化設計前后工程造價相差23.5%,表明水閘優化設計十分必要。由于水閘設計本身十分復雜,所以本優化算法進行了適當的簡化,但用于水閘的初擬設計、初擬布置是可行的,具有很好的參考價值。
[1]王海娟,辛全才,馬紅娜.基于MATLAB的覆蓋層地基上混凝土面板堆石壩斷面優化設計[J].水資源與水工程學報,2009,20(05):120-122.
[2]平巍巍,趙艷.基于改進遺傳算法的混凝土面板堆石壩優化設計[J].電網與水力發電進展,2008,24(01):64-67.
[3]錢令希.工程結構優化設計[M].北京:中國水利電力出版社,1983:1-9.
[4]蔡新,郭興文,張旭明.工程結構優化設計[M].北京:中國水利水電出版社,2003:191-207.
[5]周明,孫樹棟.遺傳算法原理及應用[M].北京:國防工業出版社,1999:4-64.
[6]王小平,曹立明.遺傳算法—理論、應用與軟件實現[M].西安:西安交通大學出版社,2002:1-122.
[7]錢治航.混合離散優化算法及工程應用研究[D].華中理工大學,1993.
[8]劉浩,韓晶.MATLAB R2014a完全自學一本通[M].北京:電子工業出版社,2015.
[9]趙忠海,張洪文,劉秀峰.基于C#與MATLAB混合編程實現變形預測分析[J].測繪與空間地理信息,2012,35(05):122-124.
[10]姚光強,陳立平.基于COM技術的C#與Mat1ab混合編程[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年—),男,工程師。