基本信息
源码名称:差分进化算法
源码大小:0.02M
文件格式:.doc
开发语言:MATLAB
更新时间:2021-04-19
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

差分演化算法的matlab程序:

 

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<xmax) %防止变异超出边界

       X1new(i,:)=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,:))<DEMB(X(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