【路径规划】人工蜂群算法之多无人机三维路径规划【Matlab 156期】

一、简介

蜜蜂采蜜
自然界中的蜜蜂总能在任何环境下以极高的效率找到优质蜜源,且能适应环境的改变。蜜蜂群的采蜜系统由蜜源、雇佣蜂、非雇佣蜂三部分组成,其中一个蜜源的优劣有很多要素,如蜜源花蜜量的大小、离蜂巢距离的远近、提取的难易程度等;雇佣蜂和特定的蜜源联系并将蜜源信息以一定概率形式告诉同伴;非雇佣蜂的职责是寻找待开采的蜜源,分为跟随蜂和侦查蜂两类,跟随峰是在蜂巢等待而侦查蜂是探测蜂巢周围的新蜜源。蜜蜂采蜜时,蜂巢中的一部分蜜蜂作为侦查蜂,不断并随机地在蜂巢附近寻找蜜源,如果发现了花蜜量超过某个阈值的蜜源,则此侦査蜂变为雇佣蜂开始釆蜜,采蜜完成后飞回蜂巢跳摇摆舞告知跟随峰。摇摆舞是蜜蜂之间交流信息的一种基本形式,它传达了有关蜂巢周围蜜源的重要信息如蜜源方向及离巢距离等,跟随峰利用这些信息准确评价蜂巢周围的蜜源质量。当雇佣蜂跳完摇摆舞之后,就与蜂巢中的一些跟随蜂一起返回原蜜源采蜜,跟随蜂数量取决于蜜源质量。以这种方式,蜂群能快速且有效地找到花蜜量最高的蜜源。
在这里插入图片描述
蜜蜂采蜜的群体智能就是通过不同角色之间的交流转换及协作来实现的。具体采蜜过程如图所示。在最初阶段,蜜蜂是以侦查蜂的形式出现,且对蜂巢周闱的蜜源没有任何了解,由于蜜蜂内在动机和外在的条件不同侦查蜂有两种选择:①成为雇佣蜂,开始在蜂巢周围随机搜索蜜源,如图中路线②成为跟随峰,在观察完摇摆舞后开始搜索蜜源,如图中路线。假设发现两个蜜源和,在发现蜜源后,该侦查蜂变成一只雇佣蜂,雇佣蜂利用其自身属性记住蜜源的位置,并立刻投入到采蜜中。采蜜完成后蜜蜂带着满载花蜜返回蜂巢,将花蜜卸载到卸蜜房,卸载完成后雇佣蜂有三种可能的行为①放弃自己发现的花蜜量不高的蜜源,变成一个不受约束的非雇佣蜂,如图中的路线;②在

招募区跳摇摆舞,招募一些待在蜂巢中跟随峰,带领其再次返回所发现的蜜源如图中的路线;③不招募其他蜜蜂,继续回到原来的蜜源采蜜如图中的路线。在现实生活中并不是所有的蜜蜂一开始就立刻采蜜,另外大多数蜜蜂在一次采蜜完成后都会选择回到招募区跳摇摆舞来招募更多的蜜蜂去采蜜。

算法模型
人工蜂群算法就是模拟蜜蜂的采蜜过程而提出的一种新型智能优化算法,它也是由食物源、雇佣蜂和非雇佣蜂三部分组成。

食物源:食物源即为蜜源。在任何一个优化问题中,问题的可行解都是以一定形式给出的。在人工蜂群算法中,食物源就是待求优化问题的可行解,是人工蜂群算法中所要处理的基本对象。食物源的优劣即可行解的好坏是用蜜源花蜜量的大小即适应度来评价的。

雇佣蜂:雇佣蜂即为引领蜂与食物源的位置相对应,一个食物源对应一个引领蜂。在人工蜂群算法中,食物源的个数与引领蜂的个数相等;引领蜂的任务是发现食物源信息并以一定的概率与跟随蜂分享;概率的计算即为人工蜂群算法中的选择策略,一般是根据适应度值以轮盘赌的方法计算。

非雇佣蜂:非雇佣蜂包括跟随蜂和侦査蜂跟随蜂在蜂巢的招募区内根据引领蜂提供的蜜源信息来选择食物源,而侦查蜂是在蜂巢附近寻找新的食物源。在人工蜂群算法中,跟随蜂依据引领蜂传递的信息,在食物源附近搜索新食物源,并进行贪婪选择。若一个食物源在经过次后仍未被更新,则此引领蜂变成侦査蜂,侦查蜂寻找新的食物源代替原来的食物源。

二、源代码

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;%设置节点间的间隔距离
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;%设置起点,依次为无人机123...
             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);
%======================================地形绘图=======================================%
SETenvironment;
surf(X,Y,Z);
box on;
rotate3d on;
xi=linspace(0,500,100);
yi=linspace(0,500,100);
[XI,YI]=meshgrid(xi,yi);
ZI=interp2(X,Y,Z,XI,YI,'cubic');
surf(XI,YI,ZI) %光滑曲面+等高线
hold on;
%=====================================威胁区域绘图====================================%
[x,y,z]=sphere(40);
for k=1:size(danger_xi,2)
 surf(danger_ri(k)*x+danger_xi(k),danger_ri(k)*y+danger_yi(k),danger_ri(k)*z+danger_zi(k));
hold on;
end
%===========================将每条路径的节点距离大致均匀化=================================%
lineX=size(setstart_ALL,1);%UAV数量
A=zeros(lineX,1);
for r=1:lineX
A(r)=sqrt(((setstart_ALL(r,:)-setfinal).^2)*ones(3,1));
end
node=floor(min(A)/L_FEN);
if mod(node,2)==1
    node=node+1;
end
 ind=find(A==min(A));
 objval=A(ind(end))/node;
 orig_node=node;%记录给定的初值node
%===================================主体函数===========================================% 
routes_distance=zeros(lineX,1);%初始每条路径长度为0
for r=1:lineX  
    B=0;
    if(r==ind)
    %=======================计算离终点直线距离最近的无人机路径==========================%    
    node=orig_node;
    setstart=setstart_ALL(r,:);
    C=runUAVABC4(r);%得到路径节点坐标
    for i=1:(size(C,1)-1)
       B=B+sqrt(((C(i+1,:)-C(i,:)).^2)*ones(3,1));
    end
    routes_distance(r)=B;
    %==================================================================================%
    %==============================计算其余无人机路径===================================%
    else
    node=fix(A(r)/objval); 
    if rem(node,2)~=0
        node=node+1;%确保node为偶数
    end
    setstart=setstart_ALL(r,:);
    C=runUAVABC4(r);
    for i=1:(size(C,1)-1)
      B=B+sqrt(((C(i+1,:)-C(i,:)).^2)*ones(3,1));
    end
    routes_distance(r)=B;
    end
    %===================================================================================%
   
end
%======================================================================================%
distance_min=A;
time_plan=zeros(lineX,1);
distance_min%各起始点的直线距离
routes_distance%规划的航迹长度
 
if Ways==1%同时起飞,同时到达
ind=max(routes_distance)*Vmin-min(routes_distance)*Vmax;%临界条件
    if(ind<=0)
    time_plan=max(routes_distance)/Vmax;
    V_plan=routes_distance./time_plan;
    time_plan%团队预计到达的时间
    V_plan%规划的各无人机速度
    else
    fprintf('超出协同规划范围,任意两条长短路径的比值应小于无人机Vmax/Vmin');
    end
    
else%同时起飞,按指定次序先后到达
    
    time_max=routes_distance/Vmin;
    time_min=routes_distance/Vmax;  
    for k=1:lineX
         if k==1
    time_plan(Order(k))=routes_distance(Order(k))/Vmax;
         else
    time_plan(Order(k))=time_plan(Order(k-1))+interval;
         end
    end
ind=find(time_plan<time_min);
 while isempty(ind)==0
ind=ind(1);
time_plan(ind)=routes_distance(ind)/Vmax;
for a=1:lineX-1 
time_plan(a)=time_plan(ind)-(ind-a)*interval;
end
ind=find(time_plan<time_min);
 end
 
V_plan=routes_distance./time_plan;
ind=find(V_plan<Vmin);
if isempty(ind)~=0
time_plan%团队预计到达的时间
V_plan%规划的各无人机速度
else
fprintf('超出协同规划范围');
end
end
 

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926。
往期回顾>>>>>>
【路径规划】粒子群优化算法之三维无人机路径规划【Matlab 012期】
【路径规划】遗传算法之多物流中心的开放式车辆路径规划【Matlab 013期】
【路径规划】粒子群算法之机器人栅格路径规划【Matlab 014期】
【路径规划】蚁群算法之求解最短路径【Matlab 015期】
【路径规划】免疫算法之物流中心选址【Matlab 016期】
【路径规划】人工蜂群之无人机三维路径规划【Matlab 017期】
【路径规划】遗传算法之基于栅格地图机器人路径规划【Matlab 018期】
【路径规划】蚁群算法之多无人机攻击调度【Matlab 019期】
【路径规划】遗传算法之基于栅格地图的机器人最优路径规划【Matlab 020期】
【路径规划】遗传算法之考虑分配次序的多无人机协同目标分配建模【Matlab 021期】
【路径规划】蚁群算法之多中心vrp问题【Matlab 022期】
【路径规划】蚁群算法之求解带时间窗的多中心VRP【Matlab 023期】
【路径规划】遗传算法之多中心VRP求解【Matlab 024期】
【路径规划】模拟退火之求解VRP问题【Matlab 025期】
【路径规划】A星之栅格路径规划【Matlab 026期】
【路径规划】基于一种带交叉因子的双向寻优粒子群栅格地图路径规划【Matlab 027期】
【路径规划】【TSP】蚁群算法之求解TSP问题含GUI【Matlab 028期】
【路径规划】蚁群算法之栅格地图路径规划【Matlab 029期】
【路径规划】遗传算法之旅行商 TSP 【Matlab 030期】
【路径规划】模拟退火算法之旅行商 TSP 问题【Matlab 031期】
【路径规划】蚁群算法之智能车路径规划【Matlab 032期】
【路径规划】华为杯:基于matlab 无人机优化运用于抢险救灾【Matlab 033期】
【路径规划】matlab之最小费用最大流算问题【Matlab 034期】
【路径规划】A*算法之解决三维路径规划问题【Matlab 035期】
【路径规划】人工蜂群算法之路径规划【Matlab036期】
【路径规划】人工蜂群算法之路径规划【Matlab 037期】
【路径规划】蚁群算法之求解多旅行商MTSP问题【Matlab 038期】
【路径规划】蚁群算法之无人机路径规划【Matlab 039期】

【路径规划】遗传算法之求解多VRP问题【Matlab 040期】
【VRP】遗传算法之带时间窗的车辆路径问题【Matlab 041期】
【路径规划】蚁群算法之三维路径规划【Matlab 042期】
【路径规划】粒子群优化蚁群之求解最短路径【Matlab 043期】
【TSP问题】差分进化之求解TSP问题【Matlab 044期】
【路径规划】RRT之三维路径规划【Matlab 144期】
【路径规划】人工势场算法之无人机编队路径规划【 Matlab 145期】
【VRP问题】节约算法之求解TWVRP问题【Matlab 146期】
【VRP问题】节约算法之求解CVRP问题【Matalb 147期】
【VRP问题】禁忌搜索算法之求解VRP问题【Matalb 148期】
【VRP问题】模拟退火算法之求解CVRP问题【Matlab 149期】
【VRP问题】模拟退火求解带时间窗之TWVRP问题【Matlab 150期】
【VRP问题】人工鱼群算法之求解带时间窗VRP问题【Matlab 151期】
【VRP问题】遗传算法之求解带容量VRP问题【Matlab 152期】
【路径规划】狼群算法算法之三维路径规划【Matlab 153期】
【路径规划】人工势场算法之无人机三维路径规划【Matlab 154期】
【路径规划】改进差分算法之三维多无人机协同航迹规划【Matlab 155期】

你可能感兴趣的:(matlab,路径规划)