蝙蝠算法的matlab程序,经典蝙蝠算法MATLAB实现
为什么会有这么多基于群智能的算法,蚁群、粒子群、鱼群、烟花、炮竹、猪群、牛群、马群、羊群、猴群、鸡群。。。算法。??????
黑人问号.jpg
蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。与其他算法相比,BA 在准确性和有效性方面远优于其他算法,且没有许多参数要进行调整。
BA算法是模拟自然界中蝙蝠利用一种声呐来探测猎物、避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测、定位能力并将其和优化目标功能相联系。BA算法的仿生原理将种群数量为的蝙蝠个体映射为D维问题空间中的NP个可行解,将优化过程和搜索模拟成种群蝙蝠个体移动过程和搜寻猎物利用求解问题的适应度函数值来衡量蝙蝠所处位置的优劣,将个体的优胜劣汰过程类比为优化和搜索过程中用好的可行解替代较差可行解的迭代过程。在蝙蝠搜索算法中,为了模拟蝙蝠探测猎物、避免障碍物,需假设如下三个近似的或理想化的规则:
1)所有蝙蝠利用回声定位的方法感知距离,并且它们采用一种巧妙的方式来区别猎物和背景障碍物之间的不同。
2)蝙蝠在位置xi以速度vi随机飞行,以固定的频率fmin、可变的波长λ和音量A0来搜索猎物。蝙蝠根据自身与目标的邻近程度来自动调整发射的脉冲波长(或频率)和调整脉冲发射率r属于[0,1]
3)虽然音量的变化方式有多种但在蝙蝠算法中, 假定音量A是从一个最大值A0(整数)变化到固定最小值Amin
伪代码:
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()
蝙蝠算法的matlab程序,经典蝙蝠算法MATLAB实现相关推荐
- matlab二分法程序流程图,二分法及其matlab程序-经典.ppt
<二分法及其matlab程序-经典.ppt>由会员分享,可在线阅读,更多相关<二分法及其matlab程序-经典.ppt(7页珍藏版)>请在装配图网上搜索. 1.三 . 二分法及 ...
- fdtd算法的matlab程序,一维FDTD的matlab程序(最新整理)
<一维FDTD的matlab程序(最新整理)>由会员分享,可在线阅读,更多相关<一维FDTD的matlab程序(最新整理)(2页珍藏版)>请在人人文库网上搜索. 1.一维 FD ...
- slope one matlab代码,经典推荐算法之 Slope one
title: 经典推荐算法之 Slope one date: 2017/5/16 15:29:24 tags: 推荐系统 Machine Learning categories: 推荐系统 Slope ...
- 教小学妹学算法:十大经典排序算法深度解析
最近有一位小学妹 Coco 入坑了算法,结果上来就被几个排序算法给整懵逼了,各种排序眼花缭乱,也分不清什么时候该用什么排序了. 今天呢,就在这分享一下我给小学妹讲十大经典排序算法的过程. 好吧,那我们 ...
- 人工免疫算法c语言程序,基于人工免疫算法的模拟电路故障诊断
摘要: 模拟电路故障诊断一直以来都是十分必要和有意义的,目前已成为热门的研究课题.现代电子技术和计算机技术的迅速发展促进了片上系统和混合集成电路的大量涌现,这也对模拟电路的测试和故障诊断提出了更高的要 ...
- jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析
jacobi迭代法实验MATLAB程序数值分析 例1. 求线性方程组 得近似解.精确解为x*=[3,2,1]'. 解:对方程进行移项就得 记为Ax=b,或写为x=B0 x+f,其中 取初始值,代入原方 ...
- MATLAB程序详细解析,遗传算法——matlab代码解析
遗传算法--matlab代码解析 本文为学习B站老哥数学建模课程之后的一点笔记,图片源自web,代码源自老哥程序包,侵权删. 详细的遗传算法原理不再赘述,百度即可找到. 算法定义 遗传算法(GA)是模 ...
- 线性规划单纯形法的matlab程序,线性规划单纯形法的MATLAB实现_数学专业.doc
摘要:运筹学有着长远的发展历史,并且不断地发展变化出许多分支理论,线性规划是运筹学中专研较早,发展比较快速,对现实社会作用涵盖面广,理论系统趋于成熟的一个重要分支,虽然其只是运筹学的一小部分,但是作用 ...
- 用matlab程序表示三角形序列,MATLAB程序举例带注释
1.绘制云图 Ex=18 En=2 He=0.2 hold on for i=1:1000 Enn=randn(1)*He+En; x(i)=randn(1)*Enn+Ex; y(i)=exp(-(x ...
最新文章
- mongodb可视化工具连接报错
- 莎拉波顿,莎曼莎考克斯——英伦设计VS美国设计
- mysql数据库批量编码_MySQL批量修改数据库的编码类型
- 停止复制代理后AWT缓存组的行为
- vs2010 失效后的解决办法
- JSON与js对象序列化
- hbase命令行在create table时为啥有MIN_VERSIONS而没有MAX_VERSIONS
- 如何revert一个merged branch上所有的改动
- golang错误:The process cannot access the file because it is being used by another process
- 前端开发必要的9个开源框架
- 基于PHP物流网站信息管理系统
- 计算机图形学【GAMES-101】12、相机(视场、曝光、光圈(F-Stop)、薄棱镜近似、CoC、景深)
- ”一个馒头引发的血案“|记Mybatis之BindingException异常的产生及解决过程
- Python数据可视化之随机点图
- 关闭upupoo悬浮窗口
- 百度云搜索引擎森林战士_华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...
- linux中vim的全拼,linux常用命令全拼
- php 三维数组合并成二维数组_Excel VBA 数组知识点,数组能不能用好,就看这个你学会没有...
- vb怎样访问网络服务器的access数据库
- 第四大主流币XRP说归零就要归零,那么其他主流币还靠得住吗?暴跌来了,你怎么又不敢卖房梭哈了?
热门文章
- 天梭表携手全球品牌代言人刘亦菲,发布全新主题广告大片
- python缩进块_Python缩进规则(包含快捷键)
- oracle有什么证吗,oracle认证有几种
- python切片是深拷贝还是浅拷贝_Python 深拷贝和浅拷贝
- javascript中的switch用法
- java code formatter,Eclipse Code Formatter在IDEA中配置
- js隐藏手机号码中间
- Python Djang 搭建自动词性标注网站(基于Keras框架和维基百科中文预训练词向量Word2vec模型,分别实现由GRU、LSTM、RNN神经网络组成的词性标注模型)
- Mixins混入 TS
- 软件测试笔试十大逻辑题,收藏这一篇就够了