• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: 算法  

资源简介

差分进化算法在寻优的过程中,首先,从父代个体间选择两个个体进行向量做差生成差分矢量;其次,选择另外一个个体与差分矢量求和生成实验个体;然后,对父代个体与相应的实验个体进行交叉操作,生成新的子代个体;最后在父代个体和子代个体之间进行选择操作,将符合要求的个体保存到下一代群体中去。

资源截图

代码片段和文件信息

function trace=DE(fGenmax_FESNPDenx_minx_maxi_info)
%输入:
%f-目标函数
%Gen-迭代次数
%max_FES-目标函数最大访问次数
%NP-种群规模
%x_min-自变量最小值
%x_max-自变量最大值

%初始化
t0=cputime;
G=1;%初始化代数
F=0.5;%缩放因子
CR=0.8;%交叉概率
FES=0;%目标函数的访问次数
Gmin=zeros(1Gen);%各代最优值
Best_X=zeros(GenDen);%各代最优解
Value=zeros(1NP);%当前代下每个个体的最优值


X_0=x_min+(x_max-x_min)*rand(NPDen);%初始化NP个Den维向量
X_Mutation=zeros(NPDen);%变异后的向量
X_CrossOver=zeros(NPDen);%交叉后的向量
X_Selection=zeros(NPDen);%选择后的向量

%找出初代最优值
for i=1:NP
    Value(i)=f(X_0(i:)i_info);
end
[value_minpos_min] = min(Value);
FES=FES+NP;

while(FES<=max_FES)    
    %变异操作
    for i=1:NP
        %随机产生三个不相同的向量
        r=randperm(NP);
        q=r(1);
        k=r(2);
        p=r(3);
        if q==i
            q=r(4);
        else if k==i
                k=r(4);
            else if p==i
                    p=r(4);
                end
            end
        end
           
        mutation=X_0(q:)+F*(X_0(k:)-X_0(p:));
        for j=1:Den
            %变异后不能超出边界
            if mutation(1j)>x_min & mutation(1j)                X_Mutation(ij)=mutation(1j);
            else
                X_Mutation(ij)=x_min+(x_max-x_min)*rand(1);
            end
        end

评论

共有 条评论