clear all;
close all;
clc;
np=50;
d=10;
g=200;
f0=0.4;%初試變異運算元
cr=0.1;%交叉運算元
xs=20;
xx=-20;
yz=10^-6;%閾值
%初始化
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)=func2(x(:,m));
endtrace(1)=min(ob);
for gen=1:g
lamda=exp(1-g/(g+1-gen));%自適應變異運算元
f=f0*2^(lamda);
%r1 r2 r3 互相不同
for m=1:np
r1=randi([1,np],1,1);
while (r1==m)
r1=randi([1,np],1,1);
endr2=randi([1,np],1,1);
while (r2==m)|(r2==r1)
r2=randi([1,np],1,1);
endr3=randi([1,np],1,1);
while (r2==m)|(r2==r1)|(r3==r2)
r3=randi([1,np],1,1);
endv(:,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,:);
endend
%邊界處理
for n=1:d
for m=1:np
if(u(n,m)xs)
u(n,m)=rand*(xs-xx)+xx;
endend
endfor m=1:np%新生臨時種群
ob1(m)=func2(u(:,m));
endfor m=1:np
if ob1(m)x(:,m)=u(:,m);
endend
for m=1:np
ob(m)=func2(x(:,m));
endtrace(gen+1)=min(ob);
if min(ob(m))break
endend[sort,index]=sort(ob);
x=x(:,index);
x=x(:,1);
y=min(ob);
figure
plot(trace);
xlabel('迭代次數');
ylabel('目標函式值');
ttle('目標函式曲線');
差分進化演算法
差分進化演算法在 1997 年日本召開的第一屆國際進化優化計算競賽 iceo 表現突出,已成為進化演算法 ea 的乙個重要分支,很多學者開始研究 de 演算法,並取得了大量成果 2006年 cec 國際會議將其作為專題討論,由此可見 de 演算法已成為學者的研究熱點,具有很大的發展空間.每個個體的優...
差分進化演算法
最近在學習演化演算法 evolutionary algorithm 粒子群演算法和遺傳演算法已經很熟悉了,而差分進化演算法我還沒認真研究過,趁著暑期實訓的機會打算把差分進化演算法做個總結,最後再將這三種演算法做個比較。差分進化演算法是演化演算法的一種,它的思想和遺傳演算法比較像,演算法分為以下幾個流...
差分進化演算法
差分進化演算法是一種全域性最優化的演算法,隨機搜尋,通過引數向量集的隨機擾動實現平行計算,本身輸入遺傳類演算法,借用了一種n m的演算法有點,損失函式有d個引數,他用d 1個頂點的多面體定義目前的搜尋空間,每個頂點 由乙個d維引數向量表示,計算損失函式,區域性最優方法,引入退火的概念,從向量集中獲取...