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

多目标优化算法:多目标吸血水蛭优化算法(MOBSLO)求解DTLZ1-DTLZ9,提供完整MATLAB代码

一、吸血水蛭优化算法

吸血水蛭优化(Blood-Sucking Leech Optimizer,BSLO)算法是Jianfu Bai等人于2024年9月提出一种新型的元启发式算法,灵感来源于吸血水蛭在稻田中的觅食行为,并发表在《Advances in Engineering Software》期刊上。该算法模拟了吸血水蛭的觅食行为,包括探索、定向利用、切换机制、无方向搜索策略和重新跟踪策略。BSLO算法具有较强的自适应优化能力,通过模拟水蛭的行为来寻找最优解。

算法描述

BSLO算法中,水蛭被分为两种类型:定向水蛭和无定向水蛭。定向水蛭在感受到刺激时,如水波,会以小角度向猎物游动。无定向水蛭则在搜索空间中随机游动。算法通过模拟水蛭的这些行为来优化问题。

算法的关键步骤包括:

  1. 初始化:在解空间中随机初始化一组候选解。
  2. 定向水蛭的探索策略:模拟水蛭对刺激的响应,以小角度向猎物游动。
  3. 定向水蛭的开发策略:经过多次迭代后,水蛭逐渐接近猎物,进入开发阶段。
  4. 无方向水蛭的搜索策略:一些水蛭对信息判断错误,向错误方向游动,随着迭代增加,这些水蛭逐渐减少。
  5. Re-tracking策略:模拟水蛭被人类移走后,随机扔回稻田并再次寻找猎物的行为。

算法流程

BSLO算法的流程可以概括为以下几个步骤:

  1. 初始化种群,设置算法参数,如种群大小、迭代次数等。
  2. 对于每一代种群,执行以下操作:
    • 计算每个水蛭的适应度值。
    • 根据适应度值,选择最佳的水蛭作为当前最优解。
    • 更新定向水蛭和无定向水蛭的数量。
    • 对定向水蛭执行探索策略,对无定向水蛭执行搜索策略。
    • 执行Re-tracking策略,模拟水蛭被移走后重新寻找猎物的行为。
  3. 重复上述过程,直到达到迭代次数或满足其他停止条件。
  4. 输出最优解和相应的适应度值。

参考文献:

[1]Bai, Jianfu, et al. “Blood-Sucking Leech Optimizer.” Advances in Engineering Software, vol. 195, Elsevier BV, Sept. 2024, p. 103696, doi:10.1016/j.advengsoft.2024.103696

原文链接:https://blog.csdn.net/weixin_46204734/article/details/139967378

二、多目标吸血水蛭优化算法

由于吸血水蛭优化算法仅能求解单目标优化问题,为了求解多目标优化问题,本文提出多目标吸血水蛭优化算法(Multi-objective Blood-Sucking Leech Optimizer,MOBSLO)。MOBSLO是吸血水蛭优化算法的多目标变体,能够有效求解多目标优化问题,为了检验本文所提算法的性能,将其应用于基准函数DTLZ1-DTLZ9的求解,并采用六种性能评价指标(GD、IGD、HV、Spacing、Spread、Coverage)对所提算法的收敛性和多样性进行有效评估。
在这里插入图片描述
MOBSLO首先对种群进行初始化,采取随机初始化方式。其次,算法对初始化的种群进行筛选并利用筛选的后代交配产生子代个体。接着,利用环境选择算子对子代进行筛选以便进行下一轮迭代。直到满足算法的终止条件,最后一次环境选择出来的所有个体即为最终的近似 Pareto 解集。环境选择算子的作用主要用于子代个体的选择,被选择的个体能够支配种群中的其他个体或者互相不支配,称其为精英个体。通过算法的迭代运算,每次均选出精英个体,反复如此即可求得问题的解。
DTLZ测试函数系列(DTLZ1-DTLZ9)是多目标优化领域中一组广泛使用的基准测试问题,由Kalyanmoy Deb、Lothar Thiele、Marco Laumanns和Eckart Zitzler于2002年提出。这些测试问题旨在评估和比较不同多目标优化算法的性能。以下是DTLZ1-DTLZ9的简要介绍:

  1. DTLZ1:这是一个较简单的多目标测试问题,具有线性Pareto最优面。它包含多个目标函数,目标是最小化这些函数,同时满足一定的约束条件。DTLZ1的特点是搜索空间中包含多个局部Pareto最优前沿,这可能会吸引多目标进化算法(MOEA)在到达全局Pareto最优前沿之前。

  2. DTLZ2:DTLZ2用于测试MOEA在目标数量较多时的性能。与DTLZ1类似,对于M>3的情况,Pareto最优解必须位于单位球体的第一个八分体内部。

  3. DTLZ3:DTLZ3通过在DTLZ2的基础上采用DTLZ1中的函数g(Xm)来测试MOEA收敛到全局Pareto最优的能力。

  4. DTLZ4:DTLZ4通过修改DTLZ2,采用不同的决策变量到目标函数的映射方式,以测试MOEA保持解的良好分布度的能力。

  5. DTLZ5:DTLZ5与DTLZ2在形式上相似,但使用关于X的函数θ取代原目标函数中的x的取值。

  6. DTLZ6:DTLZ6通过对DTLZ5的函数g进行修改,使问题变得更复杂。

  7. DTLZ7:DTLZ7是一个具有一组不连续Pareto最优面的测试问题,它提出了一个简单的目标函数表达式,其中前M-1个目标仅依赖于决策变量xi,而最后一个目标fM(x)依赖于其他变量。

  8. DTLZ8:DTLZ8是DTLZ系列中唯一包含不等式约束的问题之一。它的Pareto前沿由一条直线段和一个三角形的平面组成。

  9. DTLZ9:DTLZ9也是一个包含不等式约束的多目标优化问题,其Pareto前沿与DTLZ5相似,是DTLZ5问题的子区域。

DTLZ测试问题系列因其可扩展性和明确的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] = MOBLSO(Max_iter,SearchAgents_no,Name,dim,numObj,lb,ub);%算法求解

2.3、部分结果

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

三、完整MATLAB代码

见下方名片


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

相关文章:

  • python基本数据类型 -- 元组tuple
  • 数据结构-二叉树_堆
  • OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
  • QoE和QoS的区别
  • Leetcode 完全二叉树的节点个数
  • 在k8s上部署Crunchy Postgres for Kubernetes
  • 集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
  • 机器学习——数据隐私与安全学习
  • 排序算法:直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序
  • 【IEEE独立出版 |往届均已成功检索】第八届大数据与应用统计国际学术研讨会(ISBDAS 2025)
  • C#核心(10)拓展方法
  • 机器学习:智能技术的未来
  • Vue_Router权限控制:不同角色显示不同路由
  • MySQL基础大全(看这一篇足够!!!)
  • 解决.DS_Store 在项目一致无法排除,.gitignore里也不生效
  • C++ 网络编程:打造多线程 TCP 服务器,同时服务多个客户机!
  • Qt-常用的按钮控件 QPushButton QRadioButton QCheckBox
  • Kadane 算法 二维 详解
  • 如何创建一个网站?初学者的分步指南
  • 【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
  • 网络编程day2.2~day3——TCP并发服务器
  • TCP Listen 队列详解与优化指南
  • springboot基于大数据技术的电影推荐系统的设计与实现
  • 区块链预言机;预言机的部署、与智能合约的关系以及是否分布式;基于Fabric联盟链与链外世界的数据交互
  • Python 之网络爬虫
  • Spring Security SecurityContextHolder(安全上下文信息)