萤火虫算法_智能优化算法萤火虫算法
生活随笔
收集整理的這篇文章主要介紹了
萤火虫算法_智能优化算法萤火虫算法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天介紹的算法是螢火蟲(chóng)算法(Firefly Algorithm,簡(jiǎn)稱(chēng)FA),也是一種仿生優(yōu)化算法。從算法名字就知道了,該算法的思想來(lái)源于螢火蟲(chóng),具體是螢火蟲(chóng)的閃爍行為。下面是展開(kāi)對(duì)算法相關(guān)內(nèi)容的介紹。
01
—
原理部分
為了便于算法的設(shè)計(jì),作者給出了三條理想化的設(shè)計(jì)假設(shè)[1],分別為:1.螢火蟲(chóng)不分性別,這樣一個(gè)螢火蟲(chóng)將會(huì)吸引到所有其他的螢火蟲(chóng);
2.吸引力與它們的亮度成正比,對(duì)于任何兩個(gè)螢火蟲(chóng),不那么明亮的螢火蟲(chóng)被吸引,因此移動(dòng)到更亮的一個(gè),然而,亮度又隨著其距離的增加而減少;
3.如果沒(méi)有比一個(gè)給定的螢火蟲(chóng)更亮的螢火蟲(chóng),它會(huì)隨機(jī)移動(dòng)。
下面是算法的一個(gè)偽代碼:
結(jié)合這個(gè)偽代碼,對(duì)算法中的一些參數(shù)進(jìn)行介紹:02
—
實(shí)現(xiàn)代碼
fa.m
clc;clear;close all;%% Problem DefinitionCostFunction=@(x) Sphere(x); % Cost FunctionnVar=5; % Number of Decision VariablesVarSize=[1 nVar]; % Decision Variables Matrix SizeVarMin=-10; % Decision Variables Lower BoundVarMax= 10; % Decision Variables Upper Bound%% Firefly Algorithm ParametersMaxIt=1000; % Maximum Number of IterationsnPop=25; % Number of Fireflies (Swarm Size)gamma=1; % Light Absorption Coefficientbeta0=2; % Attraction Coefficient Base Valuealpha=0.2; % Mutation Coefficientalpha_damp=0.98; % Mutation Coefficient Damping Ratiodelta=0.05*(VarMax-VarMin); % Uniform Mutation Rangem=2;if isscalar(VarMin) && isscalar(VarMax) dmax = (VarMax-VarMin)*sqrt(nVar);else dmax = norm(VarMax-VarMin);end%% Initialization% Empty Firefly Structurefirefly.Position=[];firefly.Cost=[];% Initialize Population Arraypop=repmat(firefly,nPop,1);% Initialize Best Solution Ever FoundBestSol.Cost=inf;% Create Initial Firefliesfor i=1:nPop pop(i).Position=unifrnd(VarMin,VarMax,VarSize); pop(i).Cost=CostFunction(pop(i).Position); if pop(i).Cost<=BestSol.Cost BestSol=pop(i); endend% Array to Hold Best Cost ValuesBestCost=zeros(MaxIt,1);%% Firefly Algorithm Main Loopfor it=1:MaxIt newpop=repmat(firefly,nPop,1); for i=1:nPop newpop(i).Cost = inf; for j=1:nPop if pop(j).Cost < pop(i).Cost rij=norm(pop(i).Position-pop(j).Position)/dmax; beta=beta0*exp(-gamma*rij^m); e=delta*unifrnd(-1,+1,VarSize); %e=delta*randn(VarSize); newsol.Position = pop(i).Position ... + beta*rand(VarSize).*(pop(j).Position-pop(i).Position) ... + alpha*e; newsol.Position=max(newsol.Position,VarMin); newsol.Position=min(newsol.Position,VarMax); newsol.Cost=CostFunction(newsol.Position); if newsol.Cost <= newpop(i).Cost newpop(i) = newsol; if newpop(i).Cost<=BestSol.Cost BestSol=newpop(i); end end end end end % Merge pop=[pop newpop]; %#ok % Sort [~, SortOrder]=sort([pop.Cost]); pop=pop(SortOrder); % Truncate pop=pop(1:nPop); % Store Best Cost Ever Found BestCost(it)=BestSol.Cost; % Show Iteration Information disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]); % Damp Mutation Coefficient alpha = alpha*alpha_damp; end%% Resultsfigure;%plot(BestCost,'LineWidth',2);semilogy(BestCost,'LineWidth',2);xlabel('Iteration');ylabel('Best Cost');grid on;Sphere.mfunction z=Sphere(x) z=sum(x.^2);end03
—
結(jié)語(yǔ)
? ?以上就是對(duì)螢火蟲(chóng)算法的簡(jiǎn)單介紹,具體內(nèi)容可參考原論文。在公眾號(hào)內(nèi)回復(fù)螢火蟲(chóng)算法即可獲得原論文。[1]?Yang?X?S.?Firefly?algorithms?for?multimodal?optimization[C]//International?symposium?on?stochastic?algorithms.?Springer,?Berlin,?Heidelberg,?2009:?169-178.?
[2]https://ww2.mathworks.cn/matlabcentral/fileexchange/52900-firefly-algorithm-fa
總結(jié)
以上是生活随笔為你收集整理的萤火虫算法_智能优化算法萤火虫算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: openwrt 需要高级浏览器_Open
- 下一篇: collection集合 地址_java