多无人机协同三维路径规划的蛇优化算法Snake Optimizer(提供MATLAB代码)

176 篇文章 16 订阅
144 篇文章 81 订阅

一、蛇优化算法简介

蛇优化算法(Snake Optimizer,SO)由Fatma A. Hashim和Abdelazim G. Hussien于2022年提出,该算法思路新颖,快速高效,模拟了蛇的觅食和繁殖行为。

在这里插入图片描述

二、蛇优化算法原理

雄性蛇和雌性蛇之间交配的发生受到某些因素的影响。蛇在春末和初夏交配,那时温度低。但交配过程不仅取决于温度,还取决于食物的充足性。如果温带低,食物充足;雄性蛇会互相争斗,以吸引雌性的注意力。雌性有权决定是否交配。如果发生交配,雌性开始在巢穴或洞穴中产卵,一旦卵出现,它就会离开。
在这里插入图片描述

蛇优化算法受蛇交配行为的启发,如果温度低且食物充足,则会发生交配,否则蛇只会寻找食物或吃掉剩余的食物。蛇优化算法分为两个阶段即全局探索或局部开发。探索取决于环境因素,即寒冷的地方和食物,在这种情况下,蛇只在周围寻找食物。对于开发,此阶段包括许多过渡阶段,以使全局更有效率。在食物可用但温度高的情况下,蛇只会专注于吃可用的食物。如果食物可用并且该区域寒冷,则会导致交配过程的发生;交配过程进行战斗模式或交配模式。在战斗模式中,每个雄性都会为获得最好的雌性而战,每个雌性都会尝试选择最好的雄性。在交配模式下,每对配对之间发生交配与食物数量的可用性有关。如果交配过程发生,则雌性产卵并将其孵化成新的蛇。SO将群体分成两个相等的群体即雄性和雌性。

2.1全局搜索(无食物)

如果Q<0.25,蛇通过选择任何随机位置来搜索食物,并更新它们的位置。

雄性蛇位置更新:
在这里插入图片描述

雌性蛇位置更新:
在这里插入图片描述

2.2局部搜索(有食物)

如果Q>0.25,且温度>0.6,则蛇只会向食物移动:
在这里插入图片描述

如果Q>0.25,且温度<0.6,则蛇将处于战斗模式或交配模式

2.2.1战斗模式

雄性蛇位置更新:
在这里插入图片描述

雌雄蛇位置更新:
在这里插入图片描述

2.2.2交配模式

雄性蛇位置更新:

在这里插入图片描述

雌雄蛇位置更新:
在这里插入图片描述

三、蛇优化算法流程

在这里插入图片描述

四、无人机(UAV)三维路径规划

单个无人机三维路径规划数学模型参考如下文献:

Phung M D , Ha Q P . Safety-enhanced UAV Path Planning with Spherical Vector-based Particle Swarm Optimization[J]. arXiv e-prints, 2021.

每个无人机的目标函数由路径长度成本,安全性与可行性成本、飞行高度成本和路径平滑成本共同组成:

4.1路径长度成本

路径长度成本由相邻两个节点之间的欧氏距离和构成,其计算公式如下:
在这里插入图片描述

4.2路径安全性与可行性成本

在这里插入图片描述

路径安全性与可行性成本通过下式计算:

在这里插入图片描述

4.3路径飞行高度成本

在这里插入图片描述

飞行高度成本通过如下公式计算所得:
在这里插入图片描述
在这里插入图片描述

4.4路径平滑成本

在这里插入图片描述

投影向量通过如下公式计算:

在这里插入图片描述

转弯角度的计算公式为:
在这里插入图片描述

爬坡角度的计算公式为:

在这里插入图片描述

平滑成本的计算公式为:
在这里插入图片描述

4.5总成本(目标函数)

在这里插入图片描述

总成本由最优路径成本,安全性与可行性成本、飞行高度成本和路径平滑成本的线性加权所得。其中,b为加权系数。

五、实验结果

在三维无人机路径规划中,无人机的路径由起点,终点以及起始点间的点共同连接而成。因此,自变量为无人机起始点间的各点坐标,每个无人机的目标函数为总成本(公式9)。本文研究两个无人机协同路径规划,总的目标函数为两个无人机的总成本之和。

5.1参数设置

(1)9个柱状障碍物的位置及半径:

R1=60;  % Radius 60
x1 = 350; y1 = 500; z1 = 100; % center


R2=70;  % Radius 70
x2 = 600; y2 = 200; z2 = 150; % center

R3=80;  % Radius 80
x3 = 500; y3 = 350; z3 = 150; % center

R4=70;  % Radius 70
x4 = 350; y4 = 200; z4 = 150; % center

R5=70;  % Radius 70 
x5 = 700; y5 = 550; z5 = 150; % center


R6=80;  % Radius 80
x6 = 650; y6 = 750; z6 = 150; % center

R7=70;  % Radius 70
x7 = 800; y7 = 400; z7 = 150; % center

R8=50;  % Radius 50
x8 = 300; y8 = 350; z8 = 100; % center

R9=50;  % Radius 50
x9 = 500; y9 = 600; z9 = 100; % center 

(2)起始点位置:

第一个无人机起始点:
start_location = [150;200;150];
end_location = [800;800;150];
第二个无人机起始点:
start_location = [400;100;150];
end_location = [900;550;150];

(3)每个无人机起始点间共12个待求点。

(4)加权系数b=[5 1 10 1]。

(5)SO种群大小为50,最大迭代次数为5000。

5.2求解结果

独立运行三次,得到三次参考方案如下:(黑色正方形是起点,黑色圆圈是终点,共有9个柱状障碍物,红线为优化得到的第一个无人机路线,粉线为优化得到的第二个无人机路线。

5.2.1结果一

在这里插入图片描述
在这里插入图片描述

5.2.2结果二

在这里插入图片描述
在这里插入图片描述

5.2.3结果三

在这里插入图片描述
在这里插入图片描述

六、参考代码

参考代码联系博主。

  • 5
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蚁群算法是一种模拟蚂蚁寻找食物路径的启发式优化算法,常用于解决路径规划问题。在三维路径规划中,蚁群算法同样可以应用。下面是一个使用Python实现蚁群算法进行三维路径规划的示例代码: ```python import numpy as np class AntColonyOptimizer: def __init__(self, num_ants, num_iterations, alpha=1, beta=2, rho=0.5): self.num_ants = num_ants self.num_iterations = num_iterations self.alpha = alpha self.beta = beta self.rho = rho def optimize(self, num_nodes, distance_matrix): pheromone_matrix = np.ones((num_nodes, num_nodes)) best_path = None best_path_length = float('inf') for _ in range(self.num_iterations): ant_paths = self.generate_ant_paths(num_nodes, distance_matrix, pheromone_matrix) pheromone_matrix = self.update_pheromone_matrix(ant_paths, pheromone_matrix) current_best_path = min(ant_paths, key=lambda path: self.calculate_path_length(path, distance_matrix)) current_best_path_length = self.calculate_path_length(current_best_path, distance_matrix) if current_best_path_length < best_path_length: best_path = current_best_path best_path_length = current_best_path_length return best_path def generate_ant_paths(self, num_nodes, distance_matrix, pheromone_matrix): ant_paths = [] for _ in range(self.num_ants): visited = [False] * num_nodes current_node = 0 path = [current_node] while len(path) < num_nodes: unvisited_nodes = [node for node in range(num_nodes) if not visited[node]] next_node = self.choose_next_node(current_node, unvisited_nodes, pheromone_matrix, distance_matrix) path.append(next_node) visited[next_node] = True current_node = next_node ant_paths.append(path) return ant_paths def choose_next_node(self, current_node, unvisited_nodes, pheromone_matrix, distance_matrix): pheromone_values = pheromone_matrix[current_node][unvisited_nodes] heuristic_values = 1.0 / distance_matrix[current_node][unvisited_nodes] ** self.beta probabilities = pheromone_values ** self.alpha * heuristic_values probabilities /= np.sum(probabilities) next_node = np.random.choice(unvisited_nodes, p=probabilities) return next_node def update_pheromone_matrix(self, ant_paths, pheromone_matrix): updated_pheromone_matrix = np.zeros_like(pheromone_matrix) for path in ant_paths: path_length = self.calculate_path_length(path, distance_matrix) for i in range(len(path) - 1): current_node = path[i] next_node = path[i + 1] updated_pheromone_matrix[current_node][next_node] += 1.0 / path_length updated_pheromone_matrix *= self.rho updated_pheromone_matrix += pheromone_matrix return updated_pheromone_matrix def calculate_path_length(self, path, distance_matrix): length = 0 for i in range(len(path) - 1): current_node = path[i] next_node = path[i + 1] length += distance_matrix[current_node][next_node] return length # 示例用法 num_nodes = 10 distance_matrix = np.random.rand(num_nodes, num_nodes) optimizer = AntColonyOptimizer(num_ants=10, num_iterations=100) best_path = optimizer.optimize(num_nodes, distance_matrix) print(best_path) ``` 这是一个基本的蚁群算法的实现,可以通过调整参数和优化策略来进一步提升算法性能。相关问题如下: 相关问题: 1. 如何调整蚁群算法的参数来提高路径规划的效果? 2. 这个示例中使用了随机生成的距离矩阵,如果有实际的节点坐标和距离信息,如何进行输入? 3. 蚁群算法的优势和局限性是什么?有没有其他类似的路径规划算法推荐? 4. 如何在三维路径规划中考虑障碍物或者其他限制条件?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值