資源簡介
用粒子群算法改進蝙蝠算法,引入自適應權重,具有很好的收斂速度和收斂精度

代碼片段和文件信息
%?Usage:?bat_algorithm([20?0.25?0.5]);?????????????????????%
function?[bestfminN_iter]=Abat_algorithm(para)
%?Display?help
?help?bat_algorithm.m
%?Default?parameters
if?nargin<1??para=[10?0.25?0.5?0.8?0.6];?end
n=para(1);??????%?Population?size?typically?10?to?25
A=para(2);??????%?Loudness??(constant?or?decreasing)
r=para(3);?
wmax=para(4);
wmin=para(5);
%?Pulse?rate?(constant?or?decreasing)
%?This?frequency?range?determines?the?scalings
Qmin=0;?????????%?Frequency?minimum
Qmax=2;?????????%?Frequency?maximum
%?Iteration?parameters
tol=10^(-5);????%?Stop?tolerance
N_iter=0;???????%?Total?number?of?function?evaluations
%?Dimension?of?the?search?variables
d=5;
%?Initial?arrays
Q=zeros(n1);???%?Frequency
v=zeros(nd);???%?Velocities
%?Initialize?the?population/solutions
for?i=1:n
??Sol(i:)=randn(1d);
??Fitness(i)=Fun(Sol(i:));
end
%?Find?the?current?best
[fminI]=min(Fitness);
best=Sol(I:);
%?======================================================??%
%?Note:?As?this?is?a?demo?here?we?did?not?implement?the??%
%?reduction?of?loudness?and?increase?of?emission?rates.???%
%?Interested?readers?can?do?some?parametric?studies???????%
%?and?also?implementation?various?changes?of?A?and?r?etc??%
%?======================================================??%
%?Start?the?iterations?--?Bat?Algorithm
while?(fmin>tol)
?????for?i=1;n
????????fv(i)=?Fitness(i);
????????????????end
????????favg=sum(fv)/n;
????????for?i=1;n
????????????if?fv(i)<=favg
????????????????w=wmin+(fv(i)-fmin)*(wmax-wmin)/(favg-fmin);
????????????else
????????????????w=wmax;
????????????end
??????????Q(i)=Qmin+(Qmin-Qmax)*rand;
??????????v(i:)=w*v(i:)+(Sol(i:)-best)*Q(i);
??????????S(i:)=Sol(i:)+v(i:);
??????????%?Pulse?rate
??????????if?rand>r
??????????????S(i:)=best+0.01*randn(1d);
??????????end
?????%?Evaluate?new?solutions
???????????Fnew=Fun(S(i:));
?????%?If?the?solution?improves?or?not?too?loudness
???????????if?(Fnew<=Fitness(i))?&?(rand????????????????Sol(i:)=S(i:);
????????????????Fitness(i)=Fnew;
???????????end
??????????%?Update?the?current?best
??????????if?Fnew<=fmin
????????????????best=S(i:);
????????????????fmin=Fnew;
??????????end
?????end
??????????N_iter=N_iter+n;
end
plot(Fitness)?
%?Output/display
disp([‘Number?of?evaluations:?‘num2str(N_iter)]);
disp([‘?fmin=‘num2str(fmin)]);
disp([‘Best?=‘num2str(best)]);
function?z=Fun(u)
z=(1-u(1))^2+100*(u(2)-u(1)^2)^2+(1-u(3))^2+(u(4)-2)^2+(u(5)-0.4)^2;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2533??2018-05-21?18:52??Abat_algorithm.m
評論
共有 條評論