【數學建模】用代碼搞定無人機煙幕:怎么擋導彈最久?

前言:歡迎各位光臨本博客,這里小編帶你直接手撕**,文章并不復雜,愿諸君耐其心性,忘卻雜塵,道有所長!!!!

解釋_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…