【智能优化算法】基于蝙蝠优化算法求解多目标优化问题附matlab代码
1 内容介绍
蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。与其他算法相比,BA 在准确性和有效性方面远优于其他算法,且没有许多参数要进行调整。
2 仿真代码
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function moba_ns_new(inp),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<1, % Check inputs (otherwise, default values)
inp=[100 1000]; % [Pop size, #Iteration] e.g., inp=[100 1000]
end
npop = inp(1); %% Population size
Gen = inp(2); %% Number of Iterations
m=2; %% Number of objectives
ndim=30; %% ndim=dimensions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parameter settings (initial values) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AL = 0.9;
r = 0.9;
alpha = 0.9;
Gamma = 0.9;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Initialize the increment components for bats/locations
del_bats = zeros(npop,ndim);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
new_bats = zeros(npop,ndim);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Lb=zeros(1,ndim); % Lower bounds
Ub=ones(1,ndim); % Upper bounds
minf=0; maxf=1; % Frequnecy range
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Initialize the population
for i=1:npop,
x(i,:)=Lb+(Ub-Lb).*rand(1,ndim);
f(i,1:m) = obj_funs(x(i,:), m);
end
%% Combining x and f into a large matrix for easy storage
%% x is an npop x ndim matrix, while f is an (npop x m) matrix.
%% So the combined matrix has a size of npop x (ndim+m),
%% with the last m columns being the m objective values
bats=[x f];
end
%% Displaying the final Pareto Front as a graph
figure(2)
plot(bats(:,ndim+1), bats(:,ndim+2),'rd');
title(strcat(num2str(npop),' Points on the Pareto Front'));
xlabel('Objective (f_1)'); ylabel('Objective (f_2)');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Make sure all the bats are within the limits
function [ns]=findlimits(ns,Lb,Ub)
% Apply the lower bound
ns_tmp=ns;
I=ns_tmp < Lb;
ns_tmp(I)=Lb(I);
% Apply the upper bounds
J=ns_tmp>Ub;
ns_tmp(J)=Ub(J);
% Update this new move
ns=ns_tmp;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Objective functions
function f = obj_funs(x, m)
% Zitzler-Deb-Thiele's funciton No 3 (ZDT function 3)
% m = number of objectives
% ndim = number of variables/dimensions
ndim=length(x); % ndim=30 for ZDT 3
% First objective f1
f(1) = x(1);
g=1+9/29*sum(x(2:ndim));
h=1-sqrt(f(1)/g)-f(1)/g*sin(10*pi*f(1));
% Second objective f2
f(2) = g*h;
%%%%%%%%%%%%%%%%%% end of the definitions of obojectives %%%%%%%%%%%%%%%%%%
%% Clean up the populations (both old and new) to give a new population
% This cleanup here is similar to the Non-dominated Sorting Genetic
% Algorithm (NSGA-II) by K. Deb et al. (2002), which can be applied to
% any cleanup of 2*npop solutions to form a set of npop solutions.
function new_bats = cleanup_batspop(bats, m, ndim, npop)
% The input population to this part has twice (ntwice) of the needed
% population size (npop). Thus, selection is done based on ranking and
% crowding distances, calculated from the non-dominated sorting
ntwice= size(bats,1);
% Ranking is stored in column Krank
Krank=m+ndim+1;
% Sort the population of size 2*npop according to their ranks
[~,Index] = sort(bats(:,Krank)); sorted_bats=bats(Index,:);
% Get the maximum rank among the population
RankMax=max(bats(:,Krank));
%% Main loop for selecting solutions based on ranks and crowding distances
K = 0; % Initialization for the rank counter
% Loop over all ranks in the population
for i =1:RankMax,
% Obtain the current rank i from sorted solutions
RankSol = max(find(sorted_bats(:, Krank) == i));
% In the new bats/solutions, there can be npop solutions to fill
if RankSol<npop,
new_bats(K+1:RankSol,:)=sorted_bats(K+1:RankSol,:);
end
% If the population after addition is large than npop, re-arrangement
% or selection is carried out
if RankSol>=npop
% Sort/Select the solutions with the current rank
candidate_bats = sorted_bats(K + 1 : RankSol, :);
[~,tmp_Rank]=sort(candidate_bats(:,Krank+1),'descend');
% Fill the rest (npop-K) bats/solutions up to npop solutions
for j = 1:(npop-K),
new_bats(K+j,:)=candidate_bats(tmp_Rank(j),:);
end
end
% Record and update the current rank after adding new bats
K = RankSol;
end
3 运行结果
4 参考文献
[1]康志龙, 张雪萍, 陈雷,等. 基于多目标蝙蝠优化的高光谱图像解混算法[J]. 光电子.激光, 2018, 29(3):8.
[2]裴文杰, 汪沨, 谭阳红,等. 基于蝙蝠算法的电力恢复机组选择多目标优化[J]. 计算机工程与应用, 2017.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
【智能优化算法】基于蝙蝠优化算法求解多目标优化问题附matlab代码相关推荐
- 【雷达检测】基于复杂环境下的雷达目标检测技术附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【图像分割】基于计算机视觉实现视网膜图像中的血管分割附matlab代码
1 简介 视网膜图像里的血管是可以被观察到的一类微血管,并且它是无创伤的,而其分布位置也属于深度部位[5].其分布.结构和形态特征的变化能在一定程度上反映病变的程度.而白血病.糖尿病以及高血压等疾病都 ...
- 基于混合整数二阶锥(MISOCP)的配电网重构(附matlab代码)
参考资料:主动配电网网络分析与运行调控 (sciencereading.cn) 配电网重构是指在满足配电网运行基本约束的前提下,通过改变配电网中一个或多个开关的状态对配电网中一个或多个指标进行优化.通 ...
- 【路径规划】基于遗传算法求解灾情巡视路径问题附matlab代码
1 内容介绍 灾情巡视属于旅行商问题,具有广泛的应用价值.假定有若干巡视组,分工协作对所辖区域内的各灾民聚集地进行巡视,需要对各巡视组的巡视任务,巡视路线进行合理的分配和设计.在现实生活中,各被巡视地 ...
- 【多式联运】基于粒子群结合遗传算法实现陆海空多式联运问题附matlab代码
1 简介 物流运输方式由公路.水路.空运及管道等 3 种方式组成,3 种运输方式在技术上.经济上各有长短,都有适宜的 使用范围,每种运输方式单独运用很难实现节约资源.降本增效.随着我国经济不断发展以及 ...
- 【图像分割】基于区域的重叠椭圆拟合实现细胞分割附matlab代码
1 内容介绍 一种基于区域的方法,用于用自动确定的可能重叠椭圆的数量来逼近任意 2D 形状.RFOVE 是完全无监督的,在没有任何假设或关于对象形状的先验知识的情况下运行,并且扩展和改进了递减椭圆拟合 ...
- 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
1 内容介绍 一种基于方向谷形检测的指静脉图像分割方法及其系统,终端,包括以下步骤:步骤1,接收图像采集模块采集的指静脉图像;步骤2,对截取的指静脉图像进行脊波变换作图像增强处理;步骤3,针对增强处理 ...
- 【滤波估计】基于双卡尔曼滤波实现soc和soh联合估计附matlab代码
1 内容介绍 对电动汽车电池管理系统进行电池状态估计非常重要准确充电,实现电池模型参数的在线更新.在本文中,开路电压的估计转换为开路电压拟合的估计参数,快速时变参数开路电压被转换成几个慢时变参数.提出 ...
- 【路径规划】基于FMM快速行进法实现船舶路径规划附matlab代码
1 内容介绍 第一步 描绘了一个模拟环境,其中位于通道之间的两个小岛,其中起点和目标点分别用红色阴影圆圈和红色星星表示,障碍区域用黑色表示,其中到目标点(或障碍)的距离越大,电势就越高. 论文中描述为 ...
- 【数学建模】基于SIR模型实现新冠病毒COVID-19估计附matlab代码
1 内容介绍 COVID-19是由严重急性呼吸综合症冠状病毒2型引发的传染病,它最初病毒携带者是一些动物,传染源主要是COVID-19患者,无症状患者.传播方式主要是呼吸道飞沫近距离传播,接触传播,还 ...
最新文章
- 关于系统弹出错误:429 , ActiveX 部件不能创建对象 的解决方法
- observable_在Spring MVC流中使用rx-java Observable
- 三步骤定位Windows崩溃进程
- 《How Tomcat Works》读书笔记(三)Connector
- c语言 at指令,学渣求指教,如何识别字符串中的AT命令并逐个输出,求程序!!!...
- 如何在Java客户端调用RESTful服务
- 初学QT遇到的“_on_OK_clicked(bool)未定义的引用”的问题,以及使用windows远程桌面登录树莓派
- VMware15 Pro激活密钥
- Android Studio 配置Git,移动端h5页面开发教程百度云资源
- ppt背景图片怎么更换应用到全部
- 电脑消除,彻底清除电脑垃圾,让电脑运行更流畅!
- Oracle 11g安装过程中提示先决条件检查不通过的解决方法
- iphone计算机怎么显示电话,苹果手机最近通话记录不显示怎么恢复
- 二维码门禁(基于微信小程序)
- java-小学期小小项目-通讯录管理系统
- 数据恢复原理与数据清除原理
- 微信官方支付接口配置教程
- stratum协议原理
- 蓝桥杯CT107D:关于矩阵键盘工作原理及其应用
- 在群晖NAS上搭建导航页_通过Web Station搭建
热门文章
- 最小误差阈值分割 matlab,原创:最小包容区域法处理圆度误差的程序算法
- 单片机 + 4G模块7S1上有人云平台自己添加变量进行温度采集,将数据发送有人云平台
- 【Jquery插件】Owl Carousel将dotc小点导航切换成对应图片导航
- ArrayAdapter
- cxf拦截器,实现对接收到的报文和发送出去的报文格式自定义
- google地图api js调用完整教程(路径回放)
- 做前端有钱途还是后端有钱途?
- sql配置管理器服务是空的_教你搭建一个属于自己的游戏服务器--龙武
- 小浩算法目录汇总(20200320-第三版)
- Java应用级产品开发平台APDPlat作者杨尚川专访