基于混合离散浣熊优化算法(Hybrid Discrete Coati Optimization Algorithm, HDCOA)的高原森林灭火多无人机路径规划,MATLAB代码
无人机路径规划问题(Unmanned Aerial Vehicle Path Planning Problem, UAV-PP)旨在为多架无人机规划最优飞行路线,使其从各自起点出发,遍历所有指定目标点后返回,最小化总飞行距离或时间。该问题可建模为多旅行商问题(Multiple Traveling Salesman Problem, MTSP),属于 NP-难问题。本文提出混合离散浣熊优化算法(Hybrid Discrete Coati Optimization Algorithm, HDCOA)对该问题进行求解。
1. 问题定义与符号说明
考虑一个完全无向图 G=(V,A)G = (V, A)G=(V,A),其中 V={1,2,…,n}V = \{1, 2, \dots, n\}V={1,2,…,n} 为目标点(或节点)集合,AAA 为可行路径边集。每条边 (i,j)(i, j)(i,j) 的权重为欧氏距离:
dij=(xi−xj)2+(yi−yj)2(1) d_{ij} = \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2} \tag{1} dij=(xi−xj)2+(yi−yj)2(1)
设共有 mmm 架无人机,每架无人机从各自起点(可相同或不同)出发,访问若干目标点后返回起点。路径规划的目标是将 VVV 划分为 mmm 个非空子集 {S1,S2,…,Sm}\{S_1, S_2, \dots, S_m\}{S1,S2,…,Sm},并为每个子集找到一条哈密顿回路,使得所有回路的总长度最小:
f=∑t=1m(ddepott,firstt(t)+∑k=1nt−1dk,k+1(t)+dlastt,depott(t))(2) f = \sum_{t=1}^{m} \left( d_{\text{depot}_t, \text{first}_t}^{(t)} + \sum_{k=1}^{n_t - 1} d_{k, k+1}^{(t)} + d_{\text{last}_t, \text{depot}_t}^{(t)} \right) \tag{2} f=t=1∑m(ddepott,firstt(t)+k=1∑nt−1dk,k+1(t)+dlastt,depott(t))(2)
其中 ntn_tnt 为第 ttt 架无人机需要访问的目标点数量,depott\text{depot}_tdepott 为其起点。为平衡各无人机工作量,还需最小化路径长度的差异:
fd=∑i=1m∑j=i+1m∣Ri−Rj∣(3) f_d = \sum_{i=1}^{m} \sum_{j=i+1}^{m} |R_i - R_j| \tag{3} fd=i=1∑mj=i+1∑m∣Ri−Rj∣(3)
式中 RiR_iRi 为第 iii 架无人机的总路径长度。
2. 目标点分配与问题分解策略
2.1 扇形划分方法
为将目标点均匀分配给 mmm 架无人机,采用扇形划分方法。以所有目标点的中心为原点 OOO,选取一条参考线(如水平线),计算每个目标点与原点连线的夹角 θi\theta_iθi:
θi=arctan(yi−Oyxi−Ox)(4) \theta_i = \arctan\left( \frac{y_i - O_y}{x_i - O_x} \right) \tag{4} θi=arctan(xi−Oxyi−Oy)(4)
按夹角大小对目标点排序后,依次划分给各无人机,确保每架无人机所辖目标点在空间上均匀分布,从而间接实现路径长度均衡。
2.2 K-近邻(KNN)子问题划分
当某架无人机需访问的目标点数量超过阈值 Kth=150K_{\text{th}} = 150Kth=150 时,采用 KNN 算法进一步划分。对于目标点 ppp,其 KNN 分类规则为:
class(p)=argmaxc∑q∈KNN(p)1(q∈c)(5) \text{class}(p) = \arg\max_{c} \sum_{q \in \text{KNN}(p)} \mathbf{1}(q \in c) \tag{5} class(p)=argcmaxq∈KNN(p)∑1(q∈c)(5)
其中 KNN(p)\text{KNN}(p)KNN(p) 表示与 ppp 距离最近的 kkk 个目标点(本文取 k=150k=150k=150),1(⋅)\mathbf{1}(\cdot)1(⋅) 为指示函数。通过该划分,将大规模问题降维为多个小规模子问题分别求解,降低计算复杂度。
3. 离散化浣熊优化行为建模
原始 COA 中的捕猎(探索)与逃逸(开发)行为被重新设计为离散路径操作,用于更新无人机的飞行路线。
3.1 捕猎阶段(探索阶段)
原始 COA 中,浣熊通过攀爬树木恐吓鬣蜥,使其随机坠落。对应的连续更新公式为:
Xip1:xi,jp1=xi,j+r⋅(Iguanaj−I⋅xi,j),i=1,2,…,⌊N2⌋(6) X_{i}^{p1}: x_{i,j}^{p1} = x_{i,j} + r \cdot (Iguana_j - I \cdot x_{i,j}), \quad i = 1,2,\dots,\left\lfloor \frac{N}{2} \right\rfloor \tag{6} Xip1:xi,jp1=xi,j+r⋅(Iguanaj−I⋅xi,j),i=1,2,…,⌊2N⌋(6)
在 HDCOA 中,该公式被重写为离散形式:
Xip1=xi⊕(Q⊗Iguana),i=1,2,…,N2(7) X_i^{p1} = x_i \oplus \left( Q \otimes Iguana \right), \quad i = 1,2,\dots,\frac{N}{2} \tag{7} Xip1=xi⊕(Q⊗Iguana),i=1,2,…,2N(7)
其中:
- IguanaIguanaIguana 为当前全局最优路线(目标点序列);
- ⊗\otimes⊗ 表示从 IguanaIguanaIguana 中随机选取一个子序列,选取比例为 QQQ;
- ⊕\oplus⊕ 表示将选取的子序列插入到当前解 xix_ixi 中,替换相应长度的子段;
- QQQ 随迭代次数单调递减:
Q=1−e1−tT,t=1,2,…,T(8) Q = 1 - e^{\frac{1 - t}{T}}, \quad t = 1,2,\dots,T \tag{8} Q=1−eT1−t,t=1,2,…,T(8)
式中 ttt 为当前迭代次数,TTT 为最大迭代次数。该机制保证了算法在早期更多保留全局最优路线的结构,后期则逐步增强局部扰动。
3.2 Swap 与 Shift 算子
为实现离散空间中的位置更新,定义以下两个算子:
- Swap 算子:随机选择两个不同位置 uuu 和 vvv,交换其目标点:
swap(x,u,v):x[u]↔x[v](9) \text{swap}(x, u, v): x[u] \leftrightarrow x[v] \tag{9} swap(x,u,v):x[u]↔x[v](9)
- Shift 算子:随机选择一个子序列 [a,b][a, b][a,b] 和一个插入位置 ccc(c∉[a,b]c \notin [a, b]c∈/[a,b]),将该子序列移动到 ccc 之后:
shift(x,[a,b],c):x=x[1:a−1]⊕x[b+1:c]⊕x[a:b]⊕x[c+1:end](10) \text{shift}(x, [a,b], c): x = x[1:a-1] \oplus x[b+1:c] \oplus x[a:b] \oplus x[c+1:\text{end}] \tag{10} shift(x,[a,b],c):x=x[1:a−1]⊕x[b+1:c]⊕x[a:b]⊕x[c+1:end](10)
在捕猎阶段,前 N1N_1N1 个个体使用式 (7) 进行更新,其余个体使用 Swap 算子进行更新。
3.3 逃逸阶段(开发阶段)
对应浣熊被捕食者追赶时的随机逃逸行为。该阶段所有个体均使用 Shift 算子进行更新:
Xip2=shift(xi,[a,b],c)(11) X_i^{p2} = \text{shift}(x_i, [a,b], c) \tag{11} Xip2=shift(xi,[a,b],c)(11)
若新路线的适应度(总路径长度)优于原路线,则接受更新,否则保留原解。该操作增强了算法的局部搜索能力,有助于精细化调整无人机路径。
4. 局部最优逃逸机制:Destroy & Rebuild (D&R) 算子
为防止算法陷入局部最优,本文提出了 D&R 算子。其核心思想是破坏当前劣质路线中的长边结构,并重建更优的子路径。
4.1 破坏阶段
选择当前种群中适应度最差的路线 xworstx_{\text{worst}}xworst。计算该路线中所有边的长度,并找出最长的 ddd 条边。其中 ddd 由下式确定:
d=⌊point_numberk⌋(12) d = \left\lfloor \frac{\text{point\_number}}{k} \right\rfloor \tag{12} d=⌊kpoint_number⌋(12)
这里 kkk 为 KNN 算法中的邻居数(本文取 k=150k=150k=150)。将这 ddd 条边从路线中移除,从而将原路线分割为 ddd 个独立的子段。
4.2 重建阶段
对每个子段分别求解其最优哈密顿回路(可采用贪心或局部搜索方法),然后将这 ddd 个回路按顺序连接,形成新的完整路线 xworst′x_{\text{worst}}'xworst′。最后用 2-opt 算子对新路线进行局部优化。
5. 2-opt 路径优化算子
2-opt 算子用于消除路线中的交叉边,这在无人机实际飞行中可避免不必要的转弯和绕路。对于路线中的两条边 (i,i+1)(i, i+1)(i,i+1) 和 (j,j+1)(j, j+1)(j,j+1)(i<ji < ji<j),若它们相交,则反转子路径 [i+1,j][i+1, j][i+1,j]:
x=x[1:i]⊕reverse(x[i+1:j])⊕x[j+1:end](13) x = x[1:i] \oplus \text{reverse}(x[i+1:j]) \oplus x[j+1:\text{end}] \tag{13} x=x[1:i]⊕reverse(x[i+1:j])⊕x[j+1:end](13)
该操作可保证路线不自交,从而缩短总飞行距离。
6. 算法整体流程伪代码
Algorithm: HDCOA for Unmanned Aerial Vehicle Path Planning
Input: 目标点集合 V,无人机数量 m,种群规模 N,最大迭代次数 T
Output: 每架无人机的最优飞行路线 {route_1, ..., route_m}
1: 使用扇形划分方法将 V 划分为 m 个子集,分配给各无人机
2: for each 无人机 t = 1 to m:
3: 使用 KNN 生成 NI 个初始路线,其余 N-NI 个随机初始化
4: for iter = 1 to T/m:
5: 更新当前全局最优路线 Iguana
6: // 捕猎阶段(探索)
7: for i = 1 to N1:
8: X_i_new = X_i ⊕ (Q ⊗ Iguana) // 式(7)
9: if fitness(X_i_new) < fitness(X_i) then X_i = X_i_new
10: for i = N1+1 to N:
11: X_i_new = swap(X_i) // 式(9)
12: if fitness(X_i_new) < fitness(X_i) then X_i = X_i_new
13: // 逃逸阶段(开发)
14: for i = 1 to N:
15: X_i_new = shift(X_i) // 式(10)
16: if fitness(X_i_new) < fitness(X_i) then X_i = X_i_new
17: // 局部最优检测与逃逸
18: if 最优路线连续 50 代未改善 then
19: 对最差路线 x_worst 执行 D&R 算子 // 式(12)
20: 对 x_worst 执行 2-opt 优化 // 式(13)
21: end if
22: end for
23: end for
24: 输出所有无人机的最优飞行路线
7. 时间复杂度分析
HDCOA 求解无人机路径规划的时间复杂度由以下部分构成:
- 扇形划分:O(n)O(n)O(n);
- 距离矩阵计算:O(n2)O(n^2)O(n2);
- 种群初始化:O(N)O(N)O(N);
- 每代操作(swap / shift):O(N⋅n)O(N \cdot n)O(N⋅n);
- D&R 与 2-opt 算子:O(n2)O(n^2)O(n2)。
因此,总时间复杂度为:
O(T⋅N⋅n+n2)(14) O\left( T \cdot N \cdot n + n^2 \right) \tag{14} O(T⋅N⋅n+n2)(14)
其中 TTT 为总迭代次数,NNN 为种群规模,nnn 为目标点数量。该复杂度与主流离散元启发式算法相当,能够处理大规模无人机路径规划问题(目标点数量可达数万个)。
8. 部分MATLAB 及结果
clear all
close all
clc
%% ========================================== Initialize ==============================================================
N = 30;%种群
T = 500;%最大迭代数
m = 8; % 机器人个数
[Dimension,data,NodeWeight,Name] = GetTSPData('./tsp/a280.tsp');%导入数据集
city_coord = data(:,2:3); % City coordinates
city_num = size(city_coord,1); % Number of cities
k = ceil(city_num/m) ; % Divide the number of cities equally


9. 完整MATLAB见下方名片
更多推荐


所有评论(0)