資源簡介
差分進(jìn)化算法是一種新興的進(jìn)化 計(jì)算技術(shù)。它是由Storn等人于1995年提出的,和其它 演化算法一樣,DE是一種模擬生物進(jìn)化的隨機(jī)模型,通過反復(fù)迭代,使得那些適應(yīng)環(huán)境的個(gè)體被保存了下來。但相比于進(jìn)化算法,DE保留了基于種群的全局搜索策略,采用實(shí)數(shù)編碼、基于差分的簡單變異操作和一對一的競爭生存策略,降低了遺傳操作的復(fù)雜性。同時(shí),DE特有的記憶能力使其可以動(dòng)態(tài)跟蹤當(dāng)前的搜索情況,以調(diào)整其搜索策略,具有較強(qiáng)的全局收斂能力和魯棒性,且不需要借助問題的特征信息,適于求解一些利用常規(guī)的數(shù)學(xué)規(guī)劃方法所無法求解的復(fù)雜環(huán)境中的優(yōu)化問題。目前,DE已經(jīng)在許多領(lǐng)域得到了應(yīng)用,譬如人工神經(jīng)元網(wǎng)絡(luò)、化工、電力、機(jī)械設(shè)計(jì)、機(jī)器人、信號(hào)處理、生物信息、經(jīng)濟(jì)學(xué)、現(xiàn)代農(nóng)業(yè)、食品安全、環(huán)境保護(hù)和運(yùn)籌學(xué)等。
DE 算法主要用于求解連續(xù)變量的全局優(yōu)化問題,其主要工作步驟與其他進(jìn)化算法基本一致,主要包括變異(Mutation)、交叉(Crossover)、選擇(Selection)三種操作。算法的基本思想是從某一隨機(jī)產(chǎn)生的初始群體開始,利用從種群中隨機(jī)選取的兩個(gè)個(gè)體的差向量作為第三個(gè)個(gè)體的隨機(jī)變化源,將差向量加權(quán)后按照一定的規(guī)則與第三個(gè)個(gè)體求和而產(chǎn)生變異個(gè)體,該操作稱為變異。然后,變異個(gè)體與某個(gè)預(yù)先決定的目標(biāo)個(gè)體進(jìn)行參數(shù)混合,生成試驗(yàn)個(gè)體,這一過程稱之為 交叉。如果試驗(yàn)個(gè)體的適應(yīng)度值優(yōu)于目標(biāo)個(gè)體的適應(yīng)度值,則在下一代中試驗(yàn)個(gè)體取代目標(biāo)個(gè)體,否則目標(biāo)個(gè)體仍保存下來,該操作稱為選擇。在每一代的進(jìn)化過程中,每一個(gè)體矢量作為目標(biāo)個(gè)體一次,算法通過不斷地迭代計(jì)算,保留優(yōu)良個(gè)體,淘汰劣質(zhì)個(gè)體,引導(dǎo)搜索過程向全局 最優(yōu)解逼近。
代碼片段和文件信息
function?[trbjbmn]?=?SADE(VTRXVminXVmaxDNPfname)
%?參數(shù)自適應(yīng)差分進(jìn)化算法對Rastrigrin函數(shù)起作用
%?aa?????當(dāng)前計(jì)算到第幾次
%?VTR????優(yōu)化的目標(biāo)值
%?fname??選擇測試函數(shù)
%?XVmin??搜索空間下限
%?XVmax??搜索空間上限
%?D??????個(gè)體維數(shù)
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);
評(píng)論
共有 條評(píng)論