差分演化算法matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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