首页 > 编程语言 >基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)

时间:2022-09-29 17:01:50浏览次数:68  
标签:粒子 搜索算法 中取 MATLAB 讲解 物品 女生 最优 Pareto

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标


本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书


上周有小伙伴后台问小编能否讲解一下关于多目标优化问题的算法,本周小编做足了功课,为大家更新这篇推文。

在讲解多目标优化问题之前,小编想先讲一个小故事,说有一位女生,她想每天都吃好多好吃的,同时又想保持好身材,我们都知道这在现实生活中很难实现的。这其实可以抽象为一个实际问题模型,如何保证每天摄入食物最多,且体重最小,比如说女生1每天摄入2kg食物,体重50Kg;女生2每天摄入2Kg食物,体重52Kg;女生3每天摄入1Kg食物,体重50Kg;女生4每天摄入1Kg食物,体重48Kg。

我们最终得出的结论是女生1要好于女生2,因为吃同样多的饭,女生1比女生2瘦;女生1也好于女生3,虽然两人体重相同,但女生1更能吃;女生4要好于女生3,因为吃同样多的饭,女生4比女生3瘦;But,女生1和女生4谁更优秀呢,我们无法比较,这里实质上就是说这个问题不只有一个“最优解”。当然小编只是举个例子。目的是告诉大家,多目标问题没有一个所谓的最优解,而是有一个最优解的集合,看到这里各位可能会有点蒙,没关系,下面小编给出一个实例,让大家直观感受一下小编刚才说的是什么意思。

问题描述:

假设存在五类物品,每类物品中又包含四种具体物品,现要求从这五类物品中分别选择一种物品放入背包中,使得背包内物品的总价值最大总体积最小,并且背包的总质量不超过92Kg。其中P为每个物品的价值,R为每个物品的体积,C为每个物品质量。

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标_02

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_优化问题_03

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_优化问题_04

下面给出3种不同的选择方案:

方案1:我们第1类物品中取第1各物品,第2类物品中取第1个物品,第3类物品中取第1个物品,第4类物品中取第3个物品,第5类物品中取第1个物品。

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标_05

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标_06

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_最优解_07

经计算可知该种选法的

物品总价值sumP1=3+4+9+12+2=30

总体积sumR1=0.2+0.3+0.4+0.5+0.1=1.5

总质量sumC1=10+13+24+28+4=79<92


方案2:我们第1类物品中取第1各物品,第2类物品中取第1个物品,第3类物品中取第2个物品,第4类物品中取第2个物品,第5类物品中取第1个物品。

经计算可知该种选法的

物品总价值sumP2=3+4+8+10+2=27

总体积sumR2=0.2+0.3+0.38+0.45+0.1=1.43

总质量sumC2=10+13+22+26+4=75<92


方案3:我们第1类物品中取第1各物品,第2类物品中取第1个物品,第3类物品中取第1个物品,第4类物品中取第4个物品,第5类物品中取第1个物品。

经计算可知该种选法的

物品总价值sumP3=3+4+9+10+2=28

总体积sumR3=0.2+0.3+0.4+0.6+0.1=1.6

总质量sumC3=10+13+24+32+4=83<92


经比较发现:方案1优于方案3,因为方案1的物品总价值>方案3的物品总价值,即sumP1>sumP3;方案1的物品总体积<方案3的物品总体积,即sumR1<sumR3;并且两种方案都满足重量约束,即sumC1<92,sumC3<92,因此方案1的选择方案选择的物品使背包内物品的总价值又大,总体积又小。但是方案1与方案2无法比较,因为方案1的物品总价值>方案2的物品总价值,即sumP1>sumP2;但是方案1的物品总体积>方案2的物品总体积,即sumR1>sumR2;并且两种方案都满足重量约束,即sumC1<92,sumC2<92,因为虽然方案1的选择方案使背包内物品的总价值大于方案2的选择方案背包内物品的总价值,但是方案1的选择方案使背包内的总体积也大于方案2选择方案背包内物品的总体积。这两种方案种的两个目标同时比较时,无法做到某一个方案的所有目标都优于另一个方案的所有目标,所以这两种方案无法比较优劣。


由上述内容可以引出多目标优化问题的两个基本概念:Pareto最优解和Pareto最优前沿

Pareto最优解:对于多目标优化问题,通常存在一个解集,这些解之间就全体目标函数而言是无法比较优劣的,其特点是:无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解或Pareto最优解。

Pareto最优前沿:对于组成Pareto最优解集的所有Pareto最优解,其对应目标空间中的目标矢量所构成的曲面称作Pareto最优前沿。

就上文提到的背包问题,方案1和方案2都属于Pareto最优解,方案1和方案2共同构成Pareto最优解集。


本文要求解的多目标优化问题,前文已经给出,其实问题的结果就是一个1行5列的行向量,比如说问题的解为[1 1 1 3 1],则表明第1类物品中取第1各物品,第2类物品中取第1个物品,第3类物品中取第1个物品,第4类物品中取第3个物品,第5类物品中取第1个物品。

本文用粒子群算法求解多目标问题,不知道小伙伴们还记不记得《​​混合粒子群算法通俗讲解(附MATLAB代码)​​》一文中所讲的粒子群算法的两大特点:个体最优和群体最优,忘了的小伙伴可以回去稍微复习一下。

在这里小编想给出用粒子群算法求解多目标优化问题的流程图:

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标_08

下面详细解释每个步骤的涵义:

  1. 种群初始化:随机初始化粒子的位置x和速度v
  2. 适应度值计算:每个个体的适应度值有两个,即价值sumP和体积sumR,同时个体必须满足质量约束(sumC<92)。
  3. 粒子最优更新:包括个体最优最优粒子更新和群体最优粒子更新,其中个体最优粒子的更新方式是从当前粒子和个体最优粒子中选择支配粒子一个粒子支配另一个粒子的意思就是该粒子的sumP和sumR都好于另外一个粒子),当两个粒子都不是支配粒子时,从中随机选择一个粒子作为个体最优粒子。群体最优粒子为从Pareto最优解集中随机选择的一个粒子。
  4. Pareto最优解集更新:当新粒子不受其他粒子及当前Pareto最优解集中的粒子的支配时,把新粒子放入Pareto最优解集中。
  5. 粒子速度和位置更新:在这里小编介绍一下粒子速度和位置更新的公式,因为接下来的代码中有用到这两个公式。

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_最优解_09

基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_最优解_10

其中,基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_多目标_11为惯性权重;r1r2为均分布于[0,1]区间的随机数;k是当前迭代次数;基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_最优解_12为个体最优粒子位置;基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)_最优解_13为全局最优粒子位置;c1c2为常数;V为粒子速度;X为粒子位置。这里粒子位置X可以随机生成,形式如[1 1 1 3 1],粒子初始速度V可设置为0,从上面两个公式也可以看出,更新粒子速度V目的是为了更新粒子位置X


最后附上PSO求解多目标优化问题的MATLAB代码(后台回复“PSO多目标”提取代码):

链接:https://pan.baidu.com/s/1jExRuCXUrDfR7L4lb9thpA 

提取码:cwwe 

最后,小编想说如果大家觉得文章写得还可以的话,麻烦大家动动小手点个赞,你们的支持是小编前进的动力。


标签:粒子,搜索算法,中取,MATLAB,讲解,物品,女生,最优,Pareto
From: https://blog.51cto.com/u_15810430/5723540

相关文章

  • 混合粒子群算法通俗讲解(附MATLAB代码)
    还是先声明本文参考《MATLAB智能算法30个案例分析》今天小编为大家讲解粒子群算法(PSO),还是和往常一样,我的目的是为了带领大家快速入门,是为了让大家在最短的时间内上手粒子群......
  • 遗传算法求解车间调度问题(附MATLAB代码)
    首先声明本文参考数据魔术师公众号的《遗传算法求解混合流水车间调度问题(附C++代码)》和《MATLAB智能算法30个案例分析》今天小编为大家讲解遗传算法求解车间调度问题。小编......
  • 蚁群算法通俗讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书今天小编与大家聊聊蚁群算法,蚁群算法一个显著的特点是蚂蚁在经过路径后会释放信息素,蚂蚁之间能够相......
  • VNS(变邻域搜索算法)求解CVRP问题
    最近小编在学(xiao)习(xi)CVRP问题,相信小伙伴们CVRP问题并不陌生,没错CVRP问题就是容量受限制的车辆路径问题,容量受限指的是每辆车的容量都有限制,我们对问题的目标进行设定,本......
  • 模拟退火算法通俗讲解
    编辑:连吃十三碗校正:随心目录1. 模拟退火算法基本概念2. 模拟退火算法基本流程3. 遗传模拟退火算法matlab代码1.模拟退火算法基本概念自然凝结的、不受外界干扰而形成的......
  • CH573F蓝牙从机(peripheral)例程讲解(二)
    在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播。在peripheral例程中,一直是以50ms的周期进行广播,使用手机......
  • python 使用HOG进行目标检测 + 非极大值抑制代码讲解(HOG(Histogram of Oriented Gradi
    最近在看《深度学习全书公式+推导+代码+TensorFlow》——清华大学出版社这本书,看到第8章——目标检测,其中有使用HOG进行目标检测的代码,觉得写的通俗易懂,就分享给大家......
  • 分支结构实战讲解
    分支结构实战讲解:#1.根据用户输入内容打印其权限'''jason-->超级管理员tom-->普通管理员jack,rain-->业务主管其他-->普通用户''......
  • 详细讲解三维动画与二维动画的优缺点有哪些?
    二维动画和三维动画是动画制作中两种重要的表现方式。它们有很多相似之处。三维动画制作是以二维动画为基础的。同时,立体动画制作具有更多的独立差异和优势。动画形象策划不......
  • 基础知识(5) --Matlab中特殊符号使用总结
    前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法,主要有:冒号'分号&  &&与|   || 或~非.点1、:冒号冒号的主要用途是用......