✨ 长期致力于阵列天线、方向图综合、遗传算法、激励分布、GPU研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)多种群首领决策遗传算法MPLDGA及其在方向图综合中的应用:
针对传统遗传算法在阵列天线副瓣抑制和波束赋形中收敛慢的问题,提出了一种多种群协同进化框架。将种群划分为3个主导种群和5个从属种群,每个种群规模60。主导种群采用锦标赛选择、模拟二进制交叉(交叉概率0.85)和多项式变异(变异概率0.05),从属种群每15代向最优主导种群迁移10%的个体。引入首领决策机制:在每一代结束时,由三个主导种群的精英个体组成决策委员会,通过投票决定下一代的全局最优方向。将该算法应用于32元均匀线阵的泰勒方向图综合,要求副瓣电平低于-35dB。MPLDGA在110代达到-36.2dB,而标准遗传算法需要280代且仅达到-33.1dB。对于平面阵的缺口波束赋形,MPLDGA生成的激励分布实现了主瓣宽度8°、缺口深度-55dB的性能指标,方向图与期望的均方误差为0.023。
(2)基于广义微波网络级联的互耦效应补偿与快速综合方法:
引入理想无耗对称互易网络ILSRN模型,将阵列天线中每个阵元及其馈电网络分解为子网络,通过广义散射参数级联算法精确计算考虑互耦后的实际激励系数。推导出了考虑互耦时的阵元端口电压计算公式V_i = Σ(S_ij * a_j),其中S_ij通过全波电磁仿真获取。将该计算模块嵌入遗传算法的适应度函数中,实现互耦自校正综合。设计了一个8元微带贴片阵列,期望方向图副瓣-30dB。采用本方法综合出的激励分布经全波验证后实际副瓣为-28.4dB,而未考虑互耦的传统方法实际副瓣仅-22.1dB。同时开发了基于GPU并行计算的加速模块,使用CUDA对每个个体的方向图计算进行线程级并行,在3600个阵元的大规模阵列综合中,单次适应度计算时间从3.2秒降至0.055秒。
(3)分块策略与混合遗传算法解决大规模阵列优化问题:
针对超大规模阵列(阵元数超过1000)优化中参数维度过高的问题,提出分块逐次优化策略。将整个阵列划分为K个模块(K=10~20),每次只优化一个模块内的激励分布,其他模块的激励保持当前最优值固定。每个模块优化采用混合遗传算法:首先使用实数编码遗传算法进行全局搜索(100代),然后使用拟牛顿法进行局部精调。按照从左到右的顺序逐块优化,每完成一个模块更新后重新评估全局性能。以10000个单元的平面阵为例,优化目标是在中国大陆版图范围内实现赋形波束覆盖。分块策略将搜索空间从10000维降至每块500-1000维,优化收敛时间从预估的72小时压缩到3.5小时。最终得到的方向图在主瓣区域内平均增益波动小于1.2dB,副瓣低于-28dB。
import numpy as np import cupy as cp from scipy.optimize import minimize import pycuda.autoinit def mpldga_fitness(amplitudes, phases, target_pattern): # 方向图计算 theta = np.linspace(-90, 90, 181) d = 0.5 k = 2 * np.pi steering = np.exp(1j * k * d * np.arange(len(amplitudes)) * np.sin(np.radians(theta))[:, None]) pattern = np.abs(steering @ (amplitudes * np.exp(1j * phases))) return np.mean((pattern - target_pattern)**2) def gpu_pattern_computation(weights, theta_rad, element_positions): # 使用CuPy在GPU上计算 w_gpu = cp.asarray(weights) pos_gpu = cp.asarray(element_positions) theta_gpu = cp.asarray(theta_rad) k = 2 * np.pi steering = cp.exp(1j * k * cp.outer(theta_gpu, pos_gpu)) pattern = cp.abs(steering @ w_gpu) return cp.asnumpy(pattern) def block_wise_optimization(total_elements, fitness_func, n_blocks=20): block_size = total_elements // n_blocks best_weights = np.random.uniform(0, 1, total_elements) for block_idx in range(n_blocks): start = block_idx * block_size end = start + block_size if block_idx < n_blocks-1 else total_elements def sub_fitness(sub_weights): weights_temp = best_weights.copy() weights_temp[start:end] = sub_weights return fitness_func(weights_temp) # 遗传算法优化子块 pop = np.random.uniform(0, 1, (50, end-start)) for gen in range(100): fitness_vals = np.array([sub_fitness(p) for p in pop]) idx = np.argsort(fitness_vals) elite = pop[idx[:10]] new_pop = elite.copy() while len(new_pop) < 50: parent1, parent2 = elite[np.random.choice(10,2)] crossover = (parent1 + parent2) / 2 + np.random.uniform(-0.1,0.1, end-start) new_pop.append(crossover) pop = np.array(new_pop) best_sub = pop[np.argmin([sub_fitness(p) for p in pop])] best_weights[start:end] = best_sub return best_weights def cascaded_scattering_parameters(S_submatrices): # 广义微波网络级联算法 S_total = S_submatrices[0] for S_next in S_submatrices[1:]: n1 = S_total.shape[0] // 2 n2 = S_next.shape[0] // 2 S11, S12, S21, S22 = S_total[:n1,:n1], S_total[:n1,n1:], S_total[n1:,:n1], S_total[n1:,n1:] T11, T12, T21, T22 = S_next[:n2,:n2], S_next[:n2,n2:], S_next[n2:,:n2], S_next[n2:,n2:] I = np.eye(n2) S11_new = S11 + S12 @ np.linalg.inv(I - T11 @ S22) @ T11 @ S21 S12_new = S12 @ np.linalg.inv(I - T11 @ S22) @ T12 S21_new = T21 @ np.linalg.inv(I - S22 @ T11) @ S21 S22_new = T22 + T21 @ np.linalg.inv(I - S22 @ T11) @ S22 @ T12 S_total = np.block([[S11_new, S12_new], [S21_new, S22_new]]) return S_total