【优化算法】多目标粒子群优化算法(MOPSO)【含Matlab源码 033期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【优化算法】多目标粒子群优化算法(MOPSO)【含Matlab源码 033期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、粒子群算法简介
1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码
三、部分源代码
%
%
%mopso;clc;
clear;
close all;%% Problem DefinitionCostFunction=@(x) ZDT(x); % Cost FunctionnVar=5; % Number of Decision VariablesVarSize=[1 nVar]; % Size of Decision Variables MatrixVarMin=0; % Lower Bound of Variables
VarMax=1; % Upper Bound of Variables%% MOPSO ParametersMaxIt=200; % Maximum Number of IterationsnPop=200; % Population SizenRep=100; % Repository Size 库的大小w=0.5; % Inertia Weight
wdamp=0.99; % Intertia Weight Damping Rate 惯性重量阻尼率
c1=1; % Personal Learning Coefficient
c2=2; % Global Learning CoefficientnGrid=7; % Number of Grids per Dimension 每个维度的网格数
alpha=0.1; % Inflation Rate 通货膨胀率beta=2; % Leader Selection Pressure 领导人选择压力
gamma=2; % Deletion Selection Pressure 删除选择压力mu=0.1; % Mutation Rate 突变率%% Initialization 初始化empty_particle.Position=[];
empty_particle.Velocity=[];
empty_particle.Cost=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
empty_particle.IsDominated=[];
empty_particle.GridIndex=[];
empty_particle.GridSubIndex=[]; %网格的子索引pop=repmat(empty_particle,nPop,1);for i=1:nPoppop(i).Position=unifrnd(VarMin,VarMax,VarSize);pop(i).Velocity=zeros(VarSize);pop(i).Cost=CostFunction(pop(i).Position);% Update Personal Best 更新个人最好pop(i).Best.Position=pop(i).Position;pop(i).Best.Cost=pop(i).Cost;end% Determine Domination 确定统治
pop=DetermineDomination(pop);rep=pop(~[pop.IsDominated]);Grid=CreateGrid(rep,nGrid,alpha);for i=1:numel(rep)rep(i)=FindGridIndex(rep(i),Grid);
end%% MOPSO Main Loop MOPSO主循环for it=1:MaxItfor i=1:nPopleader=SelectLeader(rep,beta);pop(i).Velocity = w*pop(i).Velocity ...+c1*rand(VarSize).*(pop(i).Best.Position-pop(i).Position) ...+c2*rand(VarSize).*(leader.Position-pop(i).Position);pop(i).Position = pop(i).Position + pop(i).Velocity;pop(i).Position = max(pop(i).Position, VarMin);pop(i).Position = min(pop(i).Position, VarMax);pop(i).Cost = CostFunction(pop(i).Position);% Apply Mutation 应用突变pm=(1-(it-1)/(MaxIt-1))^(1/mu);if rand<pmNewSol.Position=Mutate(pop(i).Position,pm,VarMin,VarMax);NewSol.Cost=CostFunction(NewSol.Position);if Dominates(NewSol,pop(i))pop(i).Position=NewSol.Position;pop(i).Cost=NewSol.Cost;elseif Dominates(pop(i),NewSol)% Do Nothingelseif rand<0.5pop(i).Position=NewSol.Position;pop(i).Cost=NewSol.Cost;endendendif Dominates(pop(i),pop(i).Best)pop(i).Best.Position=pop(i).Position;pop(i).Best.Cost=pop(i).Cost;elseif Dominates(pop(i).Best,pop(i))% Do Nothingelseif rand<0.5pop(i).Best.Position=pop(i).Position;pop(i).Best.Cost=pop(i).Cost;endendend% Add Non-Dominated Particles to REPOSITORY 向存储库添加非支配粒子rep=[reppop(~[pop.IsDominated])]; %#ok% Determine Domination of New Resository Members 决定新成员的支配地位rep=DetermineDomination(rep);% Keep only Non-Dminated Memebrs in the Repository 在存储库中只保留非支配成员rep=rep(~[rep.IsDominated]);% Update Grid 更新网格Grid=CreateGrid(rep,nGrid,alpha);% Update Grid Indices 更新网格索引for i=1:numel(rep)rep(i)=FindGridIndex(rep(i),Grid);end% Check if Repository is Full 检查存储库是否已满if numel(rep)>nRepExtra=numel(rep)-nRep;for e=1:Extrarep=DeleteOneRepMemebr(rep,gamma);endend% Plot Costs 绘制成本图figure(1);PlotCosts(pop,rep);pause(0.01);% Show Iteration Informationdisp(['Iteration ' num2str(it) ': Number of Rep Members = ' num2str(numel(rep))]);% Damping Inertia Weight 显示迭代信息w=w*wdamp; end%% Resluts
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
【优化算法】多目标粒子群优化算法(MOPSO)【含Matlab源码 033期】相关推荐
- 【路径规划】基于matlab DWA算法机器人局部避障路径规划【含Matlab源码 890期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]基于matlab DWA算法机器人局部避障路径规划[含Matlab源码 890期] 获取代码方式2: 通过订阅紫极神光博客付费 ...
- 【无人机】基于matlab粒子群算法优化干扰受限下无人机群辅助网络【含Matlab源码 2245期】
⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...
- 【FNN回归预测】基于matlab粒子群优化前馈神经网络婚姻和离婚数据回归预测【含Matlab源码 2069期】
一.粒子群优化前馈神经网络简介 1 前馈神经网络FNN 前馈神经网络FNN是解决非线性问题的很好模型,它通过梯度下降算法进行网络训练.FNN与时间序列法等传统方法相比,能够更好地来描述问题的非线性特性 ...
- 【ACO三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含matlab源码 043期】
一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...
- 【路径规划】基于matlab蚁群算法机器人大规模栅格地图最短路径规划【含Matlab源码 1860期】
⛄一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自 ...
- 【DE三维路径规划】基于matlab改进的差分算法多无人机协同三维路径规划【含Matlab源码 169期】
⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...
- 【LEACH协议】基于matlab蝴蝶优化算法WSN安全分簇路由设计【含Matlab源码 2567期】
⛄一.蝴蝶优化算法(MBO)简介 1 介绍 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算法.该算法受 ...
- 【A_star三维路径规划】基于matlab A_star算法机器人栅格地图三维路径规划【含Matlab源码 190期】
一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶 ...
- 【优化选址】遗传算法求解物流配送中心选址【含Matlab源码 1917期】
⛄一.物流选址简介 1 引言 配送中心是物流系统网络中的关键节点和重要的基础设施,在整个物流系统网络规划中起着枢纽性的作用[1].快递物流配送中心选址是指在具有若干个发件网点或者若干个收件网点的物流配 ...
- 【路径规划】基于matlab A_star算法多机器人仓储巡逻路径规划【含Matlab源码 2125期】
⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...
最新文章
- 更新pcb封装导入_教你如何将 AD 或 PADS 的原理图导入 Allegro 做 Layout
- windows环境下python怎么安装mlxtend-python连接QQ实现自动回复python 机器学习库
- 《计量经济学》学习笔记之放宽基本假定的模型
- 为什么使用@tablename起别名产生的sql语句不能用_10个简单步骤,完全理解SQL
- 开源代码准确率99%+,人脸识别问题真的被解决了吗?
- 95-280-038-源码-资源管理-计算资源管理-TaskSlot-JobManager 中 Slot 的管理
- java中 resource_Java中如何获取resource的源码分析
- Github Star 4.6K,3.5M超超轻量中英文OCR模型开源,火了!
- 洛谷——P2433 【深基1-2】小学数学 N 合一
- 兰光bl2000_蓝光BL2000情况处理.pdf
- 2022最新H5手机微商城运营源码 简约轻量版 对接最新Z支付个人免签接口 带搭建教程
- c语言中闰年的流程图_c语言(算法流程图).ppt
- 案例|工业物联网解决方案•智慧水务云平台
- 头像采集,学生照片信息采集器
- JavaScript实现经典消方块游戏
- 为什么前端UI设计师给750PX的2倍设计稿?
- Latex 公式 语法 [维基百科]
- ubuntu下Veins安装教程
- 研究生学习初入门之导师大致方向
- python制作一个网易音乐下载器
热门文章
- 一句话讲清楚什么是JavaEE
- vijos 1471 线性DP+贪心
- 2、Charm Bracelet( poj 3624)简单0-1背包
- 使用 github + jekyll 搭建个人博客
- 2.lvm动态逻辑卷
- Ghost命令使用方法
- WCF在多个服务中使用事物
- Python3入门机器学习经典算法与应用 第3章 Jupyter Notebook numpy.array 基础 numpy.array的基本操作
- 给物体赋值 只改变transform.position的某一维,访问另一个脚本的变量以及给物体用脚本动态添加属性
- unity动画实现物体颜色闪烁