• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: DE  MATLAB  

资源简介

DE算法MATLAB代码,运行速度快,效果好,代码简单易懂

资源截图

代码片段和文件信息

%
% Copyright (c) 2015 Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the “license.txt“ for license terms.
%
% Project Code: YPEA107
% Project title: Implementation of Differential Evolution (DE) in MATLAB
% Publisher: Yarpiz (www.yarpiz.com)

% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)

% Contact Info: sm.kalami@gmail.com info@yarpiz.com
%

clc;
clear;
close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);    % Cost Function

nVar=20;            % Number of Decision Variables

VarSize=[1 nVar];   % Decision Variables Matrix Size

VarMin=-5;          % Lower Bound of Decision Variables
VarMax= 5;          % Upper Bound of Decision Variables

%% DE Parameters

MaxIt=1000;      % Maximum Number of Iterations

nPop=50;        % Population Size

beta_min=0.2;   % Lower Bound of Scaling Factor
beta_max=0.8;   % Upper Bound of Scaling Factor

pCR=0.2;        % Crossover Probability

%% Initialization

empty_individual.Position=[];
empty_individual.Cost=[];

BestSol.Cost=inf;

pop=repmat(empty_individualnPop1);

for i=1:nPop

    pop(i).Position=unifrnd(VarMinVarMaxVarSize);
    
    pop(i).Cost=CostFunction(pop(i).Position);
    
    if pop(i).Cost        BestSol=pop(i);
    end
    
end

BestCost=zeros(MaxIt1);

%% DE Main Loop

for it=1:MaxIt
    
    for i=1:nPop
        
        x=pop(i).Position;
        
        A=randperm(nPop);
        
        A(A==i)=[];
        
        a=A(1);
        b=A(2);
        c=A(3);
        
        % Mutation
        %beta=unifrnd(beta_minbeta_max);
        beta=unifrnd(beta_minbeta_maxVarSize);
        y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position);
        y = max(y VarMin);
y = min(y VarMax);

        % Crossover
        z=zeros(size(x));
        j0=randi([1 numel(x)]);
        for j=1:numel(x)
            if j==j0 || rand<=pCR
                z(j)=y(j);
            else
                z(j)=x(j);
            end
        end
        
        NewSol.Position=z;
        NewSol.Cost=CostFunction(NewSol.Position);
        
        if NewSol.Cost            pop(i)=NewSol;
            
            if pop(i).Cost               BestSol=pop(i);
            end
        end
        
    end
    
    % Update Best Cost
    BestCost(it)=BestSol.Cost;
    
    % Show Iteration Information
    disp([‘Iteration ‘ num2str(it) ‘: Best Cost = ‘ num2str(BestCost(it))]);
    
end

%% Show Results

figure;
%plot(BestCost);
semilogy(BestCost ‘LineWidth‘ 2);
xlabel(‘Iteration‘);
ylabel(‘Best Cost‘);
grid on;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-15 16:15  Differential Evolution\
     文件         121  2015-09-09 08:24  Differential Evolution\www.yarpiz.com.url
     文件        2702  2015-09-09 08:24  Differential Evolution\de.m
     文件         398  2015-09-09 08:24  Differential Evolution\main.m
     文件         440  2015-09-09 08:24  Differential Evolution\Sphere.m
     文件        1350  2015-09-09 08:24  Differential Evolution\license.txt

评论

共有 条评论