差分进化算法(differential evolution, DE)是一类基于群体的自适应全局优化算法,有较强的鲁棒性和全局寻优能力,主要用于求解实数优化问题。它从数学角度看是一种随机搜索算法,从工程角度看是一种自适应的迭代寻优过程。差分进化算法凭借其独特的优势在数据挖掘、模式识别、电磁学等领域被广泛应用。
算法流程
差分进化算法采用实数编码,基于差分的简单变异操作和“一对一”的竞争生存策略,具体步骤如下
- 随机初始化种群规模N,进化代数t=1;
- 计算初始种群中的每个个体的目标函数值;
- 判断是否达到终止条件或达到最大进化代数。若满足,则进化停止,将此时的最佳个体作为解输出;否则执行步骤4;
- 进行变异操作和交叉操作,并对边界条件进行处理,得到临时种群;
- 对临时种群进行评价,计算临时种群中每个个体的适应度值;
- 进行选择操作,得到新的种群;
- 进化代数t=t+1,并用新的种群代替旧种群,返回步骤3.

伪代码
1 | 初始化N个个体 |
MATLAB仿真实例
1.计算函数\(f(x)= \sum_{i=1}^n x_i^2(-20\leq x_i\leq20)\)的最小值,其中个体\(x\)的维数\(n=10\)。这是一个简单的平方和函数,只有一个极小点\(x=(0,0,\cdots,0)\),理论最小值\(f(0,0,\cdots,0)=0\)
仿真过程如下:
(1)初始化个体数目为\(NP=50\),变量维数为\(D=10\),最大进化代数为\(G=200\),初始变异算子\(F_0=0.4\),交叉算子\(CR=0.1\),阈值\(yz=10^{-6}\)。
(2)产生初始种群,计算个体目标函数;进行变异操作、交叉操作、边界条件处理,产生临时种群,其中变异操作采用自适应变异算子,边界条件处理采用在可行域中随机产生参数向量的方式。
(3)计算临时种群个体目标函数,与原种群对应个体进行“一对一”选择操作,产生新种群。
(4)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。
优化结束后,DE目标函数曲线如下图所示

1 | %% 差分进化算法求极值 |
- 求函数\(f(x,y)=3\cos(xy)+x+y\)的最小值,其中x的取值范围为[-4,4],y的取值范围为[-4,4]。这是一个有多个局部极值的函数,其函数值图形如下图所示,其MATLAB实现程序如下:
1 | clc; clear; close all; |

仿真过程如下:
(1)初始化个体数目为NP=20,变量维数为D=2,最大进化代数为G=100,变异算子F=0.5,交叉算子CR=0.1;
(2)产生初始种群,计算个体目标函数;进行变异操作、交叉操作、边界条件处理,产生临时种群,其中边界条件处理采用边界吸收方式;
(3)计算临时种群个体目标函数,与原种群对应个体进行“一对一”选择操作,产生新种群;
(4)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。、
优化结束后,DE目标函数曲线如下图所示

1 | clc; clear; close all; |
- 用离散差分进化算法求函数\(f(x,y)=-((x^2+y-1)^2+(x+y^2-7)^2)/200+10\)的最大值,其中\(x\)的取值为-100~100之间的整数,\(y\)的取值为-100~100之间的整数,其函数值图形如下图所示

1 | %%%%F(x,y)=-((x~2+y-1).^2+(x+y~2-7)^2)/200+10%%%% |
仿真过程如下:
(1)初始化个体数目为NP=20,变量维数为D=2,最大进化代数为G=100,变异算子F=0.5,交叉算子CR=0.1
(2)产生数值为[-100,100]内整数的初始种群,计算个体目标函数;进行变异操作,对变异后的种群内数值进行取整操作,然后进行交叉操作、边界条件处理操作,产生临时种群,其中边界条件处理采用边界吸收方式
(3)计算临时种群个体目标函数,与原种群对应个体进行“一对一”选择操作,产生新种群
(4)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化
优化结束后,DE目标函数曲线如下图所示,优化后的结果为:x=-2,y=-3,函数f(x,y)的最大值为10。

1 | %%%%F(x,y)=-((x~2+y-1).^2+(x+y~2-7)^2)/200+10%%%% |
参考
[1] 包子阳等. 智能优化算法及其MATLAB实例(第3版)[M]. 北京: 电子工业出版社, 2020.