1.背景介紹
蜂鳥是一種令人驚嘆的動物,被認為是世界上最小的鳥類。如果用大腦與身體的比例來衡量蜂鳥的智力,蜂鳥將是地球上包括人類在內(nèi)最聰明的動物。蜂鳥是最小的蜂鳥,平均體長5.5厘米,體重1.95克。蜂鳥拍打翅膀的頻率是所有鳥類中最高的,可達每秒80次。蜂鳥一般以各種昆蟲為食,如蚊子、象鼻蟲和蚜蟲。為了提供足夠的飛行能量,蜂鳥每天還吃大量的花蜜和花內(nèi)的甜液。圖1顯示了一只正在覓食的蜂鳥。
蜂鳥的特別之處在于它們驚人的覓食記憶力。蜂鳥大腦中的海馬體對學習和記憶起著至關(guān)重要的作用,它比迄今為止研究過的任何其他鳥類的海馬體都要大得多。蜂鳥很小,但卻非常聰明,它的大腦與體型相比比其他任何鳥類都要大,這證明蜂鳥具有驚人的記憶力。事實上,每只蜂鳥都能記住某一地區(qū)單朵花的具體信息,包括花的位置、花蜜質(zhì)量和含量、花蜜填充率以及它們最后一次光顧這些花的時間。鳥類還能記住食物來源的時空信息。有了這些信息,蜂鳥實際上可以有效地制定計劃,避免重訪最近采樣的花朵。關(guān)于個體經(jīng)歷的記憶的使用和存儲被稱為外顯記憶,以前經(jīng)常被用來區(qū)分動物和人類。有了這種獨特的技能,蜂鳥成為高效的覓食者,并傾向于訪問它們很久沒有訪問過的花朵,以獲得更多的收獲。
蜂鳥的另一項特殊技能是飛行能力。蜂鳥微小的身體和高頻率的振翅使它們成為鳥類中最優(yōu)秀的飛行者。蜂鳥的肩關(guān)節(jié)靈活,可以將翅膀旋轉(zhuǎn)180度,并保持翅膀呈 "八 "字形運動。這種獨特的飛行方式有助于蜂鳥從下?lián)艉蜕蠐糁蝎@得力量,而其他鳥類只是簡單地扇動翅膀,僅從下?lián)糁蝎@得升力。蜂鳥可被視為鳥類世界中的直升機,因為經(jīng)??梢杂^察到它們像直升機一樣上升。蜂鳥可以精確地向任何方向飛行。除了像其他鳥類一樣飛行外,蜂鳥還能以不同的姿態(tài)飛行,包括前后、上下和左右。對角線飛行也是蜂鳥掌握的一種奇特的飛行姿勢,這是其他鳥類無法比擬的。在尋找食物時,它們可以圍繞潛在的食物資源繞圈飛行。令人難以置信的是,蜂鳥可以在空中的一個地方停留一段時間。蜂鳥具有很強的遷徙能力;它們通常會在惡劣天氣或食物短缺時飛行數(shù)千英里遷徙到偏遠地區(qū)。
AHA算法的主要靈感來源于蜂鳥的飛行技能、記憶能力和覓食策略。下一節(jié)將對這些行為進行數(shù)學建模,并提出一種人工蜂鳥算法。
2.數(shù)學模型
本節(jié)將介紹一種基于蜂鳥智能行為的生物啟發(fā)優(yōu)化算法AHA。AHA的三個主要組成部分解釋如下。
食物來源:在現(xiàn)實中,蜂鳥為了從一組食物源中選擇一個合適的食物源,通常會評估食物源的屬性,包括單朵花的花蜜質(zhì)量和含量、花蜜填充率以及最后一次訪問花朵的時間。在AHA中,為簡化起見,假定每個食物源的花朵數(shù)量和類型相同;食物源是一個解向量,食物源的充蜜率用函數(shù)適配值表示。適應(yīng)度值越高,食物源的花蜜填充率越高。
蜂鳥:每只蜂鳥總是被分配到一個特定的食物源,從那里它可以得到食物,然后這個蜂鳥和食物源有相同的位置。蜂鳥可以牢記這一特定食物源的位置和花蜜填充率,并與種群中的其他蜂鳥分享這一信息。此外,對每只蜂鳥而言,它還能記住每種食物源自己有多長時間沒有光顧。
訪問表: 訪問表記錄了不同蜂鳥對每種食物源的訪問級別,表示同一蜂鳥上次訪問某一食物源至今的時間。蜂鳥訪問量高的食物源將被優(yōu)先訪問。為了獲得更多的花蜜,蜂鳥需要獲得食物來源的時空信息。有了這些信息,蜂鳥實際上可以有效地制定計劃,避免再次光顧最近采樣過的花朵。關(guān)于個體經(jīng)歷的記憶的使用和存儲被稱為外顯記憶,以前常被用來區(qū)分動物和人類。有了這種獨特的技能,蜂鳥成為高效的覓食者,并傾向于訪問它們很久沒有訪問過的花朵,以獲得更多的收獲。
AHA算法是一種基于蜂群的元啟發(fā)式方法,用于解決優(yōu)化問題。本小節(jié)提供了三個模擬蜂鳥三種覓食行為的數(shù)學模型:引導覓食、領(lǐng)地覓食和遷徙覓食。這三種覓食行為如圖2所示。與大多數(shù)基于蜂群的優(yōu)化算法類似,本算法的結(jié)構(gòu)可分為三個主要階段。
2.1 初始化
將n只蜂鳥種群置于n個食物源上,隨機初始化如下:
其中,Low和Up分別為d維問題的上邊界和下邊界,r為[0, 1]中的隨機向量,xi表示作為給定問題解的第i個食物源的位置。
食物來源訪問表初始化如下:
其中,對于i = j,VTi ,j = null表示蜂鳥正在其特定食物源取食;對于i ?= j,VTi ,j = 0表示第j個食物源在當前迭代中剛剛被第i只蜂鳥訪問過。
2.2 指導覓食
每只蜂鳥都有訪問花蜜量最大的食物源的自然傾向,這意味著目標食物源需要有較高的花蜜填充率和蜂鳥較長的未訪問時間。因此,在AHA中,蜂鳥應(yīng)該確定覓食行為中訪問量最大的食物源,然后從中選擇花蜜填充率最高的食物源作為目標食物源。確定目標食物源后,蜂鳥就可以飛向該食物源取食。
在覓食過程中,包括全向飛行、對角飛行和軸向飛行在內(nèi)的三種飛行技能被充分使用,并通過引入方向切換向量在AHA算法中建模。該向量用于控制d維空間中的一個或多個方向是否可用。圖3顯示了三維空間中的三種飛行行為。可以看出,軸向飛行表明蜂鳥可以沿任意坐標軸飛行;對角線飛行允許蜂鳥從矩形的一角橫向移動到對角,由三個坐標軸中的任意兩個坐標軸決定。全向飛行表明,任何飛行方向都可以投射到三個坐標軸中的每一個坐標軸上。換句話說,所有鳥類都使用全向飛行,但只有蜂鳥掌握軸向和對角線飛行。
這些飛行模式可以擴展到d-D空間,其中軸向飛行定義如下:
對角線飛行的定義如下:
全向飛行的定義如下:
其中 randi([1, d]) 產(chǎn)生一個從 1 到 d 的隨機整數(shù),randperm(k) 產(chǎn)生一個從 1 到 k 的隨機整數(shù)排列,r1 是 (0, 1] 中的一個隨機數(shù)。d-D空間中的對角線飛行在超矩形內(nèi),超矩形由任意2到d-1坐標軸圍成。蜂鳥在三維空間中使用三種飛行技巧的運動如圖4所示,圖中紅線代表全向飛行,綠線代表對角飛行,藍線代表軸向飛行。圖中,蜂鳥需要從(4,4,4)移動到(0,0,0)。經(jīng)過8個單位的時間后,蜂鳥能夠通過三種不同的飛行技巧到達所需的點。這表明飛行技能的數(shù)學模型能夠模擬蜂鳥在三維和多維空間中的搜索行為。
通過這些飛行能力,蜂鳥可以訪問其目標食物源,從而獲得候選食物源。因此,蜂鳥會從舊的食物源更新為從所有現(xiàn)有食物源中選擇的目標食物源。模擬引導覓食行為和候選食物源的數(shù)學公式如下:
#pic_center)
其中,xi(t)為第i個食物源在t時刻的位置,xi,tar(t)為第i只蜂鳥打算訪問的目標食物源的位置,a為引導因子,服從均值=0、標準差=1的正態(tài)分布N(0, 1)。式(6)使每個當前食物源更新其在目標食物源附近的位置,并模擬蜂鳥通過不同飛行模式的引導覓食。第i個食物源的位置更新如下:
其中f(·)表示函數(shù)適配值。式(8)表明,如果候選食物源的花蜜填充率優(yōu)于當前食物源的花蜜填充率,蜂鳥就會放棄當前食物源,留在式(6)得到的候選食物源中覓食。
在AHA算法中,訪問表是存儲食物源訪問信息的重要組件。蜂鳥每次迭代都可以根據(jù)訪問表找到它要訪問的目標食物源。訪問表記錄了每種食物源自上次被同一蜂鳥訪問后多長時間未被訪問,未被訪問的時間越長表示訪問水平越高。每只蜂鳥都希望選擇訪問量最高的食物源。如果有多個食物源的最高訪問水平相同,則選擇花蜜填充率最好的食物源作為蜂鳥訪問的目標食物源。種群中的每只蜂鳥通過公式(6)訪問自己的目標食物源。在每次迭代中,當蜂鳥使用公式(6)對其目標食物源進行引導覓食時,該蜂鳥的其他食物源的訪問水平遞增1,其訪問的目標食物源的訪問水平初始化為0。蜂鳥進行引導覓食后,如果沒有更好的花蜜填充率(解決方案),蜂鳥將不會改變其食物源;如果有更好的花蜜填充率(解決方案),蜂鳥將用新的食物源替代當前的食物源,然后蜂鳥將停留在新的食物源。相應(yīng)蜂鳥所在食物源的更新表明所有其他蜂鳥對該食物源的訪問級別更新。需要更新的訪問級別被設(shè)置為其他食物源的最高級別,并以1遞增。
圖5顯示了一組六個食物源的訪問表,上面放置了六只蜂鳥。訪問表中的數(shù)字是蜂鳥的訪問級別,表示蜂鳥有多長時間沒有訪問食物源。例如,藍色數(shù)字 "8 "表示蜂鳥x2在蜂鳥x5居住的食物源上8個時間段內(nèi)沒有光顧。
下面的示例(最小化問題)顯示了如何維護訪問表,以及如何在引導覓食策略中為每只蜂鳥選擇目標食物源。
給定蜂鳥種群數(shù)量為4只,蜂鳥的位置和訪問表分別用式(1)和(2)初始化。第一只蜂鳥發(fā)現(xiàn)三個具有相同最高訪問水平的食物源,其中蜂鳥x4的食物源具有最高的花蜜填充率。因此,該食物源是第一只蜂鳥的目標食物源。對該蜂鳥執(zhí)行公式(6)和(8)后,蜂鳥x2和x3的食物源的訪問水平增加1,因為蜂鳥x1都沒有訪問這兩個食物源,目標食物源x4初始化為0。 圖6(a)顯示了第一只蜂鳥的訪問水平更新和目標食物源的選擇。
第二只蜂鳥發(fā)現(xiàn)了三個具有相同最高訪問水平的食物源,其中蜂鳥x4的食物源具有最高的花蜜填充率。因此,蜂鳥x4的食物源是第二只蜂鳥的目標食物源。對第二只蜂鳥執(zhí)行公式(6)和(8)后,蜂鳥x1和x3的食物源的訪問水平增加1,目標食物源x4初始化為0。蜂鳥x2的蜜源被候選蜂鳥v2替代,因為候選蜂鳥v2的采蜜率比蜜源x2的采蜜率高,因此,其他蜂鳥的蜜源x2的訪問水平需要改為最高訪問水平,每行增加1。圖6(b)顯示了第二只蜂鳥的訪問水平更新和目標食物源的選擇。
對于第三只蜂鳥,蜂鳥x2的食物源由于其最高的訪問水平而成為目標食物源,因此蜂鳥x1和x4的食物源的訪問水平增加1,目標食物源x2的訪問水平初始化為0。第三只蜂鳥的訪問水平更新和目標食物源的選擇如圖6(c)所示。
對于第4只蜂鳥,蜂鳥x2的目標食物源是其訪問水平最高的食物源,因此蜂鳥x2的訪問水平初始化為0,蜂鳥x1和x3的食物源訪問水平增加1。由于蜂鳥x4被替換為候選食物源v4,因此其他每只蜂鳥的食物源x4的訪問水平在每一行都需要改變?yōu)樵L問水平增加1的最高食物源。圖6(d)顯示了第4只蜂鳥的訪問水平更新和目標食物源的選擇。經(jīng)過一次迭代后,蜂鳥的更新訪問表如圖7所示。
2.3 領(lǐng)地覓食
蜂鳥在目標食物源采食花蜜后,很可能會尋找新的食物源,而不是去其他現(xiàn)有的食物源。因此,蜂鳥可以很容易地在自己的領(lǐng)地內(nèi)移動到鄰近區(qū)域,在那里可能會發(fā)現(xiàn)一個新的食物源作為候選方案,該方案可能比當前方案更好。模擬蜂鳥在領(lǐng)地覓食策略中的局部搜索和候選食物源的數(shù)學方程如下:
其中,b為地域因子,服從均值=0、標準差=1的正態(tài)分布N(0,1)。式(9)可以使任何蜂鳥通過其特殊的飛行技能,根據(jù)其個人位置在其本地附近輕松地找到新的食物來源。在執(zhí)行地域覓食策略后,應(yīng)更新訪問表。
2.4 遷徙覓食
當蜂鳥經(jīng)常光顧的區(qū)域缺乏食物時,蜂鳥通常會遷徙到更遠的食物源覓食。在AHA算法中,定義了一個遷移系數(shù)。如果迭代次數(shù)超過遷移系數(shù)的預定值,則蜂鳥將遷移到整個搜索空間中隨機產(chǎn)生的新的食物源。此時,蜂鳥將放棄舊的食物源,在新的食物源停留覓食,然后更新訪問表。蜂鳥從花蜜填充率最差的食物源遷移到隨機產(chǎn)生的新食物源的覓食過程如下:
其中,xwor為種群中花蜜填充率最差的食物源。
在引導覓食策略中,當沒有食物源的位置被調(diào)整時,蜂鳥傾向于向作為各自目標食物源的不同食物源移動,導致蜂鳥的探索程度較高,收斂到局部最優(yōu)的概率較低。當有一個食物源被新的食物源更新時,更新后的食物源比舊的食物源更有可能作為相同的目標食物源,會引導駐扎在其他不同食物源的蜂鳥向其移動,從而導致蜂鳥更高的利用率??紤]到式(6),在迭代的早期階段,由于食物源之間的距離較遠,因此強調(diào)探索,而隨著迭代次數(shù)的增加,食物源之間的距離適應(yīng)性地減小,因此強調(diào)開發(fā)。在地域性覓食策略中,蜂鳥在本地附近進行開發(fā)。此外,蜂鳥的遷徙覓食表明蜂鳥在搜索空間中實施了探索過程。
在AHA中,除了種群數(shù)量和最大迭代次數(shù)這兩個常用參數(shù)外,在考慮是否進行遷移時只需要確定一個控制參數(shù)。在最壞的情況下,如果在進行引導覓食和領(lǐng)地覓食時所有食物源都沒有替換,蜂鳥將根據(jù)每次迭代的訪問表輪流訪問每個食物源作為其目標源。假定蜂鳥在引導覓食或領(lǐng)地覓食中選擇的概率為50%,并且在引導覓食中訪問其它食物源的概率相同。因此,在最壞的情況下,蜂鳥可能在迭代2n次后訪問與目標食物源相同的食物源。在這種情況下,需要執(zhí)行遷移覓食策略來改善停滯和探索搜索空間。因此,建議采用以下與種群數(shù)量相關(guān)的遷移系數(shù)定義:
3.文件結(jié)構(gòu)
AHA.m % 人工蜂鳥算法
BenFunctions.m % 基準函數(shù)
FunRange.m % 范圍函數(shù)
main.m % 主函數(shù)
SpaceBound.m % 速度約束
4.偽代碼
5.詳細代碼及注釋
5.1 AHA.m
function [BestX,BestF,HisBestFit,VisitTable]=AHA(FunIndex,MaxIt,nPop)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FunIndex: The index of function. %
% MaxIt: The maximum number of iterations. %
% nPop: The size of hummingbird population. %
% PopPos: The position of population. %
% PopFit: The fitness of population. %
% Dim: The dimensionality of prloblem. %
% BestX: The best solution found so far. %
% BestF: The best fitness corresponding to BestX. %
% HisBestFit: History best fitness over iterations. %
% Low: The low boundary of search space %
% Up: The up boundary of search space. %
% VisitTable: The visit table. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Low,Up,Dim]=FunRange(FunIndex);
PopPos=zeros(nPop,Dim);
PopFit=zeros(1,nPop);
for i=1:nPop
PopPos(i,:)=rand(1,Dim).*(Up-Low)+Low;
PopFit(i)=BenFunctions(PopPos(i,:),FunIndex,Dim);
end
BestF=inf;
BestX=[];
for i=1:nPop
if PopFit(i)<=BestF
BestF=PopFit(i);
BestX=PopPos(i,:);
end
end
% Initialize visit table
HisBestFit=zeros(MaxIt,1);
VisitTable=zeros(nPop) ;
VisitTable(logical(eye(nPop)))=NaN;
for It=1:MaxIt
DirectVector=zeros(nPop,Dim);% Direction vector/matrix
for i=1:nPop
r=rand;
if r<1/3 % Diagonal flight
RandDim=randperm(Dim);
if Dim>=3
RandNum=ceil(rand*(Dim-2)+1);
else
RandNum=ceil(rand*(Dim-1)+1);
end
DirectVector(i,RandDim(1:RandNum))=1;
else
if r>2/3 % Omnidirectional flight
DirectVector(i,:)=1;
else % Axial flight
RandNum=ceil(rand*Dim);
DirectVector(i,RandNum)=1;
end
end
if rand<0.5 % Guided foraging
[MaxUnvisitedTime,TargetFoodIndex]=max(VisitTable(i,:));
MUT_Index=find(VisitTable(i,:)==MaxUnvisitedTime);
if length(MUT_Index)>1
[~,Ind]= min(PopFit(MUT_Index));
TargetFoodIndex=MUT_Index(Ind);
end
newPopPos=PopPos(TargetFoodIndex,:)+randn*DirectVector(i,:).*...
(PopPos(i,:)-PopPos(TargetFoodIndex,:));
newPopPos=SpaceBound(newPopPos,Up,Low);
newPopFit=BenFunctions(newPopPos,FunIndex,Dim);
if newPopFit<PopFit(i)
PopFit(i)=newPopFit;
PopPos(i,:)=newPopPos;
VisitTable(i,:)=VisitTable(i,:)+1;
VisitTable(i,TargetFoodIndex)=0;
VisitTable(:,i)=max(VisitTable,[],2)+1;
VisitTable(i,i)=NaN;
else
VisitTable(i,:)=VisitTable(i,:)+1;
VisitTable(i,TargetFoodIndex)=0;
end
else % Territorial foraging
newPopPos= PopPos(i,:)+randn*DirectVector(i,:).*PopPos(i,:);
newPopPos=SpaceBound(newPopPos,Up,Low);
newPopFit=BenFunctions(newPopPos,FunIndex,Dim);
if newPopFit<PopFit(i)
PopFit(i)=newPopFit;
PopPos(i,:)=newPopPos;
VisitTable(i,:)=VisitTable(i,:)+1;
VisitTable(:,i)=max(VisitTable,[],2)+1;
VisitTable(i,i)=NaN;
else
VisitTable(i,:)=VisitTable(i,:)+1;
end
end
end
if mod(It,2*nPop)==0 % Migration foraging
[~, MigrationIndex]=max(PopFit);
PopPos(MigrationIndex,:) =rand(1,Dim).*(Up-Low)+Low;
PopFit(MigrationIndex)=BenFunctions(PopPos(MigrationIndex,:),FunIndex,Dim);
VisitTable(MigrationIndex,:)=VisitTable(MigrationIndex,:)+1;
VisitTable(:,MigrationIndex)=max(VisitTable,[],2)+1;
VisitTable(MigrationIndex,MigrationIndex)=NaN;
end
for i=1:nPop
if PopFit(i)<BestF
BestF=PopFit(i);
BestX=PopPos(i,:);
end
end
HisBestFit(It)=BestF;
end
5.2 BenFunctions.m
function Fit=BenFunctions(X,FunIndex,Dim)
switch FunIndex
%%%%%%%%%%%%%%%%%%%%%%%%%%unimodal function%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Sphere
case 1
Fit=sum(X.^2);
%Schwefel 2.22
case 2
Fit=sum(abs(X))+prod(abs(X));
%Schwefel 1.2
case 3
Fit=0;
for i=1:Dim
Fit=Fit+sum(X(1:i))^2;
end
%Schwefel 2.21
case 4
Fit=max(abs(X));
%Rosenbrock
case 5
Fit=sum(100*(X(2:Dim)-(X(1:Dim-1).^2)).^2+(X(1:Dim-1)-1).^2);
%Step
case 6
Fit=sum(floor((X+.5)).^2);
%Quartic
case 7
Fit=sum([1:Dim].*(X.^4))+rand;
%%%%%%%%%%%%%%%%%%%%%%%%%%multimodal function%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Schwefel
case 8
Fit=sum(-X.*sin(sqrt(abs(X))));
%Rastrigin
case 9
Fit=sum(X.^2-10*cos(2*pi.*X))+10*Dim;
%Ackley
case 10
Fit=-20*exp(-.2*sqrt(sum(X.^2)/Dim))-exp(sum(cos(2*pi.*X))/Dim)+20+exp(1);
%Griewank
case 11
Fit=sum(X.^2)/4000-prod(cos(X./sqrt([1:Dim])))+1;
%Penalized
case 12
a=10;k=100;m=4;
Dim=length(X);
Fit=(pi/Dim)*(10*((sin(pi*(1+(X(1)+1)/4)))^2)+sum((((X(1:Dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(X(2:Dim)+1)./4)))).^2))+((X(Dim)+1)/4)^2)+sum(k.*...
((X-a).^m).*(X>a)+k.*((-X-a).^m).*(X<(-a)));
%Penalized2
case 13
a=10;k=100;m=4;
Dim=length(X);
Fit=.1*((sin(3*pi*X(1)))^2+sum((X(1:Dim-1)-1).^2.*(1+(sin(3.*pi.*X(2:Dim))).^2))+...
((X(Dim)-1)^2)*(1+(sin(2*pi*X(Dim)))^2))+sum(k.*...
((X-a).^m).*(X>a)+k.*((-X-a).^m).*(X<(-a)));
%%%%%%%%%%%%%%%%%%%%%%%%%%fixed-dimensionalmultimodalfunction%%%%%%%%%%%%%%
%Foxholes
case 14
a=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];
for j=1:25
b(j)=sum((X'-a(:,j)).^6);
end
Fit=(1/500+sum(1./([1:25]+b))).^(-1);
%Kowalik
case 15
a=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];
b=[.25 .5 1 2 4 6 8 10 12 14 16];b=1./b;
Fit=sum((a-((X(1).*(b.^2+X(2).*b))./(b.^2+X(3).*b+X(4)))).^2);
%Six Hump Camel
case 16
Fit=4*(X(1)^2)-2.1*(X(1)^4)+(X(1)^6)/3+X(1)*X(2)-4*(X(2)^2)+4*(X(2)^4);
%Branin
case 17
Fit=(X(2)-(X(1)^2)*5.1/(4*(pi^2))+5/pi*X(1)-6)^2+10*(1-1/(8*pi))*cos(X(1))+10;
%GoldStein-Price
case 18
Fit=(1+(X(1)+X(2)+1)^2*(19-14*X(1)+3*(X(1)^2)-14*X(2)+6*X(1)*X(2)+3*X(2)^2))*...
(30+(2*X(1)-3*X(2))^2*(18-32*X(1)+12*(X(1)^2)+48*X(2)-36*X(1)*X(2)+27*(X(2)^2)));
%Hartman 3
case 19
a=[3 10 30;.1 10 35;3 10 30;.1 10 35];c=[1 1.2 3 3.2];
p=[.3689 .117 .2673;.4699 .4387 .747;.1091 .8732 .5547;.03815 .5743 .8828];
Fit=0;
for i=1:4
Fit=Fit-c(i)*exp(-(sum(a(i,:).*((X-p(i,:)).^2))));
end
%Hartman 6
case 20
af=[10 3 17 3.5 1.7 8;.05 10 17 .1 8 14;3 3.5 1.7 10 17 8;17 8 .05 10 .1 14];
cf=[1 1.2 3 3.2];
pf=[.1312 .1696 .5569 .0124 .8283 .5886;.2329 .4135 .8307 .3736 .1004 .9991;...
.2348 .1415 .3522 .2883 .3047 .6650;.4047 .8828 .8732 .5743 .1091 .0381];
Fit=0;
for i=1:4
Fit=Fit-cf(i)*exp(-(sum(af(i,:).*((X-pf(i,:)).^2))));
end
%Shekel 5
case 21
a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
Fit=0;
for i=1:5
Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
end
%Shekel 7
case 22
a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
Fit=0;
for i=1:7
Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
end
%Shekel 10
otherwise
a=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
c=[0.1 0.2 0.2 0.4 0.4 0.6 0.3 0.7 0.5 0.5];
Fit=0;
for i=1:10
Fit=Fit-1/((X-a(i,:))*(X-a(i,:))'+c(i));
end
end
5.3 FunRange.m
function [Low,Up,Dim]=FunRange(FunIndex)
Dim=30;
switch FunIndex
case 1
Low=-100;Up=100;
case 2
Low=-10;Up=10;
case 3
Low=-100;Up=100;
case 4
Low=-100;Up=100;
case 5
Low=-30;Up=30;
case 6
Low=-100;Up=100;
case 7
Low=-1.28;Up=1.28;
case 8
Low=-500;Up=500;
case 9
Low=-5.12;Up=5.12;
case 10
Low=-32;Up=32;
case 11
Low=-600;Up=600;
case 12
Low=-50;Up=50;
case 13
Low=-50;Up=50;
case 14
Low=-65.536;Up=65.536;Dim=2;
case 15
Low=-5;Up=5;Dim=4;
case 16
Low=-5;Up=5;Dim=2;
case 17
Low=[-5 0];Up=[10 15];Dim=2;
case 18
Low=-2;Up=2;Dim=2;
case 19
Low=0;Up=1;Dim=3;
case 20
Low=0;Up=1;Dim=6;
case 21
Low=0;Up=10;Dim=4;
case 22
Low=0;Up=10;Dim=4;
otherwise
Low=0;Up=10;Dim=4;
end
5.4 main.m
clc;
clear;
MaxIteration=1000;
PopSize=50;
FunIndex=1;
[BestX,BestF,HisBestF]=AHA(FunIndex,MaxIteration,PopSize);
display(['FunIndex=', num2str(FunIndex)]);
display(['The best fitness is: ', num2str(BestF)]);
%display(['The best solution is: ', num2str(BestX)]);
if BestF>0
semilogy(HisBestF,'r','LineWidth',2);
else
plot(HisBestF,'r','LineWidth',2);
end
xlabel('Iterations');
ylabel('Fitness');
title(['F',num2str(FunIndex)]);
5.5 SpaceBound.m
function X=SpaceBound(X,Up,Low)
Dim=length(X);
S=(X>Up)+(X<Low);
X=(rand(1,Dim).*(Up-Low)+Low).*S+X.*(~S);
6.運行結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-572919.html
7.參考文獻
[1]Weiguo Z,Liying W,Seyedali M. Artificial hummingbird algorithm: A new bio-inspired optimizer with its engineering applications[J]. Computer Methods in Applied Mechanics and Engineering,2022,388.文章來源地址http://www.zghlxwxcb.cn/news/detail-572919.html
到了這里,關(guān)于【Matlab】智能優(yōu)化算法_人工蜂鳥算法AHA的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!