基于遗传算法的无人机烟幕遮蔽时间优化
本文介绍如何使用 Python 代码解决无人机烟幕遮蔽导弹的时间优化问题。通过建立烟雾有效时间段模型,计算并合并重叠区间,结合遗传算法优化无人机的飞行方向、速度、投放时间及起爆延迟等参数。
一、问题定义
目标是让 3 架无人机投掷的烟幕,在导弹飞到假目标前,'有效遮蔽时间'最长。
关键初始设定(可在 main 函数中调整):
- 导弹起点:
[20000, 0, 2000](单位米) - 真目标位置:
[0, 200, 0] - 3 架无人机起点:例如'FY1'从
[17800, 0, 1800]出发
代码中使用 SmokeObscurationModel 类封装这些初始信息。
二、核心计算逻辑
烟幕的有效性取决于生效时长及覆盖范围。核心方法是 calculate_effective_time,分为三步:
1. 计算单个烟幕的有效时间段
每架无人机投烟幕需计算两个时间点:
- 生效时间 = 飞行时间 (
drop_time) + 起爆延迟 (blast_delay) - 失效时间 = 生效时间 + 有效时长 (
effective_duration, 默认 20 秒)
smoke_blast_time = drop_time + blast_delay # 生效时间
smoke_end_time = smoke_blast_time + self.effective_duration # 失效时间
intervals.append((smoke_blast_time, smoke_end_time)) # 存成(生效,失效)格式
2. 合并重叠时间段
多架无人机的烟幕可能重叠,需合并以避免重复计算。
intervals.sort() # 先按生效时间排序
merged = [intervals[0]] # 先拿第一个时间段当基础
for current in intervals[1:]:
last = merged[-1]
if current[0] <= last[1]: # 如果当前时间段和上一个重叠
merged[-1] = (last[0], max(last[1], current[1])) # 合并成一个长时间段
else:
merged.append(current) # 不重叠就直接加进去


