相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法)

news2025/8/3 4:24:32

目录

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

波束赋形简介

根据期望的方向图辐射特性(如方向图形状、主瓣宽度、副瓣电平、方向性系数)并以某种方法求得阵面电流分布并将此电流分布施加于相应通道中,这一过程称之为阵列天线的波束赋形。阵列天线的波束赋形作为一个非凸、多维、多目标问题,它的求解涉及到电磁场、数学、工程学等多个领域的知识。这类综合方法有内插法、多项式逼近法、伍德沃德—劳森综合法、智能优化计算方法等。其中遗传算法、粒子群算法和差分进化算法等在内的智能优化算法已广泛应用于天线和电路等电磁工程领域
遗传算法(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, '秒')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CCF CTO Club 16期活动记事——走进腾讯,实现连接

11月17日,有幸通过CCF CTO Club活动报名,参观了腾讯北京的总部,在腾讯总部大楼7层宴会厅尝到了美食,还参加了“云原生技术的探索与实践”专场讲座和讨论,味蕾和思维获得了双丰收。 参观腾讯总部 这次参观腾讯北京总部…

用 VS Code 搞 Qt6:信号、槽,以及QObject

用 VS Code 搞 Qt6:信号、槽,以及QObject Qt 里面的信号(Signal)和槽(Slot)虽然看着像事件,但它实际上是用来在两个对象之间进行通信的。既然是通信,就会有发送者和接收者。 1、信…

NodeJs实战-待办列表(3)-前端页面填充待办数据

NodeJs实战-待办列表3-前端页面填充待办数据为啥在前端填充待办数据?如何在前端填充待办数据?需要了解的知识页面修改后端服务封装数据返回server.js 修改效果图初始化页面添加待办事项完成待办事项为啥在前端填充待办数据? 第2节的页面数据…

Django基础学习

目录 1、Django MVT模型 2、Django项目和应用 2.1 项目和子应用的创建 2.2 子应用url路由配置 3、Django的templates配置 4、Django请求的处理 4.1 get请求处理 4.2 post请求处理 5、Django数据库操作 5.1、数据库连接配置 5.2、models.py配置 5.3、django数据库表的…

【node进阶】深度解析Koa框架---路由|静态资源|获取请求参数

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强&a…

创建自己的函数库

创建自己的函数库前言一、什么是STM32标准函数库1.定义:2.作用:3.对比:二、构建库函数1.修改寄存器地址封装2.定义访问的结构体指针和引脚3.创建封装函数3.1创建拉低引脚函数3.2创建引脚初始化函数总结前言 回顾一下,前面点亮led…

世界儿童日,周大福真诚关爱儿童成长

守护童心 呵护成长 周大福秉持着“用真诚让幸福永恒”的企业理念,百周年承诺“以人为本”。以爱和关怀凝聚社会力量,提倡社会共融,缔造可持续未来。 梦想家祝福 2021年周大福珠宝集团与美丽中国,携手打造“家源于此”项目。于2…

podman-compose 有前途吗?

文章目录1. 前言2. Docker Compose 和 Podman Compose 的历史3. 未来4. 观点5. 安装5.1 pip3 安装5.2 python 安装5.3 dnf 安装6. 示例1. 前言 虽然 Kubernetes 已经发展成为容器编排的主导者,但人们仍然对管理较小规模的容器(通常是单个系统&#xff0…

centos7—安装mysql

文章目录1.1 卸载MariaDB1.2 官网下载包文件1.3 解压安装包1.4 安装相关的Mysql服务1.5 开启Mysql服务1.1 卸载MariaDB 由于centOS7中默认安装了MariaDB,需要先进行卸载 rpm -qa | grep -i mariadb #查找本地mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.aarch64 #这个…

nuxt 如何生成sitemap.xml 动静态站点地图

前言 sitemap.xml的作用是将我们网站的所有页面都被SEO(浏览器搜索引擎)收录,我们网站的内容更容易被用户搜到,同时增加我们的网站的知名度,排名更靠前。简言之就是用技术做网站推广,所以对于网站推广sitem…

JVM【类加载与GC垃圾回收机制】

JVM【类加载与GC垃圾回收机制】🍎一.JVM🍒1.1JVM简介🍒1.2JVM执行流程🍎二.JVM运行时数据区🍒2.1 程序计数器(线程私有)🍒2.2 栈(线程私有)🍒2.3 堆(线程共享)🍒2.4 方法区(线程共享…

Matlab图像处理基础(part 1)

目录 0. 概要 1. 图像表示 Image Representation 1.1 图像格式 Image format 1.2 图像分辨率 resolution of image 1.3 图像的编码 1.4 Matlab图像加载、显示和保存 1.5 Image Information 1.6 图像格式转换 1.7 其它类型的像素 1.8 像素数值格式 1.9 图像数据的访问…

vue实现防抖函数、节流函数,全局使用【输入框、按钮】

博主介绍 📢点击下列内容可跳转对应的界面,查看更多精彩内容! 🍎主页:水香木鱼 🍍专栏:后台管理系统 文章目录 简介:这是一篇有关【vue实现防抖函数、节流函数,全局使用…

第一章《初学者问题大集合》第4节:Java程序是如何执行的

想要学好Java编程,就必须先弄清楚Java程序是如何执行的。首先来解释一个最基本的概念:什么是程序?把你想让计算机做的事情用编程语言一条条列出,这个由多条编程语言所组成的“代码序列”就是程序。 那么Java程序又是如何运行的呢?这个过程如图1-1所示。 图1-1 Java程序运…

C语言小游戏之三子棋(井字棋)(1.5w字超详细讲解)

hello,csdn的伙伴们,大家好,我们已经学习到了分支与循环,函数,数组这三大块知识,那么我们现在就可以尝试综合运用前面所学的知识,来完成一个简单的小游戏-----三子棋(井字棋&#xf…

Allegro DFM Ravel Rule工具使用指导书

Allegro DFM Ravel Rule工具使用指导书 Allegro任何一个版本都支持DFM Ravel Rule检查,即便是166的版本 打开后的界面如下所示 可以检查项目 测试点,阻焊,走线,丝印,过孔,milling,装配,outline相关的DFM检查 可以让违反规则的设计处以DRC的形式报出来 避免加工问题 …

基于数字孪生打造智慧园区运营平台,助力园区数字化转型

在各行各业数字化转型的浪潮中,园区也在经历数字化转型发展,从传统园区向智慧园区不断演进。传统园区缺乏系统性规划,基于单点功能建设,存在系统孤立、管理粗放且服务不足等问题,难以满足人们日益增长的多样化需求。在…

第四章. Pandas进阶—数据合并

第四章. Pandas进阶 4.6 数据合并 数据合并主要使用的是Merge方法和Concat方法 1.数据合并(merge函数) 1).语法: pandas.merge(right,how‘inner’, on“None”, left_on“None”, right_on“None”, left_indexFalse, right_indexFalse... )参数说明: right&…

甘露糖-聚乙二醇-马来酰亚胺 mannose-PEG-MAL 马来酰亚胺-PEG-甘露糖

甘露糖-聚乙二醇-马来酰亚胺 mannose-PEG-MAL 马来酰亚胺-PEG-甘露糖,溶于大部分有机溶剂,如:DCM、DMF、DMSO、THF等等。在水中有很好的溶解性 中文名称:甘露糖-马来酰亚胺 英文名称:mannose-MAL 别称:…

【LeetCode 每日一题】53. 最大子数组和

01 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 02 示例 示例1: 输入:nums [-2,1,-3,4,-1,2,1,-5…