news 2026/8/6 8:03:48

MOPSO多目标粒子群优化算法,可设置多个目标函数进行寻优,pbest更新采用支配方式更新

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MOPSO多目标粒子群优化算法,可设置多个目标函数进行寻优,pbest更新采用支配方式更新

MOPSO多目标粒子群优化算法,可设置多个目标函数进行寻优,pbest更新采用支配方式更新,即下一个个体的所有目标优于上一个个体时进行更新,否则以一定概率更新;gbest采用非劣解方式进行更新,即所有个体的目标与第一个个体目标比较,最终确定非劣解集合

粒子群优化(PSO)玩过多目标版本的都知道,这玩意儿在解多目标问题的时候比传统算法更带劲儿。今天咱们就聊点MOPSO的骚操作——怎么让一群粒子在多个目标函数里找到最优解,还不打架。

MOPSO多目标粒子群优化算法,可设置多个目标函数进行寻优,pbest更新采用支配方式更新,即下一个个体的所有目标优于上一个个体时进行更新,否则以一定概率更新;gbest采用非劣解方式进行更新,即所有个体的目标与第一个个体目标比较,最终确定非劣解集合

先看pbest怎么玩。每个粒子都有自己的历史最优位置,但这里有个坑:不能只看单一目标函数。比如现在有两个目标,一个要成本最低,一个要性能最高。这时候新位置必须全面碾压旧位置才算更新。代码里判断支配关系的函数大概长这样:

def dominates(new_obj, old_obj): better_in_all = True for i in range(len(new_obj)): if new_obj[i] < old_obj[i]: # 假设都是最小化目标 better_in_all = False break return better_in_all

但现实哪有那么多完美情况?当新解既不比旧的好,也不比旧的差的时候,咱们抛个硬币决定更不更新。这个随机性可以防止算法早熟:

if dominates(new_obj, current_pbest): update_pbest() elif random.random() < 0.5: # 50%概率强制更新 current_pbest = new_position

重点来了,全局最优gbest怎么选?传统PSO直接选群体里最靓的仔,但多目标里根本没有绝对最优。这时候得建个非劣解档案馆。每代更新时,先把第一个粒子当标杆,其他粒子挨个和它比:

archive = [particles[0].position] for p in particles[1:]: is_dominated = False for a in archive: if dominates(a.objectives, p.objectives): is_dominated = True break if not is_dominated: archive.append(p.position) # 还要清理被新解支配的旧存档 archive = [a for a in archive if not dominates(p.objectives, a.objectives)]

注意这里要动态维护存档,新解进来要踢掉被它支配的旧解。最后从存档里随机挑几个当gbest,这样能保证搜索方向的多样性。

速度更新还是经典公式,但位置越界时建议用反射边界处理,别直接卡死:

v = w*v + c1*rand()*(pbest_pos - x) + c2*rand()*(gbest_pos - x) x = x + v # 边界反射 for i in range(len(x)): if x[i] < lb[i]: x[i] = lb[i] + (lb[i] - x[i]) v[i] *= -0.5 elif x[i] > ub[i]: x[i] = ub[i] - (x[i] - ub[i]) v[i] *= -0.5

最后给个实战建议:目标函数数量超过3个时,存档管理会指数级爆炸。这时候需要上自适应网格或者聚类算法来压缩存档规模,否则内存分分钟教你做人。参数设置也别死磕文献推荐值,不同问题的最优惯性权重可能差十倍,动手调参才是王道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:14:46

Reactor模式

目录 一、核心思想&#xff1a;好莱坞原则与事件驱动 二、四大核心组件拆解 1. Handle&#xff08;句柄 / 资源&#xff09; 2. Synchronous Event Demultiplexer&#xff08;同步事件多路复用器&#xff09; 3. Initiation Dispatcher&#xff08;初始分发器 / 反应器核心…

作者头像 李华
网站建设 2026/7/14 15:14:45

C/S架构0

JSON JSON​ 是一种用于存储和交换文本信息的、对人友好、对机器高效的轻量级数据格式。它是现代 Web 开发中前后端传输数据的标准语言。 你可以把它理解为:一种在互联网上,让不同程序(如你的 Vue 前端和 Spring Boot 后端)都能看得懂的“普通话”或“通用数据快递单”。…

作者头像 李华
网站建设 2026/7/14 15:14:47

Z-Image-GGUF惊艳案例集:抽象艺术×中国传统纹样×数字人像融合创作

Z-Image-GGUF惊艳案例集&#xff1a;抽象艺术中国传统纹样数字人像融合创作 1. 项目简介与核心价值 今天我想和你分享一个特别有意思的AI图像生成项目——Z-Image-GGUF。这可不是普通的文生图工具&#xff0c;而是阿里巴巴通义实验室开源模型的一个量化版本&#xff0c;专门为…

作者头像 李华
网站建设 2026/7/14 15:14:46

WSL2-Debian下CUDA与cuDNN环境配置全攻略

1. WSL2-Debian环境准备 在开始配置CUDA和cuDNN之前&#xff0c;我们需要确保WSL2-Debian环境已经正确设置。WSL2是微软推出的第二代Windows子系统&#xff0c;它提供了接近原生Linux的性能&#xff0c;非常适合开发者和研究人员使用。不过&#xff0c;与原生Linux系统相比&…

作者头像 李华
网站建设 2026/7/14 15:14:47

Qt 利用QDialog打造动态遮罩层:提升弹窗交互体验

1. 为什么需要动态遮罩层&#xff1f; 做Qt开发的朋友们肯定都遇到过这样的场景&#xff1a;当你点击某个按钮弹出一个对话框时&#xff0c;如果对话框和主窗口的背景色太接近&#xff0c;用户很难快速分辨出对话框的边界。这种情况在深色主题的UI中尤其明显&#xff0c;我曾经…

作者头像 李华