Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼_第1頁
Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼_第2頁
Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼_第3頁
Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼_第4頁
Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Matlab實(shí)現(xiàn)黑洞優(yōu)化算法的示例代碼目錄前言1.概述1.1黑洞算法1.2黑洞搜索優(yōu)化算法1.3黑洞搜索算法的實(shí)現(xiàn)過程2.Matlab代碼實(shí)現(xiàn)2.1主函數(shù)2.2目標(biāo)函數(shù)2.3黑洞優(yōu)化算法3.結(jié)果展現(xiàn)

前言

應(yīng)用的領(lǐng)域很多。

1.概述

1.1黑洞算法

根據(jù)黑洞現(xiàn)象原理首次提出BH算法,它在傳統(tǒng)PSO基礎(chǔ)上引入了新的機(jī)制,有效地提高了收斂速度并防止了陷入局部極值的情況發(fā)生;但是該方法卻沒有提及如何確定黑洞邊界和如何處理吸收星體的問題.HatamlouBH算法進(jìn)行了完善,讓其更加接近于黑洞的自然現(xiàn)狀,使其具有黑洞現(xiàn)象的一般特質(zhì).該方法不但沿襲了原BH算法的一切特性,同時(shí)還解決了原BH算法的黑洞邊界問題和吸收多余星點(diǎn)的問題.

1.2黑洞搜索優(yōu)化算法

BH算法的思想較為完整地描述了自然界中黑洞現(xiàn)象的一般特性;以BH算法具有的這些特性為基礎(chǔ),BH算法的尋優(yōu)搜索原理比較簡單,易于實(shí)現(xiàn).BH算法主要是模擬實(shí)際黑洞現(xiàn)象,在一定搜索空間內(nèi)隨機(jī)布置一定數(shù)量的星體,并通過統(tǒng)計(jì)學(xué)手段確定和評估搜索空間內(nèi)每一個(gè)星體的適應(yīng)度函數(shù),選出一個(gè)具有最佳適應(yīng)度值的星體作為黑洞.這個(gè)黑洞邊界(以R為半徑)被視為當(dāng)前全局最優(yōu)解所在區(qū)域,而黑洞本身被視為當(dāng)前全局最優(yōu)解;BH算法中的黑洞具有與自然界黑洞同樣的強(qiáng)吸引能力,在搜索域內(nèi)所有其他星體都將向其靠攏且無法逃逸.星體被黑洞吸引并向黑洞靠攏的公式如下:

式中:xi(t)和xi+1(t+1)分別代表第i個(gè)星體在t和t+1次迭代時(shí)的位置;rand表示0,1]之間的隨機(jī)數(shù);Am是搜索空間內(nèi)的黑洞位置;N是星體的數(shù)量.

在更替迭代過程中黑洞將進(jìn)入其邊界以內(nèi)的星體一一吸收.每當(dāng)一個(gè)星體被吸收的同時(shí),在搜索空間內(nèi)隨機(jī)產(chǎn)生一個(gè)新的星體﹐星體的總數(shù)保持不變.黑洞邊界范圍計(jì)算公式如下:

式中:fBH是黑洞的適應(yīng)度函數(shù)值;fi是第i個(gè)星體的適應(yīng)度函數(shù)值.

在被黑洞吸引的過程中,如果有一個(gè)星體i的適應(yīng)度函數(shù)值fi優(yōu)于黑洞的適應(yīng)度函數(shù)值fBH則說明該黑洞所處位置并非最優(yōu),需要黑洞和星體互換位置.然后算法將以新生成的黑洞為中心繼續(xù)運(yùn)行下去,其他星體將通過位置更替公式(1)重新涌向新的黑洞位置,并被其吸收.

1.3黑洞搜索算法的實(shí)現(xiàn)過程

根據(jù)上述分析,得出黑洞算法的實(shí)現(xiàn)步驟:

步驟1初始化參數(shù),在搜索空間內(nèi)隨機(jī)選取一定數(shù)量星體;

步驟2計(jì)算每個(gè)星體的適應(yīng)度函數(shù)值;

步驟3選擇一個(gè)具有最佳適應(yīng)度值的星體作為黑洞;

步驟4根據(jù)式(1)更改每個(gè)星體的位置;

步驟5如果星體最優(yōu)適應(yīng)度函數(shù)值優(yōu)于黑洞的適應(yīng)度函數(shù)值,則交換二者位置;

步驟6如果一個(gè)星體在黑洞的邊界范圍內(nèi),那么這個(gè)星體將被吸收﹐黑洞的邊界半徑由式(2)計(jì)算,同時(shí),在搜索空間內(nèi)隨機(jī)產(chǎn)生一個(gè)新的星體;

步驟7當(dāng)系統(tǒng)達(dá)到最大迭代次數(shù),或者出現(xiàn)一個(gè)最好的適應(yīng)度值時(shí),程序停止運(yùn)行,否則返回步驟4.

2.Matlab代碼實(shí)現(xiàn)

2.1主函數(shù)

clearall

closeall

%%初始化參數(shù)

d=5;%維度

options.lk=-32*ones(1,d);%下限

options.uk=32*ones(1,d);%上限

options.m=50;%種群數(shù)量

options.MAXITER=500;%最大迭代次數(shù)

options.n=length(options.uk);%問題的維度。

options.ObjFunction=@Ackley;%調(diào)用目標(biāo)函數(shù)

options.Display_Flag=1;%在迭代中顯示結(jié)果的標(biāo)志

options.run_parallel_index=0;

options.run=10;

ifoptions.run_parallel_index

stream=RandStream('mrg32k3a');

parforindex=1:options.run

set(stream,'Substream',index);

RandStream.setGlobalStream(stream)

[bestX,bestFitness,bestFitnessEvolution,nEval]=BH_v1(options);

bestX_M(index,:)=bestX;

Fbest_M(index)=bestFitness;

fbest_evolution_M(index,:)=bestFitnessEvolution;

rng('default')

forindex=1:options.run

[bestX,bestFitness,bestFitnessEvolution,nEval]=BH_v1(options);

bestX_M(index,:)=bestX;

Fbest_M(index)=bestFitness;

fbest_evolution_M(index,:)=bestFitnessEvolution;

%%可視化

[a,b]=min(Fbest_M);

figure

plot(1:options.MAXITER,fbest_evolution_M(b,:))

xlabel('迭代次數(shù)')

ylabel('適應(yīng)度值')

fprintf('MIN=%gMEAN=%gMEDIAN=%gMAX=%gSD=%g\n',...

min(Fbest_M),mean(Fbest_M),median(Fbest_M),max(Fbest_M),std(Fbest_M))

2.2目標(biāo)函數(shù)

function[F,lb,ub,FGO]=Ackley(x)

%%目標(biāo)函數(shù)值

if(nargin==0)

F=[];

d=2;%維度

lb=-32*ones(1,d);%下限

ub=32*ones(1,d);%上限

FGO=0;%總體最優(yōu)值

else

n=size(x,2);

forix=1:size(x,1)

x0=x(ix,:);

F(ix)=-20*exp(-0.2*sqrt(1/n*sum(x0.^2)))-...

exp(1/n*sum(cos(2*pi*x0)))+20+exp(1);

end

2.3黑洞優(yōu)化算法

function[bestX,bestFitness,bestFitnessEvolution,nEval]=BH_v1(options)

%--------------------------------------------------------------------------

%黑洞優(yōu)化算法

%--------------------------------------------------------------------------

%在搜索空間中初始化具有隨機(jī)位置的恒星群。

%開始。

%對于每一顆星,評估目標(biāo)函數(shù)。

%選擇具有最佳適應(yīng)值的最佳恒星作為黑洞。

%根據(jù)公式更改每顆恒星的位置。

%如果一顆恒星到達(dá)一個(gè)比黑洞成本更低的位置,交換它們的位置。

%如果一顆恒星穿過黑洞的視界,在搜索空間中的隨機(jī)位置用一顆新恒星替換它。

%如果滿足終止標(biāo)準(zhǔn)(最大迭代次數(shù)或足夠好的適應(yīng)度),則退出循環(huán)。

%結(jié)束循環(huán)

%--------------------------------------------------------------------------

ObjFunction=options.ObjFunction;%目標(biāo)函數(shù)的命名

n=options.n;%該問題的維度

uk=options.uk;%在第k維上界。

lk=options.lk;%在第k的下界。

m=options.m;%m:樣本點(diǎn)數(shù)

MAXITER=options.MAXITER;%最大迭代次數(shù)

nEval=0;

[x,xBH,iBH,ObjFunctionValue]=Initialize(options);

nEval=nEval+size(x,1);

foriteration=1:MAXITER

%%根據(jù)公式改變每顆星的位置。

fori=1:m

ifi~=iBH

landa=rand;

fork=1:n

iflanda0.5

x(i,k)=x(i,k)+rand*(xBH(k)-x(i,k));

else

x(i,k)=x(i,k)+rand*(xBH(k)-x(i,k));

%%如果恒星到達(dá)一個(gè)比黑洞成本低的位置,交換它們的位置

ObjFunctionValue=feval(ObjFunction,x);

nEval=nEval+size(x,1);

%如果一顆恒星越過黑洞的事件視界,則在搜索空間中隨機(jī)位置用一顆新恒星代替

R=ObjFunctionValue(iBH)/sum(ObjFunctionValue);

%R=exp(-n*ObjFunctionValue(iBH)/sum(ObjFunctionValue))

fori=1:m

Distance(i)=norm(xBH-x(i,:));

[x,ObjFunctionValue]=NewStarGeneration(x,Distance,R,options,iBH,ObjFunctionValue);

[x]=bound(x,lk,uk);

[xBH,iBH]=argmin(x,ObjFunctionValue,options);

%--

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論