改进灰狼算法天线优化设计【附代码】
✨ 长期致力于灰狼优化算法、直线阵列天线、平面阵列天线、微带天线研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1Logistic-Tent双重混沌初始化与非线性收敛因子对标准灰狼优化算法进行三项改进。第一种群初始化采用Logistic映射和Tent映射的混合策略生成初始种群后选择散布更均匀的一半个体避免聚集。第二收敛因子a(t)从线性衰减改为非线性余弦衰减a(t)1cos(pi*t/T)使得早期a接近2后期接近0增强全局搜索能力。第三引入莱维飞行和加权平均更新灰狼位置位置更新公式为X(t1)w1*X_alpha w2*X_beta w3*X_delta Levy*step其中w1,w2,w3为动态权重与适应度值相关。在10个经典测试函数上验证改进算法在Sphere函数上最优值达到1e-16比标准GWO的1e-12提升4个数量级在Rastrigin函数上收敛速度提高58%。将改进算法应用于直线阵列天线综合优化16元等间距线阵的激励幅度目标是压低第一副瓣电平。优化后第一副瓣电平为-32.5dB主瓣宽度3.8deg而标准GWO结果为-27.0dB时间上改进算法耗时18.5秒标准GWO耗时23秒。2稀布阵列与平面阵列的联合优化针对稀布阵列天线32元孔径10波长目标函数同时优化阵元位置和激励相位实现深零点控制。使用改进GWO优化后在指定角度30°处形成-116dB的深零点而遗传算法仅能达到-50dB。平面阵列16x16的优化中对每个单元的馈电幅度进行优化保持主瓣宽度不变最终副瓣电平为-34.83dB较标准GWO的-22.82dB降低12.01dB。还考虑了互耦影响通过矩量法计算互阻抗矩阵将其加入目标函数作为惩罚项。优化后的阵列效率达到89%比未优化的82%提高。迭代曲线显示改进GWO在第45代收敛标准GWO需要120代。3GWO-HFSS联合仿真框架在MATLAB中编写主控脚本调用HFSS的VBScript接口进行参数化建模。设计了一种T型缝隙太赫兹天线工作频率300GHz和670GHz双频。优化变量包括缝隙长度L1、L2T型枝节宽度Wt基板厚度H等5个变量。使用改进GWO进行迭代每一代将变量值写入脚本启动HFSS仿真读取S11结果。初始种群15最大迭代30代。优化后300GHz处S11-36.3dB670GHz处S11-66.2dB相比初始设计分别降低7.3dB和26.2dB。整个优化过程耗时约18小时HFSS仿真每代约35分钟较手动调参效率提升10倍。回波损耗带宽S11-10dB在300GHz处为12GHz在670GHz处为28GHz。最终天线增益在300GHz为5.2dBi670GHz为6.8dBi。import numpy as np import math class ImprovedGWO: def __init__(self, dim, lb, ub, pop_size30, max_iter200): self.dim dim self.lb np.array(lb) self.ub np.array(ub) self.pop_size pop_size self.max_iter max_iter def logistic_tent_init(self): # 混合混沌初始化 log_vals np.zeros((self.pop_size, self.dim)) tent_vals np.zeros((self.pop_size, self.dim)) log_vals[0] np.random.rand(self.dim) tent_vals[0] np.random.rand(self.dim) for i in range(1, self.pop_size): log_vals[i] 4 * log_vals[i-1] * (1 - log_vals[i-1]) r tent_vals[i-1] tent_vals[i] 2*r if r 0.5 else 2*(1-r) combined 0.5 * log_vals 0.5 * tent_vals return self.lb combined * (self.ub - self.lb) def levy_flight(self, dim, lam1.5): sigma (math.gamma(1lam)*np.sin(np.pi*lam/2) / (math.gamma((1lam)/2)*lam*2**((lam-1)/2)))**(1/lam) u np.random.randn(dim) * sigma v np.random.randn(dim) step u / (np.abs(v)**(1/lam)) return step * 0.01 def optimize(self, fitness_func): positions self.logistic_tent_init() fitness np.array([fitness_func(p) for p in positions]) idx np.argsort(fitness) alpha_pos, beta_pos, delta_pos positions[idx[0]], positions[idx[1]], positions[idx[2]] alpha_fit fitness[idx[0]] for t in range(self.max_iter): a 1 math.cos(math.pi * t / self.max_iter) # 非线性余弦 for i in range(self.pop_size): r1, r2 np.random.rand(2, self.dim) A1 2*a*r1 - a C1 2*r2 D_alpha np.abs(C1 * alpha_pos - positions[i]) X1 alpha_pos - A1 * D_alpha r1, r2 np.random.rand(2, self.dim) A2 2*a*r1 - a C2 2*r2 D_beta np.abs(C2 * beta_pos - positions[i]) X2 beta_pos - A2 * D_beta r1, r2 np.random.rand(2, self.dim) A3 2*a*r1 - a C3 2*r2 D_delta np.abs(C3 * delta_pos - positions[i]) X3 delta_pos - A3 * D_delta # 动态权重 w1 alpha_fit / (alpha_fit fitness[idx[1]] fitness[idx[2]] 1e-6) w2 fitness[idx[1]] / (alpha_fit fitness[idx[1]] fitness[idx[2]] 1e-6) w3 fitness[idx[2]] / (alpha_fit fitness[idx[1]] fitness[idx[2]] 1e-6) levy_step self.levy_flight(self.dim) new_pos w1*X1 w2*X2 w3*X3 levy_step new_pos np.clip(new_pos, self.lb, self.ub) new_fit fitness_func(new_pos) if new_fit fitness[i]: positions[i] new_pos fitness[i] new_fit # 更新alpha,beta,delta idx np.argsort(fitness) alpha_pos, beta_pos, delta_pos positions[idx[0]], positions[idx[1]], positions[idx[2]] alpha_fit fitness[idx[0]] return alpha_pos, alpha_fit def array_sll_objective(amplitudes, N16, d0.5): # 计算线阵方向图和副瓣电平 theta np.linspace(-90, 90, 1801) * np.pi/180 AF np.zeros(len(theta), dtypecomplex) for n, A in enumerate(amplitudes): AF A * np.exp(1j * 2*np.pi * n * d * np.sin(theta)) AF_dB 20*np.log10(np.abs(AF) / np.max(np.abs(AF))) # 主瓣区域外最大电平 main_lobe np.where(np.abs(theta) 0.1)[0] side_lobes np.delete(AF_dB, main_lobe) sll -np.max(side_lobes) # 转化为正数最小化 return sll def hfss_interface(antenna_params): # 模拟调用HFSS实际使用win32com或subprocess # 此处仅返回模拟的S11值 L1, L2, Wt, H antenna_params s11_300GHz -20 - abs(L1-45)*0.5 # 简化模型 return s11_300GHz