差分进化算法程序基本程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function DE(Gm,F0)
%差分进化算法程序基本程序
%F是变异率 %Gm=1000; %最大迭代次数
Gm=1000;
F0=0.8;
Np=100; %种群规模
CR=0.9; %杂交参数
G=1;%初始化代数
N=10;%所求问题的维数
ge=zeros(1,Gm);%各代的最优值
bestx=zeros(Gm,N);%各代的最优解
%产生初始种群
%xmin=-10;xmax=100;%带负数的下界
xmin=-5.12;xmax=5.12;
function y=f(XX);
y=sum(XX.^4-16*XX.^2+5*XX)/10+79.333;
%y=sum(XX.^2-10.*cos(2.*pi.*XX)+10);
end
X0=(xmax-xmin)*rand(Np,N)+xmin;
X=X0;
%%%%%%%%%%变异操作
X1new=zeros(Np,N);%初始化
X1_new=zeros(Np,N);%初始化
X1=zeros(Np,N);%初始化
value=zeros(1,Np);
while G<=Gm
for i=1:Np
%产生j,k,p三个不同的数
a=1;b=Np;
dx=randperm(b-a+1)+a-1;
j=dx(1);k=dx(2);p=dx(3);
if j==i
j=dx(4);
elseif k==i
k=dx(4);
elseif p==i
p=dx(4);
end
namd=exp(1-Gm/(Gm+1-G));%变异算子
F=F0*2.^namd ;
bon=X(p,:)+F*(X(j,:)-X(k,:));
if (bon>xmin)&(bon
else X1new(i,:)=(xmax-xmin)*rand(1,N)+xmin;
end
end
%%%%%%%%%%%%杂交操作
for i=1:Np
if rand>CR %利用二项分布来交叉
X1_new(i,:)=X(i,:);
else
X1_new(i,:)=X1new(i,:);
end
end
%%%%%%%%%%%%%%%竞争操作
for i=1:Np
if f(X1_new(i,:))
else
X1(i,:)=X(i,:);
end
end
%找出最小值
for i=1:Np
value(i)=f(X1(i,:));
end
[fmin,nmin]=min(value);
ge(G)=fmin;
bestx(G,:)=X1(nmin,:);
X=X1;
trace(G,1)=G; trace(G,2)=ge(G);
G=G+1;
end
%ii=linspace(1,Np,Np);
%plot(ii,ge)
[gmin,n]=min(ge);
bestvalue=gmin
bestsolution=bestx(n,:)
%目标函数的倒数
%plot(trace(:,1),trace(:,2));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%求得结果
%DE(1000,0.6)
%ans =0.9993
%best =-2.9035 -2.9035 -2.9035 -2.9035 -2.9035 -2.9035 -2.9035 -2.9035 -2.9035 -2.9035
%DE(1000,0.8)
%ans =0.8459
%best =-2.9481 -2.9029 -3.0410 -2.9235 -2.9949 -2.9332 -3.0126 -2.9316 -2.9341 -2.8203