生活随笔
收集整理的這篇文章主要介紹了
经典蝙蝠算法MATLAB实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么會有這么多基于群智能的算法,蟻群、粒子群、魚群、煙花、炮竹、豬群、牛群、馬群、羊群、猴群、雞群。。。算法。??????
黑人問號.jpg
蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群體智能提出的啟發式搜索算法,是一種搜索全局最優解的有效方法。該算法是一種基于迭代的優化技術,初始化為一組隨機解,然后 通過迭代搜尋最優解,且在最優解周圍通過隨機飛行產生局部新解,加強了局部搜索。與其他算法相比,BA 在準確性和有效性方面遠優于其他算法,且沒有許多參數要進行調整。
BA算法是模擬自然界中蝙蝠利用一種聲吶來探測獵物、避免障礙物的隨機搜索算法即模擬蝙蝠利用超聲波對障礙物或獵物進行最基本的探測、定位能力并將其和優化目標功能相聯系。BA算法的仿生原理將種群數量為的蝙蝠個體映射為D維問題空間中的NP個可行解,將優化過程和搜索模擬成種群蝙蝠個體移動過程和搜尋獵物利用求解問題的適應度函數值來衡量蝙蝠所處位置的優劣,將個體的優勝劣汰過程類比為優化和搜索過程中用好的可行解替代較差可行解的迭代過程。在蝙蝠搜索算法中,為了模擬蝙蝠探測獵物、避免障礙物,需假設如下三個近似的或理想化的規則:
1)所有蝙蝠利用回聲定位的方法感知距離,并且它們采用一種巧妙的方式來區別獵物和背景障礙物之間的不同。
2)蝙蝠在位置xi以速度vi隨機飛行,以固定的頻率fmin、可變的波長λ和音量A0來搜索獵物。蝙蝠根據自身與目標的鄰近程度來自動調整發射的脈沖波長(或頻率)和調整脈沖發射率r屬于[0,1]
3)雖然音量的變化方式有多種但在蝙蝠算法中, 假定音量A是從一個最大值A0(整數)變化到固定最小值Amin
偽代碼:
Maltab實現:
主函數代碼:
function
[bestMin
, bestID
] = MYBA()
%A new modification approach on bat algorithm
for solving optimization problems
%omegaxyz
.com
2019年
2月
12日clc
%% BA參數設置t
= 1;
maxT
= 500; %最大迭代次數
dim
= 30; %問題的維度
sizep
= 50; %種群大小
xmin
= -100;
xmax
= 100; %位置向量的范圍A
= 0.6.*ones(sizep
,1); % 響度
(不變或者減小
)
r
= zeros(sizep
,1); % 脈沖率
(不變或增加
))
r0
= 0.7;
Af
= 0.9;
Rf
= 0.9;
Qmin
= 0; % 最小頻率
Qmax
= 1; % 最大頻率
%% 初始化Lb
= xmin
*ones(1,dim
);
Ub
= xmax
*ones(1,dim
);
pop
= Lb
+(Ub
-Lb
).*rand(sizep
,dim
); %種群初始化
popv
= zeros(sizep
,dim
); % 速度
Q
= zeros(sizep
,1); % 頻率pfitness
= zeros(dim
,1);
for i
= 1:sizep
pfitness(i
) = evaluate(pop(i
,:)); %評價
end
[bestMin
, bestID
]=min(pfitness
);
bestS
= pop(bestID
, :);
bestArchive
= zeros(maxT
,1);
%% 具體迭代過程
while t
<= maxT
for i
= 1:sizep
Q(i
)=Qmin
+(Qmax
-Qmin
)*rand();popv(i
,:)=popv(i
,:)+(pop(i
,:)-bestS
)*Q(i
);Stemp
= pop(i
,:)+popv(i
,:);% 脈沖率
if rand
>r(i
)Stemp
=bestS
-1+2*rand(1,dim
);endfitTemp
= evaluate(Stemp
);if (fitTemp
<=pfitness(i
))&&(rand()<A(i
))pop(i
,:) = Stemp
;pfitness(i
) = fitTemp
;A(i
) = Af
*A(i
);r(i
) = r0
*(1-exp(-Rf
*t
));end
if fitTemp
<= bestMinbestMin
= fitTemp
;bestS
= Stemp
;endend
bestArchive(t
) = bestMin
;fprintf('GEN: %d min: %.4f\n', t
, bestMin
);t
= t
+1;
endend
評價函數:
可以自己改
function z=evaluate(u)%Axis parallel hyperellipoiddim=size(u,2);z=sum((2:dim).*((u(2:dim)).^2));
end
更多內容訪問 omegaxyz.com
網站所有代碼采用Apache 2.0授權
網站文章采用知識共享許可協議BY-NC-SA4.0授權
? 2019 ? OmegaXYZ-版權所有 轉載請注明出處
總結
以上是生活随笔為你收集整理的经典蝙蝠算法MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。