协同进化遗传算法 代码_基于遗传算法的矩形微带天线优化

本文简要介绍GA (遗传算法)在矩形微带天线设计中的应用。程序采用Python 编写,应用Geatpy 遗传算法工具箱、scikit-rf 射频数据处理工具箱实现。

一、矩形微带天线

本例中将以最简单的矩形微带天线(图1)为例来演示遗传算法在天线优化设计中的应用。

86a29837b76bd10b9cf20552afc14d9b.png

图1 矩形微带天线

7b0d09b845e53b4fc9b2847c98fe4c5d.png

图2 优化参数

矩形微带天线设计参数

c865dee8af4b2036b32c224da7cfd82e.png

二、遗传算法简介

遗传算法是一种通过计算机来模拟自然界物种进化过程中的选择、交叉、变异等现象,来求解问题优质解的一种算法。因变异的存在,使得算法能够跳出局部最优解,故遗传算法为全局搜索算法。

da554615904d4a5679c3743d8cdb4c20.png

图3 GA

三、环境配置

安装Geatpy、scikit-rf工具箱。

1、 Geatpy

Geatpy 是一个高性能实用型进化算法工具箱,提供许多已实现的进化算法中各项重要操作的库函数。 通过 pip install geatpy 进行安装即可。

2、 scikit-rf

scikit-rf  用于对射频网络参数进行处理、变换。本例中用于处理HFSS 仿真产生的touchstone 文件。通过 pip install scikit-rf 安装即可。

四、目标函数

优化变量为L0、W0、L1,定义遗传算法求解的目标函数:

56983f201f37da0c171bd6324ee872dd.png

五、代码编写

1、定义problem类

class GA4HFSS(ea.Problem):    def __init__(self):        name = 'Antenna'          M = 1          maxormins = [-1]          Dim = 3          varTypes = [0] * Dim         lb = [20,32, 4]  # 决策变量下界:L0,W0,L1        ub = [30, 40, 10]  # 决策变量上界:L0,W0,L1        lbin = [1, 1,1]  # 决策变量下边界        ubin = [1, 1,1]  # 决策变量上边界        ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)    def calcSpecifyPointFunc(S):        tempS11 = 0        for s in S:            s11=s.s11.s_db[0][0][0]            if s11 < -15:                tempS11 += (-15/-15.0)            elif -15 <= s11 <=-5:                tempS11 += (s11/-15.0)            elif -5                 tempS11 += (0/-15.0)        return tempS11    def fitness(self,**kwargs):        for item in kwargs:            hfss.setVariable(item, str(kwargs[item]) + 'mm')        hfss.saveProject()        hfss.analyze(setupName)        hfss.saveProject()        exSnpPath = hfss.exportSNP_NoRenomilation(setupName, sweepName, 'tempSNP.s1p', hfssProjectDirectory)        antennaS11 = Network(exSnpPath)        S_2p3_dB = antennaS11["2.3GHz"]        fitTemp1 = self.calcSpecifyPointFunc(S_2p3_dB)        S_2p4_dB = antennaS11["2.4GHz"]        fitTemp2 = self.calcSpecifyPointFunc(S_2p4_dB)        S_2p5_dB = antennaS11["2.5GHz"]        fitTemp3 = self.calcSpecifyPointFunc(S_2p5_dB)         fitTemp = 0.25*fitTemp1 + 0.5*fitTemp2 + 0.25*fitTemp3        return fitTemp    def aimFunc(self, pop):  # 目标函数        Vars = pop.Phen        variableNameL0 = Vars[:, [0]]        variableNameW0 = Vars[:, [1]]        variableNameL1 = Vars[:, [2]]        fit = np.zeros((len(pop), 1))        for i in range(len(pop)):            fit[i, :] = self.fitness(L0=variableNameL0[i][0], W0=variableNameW0[i][0],L1=variableNameL1[i][0])        pop.ObjV = fit

2、增强精英保留的遗传算法

    hfss = HFSS()    hfss.hfssInterface()    hfssProjectName = "Patch_Antenna.aedt"    hfss.openProject(hfssProjectName)    hfssProjectDirectory = hfss.getProjectDirectory()    hfss.getActiveDesign()    hfss.getModule("AnalysisSetup")    setupName = hfss.getSetupNames()[0]    sweepName = hfss.getSweepNames(setupName)[0]    hfss.analyze(setupName)    hfss.saveProject()    exSnpPath = hfss.exportSNP_NoRenomilation(setupName, sweepName, 'tempSNP.s1p', hfssProjectDirectory)    """===============================实例化问题对象==========================="""    GA4PatchAntenna = GA4HFSS()  # 生成问题对象    """=================================种群设置==============================="""    Encoding = 'RI'  # 编码方式    NIND = 10 # 种群规模    Field = ea.crtfld(Encoding, GA4PatchAntenna.varTypes, GA4PatchAntenna.ranges, GA4PatchAntenna.borders)    population = ea.Population(Encoding, Field, NIND)     """===============================算法参数设置============================="""    myAlgorithm = ea.soea_SEGA_templet(GA4PatchAntenna, population)     myAlgorithm.mutOper.Pm = 0.05  # 修改变异算子的变异概率    myAlgorithm.recOper.XOVR = 0.8  # 修改交叉算子的交叉概率    myAlgorithm.selFunc='tour'# 修改选择算子,默认为‘tour’,通过import geatpy as ea;help(ea.selecting)查看帮助    myAlgorithm.MAXGEN = 10  # 最大进化代数    myAlgorithm.drawing=0 #设置绘图方式:0-不绘图,1-绘图,2-动态绘图    """==========================调用算法模板进行种群进化======================="""    [population, obj_trace, var_trace] = myAlgorithm.run()  # 执行算法    population.save()     best_gen = np.argmin(GA4PatchAntenna.maxormins * obj_trace[:, 1])    best_ObjV = obj_trace[best_gen, 1]    """==========================导入最优解======================="""    for i in range(var_trace.shape[1]):        print(var_trace[best_gen, i])    hfss.setVariable('L0', str(var_trace[best_gen, 0]) + 'mm')    hfss.setVariable('W0', str(var_trace[best_gen, 1]) + 'mm')    hfss.setVariable('L1', str(var_trace[best_gen, 2]) + 'mm')    hfss.exportSNP_NoRenomilation(setupName, sweepName, 'bestAntenna.s1p', hfssProjectDirectory)    hfss.saveProject()    hfss.quitHFSS()

3、优化

经过50代优化,天线相对带宽优化至5%,此时W0=35.9mm,L0=27.2mm,  L1=6.43mm

16b6b49a3eb2c97433f54639547d2e88.png

六、参考资料

  1. http://geatpy.com/

  2. https://scikit-rf-web.readthedocs.io/

  3. Haupt, R. L. . (2013). Genetic Algorithms in Electromagnetics. IEEE Xplore.

  4. https://www.neuraldesigner.com/blog/genetic_algorithms_for_feature_selection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值