麻雀搜索算法优化3D无人机路径规划(石油厂区)(文末附代码)


前言


一、无人机石油厂区路径规划

以海油石油平台智能无人机路径规划为例,与陆 地石油天然气管道的巡航监测、海上养殖区域的巡航 监测目标是一样的,并且海上石油开采区域的情况与 环境更为复杂一些,所以更需要对无人机的飞行效率 进行评估、对无人机航迹的规划算法进行优化,以此 来筛选探寻出飞行轨迹、飞行安排、飞行路径更佳的航迹。

二、麻雀搜索算法

1.算法介绍

麻雀搜索算法是近两年提出的新兴群智能优化算法,具备算法原理简单、收敛速度快等优势。该算法基于麻雀种群的社会行为将麻雀个体分为发现、加入者以及警戒者,发现者能力较强可以找到食物并为同类指明方向,公式为:
在这里插入图片描述
式中:t和T分别为算法当前以及最大更新次数,∝为随机数,其取值范围为1,1;Q同样为随机数,但服从正态分布;L为所有元素都是1的行短阵,其列数由待求解问题维度确定;R2为大于0小于1的预警值,ST为大于0.5小于1的安全值。

加入者则通过观察发现者的食物来源以便取而代之,公式为:
在这里插入图片描述
式中:Xp(t+1)为所有发现者中位置更新后的最佳位置;A+ = AT(AAT)-1其中,A为所有元素随机取值为1或-1的行矩阵,列数为求解问题维度;Xworst为当前种群中的最劣位置;n为种群中麻雀数量.
警戒者需要时刻留意当前环境,以便发现危险立即飞往安全环境。位置更新公式为:
在这里插入图片描述
式中:Xbest为当前种群中的最佳位置;β为随机数且遵循标准正态分布;fi, fg, fw分别为目前个体、当前种群最优、最劣的适应度值;k在-1,1范围内随机取值,E的作用是防止分母为0.

2.部分代码

代码如下(示例):

clear all 
clc

rng('default');

%% 载入数据
data.S=[1,950,12];     %起点位置
data.E=[950,1,1]; %终点点位置
data.Obstacle=xlsread('data1.xls');
data.numObstacles=length(data.Obstacle(:,1));
data.mapSize=[1000,1000,20]; %10m 地图尺寸
data.unit=[50,50,1]; %地图精度
data.S0=ceil(data.S./data.unit);
data.E0=ceil(data.E./data.unit);
data.mapSize0=data.mapSize./data.unit;
data.map=zeros(data.mapSize0);
figure
plot3(data.S(:,1),data.S(:,2),data.S(:,3),'o','LineWidth',2,...
                     'MarkerEdgeColor','k',...
                     'MarkerFaceColor','r',...
                     'MarkerSize',10)
hold on
plot3(data.E(:,1),data.E(:,2),data.E(:,3),'h','LineWidth',2,...
                     'MarkerEdgeColor','k',...
                     'MarkerFaceColor','r',...
                     'MarkerSize',10)
for i=1:data.numObstacles
    x=1+data.Obstacle(i,1);
    y=1+data.Obstacle(i,2);
    z=1+data.Obstacle(i,3);
    long=data.Obstacle(i,4);
    wide=data.Obstacle(i,5);
    pretty=data.Obstacle(i,6);
    [V,F] = DrawCuboid(long, wide, pretty, x,y,z);
    x0=ceil(x/data.unit(1));
    y0=ceil(y/data.unit(2));
    z0=ceil(z/data.unit(3));
    long0=ceil(long/data.unit(1));
    wide0=ceil(wide/data.unit(2));
    pretty0=ceil(pretty/data.unit(3));
    data.map(x0:x0+long0,y0:y0+wide0,z0:z0+pretty0)=1;
end
legend('起点','终点')
title('三维地形地图')
grid on
axis equal
index=find(data.map==1);
[p1,p2,p3] = ind2sub(size(data.map), index);
figure
plot3(data.S0(:,1),data.S0(:,2),data.S0(:,3),'o','LineWidth',2,...
                     'MarkerEdgeColor','k',...
                     'MarkerFaceColor','r',...
                     'MarkerSize',10)
hold on
plot3(data.E0(:,1),data.E0(:,2),data.E0(:,3),'h','LineWidth',2,...
                     'MarkerEdgeColor','k',...
                     'MarkerFaceColor','r',...
                     'MarkerSize',10)
plot3(p1,p2,p3,'.','LineWidth',2,...
                     'MarkerEdgeColor','k',...
                     'MarkerFaceColor','r',...
                     'MarkerSize',10)
legend('起点','终点')
title('三维地形地图')
grid on
axis equal
xlabel('x(km)')
ylabel('y(km)')
zlabel('z(km)')
%% 生成可移动方向
temp=[1,0,-1];
direction=[];
for i=1:3
    for j=1:3
        for k=1:3
            direction=[direction;temp(i),temp(j),temp(k)];
        end
    end
end
position=find(direction(:,1)==0 & direction(:,2)==0 & direction(:,3)==0);
direction(position,:)=[];
data.direction=direction;
dim=prod(data.mapSize0);
%% 画图

%%

%% 测试函数

option.dim=dim;
lb = 0;
ub = 1;
fobj = @aimFcn_1;

%% 算法设置
%  Function_name='F8'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) 设定适应度函数
SearchAgents_no=200; % Number of search agents 种群数量
Max_iteration=20;
% Load details of the selected benchmark function
% [lb,ub,dim,fobj]=Get_Functions_details(Function_name);  %设定边界以及优化函数

[Best_pos,Best_score,SSA_curve]=SSANew(SearchAgents_no,Max_iteration,lb,ub,dim,fobj,option,data); %开始优化


figure
hold on

plot(SSA_curve,'LineWidth',2)

legend("SSA");
title('fitness curve')

str='SSA'
[~,result1]=fobj(Best_pos,option,data);
drawPc(result1,option,data,str)



三、总算法优化结果

按照工件加工顺序:
在这里插入图片描述

代码获取:

点击获取代码

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值