資源簡介
DE算法MATLAB代碼,運(yùn)行速度快,效果好,代碼簡單易懂

代碼片段和文件信息
%
%?Copyright?(c)?2015?Yarpiz?(www.yarpiz.com)
%?All?rights?reserved.?Please?read?the?“l(fā)icense.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;
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
評論
共有 條評論