【智能优化算法-白鲸算法】基于白鲸优化算法求解多目标优化问题附matlab代码
1 内容介绍
在本文中,一种新的基于群体的元启发式算法灵感来自白鲸的行为鲸鱼,称为白鲸优化(BWO),是为了解决优化问题而提出的。三在 BWO 中建立了探索、开发和鲸落的阶段,对应于成对游泳、猎物和鲸落的行为,分别。平衡因子和概率BWO中的鲸落具有自适应性,对控制探索能力起着重要作用和剥削。此外,Levy 航班的引入是为了加强全球范围内的趋同。开发阶段。使用 30 个基准函数测试了提议的 BWO 的有效性,进行定性、定量和可扩展性分析,并将统计结果与15 种其他元启发式算法。根据结果和讨论,BWO 是一个有竞争力的算法解决单峰和多峰优化问题,BWO的总排名是比较元启发式算法中基准函数的可扩展性分析中的第一个通过弗里德曼排名检验。最后,四个工程问题展示了优点和BWO 在解决复杂的现实世界优化问题方面的潜力。
2 部分代码
%% 描述
% 1.输入的变量 'population'的大小为: [size(popuation), V+M+1]
% 2.输出的变量 'chromosome_NDS_CD' 的大小为: [size(population),V+M+3]
%% 参考文献:
%Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and T. Meyarivan, " A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II",
%IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION, VOL. 6, No. 2, APRIL 2002.
%% 函数开始
function [chromosome_NDS_CD, front] = NDS_CD_cons(population)
global V M problem_type
%% 初始化结构体和变量
chromosome_NDS_CD1=[];
infpop=[];
front.fr=[];%定义结构体,且第一行元素为fr
struct.sp=[];%定义结构体,且第一行元素为sp
rank=1;%帕累托前沿为1
%% 种群的可行解和不可行解
if all(population(:,V+M+1)==0)
problem_type=0;%第一类无约束问题
chromosome=population(:,1:V+M);%违约度都为0,都是可行的个体,抽取种群中不包含违约度的数据部分
pop_size1=size(chromosome,1);%获取种群大小,行值,由于第二个元素为1,则去第一个元素
elseif all(population(:,V+M+1)~=0)%如果违约度不为0
problem_type=1;%第二类有约束问题
pop_size1=0;%种群大小为0
infchromosome=population;%违约度都不为0,都是不可行的个体,此时获取这些个体
else
problem_type=0.5;%如果违约度不全为0,则为第三类问题,问题为0.5类型
feas_index=population(:,V+M+1)==0;%获取违约度为0个体的索引
chromosome=population(feas_index,1:V+M);%获取可行的个体
pop_size1=size(chromosome,1);%获取可行个体大小
infeas_index=population(:,V+M+1)~=0;%获取违约度不为0个体的索引
infchromosome=population(infeas_index,1:V+M+1);% 获取不可行个体的种群
end
%%处理可行的解
if problem_type==0 || problem_type==0.5
pop_size1 = size(chromosome,1);
%非支配排序
%第一层,最前沿层
for p=1:pop_size1
n1=0;
sp=[];
for j=1:pop_size1
less=0;%y'的目标函数值小于个体的目标函数值数目
equal=0;%y'的目标函数值等于个体的目标函数值数目
greater=0;%y'的目标函数值大于个体的目标函数值数目
for k=1:M
if(chromosome(p,V+k)<chromosome(j,V+k))
less=less+1;
elseif(chromosome(p,V+k)==chromosome(j,V+k))
equal=equal+1;
else
greater=greater+1;
end
end
if(less==0 && equal~=M)%if(less==0 && greater~=0)
n1=n1+1;%被支配个体数目n+1
elseif(greater==0 && equal~=M)%elseif(greater==0 && less~=0)
sp=[sp j];
end
end
n(p)=n1;
struct(p).sp=sp;
end
front(1).fr=find(n==0);%获取帕累托最前沿数据
%其他层,其他前沿层
while (~isempty(front(rank).fr))%如果某层帕累托前沿数据不为空
front_indiv=front(rank).fr;%获取该层的数据
n(front_indiv)=inf;%然后将各个元素所对应支配解的个数赋值为无穷大
chromosome(front_indiv,V+M+1)=rank;%对此此层的每个个体的帕累托前沿层数赋值为rand并在该元素的数据后进行标记
rank=rank+1;%帕累托前沿面的层数加1
front(rank).fr=[];%现将结构体对应的下一层的数据赋值为空
for i = 1:length(front_indiv)%对下一层的数据进行相应的处理
temp=struct(front_indiv(i)).sp;%获取当前层每个元素对应的支配解集
n(temp)=n(temp)-1;%对下一层每个元素被支配数减1,原因为下一层中为除去第一层后的最前沿,故其被支配的个体数减1
end
q=find(n==0);%发现新的被支配数为1的个体
front(rank).fr=[front(rank).fr q];%更新下一层帕累托前沿面数据
end
chromosome_sorted=sortrows(chromosome,V+M+1); %按照帕累托前沿面的等级进行排序
%拥挤度计算
current_index = 0;
for pareto_rank=1:(length(front)-1)%计算F的循环时多了一次空,所以减掉
nd=[];%%拥挤度初始化为0
nd(:,1)=zeros(length(front(pareto_rank).fr),1);%%拥挤度初始化为0
%y=[];%储存当前处理的等级的个体
[~,mm2]=size(chromosome_sorted);%mm2为temp中个体的维数
y=zeros(length(front(pareto_rank).fr),mm2);%储存当前处理的等级的个体
previous_index=current_index + 1;%预处理的个体为拥挤度加1
for i=1:length(front(pareto_rank).fr)%遍历每层帕累托前沿的个体
y(i,:)=chromosome_sorted(current_index + i,:);%存储每层待处理的个体
end
current_index=current_index + i;
%%对于每一个目标函数fm
for i=1:M
%%根据该目标函数值对该等级的个体进行排序
[~,index_objective]=sort(y(:,V+i));
[~,mm3]=size(y);
objective_sort=zeros(length(index_objective),mm3);%通过目标函数排序后的个体
for j=1:length(index_objective)
objective_sort(j,:)=y(index_objective(j),:);%存储对于每个目标函数进行排序后的个体
end
%%记fmax为最大值,fmin为最小值
fmin=objective_sort(1,V+i);%记录最小值
fmax=objective_sort(length(index_objective),V+i);%记录最大值
%%对排序后的两个边界拥挤度设为1d和nd设为无穷
y(index_objective(1),V+M+1+i)=Inf;%将两边的拥挤度设置成无穷大
y(index_objective(length(index_objective)),V+M+1+i)=Inf;%将两边的拥挤度设置成无穷大
%%计算nd=nd+(fm(i+1)-fm(i-1))/(fmax-fmin)
for j=2:(length(index_objective)-1)%遍历除去最大目标函数值,和最小目标函数值,每个个体的其它目标函数值
pre_f=objective_sort(j-1,V+i);%记录前一个函数值
next_f=objective_sort(j+1,V+i);%记录后一个函数值,这里的i是指中间的函数值
if (fmax-fmin==0)%如果最大值减去最小值为0,可以认为仅仅有一个目标函数,且最大值与最小值相等
y(index_objective(j),M+V+1+i)=Inf;%满足此条件,记录拥挤度为无穷大
else
y(index_objective(j),M+V+1+i)=(next_f-pre_f)/(fmax-fmin);%或者可以进行拥挤度计算,即如果对于f2求拥挤度则可以写作,d=(f2+f1)/(fmax-fmin)
end
end
end
%多个目标函数拥挤度求和
for i=1:M
nd(:,1)=nd(:,1)+y(:,M+V+1+i);%每层所有个体各个目标函数的拥挤度求和
end
%第2列保存拥挤度,其他的覆盖掉
y(:,M+V+2)=nd;
y=y(:,1:(M+V+2));
temp_two(previous_index:current_index,:) = y;
end
chromosome_NDS_CD1 = [temp_two(:,1:V+M) zeros(pop_size1,1) temp_two(:,V+M+1) temp_two(:,V+M+2)]; % 最后输出的结果分别为,种群个体的编码,目标函数值,违约度,支配等级,拥挤度计算值
end
%% 处理不可行解
if problem_type==1 || problem_type==0.5%如果都是不可行解,或者可行个体和不可行个体都有
infpop=sortrows(infchromosome,V+M+1);%对不可行个体按照违约度进行排序
infpop=[infpop(:,1:V+M+1) (rank:rank-1+size(infpop,1))' inf*(ones(size(infpop,1),1))];%将不可行个体的编码,违约度,个体所在的位置,拥挤度记录下来
for kk = (size(front,2)):(size(front,2))+(length(infchromosome))-1%可行个体的支配层数的下一层到不可行个体的个数
front(kk).fr= pop_size1+1;%对不可行个体进行划分支配等级
end
end
chromosome_NDS_CD = [chromosome_NDS_CD1;infpop]; %最后输出可行个体和不可行个体的基因编码
3 运行结果
4 参考文献
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机、雷达通信、无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
【智能优化算法-白鲸算法】基于白鲸优化算法求解多目标优化问题附matlab代码相关推荐
- 【元胞自动机】基于元胞自动机实现高速公路收费站交通流问题附matlab代码
1 简介 近年来,我国高等级公路发展迅速,截止到2012年底,我国高速公路的通车里程已达到97355公里,比2011年增长14.6%.而我国自1984年以来实行"贷款修路.收费还贷" ...
- 【情感识别】基于ELM、SOM分类器实现心率变异性信号情感识别附matlab代码
1 简介 -Dimensional affect recognition is a challenging topic and current techniques do not yet provid ...
- 【图像检测】基于形态学实现图像目标尺寸测量系统附matlab代码
1 简介 介绍了一种基于机器视觉技术的目标外观尺寸检测系统.,通过数字图像处理技术获取柚子的纵径,横径,表面积等外观尺寸参数. 2 部分代码 coin_width=1.1000;coin_height ...
- 【路径规划】基于遗传算法求解灾情巡视路径问题附matlab代码
1 内容介绍 灾情巡视属于旅行商问题,具有广泛的应用价值.假定有若干巡视组,分工协作对所辖区域内的各灾民聚集地进行巡视,需要对各巡视组的巡视任务,巡视路线进行合理的分配和设计.在现实生活中,各被巡视地 ...
- 基于AlexNet卷积神经网络的手写体数字倾斜校正系统研究-附Matlab代码
⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.AlexNet 网络 ✳️ 三.实验验证 ✳️ 3.1 实验数据集 ✳️ 3.2 数据训练 ✳️ 3.3 手写体倾斜数字校正结果 ✳️ 四.参考文献 ✳️ ...
- 基于深度学习的YOLO目标检测研究-附Matlab代码
目录 ✳️ 一.引言 ✳️ 二.YOLO的基本思想 ✳️ 三.实验验证 ✳️ 四.参考文献 ✳️ 五.Matlab代码获取 ✳️ 一.引言 目标检测是计算机视觉中的一个研究热点,在很多领域都有应用需求 ...
- 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(附matlab代码)
Date: 2022.4.26 文章目录 前言 1.总体介绍 2.详细分析 2.1.训练程序 2.2.测试程序 3.测试效果图 4.测试部分matlab代码 前言 在毕业设计中实现了基于PCA和BP神 ...
- 【无人机】基于混合粒子群算法求解无人机航迹规划问题附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【VRP问题】基于蚁群算法求解配送路径最短问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 算法竞赛——给定ATCG的DNA环状序列,求解最小表示字典序(附python代码及时间复杂度解析)
题目:环状序列表示一般都会有很多种,比如一个环'CCTC',它的表示方法可能会有很多种,比如,CCTC,CTCC,TCCC,CCCT.这几种表示中,找出字典序最小的表示序列.(字符串只由A.T.G.C ...
最新文章
- 共享思维导图leangoo,可以导入XMind文件了
- Java开发者跳槽必备:2021阿里Java面试题目大汇总
- 三星嵌入式开发平台 三星Cortex-A9 4412 POP与SCP对比
- 陆金所 CAT 优化实践
- 链表中位数(Middle of the Linked List)
- Spring Boot 整合Mybatis (一)
- Jetson Nano安装pytorch 基于torch1.6和torchvision0.7
- DWR第五篇之文件上传
- Day 1: Introduction to Deep Learning
- consul服务发现与注册于配置 (mac版为例)
- c语言中文解释,【资料】C语言错误信息中文解释
- 气象统计 第八次实习 EOF分析
- python 期货现货差价监测_Python期货期权无风险套利监控升级版
- 2015年最新国内十大应用商店广告报价表
- Elasticsearch Kibana Filebeat开启SSL通信
- python marshal loads failed_Python模块学习:marshal 对象的序列化
- Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略
- 没有实习经验,没有项目经验,简历怎么写?
- 使用nginx上传大文件报500异常处理
- 顶刊TPAMI!目标检测中的不均衡问题综述!
热门文章
- 开源免费的C/C++网络库 c/c++ sockets library 七剑下天山
- 计算机电源多低无法使用吗,怎么确定电脑电源供电不足?
- 一套牛逼哄哄的开源的监控系统(附源码)
- 计算机应用基础 第一次形成作业(计算机知识综合测试,在线答题)
- 场效应管的分类及型号命名方法
- The fundamentals of millimeter wave radar sensors——毫米波雷达传感器基本原理
- CentOS 7 Shipyard启动时一直显示省略号的解决办法
- 软件性能测试的几种方法
- 查看变量内存的python内置函数是_这68个Python内置函数,建议你吃透
- 如何用Qlikview在dashboard中创建条形图时,统计时忽略空值