基于遗传算法的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微带天线进行建模,仿真,输出,计算,优化。

原理框图

基于遗传算法的HFSS和C#联合仿真(一)算法简介_第1张图片

遗传算法简介

< div align=“center”>基于遗传算法的HFSS和C#联合仿真(一)算法简介_第2张图片

选择(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”>基于遗传算法的HFSS和C#联合仿真(一)算法简介_第3张图片
如图所示,用一个12*20的二维数组表示了一个微带天线。

你可能感兴趣的:(hfss,天线)