差分進化演算法de與遺傳演算法ga非常類似,下面是差分進化演算法的步驟:
演算法步驟如下:
初始化
d.選擇
測試函式:
rastrigr
函式
全域性最優點
: matlab**如下:
function de(gm,f0)
t0 = cputime;
%差分進化演算法程式
%f0是變異率 %gm 最大迭代次數
gm = 10000;
f0 = 0.5;
np = 100;
cr = 0.9; %交叉概率
g= 1; %初始化代數
d = 10; %所求問題的維數
gmin = zeros(1,gm); %各代的最優值
best_x = zeros(gm,d); %各代的最優解
value = zeros(1,np);
%產生初始種群
%xmin = -10; xmax = 100;%帶負數的下界
xmin = -5.12;
xmax = 5.12;
function y = f(v)
%rastrigr 函式
y = sum(v.^2 - 10.*cos(2.*pi.*v) + 10);
endx0 = (xmax-xmin)*rand(np,d) + xmin; %產生np個d維向量
xg = x0;
%%%%%%%%%%%%%----這裡未做評價,不判斷終止條件----%%%%%%%%%%%%%%%%%%%%%%%%
xg_next_1= zeros(np,d); %初始化
xg_next_2 = zeros(np,d);
xg_next = zeros(np,d);
while g <= gm
g %%%%%%%%%%%%%%%%%%%%%%%%----變異操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1:np
%產生j,k,p三個不同的數
a = 1;
b = np;
dx = randperm(b-a+1) + a- 1;
j = dx(1);
k = dx(2);
p = dx(3);
%要保證與i不同
if j == i
j = dx(4);
else if k == i
k = dx(4);
else if p == i
p = dx(4);
endend
end%變異運算元
suanzi = exp(1-gm/(gm + 1-g));
f = f0*2.^suanzi;
%變異的個體來自三個隨機父代
son = xg(p,:) + f*(xg(j,:) - xg(k,:));
for j = 1: d
if son(1,j) >xmin & son(1,j) < xmax %防止變異超出邊界
xg_next_1(i,j) = son(1,j);
else
xg_next_1(i,j) = (xmax - xmin)*rand(1) + xmin;
endend
end%%%%%%%%%%%%%%%%%%%%%%%---交叉操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1: np
randx = randperm(d);% [1,2,3,...d]的隨機序列
for j = 1: d
if rand > cr & randx(1) ~= j % cr = 0.9
xg_next_2(i,j) = xg(i,j);
else
xg_next_2(i,j) = xg_next_1(i,j);
endend
end%%%%%%%%%%%%%%%%%%----選擇操作---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1:np
if f(xg_next_2(i,:)) < f(xg(i,:))
xg_next(i,:) = xg_next_2(i,:);
else
xg_next(i,:) = xg(i,:);
endend
%找出最小值
for i = 1:np
value(i) = f(xg_next(i,:));
end[value_min,pos_min] = min(value);
%第g代中的目標函式的最小值
gmin(g) = value_min;
%儲存最優的個體
best_x(g,:) = xg_next(pos_min,:);
xg = xg_next;
trace(g,1) = g;
trace(g,2) = value_min;
g = g + 1;
end[value_min,pos_min] = min(gmin);
best_value = value_min
best_vector = best_x(pos_min,:)
fprintf('de所耗的時間為:%f \n',cputime - t0);
%畫出代數跟最優函式值之間的關係圖
plot(trace(:,1),trace(:,2));
end
結果:
差分進化演算法
差分進化演算法在 1997 年日本召開的第一屆國際進化優化計算競賽 iceo 表現突出,已成為進化演算法 ea 的乙個重要分支,很多學者開始研究 de 演算法,並取得了大量成果 2006年 cec 國際會議將其作為專題討論,由此可見 de 演算法已成為學者的研究熱點,具有很大的發展空間.每個個體的優...
差分進化演算法
最近在學習演化演算法 evolutionary algorithm 粒子群演算法和遺傳演算法已經很熟悉了,而差分進化演算法我還沒認真研究過,趁著暑期實訓的機會打算把差分進化演算法做個總結,最後再將這三種演算法做個比較。差分進化演算法是演化演算法的一種,它的思想和遺傳演算法比較像,演算法分為以下幾個流...
差分進化演算法
差分進化演算法是一種全域性最優化的演算法,隨機搜尋,通過引數向量集的隨機擾動實現平行計算,本身輸入遺傳類演算法,借用了一種n m的演算法有點,損失函式有d個引數,他用d 1個頂點的多面體定義目前的搜尋空間,每個頂點 由乙個d維引數向量表示,計算損失函式,區域性最優方法,引入退火的概念,從向量集中獲取...