基于人工蜂群算法多无人机轨迹规划

发布时间:2024年01月12日

#生物背景

蜜蜂是一种群居生物,生物学家研究发现蜜蜂以跳舞的方式来交换蜜源信息。根据分工的不同,蜜蜂被分为三个工种:引领峰、跟随蜂、侦察蜂

侦察蜂的职责是侦察蜜源(即蜜蜂的食物),一旦某一个侦察蜂找到蜜源后,实际上它的角色就切换为引领蜂了。

找到蜜源后的引领峰以跳舞的方式向同伴传递自己找到食物的信息,这时候一些饥饿的、没有找到食物的蜜蜂就会沿着引领峰指明的方向去寻找食物,这些相信引领峰传递的信息的蜜蜂实际上就是跟随蜂这实际上属于招募蜜蜂的行为。

当引领峰寻找了多次蜜源后,发现再也找不到吃起来更香的蜜源后,引领峰说话的信服力会降低,于是跟随蜂也逐渐不相信引领峰传递的信息。

引领峰转变角色,做回侦察蜂。直到再次找到高质量的蜜源后,再做回引领峰,这实际上属于放弃蜜源的行为。

综上,蜂群实现群体智慧的最小搜索模型包括蜜源引领蜂跟随蜂侦察蜂共4个组成要素,以及招募蜜蜂放弃蜜源2种基本的行为。

#步骤

1)初始化各蜜源 ; 设定参数数量、侦察蜂搜索阈值以及最大迭代次数;
2)为蜜源分配一只引领蜂,在范围内进行随机搜索,产生新蜜源 ;
3)依据适应度评价函数,根据贪婪选择的方法确定保留的蜜源;
4)?? 轮盘赌计算引领蜂找到的蜜源被跟随的概率;
5)跟随峰采用与引领蜂相同的方式进行搜索,根据贪婪选择的方法确定保留的蜜源;
6)判断蜜源是否满足被放弃的条件。如满足,对应的引领蜂角色变为侦察蜂,否则直接转到8;
7)侦察蜂根据式(4)随机产生新蜜源;
8)判断算法是否满足终止条件,若满足则终止,输出最优解,否则转到2

#多无人机轨迹规划约束

#算法步骤

初始化初值,并对于不同长度的路径确定不同数量的节点数使节点大致呈均匀分布
产生蜜源,计算适应度
开采蜜源,贪婪算法求解
如果一个蜜源经过多次开采没被更新,超过了预定阈值 limit ,那么需抛弃这个蜜源,启动探索蜂阶段
最大迭代次数求最优适应度,求解下一个节点
B 样条平滑处理

蜂群采蜜行为

无人机代价函数优化问题

蜜源位置

可行路径节点的坐标值

蜜源的收益度大小

可行路径节点坐标的质量

寻找蜜源与采蜜的速度

无人机代价函数的求解速度

##仿真

代码结果:

distance_min =

? 264.8229

? 204.0834

? 318.8194

? 291.2678

routes_distance =

? 265.1149

? 211.3959

? 363.0191

? 309.3624

time_plan =

??? 8.8372

?? 26.8372

?? 35.8372

?? 17.8372

V_plan =

?? 30.0000

??? 7.8770

?? 10.1297

?? 17.3437

代码链接GitHub - promising76/abc-UAVplanning

部分代码如下:

clc
close all
clear all
%================================��������=============================================%
global boundary setstart setfinal node delta_H danger_xi danger_yi danger_zi danger_ri weight;
%node=12;%���?��������?�?�?�??����(?��)
L_FEN=26;%���y?��?������
delta_H=[20 40];%���(���)�??��������??�
danger_xi=[207.1 393.9];%�������������                
danger_yi=[333.3 414.1];
danger_zi=[389.9 349.2];
danger_ri=[0 0];%�������
weight=[1 0.01 0.3];%·�����?������??��н���??��
boundary=[500 0];%���?���������
setfinal=[291.8 219.8 492.4];%�����?�
setstart_ALL=[176.8 237.4 254.5;%������?����?���?�1��2��3...
             161.6 363.6 429;
             454.5 146.5 228.2;
             393.9 308.1 234.3];          
Vmin=3;%�������?������??���m/s��
Vmax=30;
Ways=2;%Ways=1?��?��??��?�??����?�?Ways=2?��?��?��?�������?��
Order=[1 4 2 3];%���?�����?��
interval=9;%���?�������?�?s��
%====================================================================================%       
lineX=size(setstart_ALL,1);

?

文章来源:https://blog.csdn.net/coldmood77/article/details/135500233
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。