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

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无人机基于matlab粒子群算法优化干扰受限下无人机群辅助网络含Matlab源码 2245期相关的知识,希望对你有一定的参考价值。

⛄一、无人机简介

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

粒子群优化算法 (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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于无人机基于matlab粒子群算法优化干扰受限下无人机群辅助网络含Matlab源码 2245期的主要内容,如果未能解决你的问题,请参考以下文章

优化覆盖基于matlab粒子群算法优化无人机编队布局求解车载网络通信覆盖优化问题含Matlab源码 2021期

目标搜索基于matlab运动编码粒子群算法优化 (MPSO) 无人机搜索丢失目标含Matlab源码 2254期

路径规划基于粒子群的三维无人机路径规划matlab源码

三维路径规划基于matlab粒子群算法无人机三维路径规划含Matlab源码 192期

三维路径规划基于matlab粒子群算法融合鸡群算法多无人机三维路径规划含Matlab源码 1792期

三维路径规划基于matlab粒子群算法无人机山地三维路径规划含Matlab源码 1831期