1 簡介
針對花授粉算法存在的收斂速度慢,易陷入局部最優(yōu)及收斂精度低等缺點,提出了基于三重動態(tài)調(diào)整的改進花授粉算法.采用動態(tài)轉(zhuǎn)換概率切換算法的搜索模式,在全局搜索更新機制中引入新型動態(tài)因子,并在局部開發(fā)更新機制中引入正余弦步長因子.通過對7個測試函數(shù)的仿真實驗結(jié)果和與FPA,CS,ASCSA等算法相比,表明改進的花授粉算法具有更強的全局搜索能力和跳出局部最優(yōu)能力.
2 部分代碼
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%Flower Pollination Algorithm for Multimodal Optimization (MFPA)
%%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 參考文獻
[1]洪露, 賀興時, 楊新社. 基于三重動態(tài)調(diào)整的花授粉算法[J]. 西安工程大學(xué)學(xué)報, 2021, 35(2):7.
博主簡介:擅長智能優(yōu)化算法表鳍、神經(jīng)網(wǎng)絡(luò)預(yù)測馅而、信號處理、元胞自動機譬圣、圖像處理瓮恭、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真厘熟,相關(guān)matlab代碼問題可私信交流屯蹦。
部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除盯漂。完整代碼獲取關(guān)注微信公眾號天天matlab