前言:欢迎各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君耐其心性,忘却杂尘,道有所长!!!!

解释_chmod_命令_(3).gif

**🔥个人主页:IF’Maxue-CSDN博客

🎬作者简介:C++研发方向学习者

📖**个人专栏:
《C语言》
《C++深度学习》
《Linux》
《数据结构》
《数学建模》
**

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。不破不立,远方请直行!

文章目录

    • 一、先搞懂:我们要解决啥问题?
    • 二、核心计算:代码怎么判断“烟幕有没有用”?
      • 1. 先算单个烟幕的“有效时间段”
      • 2. 合并重叠的时间段(避免重复计算)
      • 3. 只算“导弹到达前”的有效时间
    • 三、代码优化:加了2个实用功能,结果直接看
      • 1. 跑完直接显示“最优遮蔽时长”
      • 2. 参数自动存到Excel,不用手动记
    • 四、怎么跑代码?看2个关键步骤
      • 1. 先补全“遗传优化”的核心逻辑
      • 2. 调参数平衡“速度”和“精度”
    • 五、避坑提醒
    • 最后:跑出来的结果长这样

平时看军事片里的烟幕遮蔽,其实背后藏着不少参数讲究——比如无人机往哪个方向飞、飞多快、啥时候投烟幕、烟幕啥时候爆,这些都会影响“能挡住导弹多久”。我写了一段代码专门解决这个问题,能自动算出最优参数,还能直接看结果,今天就用大白话跟大家拆解清楚。

一、先搞懂:我们要解决啥问题?

简单说,我们的目标是:让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], max(last[1], current[1]))  # 合并成一个长时间段else:merged.append(current)  # 不重叠就直接加进去

3. 只算“导弹到达前”的有效时间

烟幕再久,导弹都已经炸了也没用。所以要先算导弹飞到假目标的时间(missile_arrival_time方法):
“导弹飞的距离 ÷ 导弹速度(代码里设300m/s)”,比如从20000米外飞过来,大概要60多秒。

然后只算“烟幕时间段”和“导弹到达前”的交集:

total = 0
for interval in merged:start = max(0, interval[0])  # 烟幕生效时间不能早于0end = min(missile_arrival, interval[1])  # 烟幕失效时间不能晚于导弹到达if start < end:  # 只要有重叠,就加这段时间total += end - start
return total  # 这就是最终的“有效遮蔽时间”

三、代码优化:加了2个实用功能,结果直接看

原来的代码跑起来看不到关键结果,我改了两处,用起来更方便:

1. 跑完直接显示“最优遮蔽时长”

代码里的GeneticOptimizer(遗传优化器),会像“试错进化”一样,不断调整无人机参数(方向、速度、投放时间、起爆延迟),找到最优解。

现在跑完会直接打印结果,比如:

# 优化器返回最优参数和对应时间
best_individual, best_time = optimizer.optimize()
print(f"最优遮蔽时长:{best_time:.2f}秒")  # 直接显示,比如“18.72秒”

2. 参数自动存到Excel,不用手动记

3架无人机的最优参数(比如FY1要朝30度飞、速度120m/s),会自动存到result2.xlsx里,打开就能看:

df = pd.DataFrame({'无人机ID': ['FY1', 'FY2', 'FY3'],'方向角度(度)': best_individual[0::4],  # 每4个参数对应1架无人机'飞行速度(m/s)': best_individual[1::4],'投放时间(s)': best_individual[2::4],'起爆延迟(s)': best_individual[3::4]
})
df.to_excel('result2.xlsx', index=False)  # 保存到Excel

四、怎么跑代码?看2个关键步骤

1. 先补全“遗传优化”的核心逻辑

代码里optimize方法有个小缺口——“选择、交叉、变异”这三步没写全(这是遗传算法的核心,用来“筛选好参数、生成新参数”)。补全示例可以参考:

# 补全选择:选效果好的参数留下
fitnesses = [self.evaluate(ind) for ind in population]
# 按适应度(有效时间)排序,选前50%
sorted_pop = sorted(zip(population, fitnesses), key=lambda x: x[1], reverse=True)
selected = [ind for ind, _ in sorted_pop[:self.pop_size//2]]# 补全交叉:两个好参数“混合”出新品
offspring = []
for i in range(0, len(selected), 2):parent1 = selected[i]parent2 = selected[i+1] if i+1 < len(selected) else parent1# 随机选个位置交叉参数cross_pos = random.randint(1, len(parent1)-1)child = parent1[:cross_pos] + parent2[cross_pos:]offspring.append(child)# 补全变异:偶尔改个参数,避免“钻牛角尖”
for ind in offspring:if random.random() < 0.1:  # 10%的变异概率param_idx = random.randint(0, len(ind)-1)low, high = self.param_ranges[param_idx]ind[param_idx] = random.uniform(low, high)# 新种群 = 选出来的好参数 + 新生成的参数
population = selected + offspring

2. 调参数平衡“速度”和“精度”

第一次跑可以先设小一点规模,避免等太久:

  • pop_size=50(每次试50组参数,默认150)
  • generations=50(试50轮,默认80)

比如改优化器初始化:

optimizer = GeneticOptimizer(model, pop_size=50, generations=50)

五、避坑提醒

  1. 方向角度要转弧度:代码里已经用np.radians(i_param)把“度”转成“弧度”(数学计算需要),不用自己再改;
  2. 运行时间可能长:如果参数设得大(比如150种群、80世代),建议用多进程加速(可以搜“Python多进程计算”);
  3. 先小规模测试:第一次跑先试pop_size=30generations=30,确认代码能跑通,再调大参数追求精度。

最后:跑出来的结果长这样

最优遮蔽时长:18.72秒
参数已保存到result2.xlsx

打开Excel就能看到每架无人机的具体参数——比如FY1要朝45度飞,速度130m/s,10秒后投烟幕,5秒后起爆,这样3架配合起来,能挡导弹近19秒。

如果想调整场景(比如导弹速度变了、无人机起点改了),直接改main函数里的初始参数就行,代码会自动重新算最优解~

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux Kbuild详解关于fixdep、Q、quiet、escsq

linux Kbuild详解关于if_changed_rule的any-prereq和arg-check原理及info调试关于fixdep没有展开&#xff0c;这里说下。 文章目录1. escsq2. Q、quiet2. 1 make V(0、1、2&#xff09;2. 2 make V(0、1)来控制Q、quiet3. fixdep3. 1 fixdep是什么3. 2 fixdep为什么3.2.1 .conf…

notepad++ 正则表达式

在 Notepad 中&#xff0c;正则表达式&#xff08;Regular Expressions, Regex&#xff09; 是一个强大的搜索和替换工具&#xff0c;可以高效地处理文本。以下是 Notepad 正则表达式 的指南&#xff1a;1. 如何在 Notepad 中使用正则表达式打开搜索窗口&#xff1a;快捷键 Ctr…

MySQL Cluster核心优缺点

MySQL Cluster 是 MySQL 官方提供的 分布式、内存优先、高可用 的数据库解决方案&#xff08;基于 NDB 存储引擎&#xff09;。它采用 Share-Nothing 架构&#xff0c;数据自动分片&#xff08;Sharding&#xff09;并分布在多个节点上&#xff0c;适用于需要极高可用性和实时性…

训练+评估流程

训练评估流程1、要求2、训练评估&#xff08;PyTorch TensorBoard &#xff09;完整代码&#xff08;单文件示例&#xff09;运行方法功能对应表3、pytorch自定义评估要继承哪个类&#xff1f;4、HF Trainer和SB35、 汇总1. PyTorch Lightning TensorBoard ModelCheckpoint …

【开题答辩全过程】以 基于Android的点餐系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【音视频】Http-FLV 介绍

一、Http-FLV 原理 HTTP-FLV 是基于 HTTP 协议的 FLV&#xff08;Flash Video&#xff09;流媒体传输方式。它使用 HTTP 协议而不是传统的 RTMP 协议来传输 FLV 格式的视频流。HTTP-FLV 在 Web 视频直播场景中得到了广泛应用&#xff0c;尤其是在不支持或不希望使用 RTMP 协议的…

uniapp vue页面传参到webview.nvue页面的html或者另一vue中

在app内部使用 uni.$emit(collectiones, { data: gx });传到webview.nvue页面 在webview.nvue页面接受 uni.$on(collectiones, (data) > {console.log(接收到的数据:, data.data);});使用evalJS方法 nvue webview通信示例 这块使用receiveMessageFromNvue方法这样传入的 u…

美团大模型“龙猫”登场,能否重塑本地生活新战局?

美团大模型“龙猫”登场&#xff0c;能否重塑本地生活新战局&#xff1f; 美团大模型登场&#xff1a;行业投下重磅炸弹 在大模型技术迅猛发展的当下&#xff0c;每一次新模型的发布都如投入湖面的石子&#xff0c;激起层层涟漪。美团推出的龙猫大模型 LongCat-Flash&#xff0…

shell(十三)参数代换

shell参数代换xargs. 产生命令的参数1. cut -d : -f 1 /etc/passwd | head -n 3 | xargs finger2. 执行前询问用户cut -d : -f 1 /etc/passwd | head -n 3 | xargs -p finger如果直接按回车就退出3. 指定查阅参数个数cut -d : -f 1 /etc/passwd | xargs -p -n 5 finger4. 指定遇…

Proteus 仿真 + STM32CubeMX 协同开发全教程:从配置到仿真一步到位

为帮助你精准掌握「Proteus 仿真 STM32CubeMXSTM32F103R6」的协同开发流程&#xff0c;本文将聚焦该芯片的特性&#xff0c;从工具适配、分步实操到进阶案例&#xff0c;用富文本格式清晰呈现细节&#xff0c;尤其适合新手入门 32 位单片机开发&#xff1a;ProteusSTM32CubeMX…

WIN10+ubuntu22.04.05双系统装机教程

最近DIY了一台5070TI显卡主机&#xff0c;目的是跑IsaacSim5.0仿真&#xff0c;记录双系统装机过程。 1.Ubuntu22.04.05系统盘制作 参考教程&#xff1a;01_【U盘制作ubuntu22.04启动盘并为电脑安装系统记录】_制作ubuntu22.04安装u盘-CSDN博客 U盘因为是64G的&#xff0c;而…

构建高可用二级缓存系统

二级缓存机制原理详解1. 整体架构MyBatis-Plus二级缓存采用装饰器模式实现&#xff0c;核心组件包括&#xff1a;‌Cache接口‌&#xff1a;定义缓存基本操作‌PerpetualCache‌&#xff1a;基础缓存实现&#xff08;HashMap&#xff09;‌装饰器‌&#xff1a;如LruCache、Fif…

MacOS微信双开,亲测有效

本机配置打开终端运行以下命令 第一步&#xff1a;sudo cp -R /Applications/WeChat.app /Applications/WeChat2.app第二步&#xff1a;sudo /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.tencent.xinWeChat2" /Applications/WeChat2.app/Contents/Info…

Drupal XSS漏洞复现:原理详解+环境搭建+渗透实践(CVE-2019-6341)

目录 一、Drupal XSS漏洞 二、环境搭建 1、确保系统已安装 Docker 和 Docker-Compose 2、下载 Vulhub 3、进入漏洞环境 4、启动漏洞环境 5、查看环境状态 6、初始化Drupal环境 &#xff08;1&#xff09;访问 Drupal 安装页面 &#xff08;2&#xff09;完成图形化安…

Redis复制延迟全解析:从毫秒到秒级的优化实战指南

Redis主从延迟飙升导致数据不一致&#xff1f;订单丢失、缓存穿透频发&#xff1f;本文深入剖析8大复制延迟元凶&#xff0c;并提供解决方案&#xff0c;让你的复制延迟从秒级降到毫秒级&#xff01; 一、复制延迟:分布式系统的隐形杀手 ⚠️ 什么是复制延迟&#xff1f; 当主…

数据预处理与特征工程全流程指南:数据清洗、缺失值填补、类别特征编码、特征缩放归一化、特征选择与降维(PCA/LDA)实战解析

1. 数据预处理与特征工程 “数据清洗、缺失值填补、类别特征编码、特征缩放/归一化、特征选择与降维&#xff08;PCA、LDA&#xff09;” 等流程&#xff0c;虽然被反复提到&#xff0c;但要在复杂的实际数据集中一步步落实&#xff0c;难度很大。 摘要 在机器学习与深度学习…

小迪安全v2023学习笔记(七十九讲)—— 中间件安全IISApacheTomcatNginxCVE

文章目录前记服务攻防——第七十九天中间件安全&IIS&Apache&Tomcat&Nginx&弱口令&不安全配置&CVE中间件 - IIS-短文件&解析&蓝屏等中间件 - Nginx-文件解析&命令执行等常见漏洞介绍漏洞复现中间件 - Apache-RCE&目录遍历&文件…

《云原生微服务治理进阶:隐性风险根除与全链路能力构建》

云原生微服务架构已成为企业支撑业务快速迭代的核心载体&#xff0c;但治理能力的滞后却常常成为制约发展的短板。许多企业在完成服务容器化、部署自动化后&#xff0c;便陷入了“架构先进但治理粗放”的困境—服务数量激增导致依赖关系失控&#xff0c;流量波动加剧引发资源配…

因泰立科技:用激光雷达重塑智能工厂物流生态

应对AGV碰撞困局——激光雷达如何重塑智能工厂物流在现代化工厂中&#xff0c;AGV&#xff08;自动引导车&#xff09;与移动机器人已成为提升生产效率的重要设备。然而&#xff0c;这些智能设备在忙碌的工厂环境中&#xff0c;却时常面临碰撞的困扰。这不仅影响了生产效率&…

Remove.bg:精准自动抠图工具,高效解决图片去背景需求

有没有做设计时被 “抠图去背景” 搞到崩溃的朋友&#xff1f;上次小索奇帮同事做活动海报&#xff0c;要把人物图从复杂背景里抠出来&#xff0c;用 PS 选了半天钢笔工具&#xff0c;头发丝还是漏一块缺一块&#xff0c;折腾半小时都没弄好 —— 后来被设计圈的朋友安利了 Rem…