資源簡介
差分進化算法是一種新興的進化 計算技術。它是由Storn等人于1995年提出的,和其它 演化算法一樣,DE是一種模擬生物進化的隨機模型,通過反復迭代,使得那些適應環境的個體被保存了下來。但相比于進化算法,DE保留了基于種群的全局搜索策略,采用實數編碼、基于差分的簡單變異操作和一對一的競爭生存策略,降低了遺傳操作的復雜性。同時,DE特有的記憶能力使其可以動態跟蹤當前的搜索情況,以調整其搜索策略,具有較強的全局收斂能力和魯棒性,且不需要借助問題的特征信息,適于求解一些利用常規的數學規劃方法所無法求解的復雜環境中的優化問題。目前,DE已經在許多領域得到了應用,譬如人工神經元網絡、化工、電力、機械設計、機器人、信號處理、生物信息、經濟學、現代農業、食品安全、環境保護和運籌學等。
DE 算法主要用于求解連續變量的全局優化問題,其主要工作步驟與其他進化算法基本一致,主要包括變異(Mutation)、交叉(Crossover)、選擇(Selection)三種操作。算法的基本思想是從某一隨機產生的初始群體開始,利用從種群中隨機選取的兩個個體的差向量作為第三個個體的隨機變化源,將差向量加權后按照一定的規則與第三個個體求和而產生變異個體,該操作稱為變異。然后,變異個體與某個預先決定的目標個體進行參數混合,生成試驗個體,這一過程稱之為 交叉。如果試驗個體的適應度值優于目標個體的適應度值,則在下一代中試驗個體取代目標個體,否則目標個體仍保存下來,該操作稱為選擇。在每一代的進化過程中,每一個體矢量作為目標個體一次,算法通過不斷地迭代計算,保留優良個體,淘汰劣質個體,引導搜索過程向全局 最優解逼近。
代碼片段和文件信息
function?[trbjbmn]?=?SADE(VTRXVminXVmaxDNPfname)
%?參數自適應差分進化算法對Rastrigrin函數起作用
%?aa?????當前計算到第幾次
%?VTR????優化的目標值
%?fname??選擇測試函數
%?XVmin??搜索空間下限
%?XVmax??搜索空間上限
%?D??????個體維數
itermax?=?8000;????????????%?maximum?number?of?iterations?(generations)
F?=?0.6;??????????????????%?DE-stepsize?F?from?interval?[0?2]
F1=0.45;
CR?=?0.9;?????????????????%?crossover?probability?constant?from?interval?[0?1]
%-----DE?Initialize--------------------------------------------------------
pop?=?zeros(NPD);????????%?initialize?pop
for?i?=?1:NP
???pop(i:)?=?XVmin?+?rand(1D).*(XVmax?-?XVmin);
end
popold?=?zeros(size(pop));%?toggle?population
val?=?zeros(1NP);????????%?create?and?reset?the?“cost?array“
bestmem?=?zeros(1D);?????%?best?population?member?ever
bestmemit?=?zeros(1D);???%?best?population?member?in?iteration
for?i?=?1:NP??????????????%?Evaluate?the?best?member?after?initialization
????input?=?pop(i:);
????output(i)?=?feval(fnameinput);
end
val?=?output‘;
[bestvalitidx]?=?min(val);
bestmemit?=?pop(idx:);???%?best?member?of?current?iteration
bestmem?=?bestmemit;??????%?best?member?ever
bestval?=?bestvalit;??????%?best?value?ever
%-----DE?Iteration---------------------------------------------------------
tr?=?zeros(1itermax);
for?j?=?1:itermax
????if?(bestval-VTR)?1e-5
????????break
????end???
????popold?=?pop;
????%?generate?the?trail?population
????for?i?=?1:NP
????????%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????????CR=0.1;
????????if?val(i)<=mean(val)
???????????CR=0.1+(0.6-0.1)*(val(i)-max(val))/(min(val)-max(val));?
????????end?????
????????%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????????%?pick?up?the?donor?and?differential?vectors
????????rd?=?fix(rand(1)?*?NP?+?1);
????????while?val(rd)?>?val(i)
????????????rd?=?fix(rand(1)?*?NP?+?1);
????????end
????????rb?=?fix(rand(1)?*?NP?+?1);
????????while?rb?==?i?||?rb?==?rd
?????????????rb?=?fix(rand(1)?*?NP?+?1);
????????end
????????rc?=?fix(rand(1)?*?NP?+?1);
????????while?rc?==?i?||?rc?==?rd?||?rc==rb
?????????????rc?=?fix(rand(1)?*?NP?+?1);
????????end
????????re?=?fix(rand(1)?*?NP?+?1);
評論
共有 條評論