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

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 更新粒子的速度和位置

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

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

2.ZDT2

3.ZDT3

4.ZDT4

四、部分代码

%% 清空环境
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:sizepopnk=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;elseindex=index+1;endkk=kk+1;endif 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_maxpareto_set(I==min(I),:)=[];I = crowd_dist(pareto_set);
end
% 在拥挤距离较大的前20%解中随机选择全局最优
if floor(0.2*length(I))<1r1=1;
elser1=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

五、结果展示

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

1.ZDT1

2.ZDT2

3.ZDT3

4.ZDT4

六、完整代码

完整代码获取方式参见链接: 多目标粒子群算法(MOPSO)的原理介绍以及matlab代码

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

  1. (python源码,详细注解 )多目标粒子群算法 mopso

    1 本代码功能 用多目标粒子群算法(mopso)寻找pareto最优解集 2 算法介绍 2.1 简单步骤: (1)初始化群体粒子群的位置和速度,计算适应值 (2)根据pareto支配原则,计算得到Ar ...

  2. MOPSO 多目标粒子群算法

    MOPSO 多目标粒子群算法 1.算法简介 多目标粒子群(MOPSO)算法是由CarlosA. Coello Coello等人在2004年提出,目的是将原来只能用在单目标上的粒子群算法(PSO)应用于 ...

  3. 基于多目标粒子群算法(MOPSO)的含风管柴储的微电网多目标优化——附代码

    目录 摘要: 1.微电网模型 2.微电网多目标优化调度的目标函数 2.1运行成本最小: 2.2风光消纳率最高: 3.微电网多目标优化调度的约束条件 3.1最大最小功率约束: 3.2最大最小功率约束: ...

  4. MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行优化

    MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行优化 关键词:综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档:<基于多目标算法的冷热电联供型综合能源系统运行优化> ...

  5. 韩老师多目标优化:多目标粒子群算法

    一. 内容简介 韩老师多目标优化:多目标粒子群算法 视频: [2022.2.5韩老师十七课时(中)多目标优化:多目标粒子群算法] https://www.bilibili.com/video/BV1e ...

  6. 4.基于多目标粒子群算法冷热电联供综合能源系统运行优化

    4.基于多目标粒子群算法冷热电联供综合能源系统运行优化<文章复现> 相关资源代码:基于多目标粒子群算法冷热电联供综合能源系统运行优化 基于多目标算法的冷热电联供型综合能源系统运行优化 考虑 ...

  7. 基于多目标粒子群算法的冷热电联供型综合能源系统运行优化。 包括燃气轮机,燃气锅炉,电制冷机等设备。

    基于多目标粒子群算法的冷热电联供型综合能源系统运行优化. 包括燃气轮机,燃气锅炉,电制冷机等设备. _:5660667510835416宇哥代码铺

  8. 基于信息熵确立权重的topsis法_一种基于改进多目标粒子群算法的受端电网储能优化配置方法与流程...

    本发明涉及受端电网中储能的规划问题,具体涉及一种基于改进多目标粒子群算法的受端电网储能优化配置方法. 背景技术: 随着煤炭等非可再生.高污染的能源总量日益减少,我国的电能结构正由火力发电向低碳化的清洁 ...

  9. 基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)

    一.主要内容 程序是对文章<基于多目标粒子群算法的配电网储能选址定容>的方法复现,具体内容如下: 以系统节点电压水平(电网脆弱性).网络损耗以及储能系统总容量为目标建立了储能选址定容优化模 ...

最新文章

  1. C++所提供的类模板应用(堆栈)
  2. python 一个文本是否包含另一字符串 in find是区分大小写的
  3. 小程序直播间页面路径怎么访问直播间_以小程序为例,在线教育产品的直播间有哪些功能设计?...
  4. Windows Phone 7 开发资源汇总
  5. mysql 烂泥_烂泥:学习mysql的binlog配置
  6. 关于JQUery.parseJSON()函数的知识札记
  7. 最新综述:图像分类中的对抗机器学习
  8. 【机器视觉】 HDevelop语言基础(二)-变量和表达式
  9. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
  10. 22)PHP,数组排序函数
  11. linux集成开发环境
  12. 银行招聘网计算机类笔试,中国人民银行计算机类笔试模拟题
  13. python lib库_python_lib基础库
  14. 大数高精加减乘除(洛谷P1601、P2142、P1303、P1480题题解,Java语言描述)
  15. js浏览器页面生命周期
  16. java string.format_如果性能很重要,我应该使用Java的String.format()吗?
  17. bodymovin输出Json动画为黑白的解决方案
  18. Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
  19. 计算机自动维护有用吗,Win10怎么开启自动维护功能?系统自动维护有什么作用?...
  20. 2019-11-10训练总结

热门文章

  1. MATLAB中meshgrid函数用法
  2. 经销商回收旧iPhone 换新机还可获得补贴
  3. 让你明明白白用QQ 资费明细 开通关闭方法
  4. 《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 12 Large-Scale Machine Learning
  5. 【春节福利】送一台32寸曲面屏显示器!
  6. 第三方接口对接注意事项
  7. Android 如何解析p/p类似这种标签中的数据
  8. 工业液晶触摸屏检测修复有哪些方式?
  9. 基于springboot的高校迎新系统设计与实现
  10. c语言之圆周长、面积、圆球的体积求法--未改进版