无人机烟幕遮蔽时间优化:基于遗传算法的代码实现
平时看军事片里的烟幕遮蔽,其实背后藏着不少参数讲究——比如无人机往哪个方向飞、飞多快、啥时候投烟幕、烟幕啥时候爆,这些都会影响'能挡住导弹多久'。我写了一段代码专门解决这个问题,能自动算出最优参数,还能直接看结果。
一、先搞懂:我们要解决啥问题?
简单说,我们的目标是:让 3 架无人机投的烟幕,在导弹飞到假目标前,'有效遮蔽时间'最长。
先明确几个关键角色的初始设定(代码里 main 函数能直接改):
- 导弹起点:
[20000, 0, 2000](可以理解为 x/y/z 坐标,单位米) - 真目标位置:
[0, 200, 0](我们要保护的目标) - 3 架无人机起点:比如'FY1'从
[17800, 0, 1800]出发,每架位置都能调
代码里用 SmokeObscurationModel 这个'模型类',把这些初始信息装进去,后续所有计算都基于这个基础。
二、核心计算:代码怎么判断'烟幕有没有用'?
烟幕不是投了就有用,得算准'啥时候生效、生效多久、能不能覆盖导弹飞来的关键期'。代码里最核心的是 calculate_effective_time 方法,我拆成 3 步说:
1. 先算单个烟幕的'有效时间段'
每架无人机投烟幕,都要算 2 个时间点:
- 烟幕生效时间:无人机飞了
drop_time秒后投烟,烟幕再等blast_delay秒爆炸,所以生效时间=drop_time + blast_delay - 烟幕失效时间:烟幕爆炸后,有效时长是
effective_duration(代码里设的 20 秒),所以失效时间= 生效时间 + 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. 合并重叠的时间段(避免重复计算)
3 架无人机的烟幕可能会'叠 buff'——比如 A 烟幕 10-15 秒生效,B 烟幕 12-18 秒生效,重叠的 2 秒不能算 2 次。
代码会把所有时间段排序,然后合并重叠部分:
intervals.sort() # 先按生效时间排序
merged = [intervals[0]] # 先拿第一个时间段当基础
for current in intervals[1:]:
last = merged[-1]
if current[0] <= last[1]: # 如果当前时间段和上一个重叠
merged[-1] = (last[0], (last[], current[]))
:
merged.append(current)


