多目标优化算法——基于聚类的不规则Pareto前沿多目标优化自适应进化算法(CA-MOEA)

news2025/1/8 9:44:38

基于聚类的不规则Pareto前沿多目标优化自适应进化算法(CA-MOEA)

一、算法简介
  1. 简介:

    现有的多目标进化算法(moea)在具有规则Pareto前沿且Pareto最优解在目标空间上连续分布的多目标优化问题(MOPs)上表现良好。当Pareto前沿不连续或退化时,现有的大多数算法都不能得到很好的结果。为了解决这一问题,本文提出了一种基于聚类的自适应MOEA (CA-MOEA)算法来求解具有不规则Pareto前沿的MOPs。

    其主要思想是自适应地产生一组聚类中心,以指导每一代的选择,保持多样性和加速收敛。研究结果证明了CA-MOEA在多目标优化中的竞争力,特别是对于不规则Pareto前沿问题。此外,CA-MOEA在碳纤维成形过程中拉伸参数的优化方面表现良好。

  2. 现有算法的局限性:

    • 基于指标的MOEAs: 在不规则Pareto前沿情况下,非Pareto最优解可能会对指标贡献更大,导致选择偏差。
    • 基于分解的MOEAs: 需要预先定义一组权重向量,但在不规则Pareto前沿情况下,大量权重向量会被浪费,导致性能下降。
    • 基于Pareto支配的MOEAs: 多样性维护机制(如拥挤距离)在不规则Pareto前沿情况下可能会失效,导致丢失重要的解。
    • 协同进化MOEAs(CMOEAs): 处理具有复杂相互依赖性的问题时,决策变量分解变得困难,且保持种群多样性也面临挑战。
  3. 聚类:

    • 划分方法(Partitioning Methods):例如:k-means、k-中心点(k-centroid)及其变体。这类方法需要预先定义聚类中心,且结果严重依赖于初始聚类中心的选择。
    • 基于密度的方法(Density-Based Methods):例如:基于密度的空间聚类应用噪声(DBSCAN)。这类方法将高密度区域视为簇,并将其与低密度区域分开。然而,低密度区域中的个体可能对优化具有重要意义,因此这类方法不适用于处理不规则Pareto前沿的问题。
    • 基于网格的方法(Grid-Based Methods):例如:基于统计信息网格的方法。这类方法通常不能独立工作,而是用于减少其他聚类算法的计算时间。
    • 基于模型的方法(Model-Based Methods):这类方法采用某种模型并试图找到最适合该模型的数据。其主要缺点是计算量大。
    • 层次聚类方法(Hierarchical Clustering Methods):包括**自底向上(bottom-up)和自顶向下(top-down)**两种方法。
      • 自底向上方法首先将每个数据点视为独立的簇,然后根据某种链接准则逐步合并簇,直到所有簇合并为一个。
      • 自顶向下方法则相反,首先将所有数据点视为一个簇,然后逐步将其划分为更小的簇。它不需要指定聚类的数量,也不假设数据是正态分布。
  4. 采用Ward链接准则:使同一簇内的误差平方和最小化,而使不同簇之间的误差最大化,最有可能将非支配前沿的解均匀地划分为所需数量的组。

    任意两个簇之间的距离使用如下公式计算:

在这里插入图片描述

选择距离最小的两个簇将其合并,并计算聚类中心:计算每个目标上的值,每个解在该目标上的值的和/该簇中解的个数

在这里插入图片描述

D,E合并后的聚类中心G((8+10)/2,(4+2)/2)====> (9,3)

在这里插入图片描述

二、算法流程

​ CA-MOEA采用自底向上的层次聚类方法

  1. 算法流程:

    N种群大小,g代数,M目标的数量,V决策变量数,B约束条件,Fl从1,2,3到l层的所有解的集合

    (1)随机初始化父代种群P,大小为N。

    (2)通过采用模拟二元交叉(SBX)和多项式突变产生大小为N的子代群体Q,采用精英保留机制合并父代种群P和子代种群Q为整体种群P(2N),交叉概率pc = 1.0,突变概率pm = 1/V

    (3)对P进行快速非支配排序。将组合种群P中的2N个解排序到L个非支配前沿f1, f2,…,fL。从前往后选择N个解。

    (4)如果选到l层,Fl的大小大于N,而选到l-1层,Fl的大小小于N,则选出l层的前K=N-|Fl-1|个解。

    (5)计算聚类中心。

    (6)基于聚类的选择。

    (7)选则的解数量到N个或者迭代次数到g,结束循环。

  2. 主循环
    在这里插入图片描述

  3. 计算聚类中心:

    将fl层中的解使用如下公式归一化到**[0,1]**:
    在这里插入图片描述

    使用层次聚类算法(Ward 链接准则)将第l层的个体划分为 K个簇:

    初始状态,每个个体作为一个独立的簇。根据 Ward 链接准则,合并最相似的两簇,直到达到预定的簇数量 K,计算生成的K个簇的聚类中心。

在这里插入图片描述

  1. 基于聚类的自适应环境选择:

    个体分配:

    • 计算每个个体与各个聚类中心之间的欧氏距离。
    • 将每个个体分配到与其距离最近的聚类中心。

    个体选择:

    初始化集合:

    • 初始化三个集合 T_1、T_2 和 T_3。
    • T_1用于存放每个簇中距离聚类中心最近的个体。
    • T_2用于存放nCj>=3时,每个簇中除最近个体外的其他个体。
    • T_3用于存nCj<3时,每个簇中除最近个体外的其他个体。

    个体选择:

    ​ 依次从T1,T2,T3中选取解,直至选满K个为止。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的乐器商城购物推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【vba源码】自动获取汇率

Hi&#xff0c;大家好&#xff01; 没有想到今天居然是腊八&#xff0c;过了腊八就是年&#xff0c;离过年越来越近了&#xff0c;那在这里给大家就拜个年&#xff0c;希望大家在新的一年都有好事发生。 最近在弄点小项目&#xff0c;在项目遇到了一个汇率计算的问题&#xff…

JavaEE初阶——计算机工作原理

一、什么是JavaEE JavaEE&#xff08;Java Platform&#xff0c;Enterprise Edition&#xff09;是sun公司&#xff08;2009年4月20日甲骨文将其收购&#xff09;推出的企业级应用程序版本。这个版本以前称为 J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器…

【Unity3D】AB包加密(AssetBundle加密)

加密前&#xff1a; 加密后&#xff0c;直接无法加载ab&#xff0c;所以无法正常看到ab内容。 using UnityEngine; using UnityEditor; using System.IO; public static class AssetBundleDemoTest {[MenuItem("Tools/打包!")]public static void Build(){//注意:St…

数据库语句学习

WHERE AND: 请编写 SQL 语句&#xff0c;从 courses 表中&#xff0c;选取课程名为 Web 或者 Big Data 的课程信息&#xff0c;如果这两门课程存在&#xff0c;请将这两门课程的信息全部返回。 SELECT * FROM courses where name in (Web,Big Data) -- 等同于 -- WHERE name …

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…

Postman接口测试05|实战项目笔记

目录 一、项目接口概况 二、单接口测试-登录接口&#xff1a;POST 1、正例 2、反例 ①姓名未注册 ②密码错误 ③姓名为空 ④多参 ⑤少参 ⑥无参 三、批量运行测试用例 四、生成测试报告 1、Postman界面生成 2、Newman命令行生成 五、token鉴权&#xff08;“…

使用Locust对MongoDB进行负载测试

1.安装环境 pip install pymongo locust 2.设置测试环境 开启MongoDB服务 打开Navicat&#xff0c;新建MongoDB连接 新建test数据库和sample集合 3.编写脚本 load_mongo.py # codingutf-8 from locust import User, task, between, events from pymongo import MongoClie…

【微服务】3、配置管理

微服务配置管理 已掌握的微服务组件及配置管理问题引出 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件&#xff0c;具备微服务开发能力&#xff0c;但仍存在其他问题待解决。微服务和网关存在大量配置文件&#xff0c;其中包含很多重复配置&#xff0c;如数据库、日…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在使用beyoundcompare软件进行对比的时候&#xff0c;常常会出现一些无关紧要的地方&#xff0c;且所在行的内容是变化的&#xff0c;不方便进行比较&…

计算机网络——期末复习(7)期末试卷样例3

一、辨析题&#xff08;共4小题&#xff0c;每小题5分&#xff0c;共20分&#xff09; 1.差错检测是保障网络正常通信的一项重要措施&#xff0c;有多种差错检测算法&#xff08;技术&#xff09;&#xff0c; &#xff08;1&#xff09;以太网和IP协议各自采用的差错校验算法…

STM32-笔记34-4G遥控灯

4G接线 一、项目需求 服务器通过4G模块远程遥控开关灯。 二、项目实现 复制项目文件夹38-wifi控制风扇项目 重命名为39-4G遥控点灯 打开项目文件 加载文件 main.c #include "sys.h" #include "delay.h" #include "led.h" #include "ua…

游戏引擎学习第77天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度&#xff0c;进行调试昨天代码的问题&#xff0c;主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏&#xff0c;但我们希望能够处理多层的房间&#xff0c;玩家…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器&#xff0c;递增的不太行&#xff0c;控制的不够准确&#xff0c;其次在大于10微秒的延时是非常准确的&#xff0c;小于的话&#xff0c;就没有那没准&#xff0c;但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

aardio —— 虚表 —— 模拟属性框

写了个简单的属性框例程&#xff0c;抛砖引玉&#xff0c;期待你做出更丰富强大的功能。 本例演示&#xff1a;折叠子行、选择框、输入文本、输入数值、下拉选择、选择图片、选择颜色、选择字体等功能。 只有想不到&#xff0c;没有做不到&#xff0c;发挥你的想象力吧。 imp…

[微服务]redis主从集群搭建与优化

搭建主从集群 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 1. 主从集群结构 下图就是一个简单的Redis主从集群结构&#xff1a; 如图所示&#xff0c;集群中有一个master节点、两个s…

设计模式 行为型 观察者模式(Observer Pattern)与 常见技术框架应用 解析

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新。 一…

《Opencv》图像的旋转

一、使用numpy库实现 np.rot90(img,-1) 后面的参数为-1时事顺时针旋转&#xff0c;为1时是逆时针旋转。 import cv2 import numpy as np img cv2.imread(./images/kele.png) """方法一""" # 顺时针90度 rot_1 np.rot90(img,-1) # 逆时针90度…

Android Studio 安装配置(个人笔记)

Android studio安装的前提是必须保证安装了jdk1.8版本以上 一、查看是否安装jdk cmd打开命令行&#xff0c;输入java -version 最后是一个关键点 输入 javac &#xff0c;看看有没有相关信息 没有就下载jdk Android studio安装的前提是必须保证安装了jdk1.8版本以上 可以到…

spicy.signal 报错解决

报错&#xff1a; ImportError: cannot import name ‘kaiser’ from ‘scipy.signal’ 解决办法 找到import的位置&#xff1a;将 from scipy.signal import kaiser 修改为 from scipy.signal.windows import kaiser