EDA365电子论坛网
标题:
基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)
[打印本页]
作者:
uperrua
时间:
2020-10-21 13:53
标题:
基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)
! l0 _: b( D# R {! b, N$ G
主要思想
* S! o1 H9 m0 ?5 n( `7 S
0 W' ~' g X( C! E
2.png
(237.94 KB, 下载次数: 6)
下载附件
保存到相册
2020-10-21 13:50 上传
1 Z) f' d, F0 h' i( T; F( D
6 D3 D+ O' d$ O2 M( q$ g+ Y7 w
流程图
$ s. O! N' ?9 Z
# X# J" h, O8 @' h0 x/ [
1.png
(235.69 KB, 下载次数: 6)
下载附件
保存到相册
2020-10-21 13:50 上传
) O' `7 R7 r0 A
8 I! p" g, K' C% H- f2 i2 p
# M4 p) _ T- x% L( O. u
MATLAB代码
2 z0 q' Y: t) Z6 j7 [
6 a T+ Q2 o8 t( ~8 R- O
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
' F. o' E1 G3 h, B, w5 V
1 \5 ^- P+ h7 A. ^, I! \: v% ^
7 m9 j6 x2 }* K
评价函数:
& T6 {* I1 w" H9 y( D
5 H( ~! S% P+ T. c+ \) K0 L
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;
end
' _- [2 M; _* Z' V+ f
6 m5 s1 l% P, w. F; a" w5 K
) W) X8 `, g8 S8 n q5 H
作者:
xiaogegepcb
时间:
2020-10-21 14:48
基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2