首页 > 编程语言 >多目标优化算法:多目标伞蜥优化算法Multi-objective Frilled Lizard Optimization求解DTLZ1-DTLZ9,提供完整MATLAB代码

多目标优化算法:多目标伞蜥优化算法Multi-objective Frilled Lizard Optimization求解DTLZ1-DTLZ9,提供完整MATLAB代码

时间:2024-11-21 20:45:24浏览次数:3  
标签:种群 Multi 迭代 解决方案 解集 收敛性 算法 优化

一、伞蜥优化算法

伞蜥优化算法(Frilled Lizard Optimization ,FLO) 是2024年提出的一种新颖的元启发式算法,它模仿了伞蜥在其自然栖息地中独特的狩猎行为。该算法的核心原则被详细地描述并数学结构化为两个不同的阶段:(i) 探索阶段,模仿蜥蜴对猎物的突然攻击;(ii) 开发阶段,模拟蜥蜴在进食后退到树梢的行为。FLO算法的灵感来源于伞蜥(Chlamydosaurus kingii)的两种特征行为:一是伞蜥在狩猎期间的坐等狩猎策略;二是伞蜥在进食后爬树的行为。基于这些行为,FLO算法被设计成两个阶段:探索阶段和开发阶段。在探索阶段,算法模拟伞蜥的捕食方式;在开发阶段,算法模拟伞蜥餐后撤退到树上的行为。

FLO算法流程

  1. 初始化:随机初始化伞蜥种群的位置。
  2. 探索阶段:模拟伞蜥的狩猎行为,通过快速移动寻找猎物。
  3. 开发阶段:模拟伞蜥进食后撤退到树上的行为,进行局部搜索以细化解决方案。
  4. 评估:评估每个伞蜥的适应度,选择最佳解决方案。
  5. 更新:根据适应度更新伞蜥的位置。
  6. 终止条件:如果满足终止条件(如达到最大迭代次数或找到满意的解决方案),则停止算法;否则,返回步骤2继续迭代。

FLO算法步骤

  1. 初始化种群:在问题解决空间中随机初始化伞蜥种群的位置。
  2. 计算适应度:对每个伞蜥进行评估,确定其作为解决方案的适应度。
  3. 探索阶段
    • 模拟伞蜥的快速攻击行为,通过随机选择和替换策略更新伞蜥的位置。
    • 评估新位置的适应度,并与当前最佳适应度进行比较。
  4. 开发阶段
    • 模拟伞蜥撤退到树上的行为,进行局部搜索以改进解决方案。
    • 更新伞蜥的位置,以寻找更优的解决方案。
  5. 更新最佳解决方案:如果新找到的解决方案比当前最佳解决方案更好,则更新最佳解决方案。
  6. 检查终止条件:如果满足预设的终止条件(如达到最大迭代次数或达到预定的适应度阈值),则输出最佳解决方案并停止算法;否则,返回步骤2继续迭代。

[1]Ibraheem Abu Falahah,Osama Al-Baik,Saleh Alomari,Gulnara Bektemyssova,Saikat Gochhait,Irina Leonova,OmParkash Malik,Frank Werner,Mohammad Dehghani.Frilled Lizard Optimization: A Novel Bio-Inspired Optimizer for Solving Engineering Applications[J].Computers, Materials & Continua,2024,79(6):3631-3678

二、多目标伞蜥优化算法

针对单目标优化问题,伞蜥优化算法已显示出其有效性。然而,在面对多目标优化问题时,需要一种能够同时处理多个冲突目标的算法。因此,本文提出多目标伞蜥优化算法(Multi-objective Frilled Lizard Optimization , MOFLO)。MOFLO是FLO算法的多目标扩展,它能够有效地解决多目标优化问题。

为了验证MOFLO算法的性能,用于求解基准函数DTLZ1-DTLZ9。这些基准函数广泛用于测试多目标优化算法的有效性。同时,为了全面评估该算法的收敛性和多样性,我们采用了六种性能评价指标(GD、IGD、HV、Spacing、Spread、Coverage),通过这些指标的综合评估,可以有效地衡量MOFLO算法在解决多目标优化问题时的性能表现。

在这里插入图片描述
MOFLO算法的执行流程如下:

  1. 种群初始化:首先,算法通过随机方式初始化一个种群,每个个体代表一个潜在的解决方案。
  2. 种群筛选:接着,算法对初始种群进行评估,并筛选出符合特定条件的个体。
  3. 子代生成:筛选后的个体通过交配操作产生新的子代个体。
  4. 环境选择:然后,算法使用环境选择算子对新生成的子代个体进行筛选,以确定哪些个体将参与下一轮迭代。
  5. 终止条件检查:算法持续迭代,直到满足预设的终止条件,如达到最大迭代次数或解的质量达到预定标准。
  6. Pareto解集确定:满足终止条件后,最后一次环境选择中保留的所有个体构成了近似的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] = MOFLO(Max_iter,SearchAgents_no,Name,dim,numObj,lb,ub);%算法求解

2.3、部分结果

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

三、完整MATLAB代码

见下方名片

标签:种群,Multi,迭代,解决方案,解集,收敛性,算法,优化
From: https://blog.csdn.net/weixin_46204734/article/details/143954367

相关文章

  • 代码随想录算法训练营day52 day53| 卡码网101.孤岛的总面积 102.沉没孤岛 103.水
    学习资料:https://www.programmercarl.com/kamacoder/0101.孤岛的总面积.html#思路邻接矩阵是否被遍历过;每个坐标点上的值为0、1、2等等;四个边的考虑;地图的遍历次数都是卡码网的题学习记录:101.孤岛的总面积点击查看代码#用深搜,遍历邻接矩阵的四个边,先遍历所有可遍历的岛屿,......
  • Python算法模版——并查集
        并查集常用于与图或树相关的算法题中,一个最为经典应用场景是求无向图的连通分量,为方便大家使用并查集算法,这里为大家提供一个Python的并查集算法模版,并加有详细注释。classUnionFind:def__init__(self,n):#n代表总共有n个节点,初始时每个节点以......
  • 【DP优化技巧】1. Max类DP
    有的时候在遇到问题时,不妨换一个角度,100%不会吃亏\[\begin{align*}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&----LYJ\end{align*}\]有时,在想办法优化DP时,如果遇到了一些像\(A\)和......
  • PID 控制算法 | 模糊控制 | 控制规则
    注:本文为几位功夫博主关于PID控制算法的几篇合辑。知识点交集未去重,如有内容异常请看原文。控制算法(一)——PID控制算法fxfreefly于2020-03-1717:25:43发布比例积分微分控制,简称PID控制,其中P表示比例、I表示积分、D表示微分。PID控制算法是最早发展起来......
  • 无人机无刷电机核心算法!
    一、无人机无刷电机核心技术电磁感应与换向技术无刷电机的工作原理基于电磁感应和换向技术,通过电子换向器(即电子调速器,ESC)控制定子上的多相电流,产生旋转磁场,驱动转子中的永磁体转动,从而避免了机械磨损和摩擦,提高了电机寿命和效率。电机类型与设计无刷电机根据其设计和用途......
  • 排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)
    对数组进行排序,主要演示选择排序、直接排序、冒泡排序、二路归并排序算法,附上代码演示一、编写好各类排序方法的函数(1)s_sort(inte[],intn):选择排序。(2)si_sort(inte[],intn):直接插人排序。(3)sb_sort(inte[],intn):冒泡排序。(4)merge(inte[],intn);二路归并排序......
  • 第 24 章 -Golang 性能优化
    在Go语言中进行性能优化是一个多方面的过程,它涉及到代码编写、编译器优化、运行时系统调优以及对应用程序的深入理解。以下是针对Golang性能优化的一些关键点,包括性能分析工具、内存管理和并发优化等方面的内容,并附带一些简单的案例源代码。性能分析工具Go语言自带了强大......
  • 优化算法
    优化算法Batch梯度下降法每次对整个训练集进行计算,这在数据集很大时计算效率低下,因为每次更新权重前必须先处理整个训练集。可以将训练集划分为多个小子集,称为mini-batch。每次只使用一个mini-batch来计算梯度并更新参数。取出\(x^{(1)}\)到\(x^{(1000)}\),将其组成第一个mi......
  • 图片渐进式加载优化实践指南
    前言Hey,我是Immerse文章首发于个人博客【https://yaolifeng.com】,更多内容请关注个人博客转载说明:转载请在文章头部注明原文出处及版权声明!起因最近上线了个人博客,片段页面存在大量图片,在图片加载方面体验很差,可以说是断崖式,从0-1完全没有任何过渡(这很影响页面布局和......
  • 【hive优化】参数类优化总结
    1.算法类参数优化开启对count(distinct)的自动优化sethive.optimize.countdistinct=true开启自动mapjoinsethive.auto.convert.join=true;大表小表的阈值设置(默认25M一下认为是小表)sethive.mapjoin.smalltable.filesize=26214400;默认值是true,当选项设定为t......