【优化求解】基于粒子群算法求解多目标优化问题matlab源码
【优化求解】基于粒子群算法求解多目标优化问题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源码相关推荐
- 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码
1 简介 基于粒子群算法求解配电网抢修选址优化问题. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)plot(model.trou ...
- 【微电网优化】基于粒子群算法求解混合储能系统容量优化问题含Matlab源码
1 简介 为了提高供电的稳定性.可靠性,实现日夜发电,在太阳能.风能资源比较丰富的区域,建立风能.太阳能互补发电系统.但是由于系统投入成本过高,风.光又存在间歇性和不稳定性等问题,需要配置储能系统来平 ...
- 【微电网优化】基于粒子群算法求解智能微电网调度问题附matlab代码
1 简介 搭建光伏,风力发电机和储能电池的数学模型.充分考虑对蓄电池的充放电保护,制定优化调度策略.应用粒子群算法(PSO)对其优化调度模型进行求解,在算法中增加了蓄电池满充满放的限制条件,同时使系统 ...
- 【布局优化】基于粒子群算法求解集线器位置分配问题附matlab代码
1 内容介绍 本文基于MATLAB软件结合粒子群算法,实现了粒子群算法中粒子的适应度计算,极大的减少了优化计算耗时,对适应度计算较为耗时的优化计算,有着明显的效果;最后本文采用粒子群优化算法优化计算 ...
- 【优化求解】粒子群算法的多目标优化matlab源码
一.简介 粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出.自PSO诞生以来,它在许多方面都得 ...
- 【路径规划】基于蚁群算法实现多式联运路径规划问题matlab源码
2.蚁群算法基本原理 2.1 算法综述 对于VRP问题,求解算法大致可分为精确算法和人工智能算法两大类.精确性算法基于严格的数学手段,在可以求解的情况下,解的质量较好.但是由于算法严格,运算量大,特别 ...
- 【LEACH协议】粒子群算法改进LEACH协议【含Matlab源码 2052期】
⛄一. 简介 1 引言 WSN 由能感知外部环境的传感器节点以自组网的形式构成,是一种分布式无线传感器网络.随着科技的进步和现代生活的需求,由于 WSN 的远程控制.信息即时传播以及低功耗等众多优点, ...
- 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
最新文章
- [数字技巧]最大连续子序列和
- SocketAPI,CAsyncSocket,CSocket内幕及其用法
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印
- 分区表需要数据备份吗oracle,Oracle 分区表数据的导入与导出(1)
- Windows Server Containers 支持 Windows 开发者使用 Docker
- clickhouse数据字典
- 判断一个整数的奇偶性php,【算法】- 判断一个整数是否是奇数
- 如何配置 tomcat 服务器
- 爬虫实例十 爬取百度贴吧小姐姐照片
- paip.URL跳转漏洞欺骗用户名密码
- excel自动排班表_Excel通用值班表日历版,排班人员自动显示,万年历套用
- 二叉树非递归遍历——python
- [Python] 网络设备巡检脚本
- three.js 入门指南(敷衍一下)
- 【转载】任正非:鼓足干劲,力争上游,不畏一切艰难困苦
- Mr.张小白(案例:基于Spring MVC实现后台登陆系统验证)
- 用C语言/C++实现一个基础的电话簿
- 根据光时域反射仪原理飞凌提供专业性的应用方案
- 711问题-优化蛮力求解
- 802.11n 技术简结