一、介绍
差分进化算法是模拟自然界生物种群以“优胜劣汰,适者生存”为原则的进化发展规律而形成的一种随机启发式搜索算法。其保留了基于种群的全局搜索策略,采用实数编码,基于差分的简单变异操作和一对一的竞争生存策略,比遗传算法更简单。同时,差分进化算法独特的记忆能力使其可以动态的跟踪当前的搜索情况,及时调整搜索测量,因此具有较强的全局收敛能力。
目前为止,差分进化算法已经成为一种求解非线性,不可微,多极值和高维复杂函数的一种极其有效的方法。
在优化设计中,差分进化算法与传统的算法相比,具有以下特点:
1.差分进化算法从一个群体即多个点而不是从一个点开始搜索,这也是算法能够以较大的概率找到整体最优解的原因。
2.算法的进化准则是基于适应性信息的,不需要其他的辅助性信息,如要求函数可导,连续等。
3. 差分进化算法具有内在的并行性,适用于大规模并行分布处理,减小时间成本开销。
但缺点为:
1.算法后期个体之间的差异性减小,收敛速度慢,易陷入局部最优。
2.没有利用个体的先验知识,可能较多的迭代次数才能收敛到全局最优
算法框架:

(1)群体初始化
在n维空间里随机产生满足约束条件的M个个体
xij(0)=xijmin+(xijmax−xijmin)∗rand(0,1)x_{ij}(0)=x_{ij_{min}}+(x_{ij_{max}}-x_{ij_{min}})*rand(0,1)xij​(0)=xijmin​​+(xijmax​​−xijmin​​)∗rand(0,1)
其中,xijmax,xijminx_{ij_{max}},x_{ij_{min}}xijmax​​,xijmin​​表示第jjj个染色体的上下界。
(2) 变异
从群体中随机选择三个个体xp1,xp2,xp3x_{p1},x_{p2},x_{p3}xp1​,xp2​,xp3​且要求i≠p1≠p2≠p3i\neq p1\neq p2\neq p3i̸​=p1̸​=p2̸​=p3,则:
hij(t+1)=xp1j(t)+F∗(xp2j(t)−xp3j(t))h_{ij}(t+1)=x_{p1j}(t)+F*(x_{p2j}(t)-x_{p3j}(t))hij​(t+1)=xp1j​(t)+F∗(xp2j​(t)−xp3j​(t))
如果没有局部优化的问题,变异操作为:
hij(t+1)=xbj(t)+F∗(xp2j(t)−xp3j(t))h_{ij}(t+1)=x_{bj}(t)+F*(x_{p2j}(t)-x_{p3j}(t))hij​(t+1)=xbj​(t)+F∗(xp2j​(t)−xp3j​(t))
其中,xp2j(t)−xp3j(t)x_{p2j}(t)-x_{p3j}(t)xp2j​(t)−xp3j​(t)为差异化向量,是差分进化算法的关键;F为变异因子;P1,P2,P3为随机整数,表示个体在种群中的序号;xbjx_{bj}xbj​是当前种群中最好的个体,这一步借鉴了当前种群中最好的个体信息,可以大大加快收敛速度
(3) 交叉
交叉操作可以增加群体的多样性
vij(t+1)={hij(t+1),rand  lij≤CRhxij(t),rand  lij>CRv_{ij}(t+1)=\left\{ \begin{array}{c} h_{ij}(t+1),rand\; l_{ij} \leq CR\\ hx{ij}(t),rand\; l_{ij}>CR\ \end{array}\right. vij​(t+1)={hij​(t+1),randlij​≤CRhxij(t),randlij​>CR ​
CR为交叉因子。
(4) 选择操作
为了确定xi(t+1)x_i(t+1)xi​(t+1)是否成为下一代的成员,我们需要对目标向量和当前的向量的适应度值进行比较,具体由适应度函数决定:
xi(t+1)={vi(t+1),f(vi1(t+1),...vin(t+1))&lt;f(xi1(t),...,xin(t))xi(t+1),f(vi1(t+1),...vin(t+1))≥f(xi1(t),...,xin(t))x_{i}(t+1)=\left\{ \begin{array}{c} v_{i}(t+1),f(v_{i1}(t+1),...v_{in}(t+1)) &lt;f(x_{i1}(t),...,x_{in}(t))\\ x_{i}(t+1),f(v_{i1}(t+1),...v_{in}(t+1))\geq f(x_{i1}(t),...,x_{in}(t)) \ \end{array}\right. xi​(t+1)={vi​(t+1),f(vi1​(t+1),...vin​(t+1))<f(xi1​(t),...,xin​(t))xi​(t+1),f(vi1​(t+1),...vin​(t+1))≥f(xi1​(t),...,xin​(t)) ​
通过反复执行步骤(2)到(4),直至达到最大的迭代次数。
二、参数设置
1.变异因子F
变异因子是控制种群多样性和收敛性的重要参数,当F值较小时,种群之间的差异度小,容易使得种群过早的收敛于局部最小值,当F过大时,容易跳出局部最优解,但是收敛速度会减慢。F一般在[0,2]之间取值。
2.交叉因子CR
交叉因子可以控制个体参数的各维对交叉的参与程度,全局搜索和局部搜索能力的平衡。CR越小,种群多样性减小,容易收敛于局部最优解。CR越大,收敛速度变快,但过大,扰动大于群体差异度时,会导致收敛变慢。CR一般取[0,1]之间。
3.群体规模Size
Size一般为5D和10D之间,D时求解的维度。Size越大,获得最优解的概率越大,但计算时间增长。
4.迭代次数G
G 一般作为近化过程的终止条件,G越大,最优解越精准。当然终止条件也可以由适应度函数给出。
三、matlab代码
以函数
f(x,y)=−20e−0.2(x2+y2)/2−e(cos2πx+cos2πy)/2+ef(x,y)=-20e^{-0.2\sqrt{({x^2+y^2})/2}}-e^{({cos2\pi x+cos2 \pi y})/2}+e f(x,y)=−20e−0.2(x2+y2)/2​−e(cos2πx+cos2πy)/2+e为例
三维图为:

可见该函数是多极值的。函数全局最优解为max(max(f(x,y)))=-19.2926,使用一般的算法,极易陷入局部的最优解。
使用差分进化算法,结果为-19.2523,与真实值十分的接近。
适应度函数变化曲线为:

matlab代码为:

% clear all;
% close all;
%
size=50;%群体个数
Codel=2;%所求的变量个数MinX(1)=-5;%未知量范围MinX(2)=-5;MaxX(1)=5;MaxX(2)=5;G=200;%迭代次数F=1.2;%变异因子[0 2]cr=0.8;%交叉因子[0.6 0.9]%初始化种群for i=1:1:CodelP(:,i)=MinX(i)+(MaxX(i)-MinX(i))*rand(size,1);    endBest=P(1,:);%全局最优个体 之后不断更新for i=2:sizeif(fun_DE(P(i,1),P(i,2))>fun_DE(Best(1),Best(2)))Best=P(i,:);endendfi=fun_DE(Best(1),Best(2));%不是C语言 一定要记得给初始变量否则程序跑飞%%进入循环直到满足精度要求或者迭代次数达到for Kg=1:1:Gtime(Kg)=Kg;%第二步 变异for i=1:sizer1=1;r2=1;r3=1;r4=1;%使得个体满足变异条件while(r1==r2||r1==r3||r1==r4||r2==r3||r2==r4||r3==r4||r1==i||r2==i||r3==i||r4==i)r1=ceil(size*rand(1));%大小匹配 r2=ceil(size*rand(1));r3=ceil(size*rand(1));r4=ceil(size*rand(1));endh(i,:)=P(r1,:)+F*(P(r2,:)-P(r3,:));%h(i,:)=Best+F*(P(r2,:)-P(r3,:));for j=1:Codel %检查是否越界if(h(i,j)<MinX(j))h(i,j)=MinX(j);elseif(h(i,j)>MaxX(j)) h(i,j)=MaxX(j);endend%交叉for j=1:Codeltemper=rand(1);if(temper<cr)v(i,j)=h(i,j);elsev(i,j)=P(i,j);endend%选择if(fun_DE(v(i,1),v(i,2))>fun_DE(P(i,1),P(i,2)))P(i,:)=v(i,:);endif(fun_DE(P(i,1),P(i,2))>fi)fi=fun_DE(P(i,1),P(i,2));Best=P(i,:);endendBest_f(Kg)=fun_DE(P(i,1),P(i,2));endfprintf('最优解结果为%f,%f',Best(1),Best(2));fprintf('最大函数值为%f',Best_f(Kg));plot(time,Best_f(time));

适应度函数

function J=fun_DE(x1,x2)
% J=100*(x1^2-x2)^2+(1-x1)^2;
J=-20*exp((0.2*sqrt((x1^2+x2^2)/2)))-exp((cos(2*pi*x1)+cos(2*pi*x2))/2)+exp(1);
end

差分进化算法之Matlab实现相关推荐

  1. 多目标差分进化算法(Matlab代码实现)

  2. 差分进化算法求解函数最值问题

    差分进化算法求解函数最值问题 声明: 1.本文源代码来自书目<智能优化算法及其MATLAB实例(第3版)>,目的在于为MATLAB初学者提供更简明的代码解析,方便读者了解算法及MATLAB ...

  3. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

  4. 差分进化算法原理及matlab代码实现

    差分进化算法介绍: 在自然界中,遗传,变异,选择的作用,使得生物体优胜略汰,不断由低级向高级进化,人们发现适者生存这一规律可以模式化,从而构成一些列优化算法.差分进化算法就是从这种模式中产生的一种智能 ...

  5. 变异系数法matlab程序,差分进化算法原理及matlab代码实现

    差分进化算法介绍: 在自然界中,遗传,变异,选择的作用,使得生物体优胜略汰,不断由低级向高级进化,人们发现适者生存这一规律可以模式化,从而构成一些列优化算法.差分进化算法就是从这种模式中产生的一种智能 ...

  6. MATLAB差分进化算法求解超市物流配送选址问题实例

    差分进化算法编程问题实例: MATLAB差分进化算法求解超市物流配送中心选址问题代码实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要 ...

  7. 【图像压缩】基于matlab香农熵和差分进化算法多级图像阈值图像压缩【含Matlab源码 2035期】

    一.差分进化算法简介 1 前言 在遗传.选择和变异的作用下,自然界生物体优胜劣汰,不断由低级向高级进化和发展.人们注意到,适者生存的进化规律可以模式化,从而构成一些优化算法:近年来发展的进化计算类算法 ...

  8. 【优化布局】基于差分进化算法求解电力系统负荷分配中的应用问题matlab代码

    1 简介 差分进化算法在处理连续域.非凸.不确定性和全局优化问题时具有优势,已在包括电力系统最优潮流在内的诸多领域得到广泛应用.电力系统最优潮流是一个复杂的非线性优化问题,要求在满足特定的电力系统运行 ...

  9. matlab 思维进化算法,差分进化算法介绍及matlab实现

    引言 差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争而产生的智能优化搜索算法,它保留了基于种群的全局搜索策略,采用实数编码.基于差分的简单变异操作和"一对一&quo ...

最新文章

  1. java计算正方形_在地图计算圆的外接正方形,并返回左上顶点和右下顶点(java、javascript)...
  2. 【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
  3. -Xms -Xmx -Xmn -Xss -XX:
  4. oracle创建数据库用户并授权,oracle创建数据库、表空间、用户并授权
  5. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...
  6. React开发(254):react项目理解 ant design 注意参数传递格式
  7. android studio读写txt,Android Studio从.txt文件读取/写入,保存路径?
  8. Exchange Server 2016 独立部署/共存部署 (四)—— 配置DAG(上)
  9. cmd命令行开启windows远程桌面服务
  10. 问卷与量表数据分析(SPSS+AMOS)学习笔记(六) : SPSS 描述性统计分析
  11. 量化交易接口UFX是什么?
  12. OPENCV C++保存视频
  13. 游戏联网必备: 国内外实时对战服务详细对比
  14. R及R Studio下载及简单介绍(界面+R语言)
  15. 程序员的浪漫情诗,您学会了吗?
  16. WPF帝友借贷系统MV模式开发日志2021/04/02_前台登入注册页面搭建
  17. CRM系统促进企业高效管理
  18. 计算2个日期之间年龄
  19. freeline使用指南
  20. CAD绘图次序调整 绘图次序置底 c#

热门文章

  1. flux unity 流体_【游戏流体力学基础及Unity代码(八)】激波捕捉法和RiemannSolver...
  2. 什么是泛域名解析和泛域名解析配置方法
  3. [C语言]字节跳动2019春招研发部分编程题
  4. 厦大AI研究院今日揭牌成立:数学系校友陈纯院士领衔,最亮眼的是「交叉」研究思路...
  5. 2022汽车驾驶员(初级)考试题库及模拟考试
  6. garageband 淡出_如何在GarageBand中自动执行音量,平移和其他效果
  7. iframe无边框实现
  8. 英语语法总结--终结版
  9. 美团技术团队前端安全系列
  10. im即时通讯开发:进程被杀底层原理、APP应对被杀技巧