引言
差分进化算法是基于群体智能理论的优化算法,是由群体中个体之间的合作与竞争产生的智能优化搜索算法,它保持基于种群的全局搜索策略,通过基于实数编码、差分的简单变异操作和“一对一”竞争生存策略
差分进化算法原理
差分进化算法是一种自组织最小化方法,它必须利用种群中两个随机选择的不同向量干扰现有向量,干扰种群中的所有向量。
通过将种群中两个成员之间的加权差分向量与第三个成员相加,生成新的参数向量,该操作为“变异”。
将变异矢量的参数与另一个预定的目标矢量参数按一定规则混合生成实验矢量,该操作为“相交”;
如果实验向量成本函数低于目标向量的成本函数,则实验向量将在下一代代替目标向量,该操作变为“选择”;
差分进化算法流程
具体步骤如下。
确定差分进化算法的控制参数和采用的具体策略。 控制参数包括种群数量、变异算子、交叉算子、最大进化代数、终止条件等。
随机产生初始种群,进化代数k=1;
评估初始种群是计算初始种群中每个个体的目标函数值。
判断是否达到了终止条件,是否达到了最大进化代数; 时,进化结束,将此时的最佳个体作为解输出; 否则,继续下一步操作。
进行变异操作和交叉操作,处理边界条件,得到临时种群。
评价临时个体群,计算临时个体群中每个个体的目标函数值。
对临时种群中的个体和原种群中的对应个体进行“一对一”选择操作,得到新的种群。
进化代数k=k 1,步骤(4)。
实例:
$$计算函数的最小值。 其中个体x的维数n=10。 这是一个简单的平方和函数,只有一个极小点x=(0,0,0 )。 $$
差分进化求函数极值%%%
初始化%%%初始化%%%初始化%%%
clear all;
全部关闭;
clc;
NP=50; %种群数量
D=10; %变量维
G=200; %最大进化代数
F0=0.4; %初始变异算子
CR=0.1; %交叉运算符
Xs=20; %上限
Xx=-20; %下限
yz=10^-6; %阈值
初始值%%%%%初始值%%%%%%%%%%
x=Zeros(d,NP ); %初始种群
v=Zeros(d,NP ); %变异种群
u=Zeros(d,NP ); 选择%种群
x=rand(d,NP ) ) xs-Xx ) xx; 给出%初始值
计算目标函数
for m=1:NP
ob(m )=func1) x ) :m );
结束
trace(1)=min ) ob;
差分进化循环(差分进化循环(差分进化循环(差分进化循环(差分进化循环(差分进化循环(差分进化循环(差分进化循环(差分进化循环) ) ) ) ) ) )。
for gen=1:G
变异操作(变异操作(变异操作)、变异操作)、变异操作)、变异操作(变异操作)、变异操作(变异操作)、变异操作)、变异操作(变异操作)、变异操作)、变异操作(变异操作)
自适应变异算子%%%自适应变异算子% %
lamda=exp(1-g/) g1-gen );
f=f0*2^(lamda );
r1、r2、r3和m为相互不同的%%%%
for m=1:NP
r1=坦率的飞机([1,NP],1,1 );
wile(R1==m ) ) ) ) ) )。
r1=坦率的飞机([1,NP],1,1 );
结束
r2=坦率的飞机([1,NP],1,1 );
wile(R2==M )|(R2==R1 ) ) ) ) ) ) ) ) )。
r2=坦率的飞机([1,NP],1,1 );
结束
r3=坦率的飞机([1,NP],1,1 );
wile(R3==m )|(R3==R1|R3==R2 ) ) ) ) ) ) wile(R3==m ) ) ) ) ) ) wile (R3==R1|R3==R2 ) )
r3=坦率的飞机([1,NP],1,1 );
结束
v(:m )=x(:r1 ) f* ) x65:R2(-x65:r3 );
结束
交叉操作(交叉操作() () ) ) ) ) ) ) ) ) ) ) ) ) ) )。
r=坦率的飞机([1,NP],1,1 ); %请务必确保v(:进入u(: )
for n=1:D
Cr=rand(1;
if(Cr=Cr )|(n==r ) ) ) ) ) ) ) ) ) )。
u(n, )=v ) n, ); %批量操作,替换所有个体的第n个维
else
u(n, )=x ) n, );
结束
结束
处理边界条件
for n=1:D
for m=1:NP
if(u(n,m ) Xx )|(u (n,m ) Xs ) ) ) ) ) ) ) ) if ) ) ) ) ) ) if ) ) ) ) ) ) ) )。
u(n,m )=rand*(xs-Xx ) xx;
结束
结束
结束
%%%选择操作%%%%选择操作%%%%%%选择操作%%%%%%选择操作% % % % % % % % % %
for m=1:NP
OB1(m )=func1) u ) :m );
结束
for m=1:NP
ifob1(m ) ob ) m )
x(:m )=u(:m );
结束
结束
for m=1:NP
ob(m )=func1) x ) :m );
结束
trace(gen1)=min ) ob;
ifmin(ob ) yz
黑;
结束
结束
画、画、画、
图形
plot (跟踪;
xlabel ('重复次数);
ylabel (目标函数值);
title(de目标函数曲线);
适应度函数(适应度函数(适应度函数);适应度函数);适应度函数(适应度函数(适应度函数);适应度函数);适应度函数(适应度函数);适应度函数);适应度函数)
functionresult=func1(x )
summ=sum(x.^2;
结果=summ;
结束
程序员灯塔
请转载原文链接。 差分进化算法介绍及matlab的实现