基於遺傳演算法的HFSS和C#聯合模擬(一)

死線發表於2018-11-22

基於遺傳演算法的HFSS和C#聯合模擬(一)

說明:本文利用C#和HFSS基於遺傳演算法模擬優化設計了一款LTE微帶天線,其中的介面函式是本人自己寫的。同時,本文將分為兩部分,分別介紹遺傳演算法和聯合模擬優化設計天線。

我們知道ANSYS HFSS作為任意三維結構全波電磁場模擬的工具,是現代電子裝置中設計高頻/高速電子元件的首選工具,特別針對射頻、微波以及訊號完整性設計領域,是分析任何基於電磁場、電流或電壓工作的物理結構的絕佳工具。同時,HFSS為開發者提供了各種指令碼介面,可以實現模型建立,工程求解,資料輸入與輸出等。其中,大多數的聯合模擬都會用到matlab,也有很多現成的api可以使用。我也使用過matlab的聯合模擬,但是我發現matlab的api對新版本(16版及以後)的支援並不怎麼友好,同時處理資料也比較麻煩。然後因為我經常使用C#程式設計,就決定自己編寫C#-HFSS 的API,反正對HFSS和C#都比較熟悉,同時由於專案的需要,就用C#-HFSS基於遺傳演算法聯合模擬優化了一款LTE的微帶天線,還算比較成功的。接下來,就將這聯合模擬的方法分享給大家。

方法簡介

該方法通過使用C#-HFSS-API指令碼來聯合呼叫C#和HFSS對LTE微帶天線進行建模,模擬,輸出,計算,優化。

原理框圖

在這裡插入圖片描述

遺傳演算法簡介

< div align=“center”>在這裡插入圖片描述

選擇(selection)

遺傳演算法中的選擇操作就是用來確定如何從父代群體中按某種方法選取那些個體,以便遺傳到下一代群體。選擇操作用來確定重組或交叉個體,以及被選個體將產生多少個子代個體。

輪盤賭選擇: 是一種回放式隨機取樣方法。每個個體進入下一代的概率等於它的適應度值與整個種群中個體適應度值和的比例。選擇誤差較大。
隨機競爭選擇: 每次按輪盤賭選擇一對個體,然後讓這兩個個體進行競爭,適應度高的被選中,如此反覆,直到選滿為止。
最佳保留選擇: 首先按輪盤賭選擇方法執行遺傳演算法的選擇操作,然後將當前群體中適應度最高的個體結構完整地複製到下一代群體中。
無回放餘數隨機選擇: 可確保適應度比平均適應度大的一些個體能夠被遺傳到下一代群體中,因而選擇誤差比較小。
均勻排序: 對群體中的所有個體按期適應度大小進行排序,基於這個排序來分配各個個體被選中的概率。
最佳儲存策略: 當前群體中適應度最高的個體不參與交叉運算和變異運算,而是用它來代替掉本代群體中經過交叉、變異等操作後所產生的適應度最低的個體。

下面以輪盤賭選擇為例給大家講解一下:

假如有5條染色體,他們的適應度分別為6、3、2、8、1、5。
那麼總的適應度為:F = 6 + 3 + 2 + 8 + 1+5 = 25。
那麼各個個體的被選中的概率為:0.24、0.12、0.08、0.32、0.04、0.20。

交叉(crossover)

遺傳演算法的交叉操作,是指對兩個相互配對的染色體按某種方式相互交換其部分基因,從而形成兩個新的個體。

單點交叉:指在個體編碼串中只隨機設定一個交叉點,然後再該點相互交換兩個配對個體的部分染色體。
兩點交叉:在個體編碼串中隨機設定了兩個交叉點,然後再進行部分基因交換。
均勻交叉:兩個配對個體的每個基因座上的基因都以相同的交叉概率進行交換,從而形成兩個新個體。

下面以簡單的單點交叉為例給大家講解一下:
交換前
染色體A 0010 1101 1001 1100
染色體B 1011 1001 0101 0001

交換後
染色體A* 0010 1101 0101 1100
染色體B* 1011 1001 1001 0001

變異(Mutation)

遺傳演算法中的變異運算,是指將個體染色體編碼串中的某些基因座上的基因值用該基因座上的其它等位基因來替換,從而形成新的個體。

基本位變異:對個體編碼串中以變異概率、隨機指定的某一位或某幾位僅因座上的值做變異運算。
均勻變異:分別用符合某一範圍內均勻分佈的隨機數,以某一較小的概率來替換個體編碼串中各個基因座上的原有基因值。
非均勻變異:對原有的基因值做一隨機擾動,以擾動後的結果作為變異後的新基因值。對每個基因座都以相同的概率進行變異運算之後,相當於整個解向量在解空間中作了一次輕微的變動。
高斯近似變異:進行變異操作時用符號均值為P的平均值,方差為P**2的正態分佈的一個隨機數來替換原有的基因值。

下面以簡單的基本位編譯為例給大家講解一下:
變異前
染色體A 0010 1101 1001 1100

變異後
染色體A* 0010 1101 1011 1100

C#-HFSS模型建立

首先,我們將微帶天線劃分成N* M的網格,其中覆銅區域設定為1,未覆銅區域設定為0,這樣就能用一個長度N* M的二維陣列表示一個微帶天線了,或者將每一列轉為十進位制,這樣就能用一個長度N的十進位制表示一個微帶天線了。
如圖所示:
< div align=“center”>在這裡插入圖片描述
如圖所示,用一個12*20的二維陣列表示了一個微帶天線。

相關文章