【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

 随着各种新兴技术的发展,无人机在灾后救援、物资运输、环境监测、军事作战等多个领域起着广泛的应用[1]。航迹规划是无人机执行任务中最重要的部分之一,是指在一定的约束条件下,找到一条能从起点抵达终点且安全、快速、消耗代价小的路线[2]。因此,航迹规划问题经常被当作优化问题来处理,但传统的优化方法无法得到较为精确的解。近年来,受到自然界现象的启发,国内外学者提出了许多生物智能算法如人工蜂群算法、蚁 群 算 法 、天牛须搜索算法 等。它们具有原理简 单、易收敛到最优解、参数设置简单等优点,因此在优化问题中有着广泛的应用。

灰 狼 优 化 算 法是一种群体智能搜索算法,借鉴了灰狼群体中的社会等级制度和捕食行为模式,具有较强的收敛性能和探索能力[4]。但是随着维度和复杂性的增加,GWO 算法 会出

现收敛速度慢、易陷入局部最优、寻优效果较差等问题,于是一些改进的算法被相继提出,一定程度上解决了上述问题。

 在无人机航迹规划问题中,建立无人机的规划空间环境和航迹评价指标是进行航迹规划的前提准备。

 不同的环境信息能够直接影响航迹规划的结果,也会影响执行任务的效果,因此对规划空间环境进行精准建模是十分重要的。考虑到数据存储和计算量的问题,本文采用栅格法来建立规划空间环境模型。

📚2 运行结果

部分代码:

% Calculating theta base on start and target points
theta = atand((target(2) - start(2))/(target(1) - start(1)));
% Parameter to control size of bounds
delta_d = 0;
% Number of wolfs
N = 50;
% Number of point generation for each wolf
d = 10;
% Constant for Cost_Function
mhio = 0.4;
% Optimization itteration
t_max = 100;

%% Initialization

% Transofrm point and threats to the new coordination
start_transform = Coordinate_Transfromation(start, start, theta);
target_transform = Coordinate_Transfromation(target, start, theta);
threats_tranform = threats;
for i = 1:size(threats, 1)
    threats_tranform(i, 1:3) = Coordinate_Transfromation(threats(i, 1:3), start, theta);
end

% Calculating bounds for initialization and producing N random intial points
[P_min, P_max] = UL_Bounds(threats_tranform, delta_d);

wolfs_positions = Initialization(N, d, target_transform, start_transform, P_min, P_max);

% calculating fittness of each wolf
fitness = Inf;
for i=1:N
    % wolfs_positions(:, :, i) is a set of d points' coordinates for the ith wolf
    fitness_wolf = Cost_Function(wolfs_positions(:, :, i),  threats_tranform, mhio, d);
    if fitness_wolf < fitness
        fitness = fitness_wolf;
        X_alpha = wolfs_positions(:, :, i);
        X_alpha_index = i;
    end
end

% Generating matrix for Xi(t). 
X_t = zeros(d, 3, N, t_max);

for i = 1:N
    for t = 1:t_max
        if t==1
            % We have Xi(1) for different all i. So we fill the X_t(:,:,i,1)
            % with the known positions.
            X_t(:,:,i,1) = wolfs_positions(:, :, i);
        else
            % Also since all the time for all wolfs, the x coordinate
            % should be the same, we fill it so !
            X_t(:,1,i,t) = wolfs_positions(:, 1, i);
            
            % Also the last row (d) for all X_t should be the target
            X_t(d,:,i,t) = target_transform;
        end
    end
end 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]许乐,赵文龙.基于新型灰狼优化算法的无人机航迹规划[J].电子测量技术,2022,45(05):55-61.DOI:10.19651/j.cnki.emt.2108509.

[2]芦方旭,米志超,李艾静,王海,田雨露.基于灰狼算法的无人机基站三维空间优化部署[J].兵器装备工程学报,2021,42(07):185-189.

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于优化算法的2维路径规划代码,其中使用了matplotlib库绘制路径: ```python import numpy as np import matplotlib.pyplot as plt # 优化算法 class GWO: def __init__(self, search_func, dim, search_range, n_individuals=10, max_iter=100): self.search_func = search_func self.dim = dim self.search_range = search_range self.n_individuals = n_individuals self.max_iter = max_iter def optimize(self): alpha_pos, beta_pos, delta_pos = self.init_individuals() for t in range(self.max_iter): a = 2 - 2 * t / self.max_iter # 控制参数a for i in range(self.n_individuals): # 位置更新 x = np.clip(alpha_pos + a * (beta_pos - delta_pos), self.search_range[0], self.search_range[1]) y = self.search_func(x) fitness = self.fitness_func(y) # 更新alpha, beta, delta if fitness[i] < fitness[0]: delta_pos[i] = beta_pos[i] beta_pos[i] = alpha_pos[i] alpha_pos[i] = x[i] elif fitness[i] < fitness[1]: delta_pos[i] = beta_pos[i] beta_pos[i] = x[i] elif fitness[i] < fitness[2]: delta_pos[i] = x[i] return alpha_pos # 初始化群体 def init_individuals(self): alpha_pos = np.zeros(self.dim) beta_pos = np.zeros(self.dim) delta_pos = np.zeros(self.dim) fitness = np.zeros(self.n_individuals) for i in range(self.dim): alpha_pos[i] = np.random.uniform(self.search_range[0], self.search_range[1]) beta_pos[i] = np.random.uniform(self.search_range[0], self.search_range[1]) delta_pos[i] = np.random.uniform(self.search_range[0], self.search_range[1]) y_alpha = self.search_func(alpha_pos) y_beta = self.search_func(beta_pos) y_delta = self.search_func(delta_pos) fitness[0] = self.fitness_func(y_alpha) fitness[1] = self.fitness_func(y_beta) fitness[2] = self.fitness_func(y_delta) return alpha_pos, beta_pos, delta_pos # 适应度函数 def fitness_func(self, y): return 1 / (1 + y) # 二维路径规划问题,目标函数为路径长度 def path_length(individual): n = len(individual) length = 0 for i in range(n-1): length += np.sqrt((individual[i][0] - individual[i+1][0])**2 + (individual[i][1] - individual[i+1][1])**2) return length # 绘制路径 def plot_path(individual): x = [point[0] for point in individual] y = [point[1] for point in individual] plt.plot(x, y, marker='o') plt.show() if __name__ == '__main__': # 二维坐标范围 search_range = [-10, 10] # 初始化路径 individual = np.array([[0, 0], [1, 2], [3, 1], [5, 4], [7, 5], [9, 3], [10, 10]]) # 初始化优化算法 gwo = GWO(path_length, len(individual), search_range, n_individuals=20, max_iter=100) # 优化路径 optimized_path = gwo.optimize() # 打印优化后的路径长度 print("优化后的路径长度为:", path_length(optimized_path)) # 绘制优化后的路径 plot_path(optimized_path) ``` 注意:这里的二维路径规划问题是一个简单的示例,实际应用中可能需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值