多目标粒子群算法(MOPSO)的原理和matlab实现

简介: 初学者面对多目标优化问题可能比较困难,写下这篇博客记录一下自己学习的心得,希望能和大家一起交流学习。采用粒子群求单目标优化问题的原理很好理解,就是通过对粒子群的速度和位置不断来更新粒子群的最优适应度(也就是目标函数),达到寻优的目的。但是多目标优化问题就比较难办了,由于目标函数有多个,如果同样使用粒子群算法,那么适应度怎么设置?怎么确定全体最优的粒子?这些问题都是比较棘手的。

         算法原理部分参考文献基于改进多目标粒子群算法的配电网储能选址定容

0.前言

       初学者面对多目标优化问题可能比较困难,写下这篇博客记录一下自己学习的心得,希望能和大家一起交流学习。

       采用粒子群求单目标优化问题的原理很好理解,就是通过对粒子群的速度和位置不断来更新粒子群的最优适应度(也就是目标函数),达到寻优的目的。但是多目标优化问题就比较难办了,由于目标函数有多个,如果同样使用粒子群算法,那么适应度怎么设置?怎么确定全体最优的粒子?这些问题都是比较棘手的。

       目前采用粒子群算法求解多目标问题主要有两大类处理方式:

       1.通过加权求和、灰色关联度分析、topsis、层次分析法等方法对多个目标函数进行处理,将多目标问题转换为单目标问题,然后仿照单目标问题进行求解;

       2.在迭代时以一定规则选择全体最优及个体最优的粒子,然后通过迭代求取pareto解集,最后根据需求从pareto解集中选取一个最合适的方案。

       第一种方式本质上还是单目标优化问题,这篇主要介绍一下第二种方法:

一、一些名词的解释

1.支配与非支配

       我们知道在粒子群算法中一个粒子就代表优化问题的一个解(也可以说是方案),如果说在一个多目标优化问题中,解1得到的所有目标函数全部优于解2,那么就说解2被解1支配。啥意思呢,举个例子,比如咱们的优化目标是选房子,目标函数包括房子租金和面积。A租金1800/月,面积100m²,B租金2800/月,面积40m²,显然A完全优于B,那么就说解B被解A支配;再有C租金1600/月,面积80m²,C的租金低于A,但面积比A小,这时候就说不上来C和A哪个更优,也就是C是A(A是C)的非支配解。

2.pareto最优解与pareto最优解集

      清楚了支配与非支配的含义,那么pareto最优解(也叫非劣解)就不难理解了:如果说对于优化问题的一个解A,不存在其他的解可以支配解A,那么解A就是一个pareto最优解。显然pareto最优解不只一个,由这些解组成的集合就称为pareto最优解集。pareto最优解集一个重要的特点就是集合中所有解的互相之间都是非支配的关系,也就是解集中不存在任何一个解完全优于其他解(要和平共处)。所以,和PSO最后要求出唯一一个最优解不同,MOPSO的目标是求出一个互相之间为非支配关系的解的集合,也就是pareto最优解集。

3.外部存档

       因为粒子群算法在迭代过程中各个粒子的速度和位置都是不断变化的,适应度(目标函数)也随之变化,所以需要一般都需要采用一个外部存档将pareto最优解的数据存储下来。

二、算法原理和步骤

step1 种群初始化

       根据所求问题的具体情况,初始化所有粒子的速度和位置。计算所有粒子的目标函数,将其中的非劣解存在外部存档中,形成pareto解集;

step2 确定个体最优与群体最优

       由于是初始化过程,所以每个粒子的个体最优就是其本身;参考文献中群体最优的选取方式是采用密集距离进行排序,在初始化选取的时候为了方便,也可直接从pareto解集随机选取;

step3 更新惯性权重

       惯性权重是粒子群算法的一个重要参数,和算法的局部搜索能力以及全局搜索能力相关,在每次迭代时,将惯性权重按下面的公式更新:




step4 更新粒子的速度和位置

        这一步和单目标粒子群算法一样:

image.gif

image.gif


step5 交叉变异操作

       这一步也就是参考文献的“改进”所在,也是可以避免算法陷入局部最优的操作:


step6 计算粒子的适应度并更新pareto最优解集

       参考文献中采用动态密集距离对pareto解集进行更新。简单来理解,就是判断一下pareto解集中各个解的距离,把距离较远的解留下(也就是保证解的分布不要太密集),距离比较近的解淘汰,保证外部存档中pareto最优解的数量不超过上限。这一点也比较好理解,还是拿租房子来举例,假设现在pareto解集中有三个选项:A租金1800/月,面积100m²,B租金1600/月,面积80m²,C租金1799/月,面积99m²,三个解互相都是非支配的关系,但如果咱们外部存档最多只能存两个解,该淘汰谁呢?我们注意到,A和C之间两个目标的值都很接近,相似度很高,所以为了保证解的多样性,淘汰的时候就从A和C之中选一个,B可以保留下来(具体该淘汰谁没有具体算,只是举个例子方便理解)。这就是通过密集距离对pareto解集进行更新的原理,密集距离的计算公式如下:


step7 更新群体最优与个体最优

       群体最优和个体最优的更新方式也是MOPSO的研究重点,各种花里胡哨的方法都有,参考文献的方法就比较简单粗暴,随机选,具体方法如下:


step8 迭代终止判断

       判断一下是否满足迭代次数要求,如果满足了就输出结果,不满足的话需要返回步骤3。

三、测试函数

       ZDT函数是多目标优化问题的常用的测试函数,具体公式如下:

1.ZDT1

image.gif

2.ZDT2

image.gif

3.ZDT3

image.gif

4.ZDT4

image.gif

四、部分代码

%% 清空环境
clc
clear
close all
%% 设置种群参数
sizepop = 200;                      % 初始种群个数
dim = 10;                           % 空间维数
ger = 100;                          % 最大迭代次数    
x_max=1*ones(1,dim);                % 位置上限
x_min=zeros(1,dim);                 % 位置下限
v_max=0.8*x_max;                    % 速度上限
v_min=-v_max;                       % 速度下限
w_start=0.9;                        % 惯性权重初始值
w_end=0.4;                          % 惯性权重结束值
c_1 = 1.5;                          % 自我学习因子
c_2 = 1.5;                          % 群体学习因子 
set_num_max=100;                    % pareto解集规模
%% 种群初始化
pop=x_min+rand(sizepop,dim).*(x_max-x_min);     % 初始化种群
pop_v=v_min+rand(sizepop,dim).*(v_max-v_min);   % 初始化种群速度                 
fitness=zeros(sizepop,2);                       % 所有个体的适应度
% 初始的适应度
for k=1:sizepop
    [a,b]=ZDT1(pop(k,:));
    fitness(k,:)=[a,b];
end
% 更新pareto解集
pareto_set=fitness(1,:);
pareto_pop=pop(1,:);
for k=2:sizepop
    nk=length(pareto_set(:,1));
    kk=1;
    index=0;% 判断是否放入pareto解集中的标志
    while kk<=nk
        % 如果pareto解集中被第k个个体支配就将其删除
        if fitness(k,:)<pareto_set(kk,:)
            pareto_set(kk,:)=[];
            pareto_pop(kk,:)=[];
            nk=nk-1;
            kk=kk-1;
        % 如果个体k被pareto解集中任意支配就退出循环
        elseif fitness(k,:)>pareto_set(kk,:)
            break;
        else
            index=index+1;
        end
        kk=kk+1;
    end
    if index>=length(pareto_set(:,1))
        pareto_set=[pareto_set;fitness(k,:)];
        pareto_pop=[pareto_pop;pop(k,:)];
    end
end
% 采用密集距离法更新全局最优和个体最优
I = crowd_dist(pareto_set);                     % 求所有个体的拥挤距离
% 采用逐一去除法更新pareto解集
while length(I)>set_num_max
    pareto_set(I==min(I),:)=[];
    I = crowd_dist(pareto_set);
end
% 在拥挤距离较大的前20%解中随机选择全局最优
if floor(0.2*length(I))<1
    r1=1;
else
    r1=randi([1,floor(0.2*length(I))]);
end
x_zbest=pareto_pop(r1,:);                       % 全局最优的位置
fitness_zbest=pareto_set(r1,:);                 % 种群的最优适应度
x_gbest=pop;                                    % 个体的最优位置   
fitness_gbest=fitness;                          % 个体的最优适应度
%% 迭代求pareto解集
iter=1;
while iter <= ger
    省略....
    iter=iter+1;
end

image.gif

五、结果展示

       代码中以动画的形式更新pareto解集,这里只展示最终结果:

1.ZDT1

image.gif

2.ZDT2


3.ZDT3

image.gif

4.ZDT4

image.gif

相关文章
|
9天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
17天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
18天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
19天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
18天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
18天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
36 3
|
23天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
1月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
29天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。

热门文章

最新文章

下一篇
无影云桌面