简介

可以参考我的最新博文相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法、含python代码)。
本文通过python的遗传算法工具箱Greatpy(Geatpy官网:http://www.geatpy.com)和我前面写的方向图乘积定理函数,实现了12单元的阵列天线的综合,得到了一个偏离法向15的方波束,和一个刀状波束。其中,关于遗传算法的介绍可以参考我以前的博客–遗传算法简介,关于方向图乘积定理的简介参考我前面的博客–方向图乘积定理

遗传算法迭代图示:

综合结果

方波束,波宽50度,带内波纹1.5dB,偏离法相15度,副瓣-11dB;
刀状波束,从仰角0度到仰角90度满足线性关系,偏差小于1dB

偏离法相15度的方波束


红色的线是将综合得到的相位幅度带入HFSS中得到的,蓝色的线是Python的方向图乘积定理得到的,下同。

刀状波束


单元天线方向图


由于单元方向图分前后比不怎么好,综合得到的方向图前后比也不怎么好,选用更好的天线单元,得到的方向图应该更好。

适应度变化曲线

Python程序如下

下面是一个简单的6单元的基于遗传工具箱greatpy的方向图综合python程序。有许多地方是可以修改的,包括程序的简洁,算法的优化等。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import geatpy as ea  # 导入geatpy库
from aimfunc import aimfunc  # 导入自定义的目标函数
import time"""============================变量设置============================"""
phase1 = [0, 359]  # 第一个相位变量范围
phase2 = [0, 359]  # 第二个相位变量范围
phase3 = [0, 359]
phase4 = [0, 359]
phase5 = [0, 359]
phase6 = [0, 359]b1 = [1, 1]  # 第一个相位变量边界,1表示包含范围的边界,0表示不包含
b2 = [1, 1]  # 第二个相位变量边界,1表示包含范围的边界,0表示不包含
b3 = [1, 1]
b4 = [1, 1]
b5 = [1, 1]
b6 = [1, 1]ranges = np.vstack([phase1, phase2, phase3, phase4, phase5, phase6]).T  # 生成自变量的范围矩阵,使得第一行为所有决策变量的下界,第二行为上界
borders = np.vstack([b1, b2, b3, b4, b5, b6]).T  # 生成自变量的边界矩阵
varTypes = np.array([0, 0, 0, 0, 0, 0])  # 决策变量的类型,0表示连续,1表示离散
"""==========================染色体编码设置========================="""
Encoding = 'BG'  # 'BG'表示采用二进制/格雷编码
codes = [0, 0, 0, 0, 0, 0]  # 决策变量的编码方式,设置两个0表示两个决策变量均使用二进制编码
precisions = [1, 1, 1, 1, 1, 1]  # 决策变量的编码精度
scales = [0, 0, 0, 0, 0, 0]  # 0表示采用算术刻度,1表示采用对数刻度
FieldD = ea.crtfld(Encoding, varTypes, ranges, borders, precisions, codes, scales)  # 调用函数创建译码矩阵
"""=========================遗传算法参数设置========================"""
NIND = 4  # 种群个体数目
MAXGEN = 2  # 最大遗传代数
maxormins = [1]  # 列表元素为1则表示对应的目标函数是最小化,元素为-1则表示对应的目标函数是最大化
selectStyle = 'rws'  # 采用轮盘赌选择
recStyle = 'xovdp'  # 采用两点交叉
mutStyle = 'mutbin'  # 采用二进制染色体的变异算子
pc = 0.7  # 交叉概率
pm = 1  # 整条染色体的变异概率(每一位的变异概率=pm/染色体长度)
Lind = int(np.sum(FieldD[0, :]))  # 计算染色体长度
obj_trace = np.zeros((MAXGEN, 2))  # 定义目标函数值记录器
var_trace = np.zeros((MAXGEN, Lind))  # 染色体记录器,记录历代最优个体的染色体
"""=========================开始遗传算法进化========================"""
start_time = time.time()  # 开始计时
Chrom = ea.crtpc(Encoding, NIND, FieldD)  # 生成种群染色体矩阵
variable = ea.bs2real(Chrom, FieldD)  # 对初始种群进行解码
print(variable)ObjV = aimfunc(variable)  # 计算初始种群个体的目标函数值
FitnV = ea.ranking(maxormins * ObjV)  # 根据目标函数大小分配适应度值
best_ind = np.argmax(FitnV)  # 计算当代最优个体的序号
# 开始进化
for gen in range(MAXGEN):SelCh = Chrom[ea.selecting(selectStyle, FitnV, NIND - 1), :]  # 选择SelCh = ea.recombin(recStyle, SelCh, pc)  # 重组SelCh = ea.mutate(mutStyle, Encoding, SelCh, pm)  # 变异# 把父代精英个体与子代的染色体进行合并,得到新一代种群Chrom = np.vstack([Chrom[best_ind, :], SelCh])Phen = ea.bs2real(Chrom, FieldD)  # 对种群进行解码(二进制转十进制)ObjV = aimfunc(Phen)  # 求种群个体的目标函数值FitnV = ea.ranking(maxormins * ObjV)  # 根据目标函数大小分配适应度值# 记录best_ind = np.argmax(FitnV)  # 计算当代最优个体的序号obj_trace[gen, 0] = np.sum(ObjV) / ObjV.shape[0]  # 记录当代种群的目标函数均值obj_trace[gen, 1] = ObjV[best_ind]  # 记录当代种群最优个体目标函数值var_trace[gen, :] = Chrom[best_ind, :]  # 记录当代种群最优个体的染色体
# 进化完成
end_time = time.time()  # 结束计时
ea.trcplot(obj_trace, [['种群个体平均目标函数值', '种群最优个体目标函数值']])  # 绘制图像
"""============================输出结果============================"""
best_gen = np.argmax(obj_trace[:, [1]])
print('最优解的目标函数值:', obj_trace[best_gen, 1])
variable = ea.bs2real(var_trace[[best_gen], :], FieldD)  # 解码得到表现型(即对应的决策变量值)
print('最优解的决策变量值为:')
for i in range(variable.shape[1]):print('x' + str(i) + '=', variable[0, i])
print('用时:', end_time - start_time, '秒')

基于遗传算法的阵列天线方向图综合的Python实现相关推荐

  1. 文化算法 方向图综合 matlab,二维矩形阵列天线方向图综合

    二维矩形阵列天线方向图综合 作者:崔玉国 李清亮 闫玉波 来源:<现代电子技术>2009年第03期 摘 要:在干扰入射方向,自适应天线阵方向图会产生零陷,从而实现抗干扰的功能.基于最大信噪 ...

  2. 基于遗传算法的南昌周边城市旅游规划研究(Python实现)

    当前,国民生活水平得到大幅提升,人均汽车拥有量越来越多,自驾周边城市游也成为越来越多家庭节假日期间的选择,旅游路径规划成为研究热点.旅游路径规划问题是基于经典旅行商问题( TSP) 演变而来的,目前主 ...

  3. 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)

    ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...

  4. python自动组卷系统_基于遗传算法(C#编写)的智能组卷系统优化

    原创 guodongwe1991 机器学习算法与Python学习 2016-08-25 最近由于项目的需要,基于.Net 4.0框架和WPF开发window的客户端(开发环境为win7 旗舰版:Vis ...

  5. 基于遗传算法GA算法优化BP神经网络(Python代码实现)

    一. 概述 BP-GA算法的设计︰基于遗传算法的BP神经网络算法(以下简称BP-GA)就是在BP神经网络的学习过程中,将权重和阀值描述为染色体,并选取适宜的适应函数,然后进行GA迭代,直到某种意义上的 ...

  6. python 排课算法_基于遗传算法的排课系统

    摘 要:随着高校的发展,在教务管理系统中使用的排课模型也变得越来越复杂,亟需一种适用于开发.重用及设计的方法.针对这种情况,本文给出了排课问题的数学模型,提出基于遗传算法解决方案.结果表明,该算法能比 ...

  7. 【生产调度】基于遗传算法求解柔性生产调度(FJSP)问题含Matlab源码

    1 简介 制造业同人们的生活密切联系,其发展走向可直接影响国家的综合实力.制造业企业不仅需要将制造技术走在科技前端,而且需要加强生产和经营管理技术,这样才能时刻保持其核心竞争力.而企业的调度是企业管理 ...

  8. 基于遗传算法的卷积神经网络架构搜索

    论文推荐:基于遗传算法的卷积神经网络架构搜索 来自文章 <Evolving Deep Convolutional Neural Networks for Image Classification ...

  9. 基于遗传算法解决柔性车间生产调度问题(附代码)

    本文章主要涉及以下工作:    (1)讲述了如何基于遗传算法解决柔性车间生产调度问题,包括编码.解码.初始化.交叉操作.变异操作.选择操作等.    (2)提供了相应的编程步骤,并完善了甘特图绘制以及 ...

最新文章

  1. matlab game of life,模拟器cellular auotomata元胞自动机 matlab
  2. laravel 队列queue
  3. 最长上升子序列—leetcode300
  4. ROS学习(九)—— rqt_console 和 roslaunch
  5. HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)
  6. 计算机原理之程序是怎么运行的
  7. em模型补缺失值_基于EM算法数据单变量缺失处理方法研究
  8. 权限和ACL访问控制 -01-权限
  9. 通过Ajax异步请求数据
  10. libz.dylib的研究 libz.1.2.5.tbd
  11. 上位机服务器通讯协议,家庭监护终端与手机、上位机及服务器通讯协议22.doc
  12. 剑指offer最新版_剑指offer第二版速查表
  13. Vue实现的问题解决方案的查询文库
  14. 【优化预测】基于matlab遗传算法优化极限学习机ELM预测【含Matlab源码 1673期】
  15. RocketMQ Remoting模块源码功能分析
  16. ROC-RK3328-CC开源主板运行LibreELEC系统
  17. 告别动态规划,连刷40道动规算法题,我总结了动规的套路
  18. 算法时间复杂度O(1)
  19. BGP双平面实验---bgp的选路
  20. pymysql模块安装后,import pymysql找不到?

热门文章

  1. Mysql导致CPU飙高的问题
  2. Lesson_Swift
  3. HUAWEI 机试题:字符串的解压缩
  4. Linux 2.6 menuconfig内核编译配置选项详解
  5. 设计题目:基于CPLD/FPGA的出租车计费器
  6. Ubuntu中获取root权限
  7. 模型转换、模型压缩、模型加速工具汇总
  8. Android逆向第一步之开启root权限
  9. C语言读配置文件-自动封装Windows系统服务--20210512
  10. java 生成随机数(利用Random生成任意范围的随机数)