1 簡介
? ? 花朵授粉算法( Flower Pollination Algorithm州邢,F(xiàn)PA)是由英國劍橋大學(xué)學(xué)者Yang 于2012年提出的,其基本思想來源于對自然界花朵自花授粉大脉、異花授粉的模擬,是一種新的元啟發(fā)式群智能隨機(jī)優(yōu)化技術(shù) 创葡。
? ? ?據(jù)統(tǒng)計迎献,目前在自然界中被人類發(fā)現(xiàn)的植物大約有 37 萬 種达舒,顯花植物大約占有 20 萬種值朋,而其中 80% 的植物依靠生物授粉繁衍后代叹侄。花植物已經(jīng)進(jìn)化了大約 1. 25 億年昨登,在演化過程中趾代,花朵授粉在花植物繁衍過程中承擔(dān)著舉足輕重的作用,對于花植物丰辣,如果沒有花撒强,很難想象植物世界是個什么樣子。人類的發(fā)展和生存與跟花植物也是息息相關(guān)的笙什,例如人們生活中吃的蘋果等水果都是花朵授粉的結(jié)果飘哨。花朵授粉是通過花粉的傳播來實現(xiàn)琐凭,而花粉的傳播主要是靠昆蟲及動物來完成芽隆。在實際授粉過程中,一些花朵僅僅吸引和依靠一種特定的昆蟲來成功授粉统屈,即一些花朵與傳粉者之間形成了一種非常特別的花—傳粉者伙伴關(guān)系胚吁。授粉形式主要有非生物和生物兩種,大概 90% 的顯花植物是屬于生物授粉植物愁憔,即花粉主要是通過動物和昆蟲來傳播而實現(xiàn)繁衍后代腕扶。大約 10% 的顯花植物是屬于非生物授粉植物,不需要任何傳粉者來傳播花粉吨掌,而是通過自然風(fēng)或者擴(kuò)散途徑來完成傳粉半抱,以實現(xiàn)子代的繁殖。在依賴生物傳粉的顯花植物中大約有 85% 的植物是由蜜蜂完成傳粉的思犁,蜜蜂在實際傳粉中可能只對一些特定花植物進(jìn)行傳粉代虾,而忽視其他種類的花植物,這樣以便以最小的代價獲得最大的收益激蹲。同時對于一些花植物而言棉磨,也獲得更多的傳粉機(jī)會,繁衍更多的后代学辱。根據(jù)顯花植物的授粉對象不同乘瓤,可分為異花授粉和自花授粉兩種。在一般情況下策泣,異花授粉是兩性花衙傀,一般一朵花的雌蕊接受的花粉是另一朵花的雄蕊的花粉,這就是所謂的異花授粉萨咕。自花授粉是顯花植物成熟的花粉粒傳到同一朵花的柱頭上或同一種顯花植物的不同花之間進(jìn)行傳粉统抬,并能正常地受精結(jié)實的過程。由于傳粉者鳥、蜜蜂等能飛行很長的距離聪建,故異花授粉可以發(fā)生在遠(yuǎn)距離的地方钙畔,這種方式稱為全局授粉。另外金麸,鳥和蜜蜂具有 Levy 飛行的行為擎析,跳或飛行的步長服從 Levy飛行分布。而自花授粉稱為局部授粉挥下。
? ? ?花朵授粉算法是模擬自然界中顯花植物花朵傳粉的過程揍魂,該算法的理想條件假設(shè)如下:
a) 生物異花授粉是帶花粉的傳粉者通過 Levy 飛行進(jìn)行的全局授粉過程。
b) 非生物自花授粉是局部授粉過程棚瘟。
c) 花的常性可以被認(rèn)為是繁衍概率现斋,繁衍概率與參與的兩朵花的相似性成比例關(guān)系。
d) 轉(zhuǎn)換概率 p∈[0解取,1]控制全局授粉與局部授粉之間的轉(zhuǎn)換步责,由于物理上的鄰近性和風(fēng)等其他因素的影響,局部授粉在整個授粉活動中是一個非常重要的部分 p禀苦。
? ? ?然而蔓肯,在現(xiàn)實的自然界中,每一棵顯花植物可以開好多朵花振乏,每朵花產(chǎn)生數(shù)百萬甚至數(shù)十億的花粉配子蔗包。但是,為了把問題簡單化慧邮,假設(shè)每棵顯花植物僅僅只開一朵花调限,且每朵花僅產(chǎn)生一個花粉配子。因此误澳,問題經(jīng)過簡化后耻矮,意味著一朵花或一個配子就對應(yīng)于優(yōu)化問題中的一個解。
2 部分代碼
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%Flower Pollination Algorithm for Multimodal Optimization (MFPA)
%Jorge G醠vez, Erik Cuevas and Omar Avalos
%%This is the line to execute the code:
%%[mem,bestSol,bestFit,optima,FunctionCalls]=FPA([50 0.25 500 2]);
%FitFunc implements the function to be optimized
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function?[mem,bestSol,bestFit,optima,FunctionCalls]=FPA(para)
% Default parameters
if?nargin<1,
para=[50?0.25?500];?
end
n=para(1);?% Population size
p=para(2);?% Probabibility switch
N_iter=para?(3);% Number of iterations
phase?=?1;?%First state
phaseIte= [0.5,0.9,1.01];?%State vector
%Deb Function
d?=?1;
Lb?=?0;
Ub?=?1;
optima?= [.1;.3;.5;.7;.9];
% Initialize the population
for?i=1:n,
Sol(i,:)=Lb+(Ub-Lb).*rand(1,d);
Fitness(i)=fitFunc(Sol(i,:));%%Evaluate fitness function
end
% Initialice the memory
[mem,bestSol,bestFit,worstF] =?memUpdate(Sol,Fitness, [],?zeros(1,d),?100000000,?0,?phase,d,Ub,Lb);
S?=?Sol;
FunctionCalls?=?0;
% Main Loop
for?ite?=?1?:?N_iter,
?%For each pollen gamete, modify each position acoording
?%to local or global pollination
?for?i?=?1?:?n,
?% Switch probability
?if?rand>p,
?L=Levy(d);
?dS=L.*(Sol(i,:)-bestSol);
?S(i,:)=Sol(i,:)+dS;
?S(i,:)=simplebounds(S(i,:),Lb,Ub);
?else
?epsilon=rand;
?% Find random flowers in the neighbourhood
?JK=randperm(n);
?% As they are random, the first two entries also random
?% If the flower are the same or similar species, then
?% they can be pollenated, otherwise, no action.
?% Formula: x_i^{t+1}+epsilon*(x_j^t-x_k^t)
?S(i,:)=S(i,:)+epsilon*(Sol(JK(1),:)-Sol(JK(2),:));
?% Check if the simple limits/bounds are OK
?S(i,:)=simplebounds(S(i,:),Lb,Ub);
?end
?Fitness(i)=fitFunc(S(i,:));
?end
?%Update the memory
[mem,bestSol,bestFit,worstF] =?memUpdate(S,Fitness,mem,bestSol,bestFit,worstF,phase,d,Ub,Lb);
Sol?=?get_best_nest(S,?mem,?p);
FunctionCalls?=?FunctionCalls?+?n;
if?ite/N_iter?>?phaseIte(phase)
?%Next evolutionary process stage
?phase?=?phase?+?1;
[m,~]=size(mem);
?%Depurate the memory for each stage
?mem?=?cleanMemory(mem);
?FunctionCalls?=?FunctionCalls?+?m;
end
end
%Plot the solutions (mem) founded by the multimodal framework
x?=?0:.01:1;
y?= ((sin(5.*pi.*x)).^?6);
plot(x,y)
hold?on
plot(mem(:,1),-mem(:,2),'r*');
3 仿真結(jié)果
4 參考文獻(xiàn)
[1]陳西成, and 劉曙. "基于改進(jìn)花朵授粉算法的防空部署優(yōu)化研究." 計算技術(shù)與自動化 038.003(2019):74-78.
博主簡介:擅長智能優(yōu)化算法忆谓、神經(jīng)網(wǎng)絡(luò)預(yù)測裆装、信號處理、元胞自動機(jī)倡缠、圖像處理哨免、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真昙沦,相關(guān)matlab代碼問題可私信交流琢唾。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除盾饮。**完整代碼獲取關(guān)注微信公眾號天天matlab**