【无人机编队规划】基于matlab遗传算法无人机编队位置规划【含Matlab源码 1987期】

举报
海神之光 发表于 2022/07/20 00:59:35 2022/07/20
【摘要】 一、遗传操作简介 1 选择 由于遗传操作只在邻居之间进行, 对于每一个中心元胞, 只在它的邻居元胞内选择个体遗传到下一代。在此, 使用轮盘赌的方式进行个体选择, 对于每一个邻居元胞内的个体, 分别计算其...

一、遗传操作简介

1 选择
由于遗传操作只在邻居之间进行, 对于每一个中心元胞, 只在它的邻居元胞内选择个体遗传到下一代。在此, 使用轮盘赌的方式进行个体选择, 对于每一个邻居元胞内的个体, 分别计算其适应度值Fi, 则第i个元胞内的个体被选中的概率psi为:
在这里插入图片描述
2 交叉
定义交叉概率pc, 在[0, 1]之间取随机值pcr, 若pcr≤pc, 则进行交叉操作。

交叉操作如图3所示, 进行交叉操作时, 对于中心元胞个体Qcen和被选中的邻居元胞个体Qngb, 除去初始点和终点, 分别选择第c个航点, 将其和前一个航点断开, 将Qcen的c-1航点和Qngb的c航点相连, 将Qngb的c-1航点和Qcen的c航点相连, 分别计算新生成的2个航迹适应度, 选取适应度大的进入下一代, 记为Qnew。
在这里插入图片描述
图3 交叉操作

3 变异
定义变异概率pm, 在[0, 1]之间取随机值pmr, 若pmr≤pm, 则进行变异操作。
在这里插入图片描述
若hm>0, 则说明Pe在威胁区外, 保留个体Qnew无需变异, 否则继续进行变异操作。

如图4所示, 假设hm对应的威胁点为W, 威胁半径为r, 变异之后产生新的航点Pe′ (xe′, ye′) , 则新航点坐标为:
在这里插入图片描述
ke为取值在[1, 2]之间随机增益系数, ω为随机旋转角度, 使得变异具有随机性。变异之后, Pe便跳到了距离Pe长度为ke|hm|的新航点Pe′上, 由于变异具有随机性, 因此变异之后Pe′可能依旧在威胁区内。
在这里插入图片描述
图4 变异操作
在变异操作之后, 更新Qnew为新的个体, 仍然命名为Qnew, 计算Qnew的适应度Fnew, 并与中心元胞个体Qcen的适应度Fcen进行比较, 若Fnew>Fcen, 则替换中心元胞个体为Qnew, 否则放弃新个体。

6 算法终止条件
由于算法计算量大, 一般很难在短时间内找到全局最优解, 因此可以设置以下终止条件以节省计算时间:

a.设置较为合适的适应度标准F0, 一旦新个体中有适应度值不小于F0的出现, 则终止寻优, 选择该个体作为最终航迹。

b.设置最大进化次数K, 一旦进化次数达到K次, 则终止寻优, 选取其中适应度值最大的个体作为最终航迹。

同时设置以上2个条件, 可以得到相对满足条件的“次优解”。

二、部分源代码

%% Objects and Interactions Parameters
Nm = 15;  %Number of initial agents
No = 25;  %Number of initial obstacles
Nt = 100; %Number of initial targets
%% Initialize Target, Obstacle, and Swarm Locations

x_range = 100;
y_range = 100;
z_range = 10;

%Targets and obstacles randomly positioned throughout the region.
targets   = [2*x_range*rand(1,Nt)-x_range;
             2*y_range*rand(1,Nt)-y_range;
             2*z_range*rand(1,Nt)-z_range];
         
obstacles = [2*x_range*rand(1,No)-x_range;
             2*y_range*rand(1,No)-y_range;
             2*z_range*rand(1,No)-z_range];

%Agents can be purposefully arranged. Right now they are randomly placed.
agents = [[linspace(-150,-110,5),linspace(-150,-110,5),linspace(-150,-110,5)];
          [zeros(1,5)-10,zeros(1,5),zeros(1,5)+10]; 
           zeros(1,15)];
% agents = [[linspace(-150,-130,5),linspace(-150,-110,5),linspace(-150,-110,5)];
%           [zeros(1,5)-2,zeros(1,5),zeros(1,5)+2]; 
%           [zeros(1,5)-2,zeros(1,5),zeros(1,5)-2]];
%agents = [linspace(-150,-110,Nm);zeros(1,Nm);zeros(1,Nm)];

%% Genetic Algorithm without reevaluating parents
% [PI, Orig, Lambda] = geneticAlgorithm3(cf, lambda_lower, lambda_upper, parents, TOL_GA, G, S, dv)
w1 = 70;
w2 = 10;
w3 = 20;

cf = @(M_star,T_star,L_star) w1*M_star+w2*T_star+w3*L_star;
lambda_lower = 0;
lambda_upper = 2;
parents = 6;
TOL_GA = 0.1;
G = 100;
S = 20;
dv = 15;

% Generate empty output arrays.
PI = zeros(G,S);
Orig = zeros(G,S);
PC = zeros(G,S,3);
% Randomly generate first generation.
Lambda = lambda_lower + rand(S,dv).*(lambda_upper-lambda_lower);

t0 = tic;
for g = 1:G
    myProgressBar(toc(t0), g, G);
    % Test fitness of members of first generation.
    if (g == 1)
        for i = 1:S
            lambda = Lambda(i,:);
            [L_star,M_star,T_star] = swarmSim2(obstacles, targets, agents, lambda, false);
            PI(g,i) = cf(M_star,T_star,L_star);
            PC(g,i,:) = [M_star,T_star,L_star];
        end
    else
        PI(g,1:parents) = PI(g-1,1:parents);
        PC(g,1:parents,:) = PC(g-1,1:parents,:);
        for i = parents+1:S
            lambda = Lambda(i,:);
            [L_star,M_star,T_star] = swarmSim2(obstacles, targets, agents, lambda, false); 
            PI(g,i) = cf(M_star,T_star,L_star);
            PC(g,i,:) = [M_star,T_star,L_star];
        end
    end
    

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 杨军,王道波,渠尊尊,孙瑜,张鲁遥.基于元胞遗传算法的多无人机编队集结路径规划[J].机械与电子. 2018,36(01)

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

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/125859064

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。