混沌算法 matlab,混沌算法优化BAS算法

自己改的,没什么理论依据,仅供参考

%function BAS()

%bas:beetle antenna searching for global minimum天牛须算法搜索全局最小值

clear

close all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%parameter setup参数设置

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%antenna distance天牛须间的距离

d0=0.001;

d1=3;

d=d1;

eta_d=0.95;

%random walk随机步进

l0=0.0;

l1=0.0;

l=l1;

eta_l=0.95;

%steps

step=0.8;%step length步长

eta_step=0.95;

n=100;%iterations迭代次数

k=2;%space dimension空间维数

x0=2*rands(k,1);

x=x0;

xbest=x0;

fbest=fun(xbest);

fbest_store=fbest;

x_store=[0;x;fbest];

display(['0:','xbest=[',num2str(xbest(1)),num2str(xbest(2)),'],fbest=',num2str(fbest)])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%iteration迭代

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:n

dir=rands(k,1);

dir=dir/(eps+norm(dir));

xleft=x+dir*d;

fleft=fun(xleft);

xright=x-dir*d;

fright=fun(xright);

w=l*rands(k,1);

x=x-step*dir*sign(fleft-fright)+w;

f=fun(x);

%%%%%%%%%%%

if f

xbest=x;

fbest=f;

end

%------------混沌---------------------------------

xlhd = xbest(1:k);

for t=1:n %次数

%1生成

cxl=rand(1,k);

for j=1:k

if cxl(j)==0

cxl(j)=0.1;

end

if cxl(j)==0.25

cxl(j)=0.26;

end

if cxl(j)==0.5

cxl(j)=0.51;

end

if cxl(j)==0.75

cxl(j)=0.76;

end

if cxl(j)==1

cxl(j)=0.9;

end

end

%2映射

al=-4;bl=4;

rxl=al+(bl-al)*cxl;

%3搜索

bate = 0.3;

xlhd=xlhd+(bate*rxl)';

if fun(xlhd)

xbest(1:k)=xlhd;           %更新全局最优值

xbest(end)=fun(xlhd);

end

%4更新

for j=1:k

cxl(j)=4*cxl(j)*(1-cxl(j));   %logic混沌方程

end

end

%-------------混沌--------------------------------

%当前代的最优粒子的适应度(取自最后一列)保存

fbest_store = xbest(end);

end

%%%%%%%%%%%

x_store=cat(2,x_store,[i;x;f]);

fbest_store=[fbest_store;fbest];

display([num2str(i),':xbest=[',num2str(xbest(1)),num2str(xbest(2)),'],fbest=',num2str(fbest)])

%%%%%%%%%%%

d=d*eta_d+d0;

l=l*eta_l+l0;

step=step*eta_step;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%data visualization数据可视化

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(1),clf(1),

plot(x_store(2,:),x_store(3,:),'r-.'),axis equal

xlim0=[min(x_store(2,:)),max(x_store(2,:))];

ylim0=[min(x_store(3,:)),max(x_store(3,:))];

[x,y]=meshgrid(xlim0(1):(xlim0(2)-xlim0(1))/50:xlim0(2),ylim0(1):(ylim0(2)-ylim0(1))/50:ylim0(2));

f_val=x;

[s1,s2]=size(x);

for i=1:s1

for j=1:s2

f_val(i,j)=fun([x(i,j),y(i,j)]);

end

end

hold on,contour(x,y,f_val,50);

colorbar;

xlim([xlim0(1),xlim0(2)]);

ylim([ylim0(1),ylim0(2)]);

hold on, plot(x_store(2,end),x_store(3,end),'b*')

hold on, plot(xbest(1),xbest(2),'r*')

figure(3),clf(3),

plot(x_store(1,:),x_store(4,:),'r-o')

hold on,

plot(x_store(1,:),fbest_store,'b-.')

xlabel('iteration')

ylabel('minimum value')

function yout=fun(x)

theta=x;

x=theta(1);

y=theta(2);

% Michalewicz function函数

yout=-sin(x).*(sin(x.^2/pi)).^20-sin(y).*(sin(2*y.^2/pi)).^20;

end

出图

2019-12-31 21:59 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

2edbd7f71d2e70f357f9e5bbbd364af6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值