|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 F3 j1 ?4 v* F D" |( O0 g
主要思想
1 V( T* b2 x' u. i% V5 O9 I6 R# A
+ m. T" Z" |, Q. G+ a
6 f( i5 A, Q- U' B4 v# i& ~
2 ~+ A- ] b& B+ F" X
流程图
& N4 p, Y, M6 ?8 x/ }+ B
( b% h' X9 d+ s3 m3 t# s5 d
, c" ?# d6 J2 b$ n- m; g1 ]8 w
- F* J* L7 H5 Y5 x( V
& e' P: T" N- k [8 Y/ {% c. z, _MATLAB代码" m3 @, J* m# e- A
2 R8 r& \8 X3 O! C8 i5 \5 g" c. h
- function [bestMin, bestID] = ILSSIWBA()
- %A new bat algorithm based on iterative local search and stochastic inertia weight
- %omegaxyz.com QQ: 644327005
- clc;
- %% 经典BA参数设置
- t = 1;
- maxT = 100; %最大迭代次数
- dim = 30; %问题的维度
- sizep = 50; %种群大小
- xmin = -0.5;
- xmax = 0.5; %位置向量的范围
- A = 0.6.*ones(sizep,1); % 响度 (不变或者减小)
- r = zeros(sizep,1); % 脉冲率 (不变或增加))
- Qmin = 0; % 最小频率
- Qmax = 1; % 最大频率
- %% 初始化
- Lb = xmin*ones(1,dim);
- Ub = xmax*ones(1,dim);
- pop = Lb+(Ub-Lb).*rand(sizep,dim); %种群初始化
- popv = zeros(sizep,dim); % 速度
- Q = zeros(sizep,1); % 频率
- pfitness = zeros(dim,1);
- for i = 1:sizep
- pfitness(i) = evaluate2(pop(i,:)); %评价
- end
- [bestMin, bestID]=min(pfitness);
- bestS = pop(bestID, :);
- bestArchive = zeros(maxT,1);
- %% 论文中的新策略参数
- umin = 0.4; %The second modification (SIW method)
- umax = 0.9;
- sigma = 0.2;
- R0 = 0.1; %The 3th modification
- Rupper = 0.7;
- A0 = 0.9;
- Alower = 0.6;
- %% 具体迭代过程
- while t <= maxT
- for i = 1:sizep
- Q(i)=Qmin+(Qmin-Qmax)*rand();
- w = umin +(umax-umin)*rand()+sigma*randn(); %The second modification (SIW method)
- popv(i,:)=w*popv(i,:)+(pop(i,:)-bestS)*Q(i); %The second modification (SIW method)
- Stemp = pop(i,:)+popv(i,:);
- % 脉冲率
- if rand>r(i)
- Stemp=bestS-1+2*rand(1,dim);
- end
- fitTemp = evaluate2(Stemp);
- if (fitTemp<=pfitness(i))&&(rand()<A(i))
- pop(i,:) = Stemp;
- pfitness(i) = fitTemp;
- A(i) = (A0-Alower)/(1-maxT)*(t-maxT)+Alower; %The 3th modification
- r(i) = (R0-Rupper)/(1-maxT)*(t-maxT)+Rupper; %The 3th modification
- end
- if fitTemp <= bestMin
- bestID = i;
- bestMin = fitTemp;
- bestS = Stemp;
- end
- end
- interX = bestS.*rand(); %The 1th modification (ILS method)
- interXfit = evaluate2(interX);
- if interXfit < bestMin
- bestMin = interXfit;
- bestS = interX;
- pop(bestID,:) = bestS;
- pfitness(bestID,:) = bestMin;
- else
- if exp(bestMin-interXfit) > rand()
- bestMin = interXfit;
- bestS = interX;
- pop(bestID,:) = bestS;
- pfitness(bestID,:) = bestMin;
- end
- end
- bestArchive(t) = bestMin;
- fprintf('GEN: %d min: %.4f\n', t, bestMin);
- t = t +1;
- end
- end%.m end
; R, ]: R+ y, M/ K H( Q% `
, \; L Y* P; H+ x- ]- z! H; c2 ]) ^! c! Y7 s1 z
评价函数:
: ]( f7 v8 M3 d5 Z) U/ \
- \ N8 r: ^! g7 s) l/ R- function z = evaluate2(u)
- %Weierstrass
- dim= length(u);
- sum_1=0;
- sum_2=0;
- sum_3=0;
- a = 0.5;
- b = 3;
- for i=1:dim
- for k=0:30
- sum_1=sum_1+(a^k)*(cos(2*pi*(b^k)*(u(i)+0.5)));
- end
- sum_2=sum_2+sum_1;
- sum_1 = 0;
- end
- for k=0:30
- sum_3=sum_3+(a^k)*(cos(2*pi*(b^k)*0.5));
- end
- z=sum_2-dim*sum_3;
- end2 O3 v7 O7 z9 e0 u$ ~7 L
+ u7 S) y, I" v3 s+ X
5 H9 ~' X& W! L% o |
|