<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
應用的領域很多。
根據黑洞現象原理首次提出BH 演演算法,它在傳統PSO基礎上引入了新的機制,有效地提高了收斂速度並防止了陷入區域性極值的情況發生;但是該方法卻沒有提及如何確定黑洞邊界和如何處理吸收星體的問題. Hatamlou BH演演算法進行了完善,讓其更加接近於黑洞的自然現狀,使其具有黑洞現象的一般特質.該方法不但沿襲了原BH演演算法的一切特性,同時還解決了原BH 演演算法的黑洞邊界問題和吸收多餘星點的問題.
BH 演演算法的思想較為完整地描述了自然界中黑洞現象的一般特性;以BH 演演算法具有的這些特性為基礎,BH演演算法的尋優搜尋原理比較簡單,易於實現.BH演演算法主要是模擬實際黑洞現象,在一定搜尋空間內隨機佈置一定數量的星體,並通過統計學手段確定和評估搜尋空間內每一個星體的適應度函數,選出一個具有最佳適應度值的星體作為黑洞.這個黑洞邊界(以R為半徑)被視為當前全域性最優解所在區域,而黑洞本身被視為當前全域性最優解;BH 演演算法中的黑洞具有與自然界黑洞同樣的強吸引能力,在搜尋域內所有其他星體都將向其靠攏且無法逃逸.星體被黑洞吸引並向黑洞靠攏的公式如下:
式中:xi(t)和xi+1(t+1)分別代表第i個星體在t和 t+1次迭代時的位置;rand表示0,1]之間的亂數;Am是搜尋空間內的黑洞位置;N是星體的數量.
在更替迭代過程中黑洞將進入其邊界以內的星體一一吸收.每當一個星體被吸收的同時,在搜尋空間內隨機產生一個新的星體﹐星體的總數保持不變.黑洞邊界範圍計算公式如下:
式中:fBH是黑洞的適應度函數值;fi是第i個星體的適應度函數值.
在被黑洞吸引的過程中,如果有一個星體i的適應度函數值fi優於黑洞的適應度函數值fBH則說明該黑洞所處位置並非最優,需要黑洞和星體互換位置.然後演演算法將以新生成的黑洞為中心繼續執行下去,其他星體將通過位置更替公式(1)重新湧向新的黑洞位置,並被其吸收.
根據上述分析,得出黑洞演演算法的實現步驟:
步驟1初始化引數,在搜尋空間內隨機選取一定數量星體;
步驟2計算每個星體的適應度函數值;
步驟3選擇一個具有最佳適應度值的星體作為黑洞;
步驟4根據式(1)更改每個星體的位置;
步驟5如果星體最優適應度函數值優於黑洞的適應度函數值,則交換二者位置;
步驟6 如果一個星體在黑洞的邊界範圍內,那麼這個星體將被吸收﹐黑洞的邊界半徑由式(2)計算,同時,在搜尋空間內隨機產生一個新的星體;
步驟7當系統達到最大迭代次數,或者出現一個最好的適應度值時,程式停止執行,否則返回步驟4.
clear all clc close all %% 初始化引數 d=5; % 維度 options.lk=-32*ones(1,d); % 下限 options.uk=32*ones(1,d); % 上限 options.m=50; % 種群數量 options.MAXITER=500; % 最大迭代次數 options.n=length(options.uk); % 問題的維度。 options.ObjFunction=@Ackley; % 呼叫目標函數 options.Display_Flag=1; % 在迭代中顯示結果的標誌 options.run_parallel_index=0; options.run=10; if options.run_parallel_index stream = RandStream('mrg32k3a'); parfor index=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; end else rng('default') for index=1:options.run [bestX, bestFitness, bestFitnessEvolution,nEval]=BH_v1(options); bestX_M(index,:)=bestX; Fbest_M(index)=bestFitness; fbest_evolution_M(index,:)=bestFitnessEvolution; end end %% 視覺化 [a,b]=min(Fbest_M); figure plot(1:options.MAXITER,fbest_evolution_M(b,:)) xlabel('迭代次數') ylabel('適應度值') fprintf(' MIN=%g MEAN=%g MEDIAN=%g MAX=%g SD=%g n',... min(Fbest_M),mean(Fbest_M),median(Fbest_M),max(Fbest_M),std(Fbest_M))
function [F, lb, ub, FGO] = Ackley(x) %% 目標函數值 if (nargin==0) F=[]; d=2; % 維度 lb=-32*ones(1,d); % 下限 ub=32*ones(1,d); % 上限 FGO=0; % 總體最優值 else n=size(x,2); for ix=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 end
function [bestX, bestFitness, bestFitnessEvolution,nEval]=BH_v1(options) %-------------------------------------------------------------------------- % 黑洞優化演演算法 %-------------------------------------------------------------------------- % 在搜尋空間中初始化具有隨機位置的恆星群。 % 開始。 % 對於每一顆星,評估目標函數。 % 選擇具有最佳適應值的最佳恆星作為黑洞。 % 根據公式更改每顆恆星的位置。 % 如果一顆恆星到達一個比黑洞成本更低的位置,交換它們的位置。 % 如果一顆恆星穿過黑洞的視界,在搜尋空間中的隨機位置用一顆新恆星替換它。 % 如果滿足終止標準(最大迭代次數或足夠好的適應度),則退出迴圈。 % 結束迴圈 %-------------------------------------------------------------------------- ObjFunction=options.ObjFunction; % 目標函數的命名 n=options.n; % 該問題的維度 uk=options.uk; % 在第k維上界。 lk=options.lk; % 在第k的下界。 m=options.m; % m:樣本點數 MAXITER=options.MAXITER; % 最大迭代次數 nEval=0; [x,xBH,iBH,ObjFunctionValue]=Initialize(options); nEval=nEval+size(x,1); for iteration =1:MAXITER %% 根據公式改變每顆星的位置。 for i = 1 : m if i ~= iBH landa=rand; for k = 1 : n if landa<0.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)); end end end end %% 如果恆星到達一個比黑洞成本低的位置,交換它們的位置 ObjFunctionValue=feval(ObjFunction,x); nEval=nEval+size(x,1); %如果一顆恆星越過黑洞的事件視界,則在搜尋空間中隨機位置用一顆新恆星代替 R=ObjFunctionValue(iBH)/sum(ObjFunctionValue); % R=exp(-n*ObjFunctionValue(iBH)/sum(ObjFunctionValue)) for i = 1 : m Distance(i)=norm(xBH- x(i,:)); end [x,ObjFunctionValue]=NewStarGeneration(x,Distance,R,options,iBH,ObjFunctionValue); [x]=bound(x,lk,uk); [xBH,iBH]=argmin(x,ObjFunctionValue,options); %-------------------------------------------------------------------------------- bestFitnessEvolution(iteration)=ObjFunctionValue(iBH); %-------------------------------------------------------------------------------- if options.Display_Flag==1 fprintf('迭代次數N為 %g 最優適應度為 %gn',iteration,ObjFunctionValue(iBH)) end end bestX=xBH; bestFitness=ObjFunctionValue(iBH); end function [x,xBH,iBH,ObjFunctionValue]=Initialize(options) ObjFunction=options.ObjFunction; % the name of the objective function. n=options.n; % n: dimension of the problem. uk=options.uk; % up: upper bound in the kth dimension. lk=options.lk; % lp: lower bound in the kth dimension. m=options.m; % m: number of sample points for i = 1 : m for k = 1 : n landa=rand; x(i,k) = lk(k) + landa*(uk(k) - lk(k)); end end % x(end+1,:)=x0; ObjFunctionValue=feval(ObjFunction,x); [index1,index2]=sort(ObjFunctionValue); x=x(index2(1:m),:); xBH=x(1,:); iBH=1; ObjFunctionValue=ObjFunctionValue(index2(1:m)); end function [xb,ib,xw,iw]=argmin(x,f,options) [minf,ib]=min(f); xb=x(ib,:); [maxf,iw]=max(f); xw=x(iw,:); end function [x,ObjFunctionValue]=NewStarGeneration(x,Distance,R,options,iBH,ObjFunctionValue) ObjFunction=options.ObjFunction; n=options.n; uk=options.uk; lk=options.lk; index=find(Distance<R); for i=1:length(index) if index(i) ~= iBH for k = 1 : n x(i,k) = lk(k) + rand*(uk(k) - lk(k)); end ObjFunctionValue(i)=feval(ObjFunction,x(i,:)); end end end function [x]=bound(x,l,u) for j = 1:size(x,1) for k = 1:size(x,2) % 如果上限越界 if x(j,k) > u(k), x(j,k) = u(k); end % 如果下限越界 if x(j,k) < l(k), x(j,k) = l(k); end end end end
以上就是Matlab實現黑洞優化演演算法的範例程式碼的詳細內容,更多關於Matlab黑洞優化演演算法的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45