差分进化算法matlab代码_智能优化算法及其MATLAB实例-差分进化笔记

2814e95ea87bf0173f1748becdfdd3f1.png

概念

1、是基于群体智能理论的优化算法,通过群体内个体间的合作与竞争而产生的智能优化搜索算法。相比较于进化计算,保留了基于种群的全局搜索策略,采用实数编码,降低了进化计算的复杂性。

  差分算法是一种随机的启发式、自组织最小化算法。

2、查分算法的特点:

(1)结构简单、容易使用;

(2)性能优越;

(3)自适应性;

(4)具有内在的并行性,可协同搜索;

(5)算法通用;

3、操作程序:

初始化——变异——交叉——选择——边界条件处理

4、特点

相对于遗传算法,增加边界条件处理;

其变异向量的产生是差分的形式:

v(:,m) = x(:,r1)+F*(x(:,r2)-x(:,r3));

在交叉过程中,其的实验向量变化为:

    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

其中,D为维度,CR为其的交叉算子,范围为[0,1];

在选择过程中,实验向量只与一个个体相比较:

     for m = 1:NP %计算每个种群的适应度
         Ob1(m) = func1(u(:,m));
     end
     for m = 1:NP
         if Ob1(m)<Ob(m)
             x(:,m) = u(:,m);
         end
     end
      for m = 1:NP
          Ob(m) = func1(x(:,m));
      end

5、改进的差分计算

分为两种:自适应差分计算与离散型差分计算,变异过程不同。

自适应差分计算为:

    lamada = exp(1-G/(G+1-gen));
    F = F0*2^(lamada);

离散型差分计算为:

v(:,m) = floor[x(:,r1)+F*(x(:,r2)-x(:,r3))]

实例

计算函数最小值:

clear all;
close all;
clc

NP=50;
D=10;
G=200;
F0=0.4;
CR=0.1;
yz=10^-6;
Xs=20;
Xx=-20;
%% 赋初值
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) = func1(x(:,m));
end
tarce(1) = min(Ob);

%% 差分进化
for gen = 1:G   
    %%%%变异%%%%
    lamada = exp(1-G/(G+1-gen));
    F = F0*2^(lamada);
    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 (r3==m)||(r3 == 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) = func1(u(:,m));
     end
     for m = 1:NP
         if Ob1(m)<Ob(m)
             x(:,m) = u(:,m);
         end
     end
      for m = 1:NP
          Ob(m) = func1(x(:,m));
      end
      trace(gen+1) = min(Ob);
      if(min(Ob))<yz
          break
      end
end
[SortOb,Index] = sort(Ob);
x = x(:,Index);
X = x(:,1);
Y = min(Ob);

figure
plot(trace)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值