差分进化算法(Differential Evolution)-程序员宅基地

技术标签: 差分进化  进化计算  

一、差分进化算法的由来

差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。

差分进化思想来源即是早期提出的遗传算法(GeneticAlgorithm,GA),模拟遗传学中的杂交(crossover)、变异(mutation)、复制(reproduction)来设计遗传算子。

差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异、交叉和选择三个步骤。不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著。


二、差分进化算法的流程

首先说明一下,差分进化算法中,DE的群体由突变和选择过程驱动。突变过程,包括突变和交叉操作,这两步操作被设计用于利用或探索搜索空间,而选择过程被用于确保有希望的个体的信息可以进一步利用。

1.种群的初始化

在解空间中随机均匀产生M个个体,每个个体由n维向量组成 

                                                     

第i个个体的第j维值取值方式如下:

                                                   

 

对于群体规模参数M,一般介于5×n与10×n之间,但不能少于4×n。

2.变异操作

在第g次迭代中,从种群中随机选择3个个体Xp1(g),Xp2(g),Xp3(g),并且所选择的个体不一样,那么这三个个体生成的变异向量为:

                                                       

其中,Δp2,p3(g)=Xp2(g)−Xp3(g)是一个差分向量,F是缩放因子。

对于缩放因子F来说,一般取值为[0,2]之间进行选择,通常情况下去0.5.

在这里说一下参数F的自适应调整:

将变异算子中随机选择的三个个体进行从优到劣进行排序,得到Xb,Xm,Xw,他们对于的适应度是fb,fm,fw,变异算子改为:

                                                                   

同时,F的取值,根据生成差分向量的两个个体自适应变化:

                                                                 

在这里附上一些变异策略:

3.交叉操作

                                                              

其中cr是属于[0,1]之间的值,为交叉概率。

其中参数cr的自适应调整如下:

                                            

其中fi是个体xi的适应度值,fmin和fmax分别是当前种群中最差和最优个体的适应度值,f~是当前种群的适应度的平均值,crl和cru分别是cr的下限与上限,一般crl = 0.1,cru = 0.6。

4.选择操作

                                                

对于每一个个体来说,得到的解要好于或者持平于个体通过变异,交叉,选择达到全部最优。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jodie123456/article/details/95486270

智能推荐

windows dll 和 Linux so 的异同_linux是否有类似dll-程序员宅基地

文章浏览阅读2.9k次。摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。1、..._linux是否有类似dll

Linux 介绍快速浏览-程序员宅基地

文章浏览阅读62次。Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序Linux的基本原则:1、由目的单一的小程序组成;组合小程序完成复杂任务;2、一切皆文件;3、尽量避免捕获用户接口;4、配置文件保存为纯文本格式;用户接口GUI接口:CLI接口: 命令提示符,prompt, bash(shell) #: root $: 普通用户 命令:命令格式: 命令 选..._显示/etc/目录下所有pa开头的文件 并统计其个数

Angular项目构建指南 - 不再为angular构建而犹豫不决-程序员宅基地

文章浏览阅读63次。前言接触Angular也有小半个月了,虽然没有使劲折腾,不过正所谓"no zuo no die".学一门新东西,不好好折腾一下总觉得对不起祖国,最不起人民...好像扯远了,想写前言来着.为什么要写这篇构建指南?最大的原因是为了给正在找这方面资料,挣扎于各种说法中的同学一个借鉴,同时我也把自己的经验记录下来,两全其美.正文如果你不知道什么是Ang..._不需重新构建配置 angular

dataguard主库丢失archivelog,如何不重建备库?-程序员宅基地

文章浏览阅读112次。dataguard主库丢失archivelog,如何不重建备库?本站文章除注明转载外,均为本站原创:转载自lovewife&lovelife—Roger提供oracle技术支持服务本文链接地址:dataguard主库丢失archivelog,如何不重建备库?昨天群中有网友问到dataguard环境中,由于主库archiv..._oracle dataguard主库丢失archivelog,如何不重建备库完成同步? ————————

java 字符串工具_字符串工具——StrUtil-程序员宅基地

文章浏览阅读7k次。字符串处理工具类 StrUtil这个工具的用处类似于Apache Commons Lang中的StringUtil,之所以使用StrUtil而不是使用StringUtil是因为前者更短,而且Str这个简写我想已经深入人心了,大家都知道是字符串的意思。常用的方法例如isBlank、isNotBlank、isEmpty、isNotEmpty这些我就不做介绍了,判断字符串是否为空,下面我说几个比较好用的..._strutil

C语言计算函数运行时间+随机数-程序员宅基地

文章浏览阅读872次。文章目录C语言计算函数运行时间C语言计算函数运行时间#include <time.h>double time1=(double)clock()/CLOCKS_PER_SEC;double time2=(double)clock()/CLOCKS_PER_SEC;printf("%lf\n",double(time2-time1));...

随便推点

怎么屏蔽还有照片_朋友圈要不要屏蔽父母?这个回答太戳心-程序员宅基地

文章浏览阅读191次。个人成长 自媒体学习 旅行拍摄 vlog2020.5.2 天气晴这是你与秋秋的第40次相遇 之 一 ° 大家好,我是秋秋。今天想和大家讨论一个问题,你的朋友圈,有没有屏蔽父母?我记得上小学的时候就申请上QQ号了,还是妈妈给我申请的,QQ上加的第一个人就是妈妈。后来上了初中,身边好多同学都申请了小号,原因是发空间说说的时候不想让父母看到,所以...

usb一转多 树莓派zero_树莓派 Zero USB/以太网方式连接配置教程-程序员宅基地

文章浏览阅读327次。树莓派 Zero 之所以成为一款非常棒的单板计算机并不全因为它小巧的尺寸和便宜的价格,还得益于它便捷、易用的特性。在加装了Zero Quick Plug或microUSB/USB 转换头之后,将树莓派 Zero 和电脑连接起来。树莓派 Zero 即可配置成 USB/以太网设备,这时仅需要一个 USB 接口就实现给树莓派供电的同时将它接入因特网。不再需要携带额外的电源适配器、 USB HUB和..._usb以太网hub后,ifconig

python中power的用法_BI工具学习:在Power BI中运行Python并使用Python绘图-程序员宅基地

文章浏览阅读423次。之前的文章讲解了BI工具学习:手把手地教你用Power BI绘制数据分析图表,其实Power BI还支持Python,我们可以在Power BI中运行Python代码,而且还可以利用Python对Power BI中的数据进行可视化。说明:在Power BI中运行Python,需要先安装Python,关于如何安装Python,网上有无数的教程,这里就不写了。使用Power BI连接Python数据源..._power bi 中如何使用python

Transactional超时时间控制_@transactional添加超时时间-程序员宅基地

文章浏览阅读7.4k次。项目使用的是spring+mybatis+MySQL,今天,我需要把处理一个业务就是,当用户出金失败时,事务能够回滚,同时减少用户的等待时间,因为我发现当处理失败时,用户需要等上1分钟以上的时间,这是不合理的。那么经过一系列的调查发现:spring的事务超时(使用Java注解方式)和mysql InnoDB事务超时是相互关联的。在一个需要进行事务回滚的方法上加入@Trans_@transactional添加超时时间

关于--windows能ping通linux的ip,但是无法访问linux的tomcat首页 的解决办法_windows可以ping通linux服务器,但是打不开服务器的网页-程序员宅基地

文章浏览阅读6.6k次。CentOS版本:6.8Windows操作系统版本:Win10Linux上的tomcat版本:7.0.65linux是使用的NAT模式,及共享主机的IP地址。本来想使用windows本地访问linux上的tomcat首页,结果一直访问不成功;但在windows下能够ping通linux的ip,这很明显就是linux的端口没有开放,所以就在linux上设置了一下防火墙,将以下配置加入到了..._windows可以ping通linux服务器,但是打不开服务器的网页

Dbeaver一次执行多条MySQL语句报错_dbeaver执行多条语句报错-程序员宅基地

文章浏览阅读969次。选择驱动属性,将allowMultiQueries设置为TRUE,然后点击确定即可。解决方法,打开编辑选项。_dbeaver执行多条语句报错