基於遺傳演算法的HFSS和C#聯合模擬(一)
基於遺傳演算法的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的二維陣列表示了一個微帶天線。
相關文章
- 基於遺傳最佳化的協同過濾推薦演算法matlab模擬演算法Matlab
- 智慧優化演算法——python實現免疫遺傳演算法的影像擬合優化演算法Python
- 基於GA遺傳最佳化的CNN-GRU的時間序列迴歸預測matlab模擬CNNMatlab
- 基於Python的遺傳演算法特徵約簡(附程式碼)Python演算法特徵
- 基於harris角點和RANSAC演算法的影像拼接matlab模擬演算法Matlab
- 遺傳演算法(一):Basic GA演算法
- 如何在C#中模擬C++的聯合(Union)?[C#, C++] How To Simulate C++ Union In C#?C#C++
- 基於GA遺傳最佳化的PID控制器最優控制引數整定matlab模擬Matlab
- 遺傳演算法演算法
- 粒子群演算法和遺傳演算法的比較演算法
- “聯合對抗火災”最真實的消防模擬遊戲《模擬消防英豪》遊戲
- 基於聯合查詢的注入
- 遺傳演算法 (轉)演算法
- 遺傳演算法的基本框架演算法框架
- 基於MATLAB的指紋識別演算法模擬實現Matlab演算法
- Matlab與C實時聯合模擬二Matlab
- m基於GA-GRU遺傳最佳化門控迴圈單元網路的電力負荷資料預測演算法matlab模擬演算法Matlab
- ADS使用:layout後聯合模擬的基本設定
- 基於carla和python的自動駕駛模擬系列3Python自動駕駛
- 基於WSN網路的定向步幻影路由演算法matlab模擬路由演算法Matlab
- 基於遺傳演算法的地圖四色原理繪圖上色的Python程式碼演算法地圖繪圖Python
- 基於禁忌搜尋演算法的TSP路徑規劃matlab模擬演算法Matlab
- 基於SFLA演算法的神經網路最佳化matlab模擬演算法神經網路Matlab
- 遺傳演算法 (Genetic Algorithm)演算法Go
- 統一通訊平臺和傳真的聯合增值
- PID除錯軟體(C#、模擬、模擬)除錯C#
- 基於kalman濾波的UAV三維軌跡跟蹤演算法matlab模擬演算法Matlab
- 基於MUSIC演算法的六陣元圓陣DOA估計matlab模擬演算法Matlab
- 一文讀懂遺傳演算法基礎知識與實際應用演算法
- 基於python的新浪微博模擬登陸薦Python
- 基於二維CS-SCHT變換和擴頻方法的彩色影像水印嵌入和提取演算法matlab模擬演算法Matlab
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 10分鐘搞懂遺傳演算法演算法
- python遺傳演算法(詳解)Python演算法
- 基於MATLAB菲涅爾衍射模擬Matlab
- 遺傳演算法庫DEAP的示例程式碼的學習和分析演算法
- 基於深度學習的停車場車輛檢測演算法matlab模擬深度學習演算法Matlab
- 基於無線感測器網路的MCKP-MMF演算法matlab模擬演算法Matlab