路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录

效果一览

基本介绍

基于蚁群算法的三维无人机航迹规划(Matlab)。

蚁群算法(Ant Colony Optimization,ACO)是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时的行为,来解决各种优化问题,尤其是在图论和组合优化方面应用较广。

程序设计

  • 完整源码和数据私信博主回复基于蚁群算法的三维无人机航迹规划(Matlab)
matlab 复制代码
clc
clear
close all

%% 输入数据
G=[ 0 0 1 1 1 0 0 0 0 1
    1 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 1 1 0 1 0 0 0 0 0
    0 1 1 0 1 0 0 0 1 0
    0 0 0 0 0 0 1 0 0 0
    0 0 0 1 0 0 0 0 0 1
    0 0 0 0 0 0 1 1 0 0
    0 1 0 0 0 0 1 0 0 0
    0 1 0 0 1 0 0 0 0 0];
% G=[ 0 1 1 1 0 
%     1 0 0 0 0 
%     0 0 0 0 1 
%     0 0 0 0 1 
%     0 1 1 0 1];


G = zeros(10,10);
d = randperm(95,21)+1;
d=sort(d);
G(d) = 1;

%% 栅格绘制
drawShanGe(G,0)
title('栅格地图')
%%
S = [1 1];    % 起点
E = [10 10];  % 终点
G0 = G;
G = G0(S(1):E(1),S(2):E(2)); % 该方式是为了方便更改起点与终点
[Xmax,dim] = size(G);        % 栅格地图列数为粒子维数,行数为粒子的变化范围
dim = dim - 2;               % 减2是去掉起点与终点

%% 参数设置
maxgen = 50;    % 最大迭代次数
NP = 30;         % 种群数量

%%%%%%%%%%%%%%%%%%%%%%%%%%%
 rPercent = 0.2;    

%%%%%%%%%%%%%%%%%%%%%%%%%%%
pNum = round( NP * rPercent );    % %发现者



Xmin = 1;   % 变量下界

%% 初始化
X = zeros(NP,dim);
for i = 1:NP
    for j = 1:dim
       col = G(:,j+1);      % 地图的一列
       id = find(col == 0); % 该列自由栅格的位置
       X(i,j) =  id(randi(length(id))); % 随机选择一个自由栅格
       id = [];
    end 
    fit( i ) = fitness(X( i, : ),G);
end
fpbest = fit;   % 个体最优适应度
pX = X;      % 个体最优位置
 XX=pX;
[fgbest, bestIndex] = min( fit );        % 全局最优适应度
bestX = X(bestIndex, : );    % 全局最优位置
[fmax,B]=max(fit);
worse= X(B,:);  
%%
for gen = 1 : maxgen
    gen

       [ ans, sortIndex ] = sort( fit );% Sort.
     
      [fmax,B]=max( fit );
       worse= X(B,:);  
        
        [~, Idx] = sort( fpbest );
  r2=rand(1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1 : pNum
 if(r2<0.9)
            r1=rand(1);
          a=rand(1,1);
          if (a>0.1)
           a=1;
          else
           a=-1;
          end
    X( i , : ) =  pX(  i , :)+0.3*abs(pX(i , : )-worse)+a*0.1*(XX( i , :)); % Equation (1)
       else
            
           aaa= randperm(180,1);
           if ( aaa==0 ||aaa==90 ||aaa==180 )
            X(  i , : ) = pX(  i , :);   
           end
         theta= aaa*pi/180;   
       
       X(  i , : ) = pX(  i , :)+tan(theta).*abs(pX(i , : )-XX( i , :));    % Equation (2)      

      end
          X( i , :) = Bounds(X(i , : ), Xmin, Xmax );
         fit(  i  ) = fitness( X(  i , : ),G );
    end 
 [ fMMin, bestII ] = min( fit );      
  bestXX = X( bestII, : );  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 R=1-gen/maxgen;                           %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 Xnew1 = bestXX.*(1-R); 
     Xnew2 =bestXX.*(1+R);                    %%% Equation (3)
   Xnew1= Bounds(Xnew1, Xmin, Xmax );
   Xnew2 = Bounds(Xnew2, Xmin, Xmax );
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     Xnew11 = bestX.*(1-R); 
     Xnew22 =bestX.*(1+R);                     %%% Equation (5)
   Xnew11= Bounds(Xnew11, Xmin, Xmax );
   Xnew22 = Bounds(Xnew22, Xmin, Xmax );
   
   
     for i = ( pNum + 1 ) :12                  % Equation (4)
     X( i, : )=bestXX+((rand(1,dim)).*(pX( i , : )-Xnew1)+(rand(1,dim)).*(pX( i , : )-Xnew2));
    X( i , :) = Bounds(X(i , : ),  min(Xnew1), max(Xnew2) );
   fit(  i  ) = fitness( X(  i , : ),G );
   end
   
  for i = 13: 19                  % Equation (6)

   
        X( i, : )=pX( i , : )+((randn(1)).*(pX( i , : )-Xnew11)+((rand(1,dim)).*(pX( i , : )-Xnew22)));
       X( i , :) = Bounds(X(i , : ), Xmin, Xmax );
         fit(  i  ) = fitness( X(  i , : ),G );
  
  end
  
  for j = 20 : NP                 % Equation (7)
       X( j,: )=bestX+randn(1,dim).*((abs(( pX(j,:  )-bestXX)))+(abs(( pX(j,:  )-bestX))))./2;
      X( j , :) = Bounds(X(j , : ), Xmin, Xmax );
         fit(  j  ) = fitness( X(  j , : ),G );
  end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     XX=pX;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 更新个体最优值和全局最优值
    for i = 1 : NP
        if (fit(i) < fpbest(i))
            fpbest(i) = fit(i);
            pX(i, :) = X(i, :);
        end
        if(fpbest(i) < fgbest)
            fgbest = fpbest(i);
            bestX = pX(i, :);
        end
    end
    bestX = LocalSearch(bestX,Xmax,G);
    fgbest = fitness(bestX,G);
    FG(gen,1)=fgbest;
end

参考文献

1 基于人工势场结合快速搜索树APF+RRT实现机器人避障规划附matlab代码

2 基于蚁群算法求解栅格地图路径规划问题matlab源码含GUI

相关推荐
AI服务老曹18 分钟前
视觉算法模型管理性能优化指南:多版本平滑升级、灰度与快速回滚实战
算法·性能优化
l12586526 分钟前
# RAG重排序实战:硅基流动bge-reranker-v2-m3在线API vs 本地CrossEncoder,一篇讲透两种方案
数据库·人工智能·python·深度学习·算法·机器学习·langchain
创世宇图1 小时前
【AI量化交易实战】第06讲:小雅再升级——Talib指标库与K线形态量化
算法
机器学习之心1 小时前
CPO-SVR:用冠豪猪优化算法给支持向量回归机“自动调参“,一次预测多个指标
算法·回归·cpo-svr
Super 含2 小时前
Android 启动优化(三):Perfetto 实战——启动时间到底花在哪里?
jvm·算法
Evand J2 小时前
【MATLAB例程,PDR11】二维平面下的PDR(行人航位推算)步态检测与EKF融合定位,附代码的下载链接
开发语言·matlab·平面·pdr·行人导航·步态检测
地平线开发者2 小时前
征程6|YOLOv5x 在 Horizon J6 平台的完整部署实战(上)
算法
青 春 记 忆2 小时前
LeetCode 104. 二叉树的最大深度|Python 解法详解
python·算法·leetcode
watersink2 小时前
机器学习关联分析
人工智能·算法·机器学习
牛油果子哥q2 小时前
C++STL算法超全精讲:排序/查找/去重/遍历/最值/合并全套API、仿函数、Lambda适配、实战避坑
开发语言·c++·算法