new directional bat algorithm(YANG 在2017年提出的对蝙蝠算法的更正和修改)

本文介绍了一种基于蝙蝠回声定位行为的启发式搜索算法——蝙蝠算法(BA)。文章详细阐述了传统蝙蝠算法的工作原理及其实现代码,并提出了一种改进版蝙蝠算法,旨在提高算法性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蝙蝠算法,启发来自于蝙蝠依靠回声定位寻找食物,具体如图所示,受该现象启发, Yang 教授于 2010 年提出了启发式搜索算法,该算法传统代码如下所示

image-20221015192358787

传统蝙蝠算法

 clear

wmax=0.9;%惯性权重最大值

wmin=0.4;%惯性权重最小值

n=100; % 群体大小

A=rand(1,n); % 声音响度 (不变或者减小)

%% 频率范围

Qmin=0; % 最低频率

Qmax=1; % 最高频率

d=2;% 搜索变量的维数(即频率和速度)

%% 初始矩阵

Q=zeros(n,1); % 频率矩阵初始化

v=zeros(n,d); % 速度矩阵初始化,初始化意义就是产生一个初始矩阵

%% x自变量范围

x_max=-3;

x_min=12.1;

%_y自变量范围

y_max=4.1;

y_min=5.8;

%% 初始化群体/解

for i=1:n

​    Sol(i,1)=-3+(12.1+3)*rand(1,1);%x自变量范围【-3,12.1】Sol(i,2)=4.1+(5.8-4.1)*rand(1,1);%y自变量【4.1,5.8范围】%将随机生成的两个自变量带入函数式Fitness(i)=traget(Sol(i,:));%函数值

end

%% 寻找当前最优解

[fmax,I]=max(Fitness);

best=Sol(I,:);

T=100;%飞行次数

%% 开始飞行

for t=1:T

​    for i=1:n,Q(i)=Qmin+(Qmin-Qmax)*rand;%rand均匀分布的随机数%v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);(原速度)

​        w=(wmax-wmin)*exp(-2*(t/T)^2)+wmin;%惯性权重因子v(i,:)=w*v(i,:)+(Sol(i,:)-best)*A(i)*Q(i);%更改后的速度S(i,:)=Sol(i,:)+v(i,:);%位置移动%% 边界问题,如果下次飞行超出自变量范围外了,那么下次飞行的位置为投影在的边界上的位置%x轴if S(i,1)>o

​            S(i,1)=o;endif S(i,1)<u

​            S(i,1)=u;end%y轴if S(i,2)>l

​            S(i,2)=l;endif S(i,2)<p

​            S(i,2)=p;end%% 评估该次飞行后产生的新解Fnew(i)=Fun(S(i,:));%Fun函数为z=21.5+u(1)*sin(4*pi*u(1))+u(2)*sin(20*pi*u(2));可根据实际需要改,其他参考函数原文中有列出,将在下文提及end[Fmax,Z]=max(Fnew);%找出该次飞行后产生的最大值C(t,:)=S(Z,:);FFnew(t)=Fmax;

end

[Ffmax,N]=max(FFnew);%找出整个飞行过程中的最大值

M=C(N,:)

Ffmax
%算法研习社的matlab的标准蝙蝠算法的代码,可以运行,但是逻辑上与原来的伪代码有很多地方不符合,后面有时间改

image-20221116200210209
自己根据原文写的流程图,如果觉得伪代码不太好,看这个更清晰点
image-20221015192958239

同时配上传统算法的伪代码

传统BA算法涉及的主要规则有:

  • 所有的蝙蝠都使用回声定位来感知距离,一直蝙蝠的位置xi被编码为一个优化问题的解决方案
  • 蝙蝠以速度vi在位置xi随机飞行,同时以频率变化(从最小的fmin到最大的fmax)或不同的波长λ和响度A来搜寻猎物。它们可以根据目标的远近,自动调整其发射脉冲的波长(或频率)和脉冲发射的速率r
  • 响度在一个最大的可能值A0到最小的常数值Amin之间变化

对于每一个蝙蝠i,在搜索时,需要知道它的位置x_i,速度v_i,,并且需要跟着迭代更新,并且按照如下规则更新

image-20221015195404630

其中x*为当前最优位置,通过比较n只蝙蝠得到。并且通过随机漫步的方式生成蝙蝠的一些新的参数。

image-20221015195719435

其中epsilon在[-1,1]之间变化,A_t+1是当前时间点所有蝙蝠响度的平均值。

响度和发射频率有如下公式更新当蝙蝠靠近食物的时候,其响度减少,发射频率增加

image-20221015200054602

new directional bat algorithm

新的蝙蝠算法,对旧的蝙蝠算法做出了如下改进

1假设每只蝙蝠发出两个脉冲到两个不同的方向,然后再决定它将飞往哪个方向,这个特点可以用来模拟蝙蝠两只耳朵收到的回声之间的时间差。沿着这条思路进一步延伸,也可以假设

所有的蝙蝠都向被认为存在食物的最佳蝙蝠(解决方案)的方向发射一个脉冲,而另一个脉冲向一个随机选择的蝙蝠的方向发射。
如图1所示,一只蝙蝠向两个不同的方向发射两个脉冲,一个是向拥有最佳位置的蝙蝠的方向发射(最佳解决方案),另一个是向随机选择的蝙蝠的方向发射,另一个脉冲则指向随机选择的蝙蝠的方向。正如下图所示:

image-20221015201532761

  • case1:两个蝙蝠附近都有食物,按照如下公式更新

  • case2:如果一个蝙蝠附近有,那朝着最优的去x_k是随机选择的另一只蝙蝠的位置,x*是最优的位置。

公式如下:

image-20221015202126221

其中F()是适应度函数,并且频率将根据如下公式更新fimage-20221015203621826

**优点:**可以在迭代的不同阶段促进不同的能力,获得更好的搜索机制和更好的性能。

2第二个修改涉及到本地搜索机制。在标准的BA中,蝙蝠被允许从它们当前的位置移动到新的随机位置。到新的随机位置,使用局部随机行走。在这里,我们通过以下公式来修改这种移动。

image-20221015204103791

其中<A_t>是所有蝙蝠响度的平均数值,epsilon在[-1,1]之间变化,W_i可以调节迭代过程中的搜索规模。可以用如下公式迭代

image-20221015211118466

image-20221015211145439

以及建议的取值

此处可以根据原文的经验加以调节

3第三处修改为,由于第二点修改减少了局部搜索的可能性

直接采用推荐数值R0=0.1,R∞=0.7,A0=0.9和A∞=0.6。并按照如下公式迭代

image-20221015212343255

目前在考虑这个算法可否修改或者根据原理用于避障,后期补充一些其他的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值