matlab实现组合差异进化算法(CoDE)(基础简化版)

一,概述

差分进化算法(Differential Evolution,DE)由Storn和Price于1995年首次提出。经过对大量的试验向量产生策略和控制参数设置进行大量的研究,我们已经知道哪些实验向量产生策略适合于全局搜索,哪些试验向量产生策略可用于求解具有旋转特性的问题,哪些控制参数设置可以加速收敛,哪些控制对可分离问题有效,这些实验结论对改进DE的性能非常有帮助,但是在设置DE的时候却没有很好的利用。

沿着以上的思路,组合差异进化算法(CoDE)被提出。

二,算法流程

相比于普通的DE算法,CoDE采用了三组不同的控制参数F与CR值

matlab实现组合差异进化算法(CoDE)(基础简化版)_第1张图片

这第一组用于求解可分离问题,第二组值用于用于维持种群多样性,第三组值取较大的F值,使种群在较大的搜索空间进行开采,以加快收敛速度。

下面是CoDE的伪代码描述

matlab实现组合差异进化算法(CoDE)(基础简化版)_第2张图片

所选取的三个试验向量的产生策略为

matlab实现组合差异进化算法(CoDE)(基础简化版)_第3张图片

注意:current-to-rand/1算子没有使用二项式交叉

三,代码实现

下面附上我的代码实现(初学者,代码可能有许多可以改进的地方,有大佬请帮忙指正)

close all
clear all
clc
max_epoch=2000;     %最大迭代次数
F=[1.0 1.0 0.8];
CR=[0.1 0.9 0.2];
NP=30;        %种群数量
D=30;         %染色体长度
a=-100;        %上下限
b=100;
v1=zeros(NP,D);        
v2=zeros(NP,D);
v3=zeros(NP,D);
x=rand(NP,D)*(b-a)+a;   %初始化初始种群
for i=1:1:NP        
    ob(i)=sum(x(i,:).^2);  %求初始种群的适应度
end        
trace(1)=min(ob);
for i=1:max_epoch        %进行迭代
    num = randperm(3,1);        
    for m=1: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(r1==r2)||(r2==m)
            r2=randi([1,NP],1,1);
        end
        r3=randi([1,NP],1,1);
        while(r3==m)||(r3==r2)||(r3==r1)
            r3=randi([1,NP],1,1);
        end
        v1(m,:)=x(r1,:)+F(:,num).*(x(r2,:)-x(r3,:)); %生成变异体
    end
    for m=1:1:NP           %修补染色体(处理越界数据)
        for n=1:1:D
            if v1(m,n)<=a
                v1(m,n)=a;
            end
            if v1(m,n)>=b
                v1(m,n)=b;
            end
        end
    end
    for c=1:size(v1,1)        %交叉操作
        for k=1:size(v1,2)
            if rand=b
                v2(m,n)=b;
            end
        end
    end
    for c=1:size(v2,1)
        for k=1:size(v2,2)
            if rand=b
                v3(m,n)=b;
            end
        end
    end
    for c=1:size(v3,1)
        for k=1:size(v3,2)
            if rand

运行结果如图

matlab实现组合差异进化算法(CoDE)(基础简化版)_第4张图片

参考文献引用自中南大学王勇的博士学位论文——基于进化算法求解复杂连续优化问题的研究。

你可能感兴趣的:(matlab)