一、差分进化算法的介绍

差分进化算法(Differential Evolution, DE)是一种基于群体差异的启发式随机搜索算法,该算法是由R.Storn和K.Price为求解Chebyshev多项式而提出的。DE算法也属于智能优化算法,与前面的启发式算法,如ABC,PSO等类似,都属于启发式的优化算法。DE算法是我在一篇求解盒子覆盖问题论文中使用的一种优化算法。

二、差分进化算法的流程

  1. 初始化种群
  2. 变异
  3. 交叉
  4. 选择

(DE流程)

三、差分进化的具体步骤

对于无约束优化问题

利用差分进化求解这样的优化问题,主要分为初始化、变异、交叉和选择等几项操作。

1、初始化

如前面的的群智能优化算法一样,差分进化也需要初始化种群:

其中,是第个个体,表示第维。

其中,分别为第维的下界和上界,表示在区间上的随机数。

2、变异

DE算法通过差分策略实现个体变异,常见的差分策略是随机选取种群中两个不同的个体,将其向量差缩放后与待变异个体进行向量合成。

其中,是三个随机数,区间为称为缩放因子,为一个确定的常数。表示第代。

3、交叉

交叉操作的目的是随机选择个体,因为差分进化也是一种随机算法,交叉操作的方法是:

其中,称为交叉概率。通过概率的方式随机生成新的个体。

4、选择

在DE中采用的是贪婪选择的策略,即选择较优的个体作为新的个体。

```

%清空环境 clear;

%定义地形对象 cTerrain = CTerrain3D; %定义威胁区对象 cTread = CTread;

%调整为统一的图形环境 figure('Renderer','opengl');

%绘制地形和威胁区 cTerrain.draw(); cTread.draw();

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%数据形式说明 %xs 初始点位置集合,三维点集 %yt 目标点位置集合,三维点集 %MxsEna 能力矩阵,集合中的二元组表示最大最小飞行速度 %MxsDIs 最大航程矩阵,集合中的值表示UAV最大可飞的距离 %MytTOrd 任务点间的时序坐标,要求尽量在前面的先执行

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %调用目标分配算法 %AssignType表示不同的模型,1, N=M; 2, N>M; 3, N

%时间测试 Time = cputime;

%% 第一种情况的实验 if AssignType == 1 %%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%% xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12; %45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15; 78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;]; yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11; %81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11; 70 181 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 128 156 12;];

MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610500 700 300 350 700 900 450 610 450 610];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1 1 1 1 1 1 1];MytTOrd=[3 4; 5 2; 6 8; 7 4;];%引入新的协同矩阵,最大起始时间矩阵
Twait = [];
Twindow=[];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if Key == 0%%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%%调用目标分配算法,并取得解和相关数据,计算算法耗费时间%定义目标分配算法对象DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();Time = cputime -t1;%         %结果solUsolTsolCsolFTimeelse if Key == 1for i=1:10DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1
end % key=0

else if AssignType == 2 %% 第二种实验的情况 %%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%% xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12; %45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15; 78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;]; yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11; %81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11; 70 181 12;15 133 13 ; 19 151 12 ;160 192 13 ];

MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610500 700 300 350 700 900 450 610 450 610];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1];%这个数据里都代表的是目标点,是目标点与目标点的关系MytTOrd=[3 2];%引入新的协同矩阵,最大起始时间矩阵Twait = [30 40 20 15 50 70 30 80 90 65];Twindow=[];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if Key == 0else if Key == 1for i=1:20DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1end % key=0else if AssignType == 3%% 第三种实验的情况%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;78 20 15;93 31 12;31 20 13;112 32 15];yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;70 131 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 45 176 12;];MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.5; 0.3 0.4;0.4 0.75;0.3 0.45];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610700 700 900 650];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1 1 1 1 1 1 1];MytTOrd=[3 4; 5 2];%引入新的协同矩阵,最大起始时间矩阵Twait = [30 40 20 15];Twindow=[1300,6000];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if Key == 0%%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%%调用目标分配算法,并取得解和相关数据,计算算法耗费时间%定义目标分配算法对象DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF]  = DDE1.run();Time = cputime -t1;%         %结果solUsolTsolCsolFTimeelse if Key == 1for i=1:20DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1end % key=0end % type =3end % type =2

end % type=1 ```

【路径规划】基于改进差分算法实现三维多无人机协同航迹规划相关推荐

  1. 【控制】《多无人机协同控制技术》周伟老师-第11章-多无人机协同航迹规划方法

    第10章 回到目录 第12章 第11章-多无人机协同航迹规划方法 11.1 航迹规划常用算法 11.2 改进动态规划算法的航迹规划 11.2.1 路径节点生成 11.2.2 最短路径生成 11.2.3 ...

  2. 【路径规划】基于蜣螂优化算法的三维无人机路径规划(山区地形)【Matlab代码#12】

    文章目录 [可更换其他算法,`获取资源`请见文章第5节:资源获取] 1. 蜣螂优化算法DBO 2. 无人机路径规划 3. 部分代码展示 4. 效果图展示 5. 资源获取 [可更换其他算法,获取资源请见 ...

  3. matlab三维路径规划,【路径规划】基于A星算法的三维路径规划matlab源码

    %% 该函数用于演示基于A_Star算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 starttime=cputime; load HeightData z ...

  4. 【WSN】基于改进鲸鱼算法算法实现无线传感器网络wsn节点部署优化matlab源码

    1 算法介绍 1.1 wsn模型 1.2 鲸鱼算法 鲸鱼优化算法(WOA),该算法模拟了座头鲸的社会行为,并引入了气泡网狩猎策略. 1.1 灵感 鲸鱼被认为是世界上最大的哺乳动物.一头成年鲸可以长达 ...

  5. 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)

    机器学习之MATLAB代码--IWOA_BILSTM基于改进鲸鱼算法优化的BiLSTM预测算法(十六) 代码 数据 结果 代码 1. %% 基于改进鲸鱼算法优化的BiLSTM预测算法 clear;cl ...

  6. 萤火虫算法_每日论文38:基于改进萤火虫算法的分布式电源优化配置

    每日论文 第三十八篇 2020/08/26 摘要:在分析分布式电源特性的基础上,建立了含分布式电源的购电成本最小.网损费用最小.投资成本最小以及电压稳定裕度最大的多目标优化模型,能够比较实际.科学地反 ...

  7. 基于连通域字符分割的流程_基于改进连通域算法的车牌字符分割方法

    基于改进连通域算法的车牌字符分割方法 朱亚萍,邱锦山,杨成忠 [摘 要] 摘要:为了解决车牌字符分割中不连通汉字分割.粘连字符分割以及 竖直边框干扰等问题,提出了一种基于改进连通域算法的车牌字符分割方 ...

  8. 基于改进SURF算法的实时视频拼接

    Journal of Image and Signal Processing Vol.04 No.04(2015), Article ID:16229,9 pages 10.12677/JISP.20 ...

  9. kettle spoon判断增量更新_【论文推荐】张斌等:基于改进 SOINN 算法的恶意软件增量检测方法...

    基于改进SOINN算法的恶意软件增量检测方法 张斌1,2, 李立勋1,2, 董书琴1,2 1 信息工程大学,河南 郑州 450001 2 河南省信息安全重点实验室,河南 郑州 450001 摘要:针对 ...

  10. kelvin模型蠕变方程_基于改进Kelvin模型的三维蠕变损伤模型研究

    基于改进 Kelvin 模型的三维蠕变损伤模型研究 吴祝林 1 , 2 王 伟 1 , 2 朱鹏辉 1 , 2 陈 曦 1 , 2 [摘 要] 摘要:岩石在长时间的蠕变发展中,会呈现出不同的阶段性特性 ...

最新文章

  1. 架构高性能网站秘笈(一)——了解衡量网站性能的指标
  2. python爬虫之selenium,谷歌无头浏览器
  3. Linux Ubuntu使用技巧
  4. 数据库-优化-案例-count()函数的优化
  5. redhat 添加ssh端口_RHEL 7修改ssh默认端口号
  6. 投影仪是计算机的基本配置6,关于网络投影仪的六个问题
  7. 报告指出数据中心效率有所提高
  8. mui 时间样式错乱_微信公众号素材样式中心在哪?公众号动态分割线怎么添加?...
  9. 七、有机硅柔软剂在不同发展阶段分子结构特征及主要解决的问题?
  10. CCF 送货(满分代码)2015-12-4
  11. Ubuntu pip AttributeError: 'module' object has no attribute '_main'
  12. 自动开关机软件哪个好?自动开关机软件盘点
  13. 百度文库文档 下载券文档 代下载 原格式不变
  14. 直播系统源代码,快速实现改变图片尺寸
  15. MCSA Server 2012 R2 IPV6
  16. fpga驱动步进电机转动指定角度_通过PLC实现步进电机定位控制的方法
  17. 芭蕉树上第十二根芭蕉--opencv配置问题
  18. mASK调制在AWGN信道下的可达信息速率的积分计算法
  19. unity粒子系统碰撞
  20. hdu1429 胜利大逃亡(续)

热门文章

  1. Android手机开启开发者选项(红米note7举例)
  2. mysql 50个经典语句_MYSQL经典语句大全——技巧篇
  3. 【重磅】Libra Credit 和Uphold 达成战略合作
  4. __stack_chk_fail问题及解决方案
  5. 有关电影《邪不压正》和姜文系列
  6. 《全职高手》人物词频分析和词云图片生成
  7. 不同终端通信用c语言实现,采用蓝牙技术的北斗终端通信模块的设计
  8. 关于 Hypervisor的理解
  9. python穷举法列举_穷举法
  10. Preempt_RT Linux技术文档(一)技术基础(中英文对照)