【无人机】粒子群算法优化干扰受限下无人机群辅助网络【含Matlab源码 2245期】

本文介绍了如何使用Matlab进行无人机航迹规划,特别关注了粒子群优化算法在解决航迹规划问题中的应用。文章详细阐述了航迹表示方法、代价函数以及粒子群算法的基本原理,并提供了部分Matlab源代码示例。

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞💞💞💞💞💞💞💞💞💥💥💥💥💥💥💥💥
🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚤🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
在这里插入图片描述
🔊博主简介:985研究生,Matlab领域科研开发者;

🚅座右铭:行百里者,半于九十。

🏆代码获取方式:
优快云 Matlab武动乾坤—代码获取方式

更多Matlab路径规划仿真内容点击👇
Matlab路径规划(进阶版)

⛳️关注优快云 Matlab武动乾坤,更多资源等你来!!

⛄一、无人机简介

无人机的航迹规划是指在综合考虑无人机飞行油耗、威胁、飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约束的目标优化问题。航迹规划算法是航迹规划的核心。国内外相继开展了相关研究, 提出了许多航迹规划算法, 如模拟退火算法、人工势场法、遗传算法、蚁群算法等。但由于无人机面临的规划空间异常复杂、规划约束条件多且模糊性大, 航迹搜索算法存在寻优能力差、计算量过大、效率不高等问题, 在航迹规划的最优性和实时性方面有待进一步提高。

粒子群优化算法 (particle swarm optimization, PSO)是Kennedy和Eberhart于1995年提出的一种群体智能仿生算法, 在解决一些典型的函数优化问题时, 能够取得比较好的优化结果。

1 无人机航迹规划模型
1.1 航迹表示方法

一般地, 无人机航迹规划的空间可以表示为某三维坐标系下所有点的集合{ (x, y, z) |xmin≤x≤xmax, ymin≤y≤ymax, zmin≤z≤zmax}, 其中x, y可以表示为该节点在飞行水平面下的坐标, 也可以表示为该点的经纬度, z为高程数据或海拔高度。航迹规划的目的是获得无人机在该空间中的飞行轨迹, 生成的航迹可表示为三维空间的一系列的点{PS, P1, P2, …, Pn-2, PG}, 相邻航迹点之间用直线段连接。

1.2 航迹代价函数
在航迹规划中, 常采用经过适当简化的航迹代价计算公式
在这里插入图片描述
式中, s表示航迹段数, Li表示第i段航迹长度, 该项代表距离代价。Hi表示第i段航迹的平均海拔高度, 该项代表高度代价。Ti为第i段航迹的威胁指数, 该项代表威胁代价。k1、k2、k3分别是距离代价、高度代价和威胁代价的权重值, 权重的选取与飞行任务要求相关。

2 基本粒子群算法
粒子群算法初始化为一群数量为N的随机粒子 (随机解) , 在D维空间中通过重复迭代、更新自身的位置以搜索适应度值最优解。粒子的位置代表被优化问题在搜索空间中的潜在解。在每次迭代中, 粒子通过跟踪2个“极值”来更新自己的速度和位置:一个是粒子自身目前所找到的最优解, 即个体极值;另一个是整个粒子群目前找到的最优解, 即全局极值。粒子i (i=1, 2, …, N) 在第j (j=1, 2, …, D) 维的速度vij和位置xij按如下格式更新:
在这里插入图片描述

式中, ω为非负数, 称为惯性权值 (惯性因子) , 描述了粒子对之前速度的“继承”, 即体现出粒子的“惯性”;c1和c2为非负常数, 称为学习因子 (加速因子) , 体现了粒子的社会性, 即粒子向全局最优粒子学习的特性;r1和r2为 (0, 1) 之间的随机数;pi= (pi1, pi2, …, pi D) 表示粒子i的个体极值所在位置;pg= (pg1, pg2, …, pg D) 表示所有粒子的全局极值所在位置。

速度更新公式的第一项, 反映粒子当前速度的影响, 每一个粒子按照惯性权值的比重沿着自身速度的方向搜索, 起到了平衡全局的作用, 同时避免算法陷入局部最优;第二项体现了个体最优值对粒子速度的影响, 即粒子本身的记忆和认识, 使得粒子具有全局搜索能力。第三项则反映群体对个体的影响, 即群体间的信息共享起到加速收敛的作用。

⛄二、部分源代码

clc;clear all;close all;
%% 初始化种群

%f= Flow_BS(X); % 函数表达式
%figure(1);ezplot(f,[0,0.01,20]);
fym = -1;
% rec_kmeans = zeros(500,100);
% P = zeros(50,50);
%ITER=1;
for ITER = 1:1
k_center = 5;
N = 300; % 初始种群个数
d = k_center*3; % 空间维数
ger = 50; % 最大迭代次数

limit = [0, 500;0,500;10,100;
    0, 500;0,500;10,100;
    0, 500;0,500;10,100;
    0, 500;0,500;10,100;
    0, 500;0,500;10,100;];                % 设置位置参数限制


vlimit = [-15, 15];               % 设置速度限制
w = 0.8;                        % 惯性权重
c1 = 0.6;                       % 自我学习因子
c2 = 0.9;                       % 群体学习因子
% N_users = 50;
% all_users = 100*rand(N_users,2);

for users_sets = 80
    
    %load('alluser.mat', 'all_users');
    s=ITER;
    rng(s);
    all_users = 500*rand(users_sets,2);
    C(1,:) = zeros(1,k_center*2);
    for i = 1:N
        [A_label,B] = kmeans(all_users,k_center);
        C(i+1,:) = B(:);
        if C(i+1) == C(i)
            [A_label,B] = kmeans(all_users,k_center);
        end
        %     h = 10+90*rand(k_center,1);
        for j = 1:k_center
            h(j,1) = 50;
        end
        B = [B h]';
        X(i,:) = B(:); %初始种群的位置
    end
    C(1,:) = [];
    
    %     for i = 1:d
    %       X(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始种群的位置
    %     end
    
    v = 15*rand(N, 3*k_center);                  % 初始种群的速度
    xm = X;                          % 每个个体的历史最佳位置
    ym = zeros(1, d);                % 种群的历史最佳位置
    fxm = zeros(N, 1);               % 每个个体的历史最佳适应度
    fym = -inf;                      % 种群历史最佳适应度
    hold on
    % plot(xm, f(xm), 'ro');title('初始状态图');
    % figure(2)
    %% 群体更新
    iter = 1;
    
    record = zeros(ger, 1);          % 记录器
    while iter <= ger
        %      fx = Flow_BS(X) ; % 个体当前适应度
        parfor i = 1:N
            [fx(i),p] = Flow_UAV(ITER,X(i,:),users_sets) ; % 个体当前适应度
        end
        for i = 1:N
            
            if fxm(i) < fx(i)
                fxm(i) = fx(i);     % 更新个体历史最佳适应度
                xm(i,:) = X(i,:);   % 更新个体历史最佳位置
            end
        end
        
        if fym < max(fxm)
            [fym, nmax] = max(fxm);   % 更新群体历史最佳适应度
            ym = xm(nmax, :);      % 更新群体历史最佳位置
        end
        w= 0.8-0.6*iter/ger;
        best(iter,:)= ym;
        v = v * w + c1 * rand * (xm - X) + c2 * rand * (repmat(ym, N, 1) - X);% 速度更新
        
        %边界速度处理
        v(v > vlimit(2)) = vlimit(2);
        v(v < vlimit(1)) = vlimit(1);
        X = X + v;% 位置更新
        % 边界位置处理
        for i = 1:N
            for j = 1:d
                if X(i,[j]) > 500
                    X(i,[j]) = 500;
                end
                if X(i,[j]) < 0
                    X(i,[j]) = 0;
                end
            end
            for j = 3:3:d
                if X(i,[j]) > 100
                    X(i,[j]) = 100;
                end
                if X(i,[j]) < 30
                    X(i,[j]) = 30;
                end
            end
            
            %         if X(i,[3]) > 100
            %            X(i,[3]) = 100;
            %         end
            %         if  X(i,[3]) < 10
            %             X(i,[3]) = 10;
            %         end
            %         if X(i,[6]) > 100
            %            X(i,[6]) = 100;
            %         end
            %         if  X(i,[6]) < 10
            %             X(i,[6]) = 10;
            %         end
            %         if X(i,[9]) > 100
            %            X(i,[9]) = 100;
            %         end
            %         if  X(i,[9]) < 10
            %             X(i,[9]) = 10;
            %         end
            
        end
        record(iter) = fym;%最大值记录 real value
        %     rec_randm(ITER,iter) = rec_kmeans(ITER,iter)+record(iter);
        %     record_random1(ITER,users_sets) = record(end);
        %     record_kmeans1(ITER,users_sets) = record(end);
        %     x0 = 0 : 0.01 : 20;
        %     plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')
        %     pause(0.1)
        % [I,J]=find(tril(true(50),-1)) ;
        % dist_iter(iter)=sum(sqrt((X(I,1)-X(J,1)).^2+(X(I,2)-X(J,2)).^2+(X(I,3)-X(J,3)).^2))/(length(I));
        % SINR(ITER,iter) = fym;
        iter = iter+1;
        
        
        
    end
    SINR(ITER,users_sets)  = fym;
    
    % SINR(ITER,users_sets) = record(end);
    % if SINR(users_sets)<1
    %     k_center = k_center+1;
    %    users_sets=users_sets;
    % end
    [none,p]=Flow_UAV(ITER,best(end,:),users_sets);
    for i = 1:users_sets
        P(i,users_sets) = p(i);
    end
    UAV_num(ITER,users_sets) = k_center;
    % SINR_value(ITER,users_sets) = SINR(ITER,users_sets);
    % users_sets = users_sets+1;
    C=[];X = [];v=[];xm=[];B = [];%best = [];
end

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]方群,徐青.基于改进粒子群算法的无人机三维航迹规划[J].西北工业大学学报. 2017,35(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值