差分进化算法(matlab)

clear all;
close 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)=func2(x(:,m));
end
trace(1)=min(Ob);
for gen=1:G
    lamda=exp(1-G/(G+1-gen));%自适应变异算子
    F=F0*2^(lamda);
    %r1 r2  r3 互相不同
    for m=1:NP
        r1=randi([1,NP],1,1);
        while (r1==m)
            r1=randi([1,NP],1,1);
        end
        r2=randi([1,NP],1,1);
        while (r2==m)|(r2==r1)
            r2=randi([1,NP],1,1);
        end
        r3=randi([1,NP],1,1);
        while (r2==m)|(r2==r1)|(r3==r2)
             r3=randi([1,NP],1,1);
        end
        v(:,m)=x(:,r1)+F*(x(:,r2)-x(:,r3));%变异操作
    end
    %交叉操作
    r=randi([1,D],1,1);
    for n=1:D
        cr=rand(1);
        if(cr<=CR)|(n==r)
            u(n,:)=v(n,:);
        else
             u(n,:)=x(n,:);
        end
    end
    %边界处理
    for n=1:D
        for m=1:NP
            if(u(n,m)<Xx)|(u(n,m)>Xs)
                u(n,m)=rand*(Xs-Xx)+Xx;
            end
        end
    end
    for m=1:NP%新生临时种群
        Ob1(m)=func2(u(:,m));
    end
    for m=1:NP
        if Ob1(m)<Ob(m)%临时种群与原种群“一对一比较”,选择产生新种群
            x(:,m)=u(:,m);
        end
    end
    for m=1:NP
        Ob(m)=func2(x(:,m));
    end
    trace(gen+1)=min(Ob);
    if min(Ob(m))<yz%使用阈值终止迭代
        break
    end
end
[Sort,Index]=sort(Ob);
x=x(:,Index);
X=x(:,1);
Y=min(Ob);
figure 
plot(trace);
xlabel('迭代次数');
ylabel('目标函数值');
ttle('目标函数曲线');
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值