目录

  • 波束赋形简介
  • 遗传算法波束赋形
  • 粒子群算法波束赋形
  • 差分进化算法波束赋形
  • 智能算法比较
  • 遗传算法波束赋形代码示例

波束赋形简介

根据期望的方向图辐射特性(如方向图形状、主瓣宽度、副瓣电平、方向性系数)并以某种方法求得阵面电流分布并将此电流分布施加于相应通道中,这一过程称之为阵列天线的波束赋形。阵列天线的波束赋形作为一个非凸、多维、多目标问题,它的求解涉及到电磁场、数学、工程学等多个领域的知识。这类综合方法有内插法、多项式逼近法、伍德沃德—劳森综合法、智能优化计算方法等。其中遗传算法、粒子群算法和差分进化算法等在内的智能优化算法已广泛应用于天线和电路等电磁工程领域
遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中的遗传和进化过程而形成的自适应全局优化搜索算法。它借鉴了达尔文的进化论和孟德尔的遗传学说,本质上是一种并行、高效、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最优解。
差分进化算法(Differential Evolution,DE)最初的设想是用于解决切比雪夫多项式问题,后来发现差分进化算法也是解决复杂优化问题的有效技术。差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争产生的智能优化搜索。
粒子群算法(Particle Swarm Optimization,PSO)通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。粒子群算法与其他进化算法一样,也是基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索。
通过对不同迭代次数的仿真,可以发现,粒子群算法的收敛速度远快于遗传算法,但是比较容易陷入局部收敛;遗传算法在多次迭代的平均效果是比较稳定的,且迭代次数较多的情况下,遗传算法的综合效果要好一些;差分进化算法多次迭代的效果与粒子群算法相当,但代码和算法要简单容易操作一些。

遗传算法波束赋形

遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中的遗传和进化过程而形成的自适应全局优化搜索算法。遗传算法操作:使用“适者生存”的原则,在潜在的解决方案种群中逐次产生一个近似最优的方案。在每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原个体更能适应环境。
对一个24阵元的天线阵列进行斜方波束综合,要求-20°到30°的天线增益按照-1/6dB的斜率下降,同时其他角度的天线增益小于-10dB,波束赋形的综合过程如下所示:
遗传算法赋形波束变化如下所示:

遗传算法赋形波束对应的阵元馈电电流如下所示:

最终天线的赋形方向图如下所示:

遗传算法综合过程中适应度变化曲线如下所示:

粒子群算法波束赋形

粒子群算法(Particle Swarm Optimization,PSO)是通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。粒子群算法与其他进化算法一样,也是基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索。它将群体中的个体看成是在D维搜索空间中没有质量和体积的粒子,每个粒子以一定的速度在解空间运动,并向自身历史最佳位置pbestpbest和邻域历史最佳位置gbestgbest聚集,实现对候选解的进化。
对一个24阵元的天线阵列进行斜方波束综合,要求-20°到30°的天线增益按照-1/6dB的斜率下降,同时其他角度的天线增益小于-10dB,波束赋形的综合过程如下所示:
最终天线的赋形方向图如下所示:

粒子群算法综合过程中适应度变化曲线如下所示:

差分进化算法波束赋形

差分进化算法(Differential Evolution,DE)最初的设想是用于解决切比雪夫多项式问题,后来发现差分进化算法也是解决复杂优化问题的有效技术。差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争产生的智能优化搜索。但相比于进化计算,差分进化算法保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,降低了进化计算的复杂性。同时,差分进化算法特有的记忆能力使它可以动态跟踪当前的搜索情况,以调整其搜索策略,它具有较强的全局收敛能力和稳健性,且不需要借助问题的特征信息,适用于求解一些利用常规的数学规划方法很难求解甚至无法求解的复杂优化问题。
对一个24阵元的天线阵列进行斜方波束综合,要求-20°到30°的天线增益按照-1/6dB的斜率下降,同时其他角度的天线增益小于-10dB,波束赋形的综合过程如下所示:
最终天线的赋形方向图如下所示:

差分进化算法综合过程中适应度变化曲线如下所示:

智能算法比较

运用遗传算法、粒子群算法和差分进化算法对同一个赋形波束进行30次综合,迭代次数分别为50、100、400次,三种算法的适应度如下所示:
迭代次数50三种算法的适应度如下所示:

迭代次数100三种算法的适应度如下所示:

迭代次数400三种算法的适应度如下所示:
综上所示,当迭代次数较少的时候,粒子群的效果较好,当迭代次数较多的时候,遗传算法的效果较好;同时,粒子群的种群适应度是收敛最明显的;遗传算法的多次运行的结果是最稳定的;差分进化算法多次迭代的效果与粒子群算法相当,但代码和算法要简单容易操作一些。

遗传算法波束赋形代码示例

import numpy as np
import geatpy as ea  # 导入geatpy库
from pat_aim import aimfunc  # 导入自定义的目标函数(赋形波束)
import time"""六阵元阵列方向图综合"""
"""============================变量设置============================"""
phase1,phase2,phase3,phase4,phase5,phase6 = [0, 359],[0, 359],[0, 359],[0, 359],[0, 359],[0, 359]#相位范围
b1,b2,b3,b4,b5,b6 = [1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[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 = 40  # 种群个体数目
MAXGEN = 20  # 最大遗传代数
maxormins = [1]  # 列表元素为1则表示对应的目标函数是最小化,元素为-1则表示对应的目标函数是最大化
selectStyle = 'rws'  # 采用轮盘赌选择
recStyle = 'xovdp'  # 采用两点交叉
mutStyle = 'mutbin'  # 采用二进制染色体的变异算子
pc = 0.7  # 交叉概率
pm = 0.8  # 整条染色体的变异概率(每一位的变异概率=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)  # 对初始种群进行解码
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. 相控阵天线(一):直线阵列天线特性和阵列因子(方向图乘积定理、波束扫描、含python代码)

    目录 方向图乘积定理 阵列因子方向图 波束扫描 阵列方向图和单元方向图 方向图乘积定理的python代码示例 方向图乘积定理 任意形式单元天线构成的直线阵如下图所示: 阵中第n个单元的远区辐射场可表示 ...

  2. 阵列天线的赋形波束综合(一)

    学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介.仿真软件建模.设计.调试过程及思路.如有想看到的内容或技术问题,可以在文尾写下留言. ...

  3. [4G5G专题-28]:架构-什么是多天线技术与5G大规模天线阵列、波束赋形、高阶空分复用?

    目录 第1章 多天线技术概述 1.1 LTE的多天线技术回顾 1.2 5G大规模天线阵列.波束赋形以及其动机 第2章 什么是波束赋形 2.1 波束赋形与大规模天线阵列的关系 2.2 波束赋形的定义 2 ...

  4. pm模型matlab算法,18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码...

    基于遗传算法(粒子群算法.人工鱼群算法等)的投影寻踪模型 MATLAB源代码 投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据向低维空间进行投影,通过低维投影数据的散布结构来研究高维 ...

  5. matlab阵列天线波束扫描,Matlab在相控阵天线中的应用.pdf

    Matlab在相控阵天线中的应用 第27卷第2期 青海大学学报(自然科学版) VoL27No.2 2009年4月 Journalof Science) Apr.2009 QinghaiUniversi ...

  6. 相控阵天线(二):非规则直线阵列天线(稀布阵列、稀疏阵列、平方率分布阵列、含python代码)

    目录 非规则线阵概述 不均匀递变间距阵列 稀布阵列 稀疏阵列 不均匀相位递变阵列 不均匀幅度激励阵列 代码示例 非规则线阵概述 非规则线阵主要包括以下情况: 1. 不均匀间距阵列: a)不均匀间距递变 ...

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

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

  8. 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现

    目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...

  9. 【多式联运】基于matlab帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题【含Matlab源码 2073期】

    ⛄一.联运运输简介 1 引言 运输问题(Transportation Problem)是一类特殊的线性规划问题,最早是由Hichcock于1941年提出的,由于它不仅能解决物资的合理调运和车辆的合理调 ...

最新文章

  1. 读8篇论文,梳理BERT相关模型进展与反思
  2. 男神青涩时纤毫毕现!腾讯AI模型GFPGAN火上GitHub热榜第一,Demo在线可玩
  3. sudo重定向失败解决方法
  4. 2019牛客多校2 H Second Large Rectangle(悬线法)
  5. 【华为云技术分享】使用keil5打开GD32F450i的MDK项目出现的问题以及J-Link无法烧录程序对应的解决方案
  6. LeetCode 892. 三维形体的表面积
  7. MySQL 8.0窗口函数
  8. 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
  9. 神经网络自适应反馈控制设计
  10. Pm2 部署 Nuxt 项目
  11. docker开启两个MySQL容器_Docker下运行两个Mysql5.7容器
  12. 微信营销如何做对o2o商业模式心灰意冷了吗?O2O到底要怎么做?
  13. Linux系统时间、系统时区和时钟同步的部分理解
  14. 《一个人的朝圣》—— 读后总结
  15. lambda表达式——捕获
  16. Java获取unix时间戳
  17. 写一本书作者到底能拿到多少稿酬?
  18. 什么是物联网?物联网面临哪些挑战?
  19. vim及管理输入输出
  20. 如何让你的 Android 显示gif格式的图片

热门文章

  1. 免ROOT的计算机隐藏应用软件,华为免root一键删除系统内置自带软件
  2. 一线大厂的企业云原生成本优化实践指南
  3. <硬件>——Arduino继电器控制实例
  4. 通过安装插件: reset-css 初始化浏览器css样式
  5. IRF 与 H3CS10508
  6. Linux gcc 预处理,编译,汇编,链接的命令打字练习
  7. 武林外传辅助工具详细制作过程[第八篇:终结篇]
  8. 微型计算机测控系统课程设计报告,《微机原理与接口技术》课程设计报告_精品.doc...
  9. 学计算机的千万不要去高中当老师.
  10. 全国计算机等级考试二级教程——c++语言程序设计答案,全国计算机等级考试二级教程--C++语言程序设计(2018年版)...