c语言打印蝙蝠图案,经典蝙蝠算法MATLAB实现

蝙蝠算法(BA)是由Yang教授于2010年提出的一种基于群体智能的优化算法,模拟蝙蝠利用声呐探测猎物的方式寻找全局最优解。在迭代过程中,蝙蝠个体的位置和速度通过随机策略更新,通过调整发射的脉冲波长和脉冲率来优化搜索。BA算法在准确性、有效性及参数调整方面表现出优越性,适用于解决复杂优化问题。
摘要由CSDN通过智能技术生成

为什么会有这么多基于群智能的算法,蚁群、粒子群、鱼群、烟花、炮竹、猪群、牛群、马群、羊群、猴群、鸡群。。。算法。??????

黑人问号.jpg

蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。与其他算法相比,BA 在准确性和有效性方面远优于其他算法,且没有许多参数要进行调整。

BA算法是模拟自然界中蝙蝠利用一种声呐来探测猎物、避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测、定位能力并将其和优化目标功能相联系。BA算法的仿生原理将种群数量为的蝙蝠个体映射为D维问题空间中的NP个可行解,将优化过程和搜索模拟成种群蝙蝠个体移动过程和搜寻猎物利用求解问题的适应度函数值来衡量蝙蝠所处位置的优劣,将个体的优胜劣汰过程类比为优化和搜索过程中用好的可行解替代较差可行解的迭代过程。在蝙蝠搜索算法中,为了模拟蝙蝠探测猎物、避免障碍物,需假设如下三个近似的或理想化的规则:

1)所有蝙蝠利用回声定位的方法感知距离,并且它们采用一种巧妙的方式来区别猎物和背景障碍物之间的不同。

2)蝙蝠在位置xi以速度vi随机飞行,以固定的频率fmin、可变的波长λ和音量A0来搜索猎物。蝙蝠根据自身与目标的邻近程度来自动调整发射的脉冲波长(或频率)和调整脉冲发射率r属于[0,1]

3)虽然音量的变化方式有多种但在蝙蝠算法中, 假定音量A是从一个最大值A0(整数)变化到固定最小值Amin

伪代码:

e54324753512950ab4cb4dae275590cb.png

Maltab实现:

主函数代码:

MATLAB

function [bestMin, bestID] = MYBA()

%A new modification approach on bat algorithm for solving optimization problems

%omegaxyz.com 2019年2月12日

clc

%% BA参数设置

t = 1;

maxT = 500; %最大迭代次数

dim = 30; %问题的维度

sizep = 50; %种群大小

xmin = -100;

xmax = 100; %位置向量的范围

A = 0.6.*ones(sizep,1); % 响度 (不变或者减小)

r = zeros(sizep,1); % 脉冲率 (不变或增加))

r0 = 0.7;

Af = 0.9;

Rf = 0.9;

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(sizep,1);

for i = 1:sizep

pfitness(i) = evaluate(pop(i,:)); %评价

end

[bestMin, bestID]=min(pfitness);

bestS = pop(bestID, :);

bestArchive = zeros(maxT,1);

%% 具体迭代过程

while t <= maxT

for i = 1:sizep

Q(i)=Qmin+(Qmin-Qmax)*rand();

popv(i,:)=popv(i,:)+(pop(i,:)-bestS)*Q(i);

Stemp = pop(i,:)+popv(i,:);

% 脉冲率

if rand>r(i)

Stemp=bestS-1+2*rand(1,dim);

end

fitTemp = evaluate(Stemp);

if (fitTemp<=pfitness(i))&&(rand()

pop(i,:) = Stemp;

pfitness(i) = fitTemp;

A(i) = Af*A(i);

r(i) = r0*(1-exp(-Rf*t));

end

if fitTemp <= bestMin

bestMin = fitTemp;

bestS = Stemp;

end

end

bestArchive(t) = bestMin;

fprintf('GEN: %d min: %.4f\n', t, bestMin);

t = t +1;

end

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

function[bestMin,bestID]=MYBA()

%Anewmodificationapproachonbatalgorithmforsolvingoptimizationproblems

%omegaxyz.com2019年2月12日

clc

%%BA参数设置

t=1;

maxT=500;%最大迭代次数

dim=30;%问题的维度

sizep=50;%种群大小

xmin=-100;

xmax=100;%位置向量的范围

A=0.6.*ones(sizep,1);% 响度 (不变或者减小)

r=zeros(sizep,1);% 脉冲率 (不变或增加))

r0=0.7;

Af=0.9;

Rf=0.9;

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(sizep,1);

fori=1:sizep

pfitness(i)=evaluate(pop(i,:));%评价

end

[bestMin,bestID]=min(pfitness);

bestS=pop(bestID,:);

bestArchive=zeros(maxT,1);

%%具体迭代过程

whilet<=maxT

fori=1:sizep

Q(i)=Qmin+(Qmin-Qmax)*rand();

popv(i,:)=popv(i,:)+(pop(i,:)-bestS)*Q(i);

Stemp=pop(i,:)+popv(i,:);

% 脉冲率

ifrand>r(i)

Stemp=bestS-1+2*rand(1,dim);

end

fitTemp=evaluate(Stemp);

if(fitTemp<=pfitness(i))&&(rand()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值