【优化求解】基于粒子群算法求解多目标优化问题matlab源码

1 算法介绍

1.1 关于速度和位置

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

2.2 速度和位置的更新

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

对于公式(1):

公式(1)的第①部分称为【记忆项】,表示上次速度大小和方向的影响;

公式(1)的第②部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;

公式(1)的第③部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

以上面两个公式为基础,再来看一个公式:

公式(2)和 公式(3)被视为标准PSO算法。

1.3 标准PSO算法的流程

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

## 4.2 PSO流程图解

2 部分代码

clc;
clear;
close all;
​
%% 问题定义,这里可以删除
​
TestProblem=1;   % Set to 1, 2, or 3
​
switch TestProblemcase 1CostFunction=@(x) MyCost1(x);nVar=50;VarMin=0;VarMax=1;case 2CostFunction=@(x) MyCost2(x);nVar=3;VarMin=-5;VarMax=5;case 3CostFunction=@(x) MyCost3(x);nVar=2;VarMin=0;VarMax=1;
end
​
VarSize=[1 nVar];
​
VelMax=(VarMax-VarMin)/10;
​
%% MOPSO 设置
nPop=500;   % Population Size
​
nRep=100;   % Repository Size
​
MaxIt=500;  % Maximum Number of Iterations
​
phi1=2.05;%学习因子
phi2=2.05;
phi=phi1+phi2;
chi=2/(phi-2+sqrt(phi^2-4*phi));
​
w=chi;              % Inertia Weight
wdamp=1;            % Inertia Weight Damping Ratio
c1=chi*phi1;        % Personal Learning Coefficient
c2=chi*phi2;        % Global Learning Coefficient
​
alpha=0.1;  % Grid Inflation Parameter
​
nGrid=10;   % Number of Grids per each Dimension
​
beta=4;     % Leader Selection Pressure Parameter
​
gamma=2;    % Extra (to be deleted) Repository Member Selection Pressure
​
%% 初始化
​
particle=CreateEmptyParticle(nPop);
​
for i=1:nPopparticle(i).Velocity=0;particle(i).Position=unifrnd(VarMin,VarMax,VarSize); %unifrnd在[VarMin,VarMax]区间模拟VarSize的数组% 初始化了自变量X的位置particle(i).Cost=CostFunction(particle(i).Position); % 求解目标函数particle(i).Best.Position=particle(i).Position;particle(i).Best.Cost=particle(i).Cost;
end
​
particle=DetermineDomination(particle);
​
rep=GetNonDominatedParticles(particle);
​
rep_costs=GetCosts(rep);
G=CreateHypercubes(rep_costs,nGrid,alpha);
​
for i=1:numel(rep)[rep(i).GridIndex rep(i).GridSubIndex]=GetGridIndex(rep(i),G);
end%% MOPSO 主循环
​
for it=1:MaxItfor i=1:nPoprep_h=SelectLeader(rep,beta);
​particle(i).Velocity=w*particle(i).Velocity ...+c1*rand*(particle(i).Best.Position - particle(i).Position) ...+c2*rand*(rep_h.Position -  particle(i).Position);
​particle(i).Velocity=min(max(particle(i).Velocity,-VelMax),+VelMax);
​particle(i).Position=particle(i).Position + particle(i).Velocity;flag=(particle(i).Position<VarMin | particle(i).Position>VarMax);    %非劣检查:flagparticle(i).Velocity(flag)=-particle(i).Velocity(flag);particle(i).Position=min(max(particle(i).Position,VarMin),VarMax);
​particle(i).Cost=CostFunction(particle(i).Position);
​if Dominates(particle(i),particle(i).Best)particle(i).Best.Position=particle(i).Position;particle(i).Best.Cost=particle(i).Cost;elseif ~Dominates(particle(i).Best,particle(i))if rand<0.5particle(i).Best.Position=particle(i).Position; particle(i).Best.Cost=particle(i).Cost;endend
​endparticle=DetermineDomination(particle);nd_particle=GetNonDominatedParticles(particle);rep=[repnd_particle];rep=DetermineDomination(rep);rep=GetNonDominatedParticles(rep);for i=1:numel(rep)[rep(i).GridIndex rep(i).GridSubIndex]=GetGridIndex(rep(i),G);endif numel(rep)>nRepEXTRA=numel(rep)-nRep;rep=DeleteFromRep(rep,EXTRA,gamma);rep_costs=GetCosts(rep);G=CreateHypercubes(rep_costs,nGrid,alpha);end%     disp(['Iteration ' num2str(it) ': Number of Repository Particles = ' num2str(numel(rep))]);w=w*wdamp;
end
​
%% 结果
​
costs=GetCosts(particle);
rep_costs=GetCosts(rep);
​
figure;
​
plot(costs(1,:),costs(2,:),'b.');
hold on;
plot(rep_costs(1,:),rep_costs(2,:),'rx');
legend('Main Population','Repository');
​

3 仿真结果

4 参考文献

[1]王越, 吕光宏. 改进的粒子群求解多目标优化算法[J]. 计算机技术与发展, 2014, 000(002):42-45.

5 代码下载

【优化求解】基于粒子群算法求解多目标优化问题matlab源码相关推荐

  1. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码

    1 简介 基于粒子群算法求解配电网抢修选址优化问题​. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)​plot(model.trou ...

  2. 【微电网优化】基于粒子群算法求解混合储能系统容量优化问题含Matlab源码

    1 简介 为了提高供电的稳定性.可靠性,实现日夜发电,在太阳能.风能资源比较丰富的区域,建立风能.太阳能互补发电系统.但是由于系统投入成本过高,风.光又存在间歇性和不稳定性等问题,需要配置储能系统来平 ...

  3. 【微电网优化】基于粒子群算法求解智能微电网调度问题附matlab代码

    1 简介 搭建光伏,风力发电机和储能电池的数学模型.充分考虑对蓄电池的充放电保护,制定优化调度策略.应用粒子群算法(PSO)对其优化调度模型进行求解,在算法中增加了蓄电池满充满放的限制条件,同时使系统 ...

  4. 【布局优化】基于粒子群算法求解集线器位置分配问题附matlab代码

    1 内容介绍 ​本文基于MATLAB软件结合粒子群算法,实现了粒子群算法中粒子的适应度计算,极大的减少了优化计算耗时,对适应度计算较为耗时的优化计算,有着明显的效果;最后本文采用粒子群优化算法优化计算 ...

  5. 【优化求解】粒子群算法的多目标优化matlab源码

    一.简介 粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出.自PSO诞生以来,它在许多方面都得 ...

  6. 【路径规划】基于蚁群算法实现多式联运路径规划问题matlab源码

    2.蚁群算法基本原理 2.1 算法综述 对于VRP问题,求解算法大致可分为精确算法和人工智能算法两大类.精确性算法基于严格的数学手段,在可以求解的情况下,解的质量较好.但是由于算法严格,运算量大,特别 ...

  7. 【LEACH协议】粒子群算法改进LEACH协议【含Matlab源码 2052期】

    ⛄一. 简介 1 引言 WSN 由能感知外部环境的传感器节点以自组网的形式构成,是一种分布式无线传感器网络.随着科技的进步和现代生活的需求,由于 WSN 的远程控制.信息即时传播以及低功耗等众多优点, ...

  8. 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  9. 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

最新文章

  1. [数字技巧]最大连续子序列和
  2. SocketAPI,CAsyncSocket,CSocket内幕及其用法
  3. 从上往下打印出二叉树的每个节点,同层节点从左至右打印
  4. 分区表需要数据备份吗oracle,Oracle 分区表数据的导入与导出(1)
  5. Windows Server Containers 支持 Windows 开发者使用 Docker
  6. clickhouse数据字典
  7. 判断一个整数的奇偶性php,【算法】- 判断一个整数是否是奇数
  8. 如何配置 tomcat 服务器
  9. 爬虫实例十 爬取百度贴吧小姐姐照片
  10. paip.URL跳转漏洞欺骗用户名密码
  11. excel自动排班表_Excel通用值班表日历版,排班人员自动显示,万年历套用
  12. 二叉树非递归遍历——python
  13. [Python] 网络设备巡检脚本
  14. three.js 入门指南(敷衍一下)
  15. 【转载】任正非:鼓足干劲,力争上游,不畏一切艰难困苦
  16. Mr.张小白(案例:基于Spring MVC实现后台登陆系统验证)
  17. 用C语言/C++实现一个基础的电话簿
  18. 根据光时域反射仪原理飞凌提供专业性的应用方案
  19. 711问题-优化蛮力求解
  20. 802.11n 技术简结

热门文章

  1. 许宪春:大数据推动资源整合、科学决策、环境监管,打造绿色发展
  2. 基于MFC——C++课程设计《学生信息管理系统》
  3. Python学习基础
  4. ✨JavaWeb项目:实战亲自动手手敲上线小项目部分功能的第一天✨
  5. 工作两年第一次出差到沈阳
  6. TurtleBot4快速入门教程-PS4手柄控制
  7. 常见的交易API接口介绍
  8. 2022年全球市场紫外线探测器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  9. 关于有道云笔记中脑图展示问题的研究
  10. python爬取股票信息—简略版(沪股)