基于杜鵑鳥鯰魚優化(Cuckoo Catfish Optimizer,CCO)算法的多個無人機協同路徑規劃(可以自定義無人機數量及起始點),MATLAB代碼

一、杜鵑鳥鯰魚優化算法

杜鵑鳥鯰魚優化(Cuckoo Catfish Optimizer,CCO)算法模擬了杜鵑鳥鯰魚的搜索、捕食和寄生慈鯛行為。該算法的早期迭代側重于執行多維包絡搜索策略和壓縮空間策略,并結合輔助搜索策略來有效限制慈鰾的逃逸空間。此階段確保對解決方案空間進行廣泛探索。在迭代的中間階段,該算法采用過渡策略促進從勘探到開發的平滑過渡,賦予了算法一定的勘探能力和開發能力。在后期階段,該算法使用混沌捕食機制在慈鳷周圍制造干擾,以提高對最優解的利用。在整個優化過程中,整合了個體的引導、寄生和死亡機制,讓個體能夠實時調整位置,提高整體收斂精度。
在這里插入圖片描述

參考文獻
[1]Tian-Lei Wang, Shao-Wei Gu, Ren-Ju Liu, Le-Qing Chen, Zhu Wang*, Zhi-Qiang Zeng*. Cuckoo Catfish Optimizer: A New Meta-Heuristic Optimization Algorithm. Artificial Intelligence Review,2024

二. 無人機路徑規劃數學模型

2.1 路徑最優性

為了提高無人機的操作效率,規劃的路徑需要在特定的應用標準下達到最優。在我們的研究中,主要關注空中攝影、測繪和表面檢查,因此選擇最小化路徑長度作為優化目標。由于無人機通過地面控制站(GCS)進行控制,飛行路徑 X i X_i Xi? 被表示為無人機需要飛越的一系列 n n n 個航路點的列表。每個航路點對應于搜索地圖中的一個路徑節點,其坐標為 P i j = ( x i j , y i j , z i j ) P_{ij} = (x_{ij}, y_{ij}, z_{ij}) Pij?=(xij?,yij?,zij?)。通過表示兩個節點之間的歐幾里得距離為 $| \overrightarrow{P_{ij}P_{i,j+1}} |,與路徑長度相關的成本 F 1 F_1 F1? 可以計算為:

F 1 ( X ) = ∑ j = 1 n ? 1 ∥ P i j P i , j + 1 → ∥ F_1(X) = \sum_{j=1}^{n-1} \| \overrightarrow{P_{ij}P_{i,j+1}} \| F1?(X)=j=1n?1?Pij?Pi,j+1? ?

2.2 安全性和可行性約束

除了最優性之外,規劃的路徑還需要確保無人機的安全操作,引導其避開操作空間中可能出現的威脅,這些威脅通常由障礙物引起。設 K K K 為所有威脅的集合,每個威脅被假設為一個圓柱體,其投影的中心坐標為 C k C_k Ck?,半徑為 R k R_k Rk?,如下圖 所示。
在這里插入圖片描述

對于給定的路徑段 ∥ P i j P i , j + 1 → ∥ \| \overrightarrow{P_{ij}P_{i,j+1}} \| Pij?Pi,j+1? ?,其相關的威脅成本與它到 C k C_k Ck? 的距離 d k d_k dk? 成正比。考慮到無人機的直徑 D D D 和到碰撞區域的危險距離 S S S,威脅成本 F 2 F_2 F2? 在障礙物集合 K K K 上計算如下:

F 2 ( X i ) = ∑ j = 1 n ? 1 ∑ k = 1 K T k ( P i j P i , j + 1 → ) , F_2(X_i) = \sum_{j=1}^{n-1} \sum_{k=1}^K T_k(\overrightarrow{P_{ij}P_{i,j+1}}), F2?(Xi?)=j=1n?1?k=1K?Tk?(Pij?Pi,j+1? ?),

其中

T k ( P i j P i , j + 1 → ) = { 0 , if? d k > S + D + R k ( S + D + R k ) ? d k , if? D + R k < d k ≤ S + D + R k ∞ , if? d k ≤ D + R k T_k(\overrightarrow{P_{ij}P_{i,j+1}}) = \begin{cases} 0, & \text{if } d_k > S + D + R_k \\ (S + D + R_k) - d_k, & \text{if } D + R_k < d_k \leq S + D + R_k \\ \infty, & \text{if } d_k \leq D + R_k \end{cases} Tk?(Pij?Pi,j+1? ?)=? ? ??0,(S+D+Rk?)?dk?,,?if?dk?>S+D+Rk?if?D+Rk?<dk?S+D+Rk?if?dk?D+Rk??

在操作過程中,飛行高度通常被限制在給定的最小和最大高度之間,例如在調查和搜索應用中,需要相機以特定的分辨率和視場收集視覺數據,從而限制飛行高度。設最小和最大高度分別為 h min h_{\text{min}} hmin? h max h_{\text{max}} hmax?。與航路點 P i j P_{ij} Pij? 相關的高度成本計算為:

H i j = { ∣ h i j ? h max + h min 2 ∣ , if? h min ≤ h i j ≤ h max ∞ , otherwise H_{ij} = \begin{cases} |h_{ij} - \frac{h_{\text{max}} + h_{\text{min}}}{2}|, & \text{if } h_{\text{min}} \leq h_{ij} \leq h_{\text{max}} \\ \infty, & \text{otherwise} \end{cases} Hij?={hij??2hmax?+hmin??,,?if?hmin?hij?hmax?otherwise?

其中 h i j h_{ij} hij? 表示相對于地面的飛行高度,如下圖所示。
在這里插入圖片描述

可以看出, H i j H_{ij} Hij? 保持平均高度并懲罰超出范圍的值。對所有航路點求和得到高度成本:

F 3 ( X ) = ∑ j = 1 n H i j F_3(X) = \sum_{j=1}^n H_{ij} F3?(X)=j=1n?Hij?

平滑成本評估轉彎率和爬升率,這對于生成可行路徑至關重要。如下圖 所示。
在這里插入圖片描述

轉彎角 ? i j \phi_{ij} ?ij? 是兩個連續路徑段 P i j ′ P i , j + 1 ′ → \overrightarrow{P'_{ij}P'_{i,j+1}} Pij?Pi,j+1? ? P i , j + 1 ′ P i , j + 2 ′ → \overrightarrow{P'_{i,j+1}P'_{i,j+2}} Pi,j+1?Pi,j+2? ? 在水平面 Oxy 上的投影之間的角度。設 k → \overrightarrow{k} k 是 z 軸方向的單位向量,投影向量可以計算為:

P i j ′ P i , j + 1 ′ → = k → × ( P i j P i , j + 1 → × k → ) \overrightarrow{P'_{ij}P'_{i,j+1}} = \overrightarrow{k} \times (\overrightarrow{P_{ij}P_{i,j+1}} \times \overrightarrow{k}) Pij?Pi,j+1? ?=k ×(Pij?Pi,j+1? ?×k )

因此,轉彎角計算為:

? i j = arctan ? ( ∥ P i j ′ P i , j + 1 ′ → × P i , j + 1 ′ P i , j + 2 ′ → ∥ P i j P i , j + 1 ′ → ? P i , j + 1 ′ P i , j + 2 ′ → ) \phi_{ij} = \arctan\left( \frac{\| \overrightarrow{P'_{ij}P'_{i,j+1}} \times \overrightarrow{P'_{i,j+1}P'_{i,j+2}} \|}{\overrightarrow{P_{ij}P'_{i,j+1}} \cdot \overrightarrow{P'_{i,j+1}P'_{i,j+2}}} \right) ?ij?=arctan ?Pij?Pi,j+1? ??Pi,j+1?Pi,j+2? ?Pij?Pi,j+1? ?×Pi,j+1?Pi,j+2? ?? ?

爬升角 ψ i j \psi_{ij} ψij? 是路徑段 P i j P i , j + 1 → \overrightarrow{P_{ij}P_{i,j+1}} Pij?Pi,j+1? ? 與其在水平面上的投影 P i j ′ P i , j + 1 ′ → \overrightarrow{P'_{ij}P'_{i,j+1}} Pij?Pi,j+1? ? 之間的角度,由下式給出:

ψ i j = arctan ? ( z i , j + 1 ? z i j ∥ P i j ′ P i , j + 1 ′ → ∥ ) \psi_{ij} = \arctan\left( \frac{z_{i,j+1} - z_{ij}}{\| \overrightarrow{P'_{ij}P'_{i,j+1}} \|} \right) ψij?=arctan ?Pij?Pi,j+1? ?zi,j+1??zij?? ?

然后,平滑成本計算為:

F 4 ( X ) = a 1 ∑ j = 1 n ? 2 ? i j + a 2 ∑ j = 1 n ? 1 ∣ ψ i j ? ψ j ? 1 ∣ F_4(X) = a_1 \sum_{j=1}^{n-2} \phi_{ij} + a_2 \sum_{j=1}^{n-1} |\psi_{ij} - \psi_{j-1}| F4?(X)=a1?j=1n?2??ij?+a2?j=1n?1?ψij??ψj?1?

其中 a 1 a_1 a1? a 2 a_2 a2? 分別是轉彎角和爬升角的懲罰系數。

2.3 總體成本函數

2.3.1 單個無人成本計算

考慮到路徑 X X X 的最優性、安全性和可行性約束, i i i 個無人機總體成本函數可以定義為以下形式:

f i ( X ) = ∑ k = 1 4 b k F k ( X i ) f_i(X) = \sum_{k=1}^4 b_k F_k(X_i) fi?(X)=k=14?bk?Fk?(Xi?)

其中 b k b_k bk? 是權重系數, F 1 ( X i ) F_1(X_i) F1?(Xi?) F 4 ( X i ) F_4(X_i) F4?(Xi?) 分別是路徑長度、威脅、平滑度和飛行高度相關的成本。決策變量是 X X X,包括 n n n 個航路點 P i j = ( x i j , y i j , z i j ) P_{ij} = (x_{ij}, y_{ij}, z_{ij}) Pij?=(xij?,yij?,zij?) 的列表,使得 P i j ∈ O P_{ij} \in O Pij?O,其中 O O O 是無人機的操作空間。根據這些定義,成本函數 F F F 是完全確定的,可以作為路徑規劃過程的輸入。

2.3.2 多無人機總成本計算

若共有 m m m 個無人機,其總成本為單個無人機成本和,計算公式如下:
f i t n e s s ( X ) = ∑ i = 1 m f i ( X ) fitness(X) = \sum_{i=1}^mf_i(X) fitness(X)=i=1m?fi?(X)
參考文獻:
[1] Phung M D , Ha Q P .Safety-enhanced UAV path planning with spherical vector-based particle swarm optimization[J].Applied Soft Computing, 2021(2):107376.DOI:10.1016/j.asoc.2021.107376.

三、部分代碼及結果

close all
clear
clc
% dbstop if all error
pop=100;%種群大小(可以修改)
maxgen=200;%最大迭代(可以修改)%% 模型建立
model=Create_Model();
UAVnum=4;%無人機數量(可以修改)  必須與無人機的起始點保持一致%% 初始化每個無人機的模型
for i=1:UAVnumModelUAV(i).model=model;
end%% 第一個無人機 起始點
start_location = [120;200;100];
end_location = [800;800;150];
ModelUAV(1).model.start=start_location;
ModelUAV(1).model.end=end_location;
%% 第二個無人機 起始點
start_location = [400;100;100];
end_location = [900;600;150];
ModelUAV(2).model.start=start_location;
ModelUAV(2).model.end=end_location;
%% 第三個無人機 起始點
start_location = [200;150;150];
end_location =[850;750;150];
ModelUAV(3).model.start=start_location;
ModelUAV(3).model.end=end_location;
%% 第四個無人機 起始點
start_location = [100;100;150];
end_location = [800;730;150];
ModelUAV(4).model.start=start_location;
ModelUAV(4).model.end=end_location;
%% 第5個無人機 起始點
% start_location = [500;100;130];
% end_location = [850;650;150];
% ModelUAV(5).model.start=start_location;
% ModelUAV(5).model.end=end_location;
% %% 第6個無人機 起始點
% start_location = [100;100;150];
% end_location =   [800;800;150];
% ModelUAV(6).model.start=start_location;
% ModelUAV(6).model.end=end_location;

五個無人機:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

四、完整MATLAB代碼見下方名片

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73602.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA_DDS_IP核

接下來對FPGA的DDS的ip核進行學習。 首先對DDS需要有些了解 DDS信號發生器采用直接數字頻率合成&#xff08;Direct Digital Synthesis&#xff0c;簡稱DDS&#xff09;技術&#xff0c;簡單來說就是 需要一個系統頻率和一個輸入的數字數據 &#xff0c;用這個系統頻率計算出…

dbeaver連接mongodb 插入日期變成了字符串

dbeaver插入mongodb數據 日期默認使用ISODate處理&#xff0c;但是插入數據以后實際上是ISODate(2025-03-03T03:25:19.640Z)字符串 INSERT INTO xxx.aaa (_id, chatId, buddyId, pId, lastChatId, inspiration, createTime, modelType, version, selectedInspiration, _class)…

微服務管理 - NACOS學習

為什么了解&#xff0c;工作中會使用這個工具進行微服務管理。 入門介紹&#xff1a; Nacos 是阿里巴巴開源的一款專注于動態服務發現、配置管理和服務管理的平臺&#xff0c;主要用于簡化云原生應用架構中的微服務開發與運維。它幫助開發者實現服務的自動注冊與發現、實時配置…

外貿獨立站相關知識掃盲

常見的外貿獨立站類型 B2B外貿獨立站&#xff1a;主要面向企業客戶&#xff0c;展示公司產品、服務和解決方案&#xff0c;促進企業間貿易。例如&#xff0c;使用WordPress搭建的B2B外貿獨立站&#xff0c;可以靈活展示產品信息、發布行業資訊、提供在線詢盤功能等。 B2C外貿…

libpng-1.6.47-windows編譯

本文操作按照《c&c開源庫編譯指南》中內容規范編寫&#xff0c;編譯環境配置、工具下載、目錄規劃&#xff0c;及更多其他開源庫編譯方法請參考該文章。 c&c開源庫編譯指南&#xff1a;https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代碼已…

[250324] Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft!| Wine 10.4 發布!

目錄 Kafka 4.0.0 版本發布&#xff1a;告別 ZooKeeper&#xff0c;擁抱 KRaft&#xff01;Wine 10.4 發布&#xff01; Kafka 4.0.0 版本發布&#xff1a;告別 ZooKeeper&#xff0c;擁抱 KRaft&#xff01; 近日&#xff0c;Apache Kafka 4.0.0 正式發布&#xff01;這是一個…

linux安裝配置Nacos

環境&#xff1a;centos7、mysql8.0、nacos2.5.1 1.下載Nacos安裝包 https://github.com/alibaba/nacos/releases?spm5238cd80.72a042d5.0.0.46bacd36C42EfG 我這邊選的是最新的穩定版本2.5.1 2. 放到 linux 服務器中解壓安裝 解壓 tar -xvf nacos-server-2.5.1.tar.gz 進入…

元宇宙浪潮下,數字孿生如何“乘風破浪”?

在當今科技飛速發展的時代&#xff0c;元宇宙的概念如同一顆璀璨的新星&#xff0c;吸引了全球的目光。元宇宙被描繪為一個平行于現實世界、又與現實世界相互影響且始終在線的虛擬空間&#xff0c;它整合了多種前沿技術&#xff0c;為人們帶來沉浸式的交互體驗。而數字孿生&…

[Effective C++]條款24:若所有參數皆需類型轉換,請為此采用non-menber函數

. 1、操作符重載&隱式類型轉換 C中&#xff0c;操作符重載可以通過成員函數或非成員函數來實現。當操作符重載是成員函數時&#xff0c;左操作數必須是該類的對象。如果左操作數不是該類的對象&#xff0c;而是需要進行隱式轉換的類型&#xff0c;編譯器將無法找到匹配的成…

C++———— Vector

一、vector的介紹及使用 1.1 vector的介紹 1.2 vector 的使用 1.21 vector的定義 演示&#xff1a; 1.22 vector iterator 的使用 1.beginend 主要作用&#xff1a;獲取第一個數據位置的迭代器和最后一個數據的下一個位置的迭代器。 演示&#xff1a; 2.rbeginrend 主要…

STL入門

STL入門 作者&#xff1a;blue 時間&#xff1a;2024.3 文章目錄 STL入門0.概述1.pair2.set(集合)3.vector4.string字符串類型5.queue&#xff0c;deque&#xff0c;priority_queue6.list的用法 0.概述 本文討論部分常用的STL的運用 1.pair pair是將2個數據組合成一組數據…

洛谷 P10463 Interval GCD Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;有 m m m 個操作分兩種&#xff1a; add ? ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k)&#xff1a;對每個 i ∈ [ l , r ] i\in[l,r] i∈[l,r] 執行 …

從聲源定位(DOA)算法仿真到工程源碼實現-第八節

一、概述 本節我們記錄在respeaker core v2 開發板上部署一個完整的聲源定位(DOA)系統&#xff0c;演示可以看第一節中的視頻。整個模塊可以分為三部分&#xff0c;第一部分為控制開發板上的LED燈顯示&#xff0c;這樣可以實時的測試算法的效果&#xff1b;第二部分為從ALSA上取…

在linux部署網站

在Linux部署網站&#xff0c;需要準備一個純凈的系統 一、系統環境準備 1.設置靜態IP地址 ? 2.關閉默認防火墻 systemctl disable firewalld --now ? 3.配置SSH密鑰登錄 4.yum update -y && reboot # 更新系統內核 5.yum install -y wget curl unzip # 安裝…

Java后端API限流秘籍:高并發的防護傘與實戰指南

目錄導航 ?? ??? 為什么需要API限流??? 主流限流算法大解析????? 阿里巴巴的限流實踐?? 四大黃金定律?? 限流策略組合拳?? 限流場景實戰?? 技術實現方案?? 最佳實踐分享?? 結語與展望?? 推薦閱讀 1. ??? 為什么需要API限流? 在高并發環境中,未…

OpenGL ES 2.0與OpenGL ES 3.1的區別

如果硬件支持且需要更高質量的圖形效果&#xff0c;推薦3.1&#xff1b;如果兼容性和開發簡便更重要&#xff0c;且效果需求不高&#xff0c;2.0更合適。不過現代車載系統可能越來越多支持3.x版本&#xff0c;所以可能傾向于使用3.1&#xff0c;但具體情況還需調查目標平臺的硬…

k8s存儲介紹(五)PV與PVC

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;持久化存儲&#xff08;Persistent Storage&#xff09;是一個非常重要的概念&#xff0c;因為 Pod 本身是無狀態的&#xff0c;重啟后會丟失數據。為了支持有狀態應用&#xff0c;Kubernetes 提供了持久化存儲的機制&a…

ORA-00600 [2662]

一、數據庫啟動報ORA-00600[2662] [oraclenode1 ora11g]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 22 14:37:00 2011Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to an idle instance.SQL> startup ORACLE instanc…

WebSocket接入SSL證書

目錄 碎碎念解決方法創建 HTTPS WebSocket 服務器創建系統服務啟動服務 碎碎念 在訪問網站時&#xff0c;使用 HTTPS 非常重要。HTTPS 協議不僅可以確保數據傳輸的安全性&#xff0c;還可以防止中間人攻擊和數據篡改等安全問題。任何沒有 SSL 證書的內容都可能會被拒絕訪問。因…

c#在work線程中怎樣更新UI控件

最近筆者調試修改項目&#xff0c;碰到了c#在work線程中怎樣更新UI控件中的場景&#xff0c;簡單總結了下&#xff0c;主要有兩個方法&#xff1a; 方法1&#xff1a;通過System.Windows.Application.Current.Dispatcher.Invoke來更新UI控件 System.Windows.Application.Curre…