当前位置: 首页 > article >正文

多目标优化算法:多目标红嘴蓝鹊优化算法(MORBMO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、红嘴蓝鹊优化算法

红嘴蓝鹊优化算法(Red-billed Blue Magpie Optimizer,简称RBMO)由Shengwei Fu等人于2024年5月发表在SCI顶刊《Artificial Intelligence Review》上的一种新型的元启发式算法。该算法通过模拟红嘴蓝鹊的合作捕食行为,包括搜索、攻击猎物和储存食物,来解决优化问题。
RBMO算法的基本思想是利用红嘴蓝鹊群体中的个体通过信息共享和协同工作来寻找最优解。红嘴蓝鹊在觅食时表现出的社会性和合作性,以及它们在狩猎行为中的灵活性和适应性,为算法提供了灵感。算法通过模拟这些行为,实现了在搜索空间中的有效探索和开发 。

算法步骤

  1. 种群初始化:随机生成一组解(称为种群),每个解对应于一个红嘴蓝鹊的位置。设定算法的参数,如种群规模、最大迭代次数等 。
  2. 寻找食物:模拟红嘴蓝鹊在觅食过程中,通过公式更新位置。红嘴蓝鹊通常以小组(2至5只)或群集(超过10只)的方式行动,以提高搜索效率。小组探索食物时和聚类搜索时使用不同的公式 。
  3. 攻击猎物:红嘴蓝鹊在追捕猎物时表现出高度的狩猎熟练度和合作精神。它们采用快速啄食、跳跃捕捉猎物或飞行捕捉昆虫等战术。在小团体行动中,主要目标通常是小型猎物或植物。相应的数学模型如下式所示 。
  4. 储存食物:除了寻找和攻击食物外,红嘴蓝鹊还将多余的食物储存在树洞或其他隐蔽的地方,以备将来食用,确保在食物短缺时稳定的食物供应。这个过程保留了解决方案的信息,方便个体找到全局最优值 。
  5. 适应度计算:计算每个个体在当前位置的适应度值,适应度函数依据具体问题的目标函数进行设计 。
  6. 收敛判定:检查是否达到最大迭代次数或适应度值的变化是否小于预设的阈值。如果满足条件,则终止算法;否则,返回步骤2继续迭代 。

参考文献
[1]Fu, S., Li, K., Huang, H. et al. Red-billed blue magpie optimizer: a novel metaheuristic algorithm for 2D/3D UAV path planning and engineering design problems. Artif Intell Rev 57, 134 (2024). Red-billed blue magpie optimizer: a novel metaheuristic algorithm for 2D/3D UAV path planning and engineering design problems | Artificial Intelligence Review

二、多目标红嘴蓝鹊优化算法

由于红嘴蓝鹊优化算法仅能求解单目标优化问题,为了求解多目标优化问题,本文提出多目标红嘴蓝鹊优化算法(Multi-objective Red-billed Blue Magpie Optimizer,MORBMO)。MORBMO是红嘴蓝鹊优化算法的多目标变体,能够有效求解多目标优化问题,为了检验本文所提算法的性能,将其应用于基准函数ZDT1、ZDT2、ZDT3、ZDT4、ZDT6的求解,并采用六种性能评价指标(GD、IGD、HV、Spacing、Spread、Coverage)对所提算法的收敛性和多样性进行有效评估。
在这里插入图片描述
MORBMO首先对种群进行初始化,采取随机初始化方式。其次,算法对初始化的种群进行筛选并利用筛选的后代交配产生子代个体。接着,利用环境选择算子对子代进行筛选以便进行下一轮迭代。直到满足算法的终止条件,最后一次环境选择出来的所有个体即为最终的近似 Pareto 解集。环境选择算子的作用主要用于子代个体的选择,被选择的个体能够支配种群中的其他个体或者互相不支配,称其为精英个体。通过算法的迭代运算,每次均选出精英个体,反复如此即可求得问题的解。

2.1、六种性能评价指标介绍

  1. Generational Distance (GD)

    • GD指标用于衡量算法生成的非支配解集与真实帕累托前沿之间的平均距离。对于解集P中的每个点,找到其在参考集P*(通常是真实帕累托前沿的一个采样)中最近的点,然后计算它们之间的欧氏距离,最后取平均值。GD值越小,表示算法的收敛性越好,即解集越接近真实帕累托前沿。GD的优点是计算简单,但缺点是它仅衡量收敛性,无法评估多样性,且依赖于参考集的选择。
  2. Inverted Generational Distance (IGD)

    • IGD指标同时考虑了算法的收敛性和多样性。它计算真实帕累托前沿中的每个点到非支配解集中最近点的欧氏距离的平均值。IGD值越小,表示算法的性能越好,即解集在多样性和收敛性上都更接近真实帕累托前沿。IGD能够更全面地反映解集的性能。
  3. Hypervolume (HV)

    • HV指标用于衡量目标空间被非支配解集覆盖的程度。它需要一个参考点,通常是各个目标上的最大值形成的向量。HV值是算法求解得到的非占优解集与参考点之间形成的超立方体的体积。HV值越大,表示算法的收敛性和多样性越好。HV是一个综合性能指标,能够同时反映收敛性和多样性,且不需要先验知识。
  4. Spacing

    • Spacing指标用于衡量解集中各个解的分布均匀性。它计算解集中每个解到其他解的最小距离的标准差。Spacing值越小,说明解集的分布越均匀。Spacing仅衡量解集的均匀性,而不考虑其广泛性。
  5. Spread

    • Spread指标衡量解集在目标空间中的分布范围。它通常通过计算解集中最远两个解之间的距离来衡量。Spread值越大,表示解集的分布范围越广,反映了解集的多样性。
  6. Coverage

    • Coverage指标用于衡量一个解集对另一个解集的覆盖能力。如果解集A的Coverage指标高于解集B,那么意味着解集A在某种程度上能够被解集B覆盖。这个指标通常用于比较两个解集的相对性能。

这些指标各有侧重点,GD和IGD主要关注算法的收敛性,而Spacing和Spread关注算法的多样性。HV是一个综合性指标,同时考虑了收敛性和多样性。Coverage则用于比较两个解集的相对覆盖能力。

2.2、部分MATLAB代码

%% 参数说明
%testProblem 测试问题序号
%Name 测试问题名称
%dim 测试问题维度
%numObj测试问题目标函数个数
%lb测试问题下界
%ub测试问题上界
%SearchAgents_no 种群大小
%Max_iter最大迭代次数
%Fbest 算法求得的POF
%Xbest 算法求得的POS
%TurePF 测试问题的真实pareto前沿
%Result 评价指标随迭代次数的变化值
testProblem=2;
[Name,dim,numObj,lb,ub]=GetProblemInfo(testProblem);%获取测试问题的相关信息
SearchAgents_no=200;%种群大小 
Max_iter=200;%最大迭代次数
[Fbest,Xbest,TurePF,Result] = MORBMO(Max_iter,SearchAgents_no,Name,dim,numObj,lb,ub);%算法求解

2.3、部分结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、完整MATLAB代码

见下方名片


http://www.kler.cn/a/398412.html

相关文章:

  • Vue3 provide 和 inject的使用
  • vue3中pinia状态管理库使用以及持久化配置方法总结
  • v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条
  • 【ict基础软件赛道】真题-50%openGauss
  • 【大数据学习 | HBASE高级】hive操作hbase
  • 【MySQL】SQL语言
  • 卡尔曼滤波器
  • 调用门提权
  • 两个方法,取消excel数据隐藏
  • 深度学习面试题三
  • C++《类和对象中》:拷贝构造和赋值重载 + 运算符重载详解
  • DimensionX 部署笔记
  • 关于mysql中的锁
  • 策略模式-策略模式在不同支付工具中的应用
  • 【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)
  • 悬浮窗,ViewPager2内嵌套RecyclerView,RecyclerView高度异常的问题分析
  • 学习threejs,使用第一视角控制器FirstPersonControls控制相机
  • GOOGLE EARTH ENGINE——利用GEE计算和下载雪的覆盖频率(SCF)和雪的消失日期(SDD)含全球除格陵兰岛外的矢量
  • 探索C++三大特性--C++ 继承详解:从概念到高级用法
  • 每日OJ题_牛客_NC114旋转字符串_C++_Java
  • STM32 | 空气净化器
  • 构建安全可靠的人工智能数据中心的关键因素
  • mac怎么看当前终端是zsh还是bash
  • 通过全球最前沿的技术解决视频拼接中时延带来的的应用缺陷,使得全景视频拼接能够真正得以大范围使用和推广的智慧地产开源了。
  • web前端开发--盒子属性
  • C++20中的概念(Concepts)到底是什么概念?