差分演化算法matlab程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function DE(Gm,F0)

%差分进化算法程序基本程序

%F是变异率F0=0.6 Gm=1000; %最大迭代次数

Np=100; %种群规模

CR=0.9; %杂交参数

G=1;%初始化代数

D=0;%所求问题的维数

eps=1e-9;%精度

ge=zeros(1,Np);%各代的最优值

bestx=zeros(Np,D);%各代的最优解

%产生初始种群

%xmin=-10;xmax=100;%带负数的下界

xmin=-5.12;xmax=5.12;

%-----函数值计算-----------

function result=DEMB(XX);

sol=XX;

result=0;

for i=1:D

result=result+sol(i)^2;

%y=sum(XX.^2-10.*cos(2.*pi.*XX)+10);

end

end

%---------------------------

X0=(xmax-xmin)*rand(Np,D)+xmin;

X=X0;

%%%%%%%%%%变异操作

X1new=zeros(Np,D);%初始化

X1_new=zeros(Np,D);%初始化

X1=zeros(Np,D);%初始化

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

%变异算子

F=0.5;

bon=X(p,:)+F*(X(j,:)-X(k,:));

if (bon>xmin)&(bon

else X1new(i,:)=(xmax-xmin)*rand(1,D)+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 DEMB(X1_new(i,:))

X1(i,:)=X1_new(i,:);

else

X1(i,:)=X(i,:);

end

end

%找出最小值

for i=1:Np

value(i)=DEMB(X1(i,:));

end

[fmin,min]=min(value);

ge(G)=fmin;

bestx(G,:)=X1(nmin,:);

G=G+1;

X=X1;

end

%ii=linspace(1,Np,Np);

%plot(ii,ge)

[gmin,n]=min(ge);

value=gmin

solution=bestx(n,:)

%目标函数的倒数

End

相关文档
最新文档