PSO算法、MATLAB代码实现以及测试效果

news/2024/4/27 2:50:49/文章来源:https://blog.csdn.net/JiAngTxone/article/details/130368767

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • PSO算法原理
    • 进化操作
    • 算法流程图
    • matlab代码实现
      • main函数部分
      • 适应度函数部分
      • PSO算法主体
      • 测试结果 (F1~F6)


PSO算法原理

粒子群优化( Particle Swarm Optimization,PSO) 算法是 Kennedy 和 Eberhart〔1〕在 1995 年首次提出一种 模拟鸟群和鱼群等动物寻找食物的社会行为的群智能优化算法。
在粒子群算法中,每个粒子拥有两个特征:速度和位置,如下:
在这里插入图片描述

进化操作

粒子的位置变化公式:
在这里插入图片描述
其中:
c1 和 c2是学习因子,本文定义c1=1.6,c2=1.8
在这里插入图片描述
第一个公式是速度更新的公式:
该公式的第一项是惯性部分、第二项是认知部分、第三项是社会部分
认知部分即:向着自身在历史中所处的最好位置的方向移动。
社会部分即:向着群体中最好的位置的方向移动。

为了改善PSO的性能,Shi和Eberhart引入了惯性权重omiga。速度更新公式即为:
在这里插入图片描述
引入omiga的目的是为了较好地平衡PSO算法的全局搜索能力和局部搜索能力,这样的PSO算法也被称为标准PSO算法
本文定义omiga的取值范围为
①:权重向量线性递减,Shi和Eberhart将omiga的取值范围定义为[0.4,0.9]
在这里插入图片描述
②:也有些研究将权重向量线性递增,公式如下,本文验证部分
测试集的时候效果不如权重向量线性递减策略

在这里插入图片描述

算法流程图

在这里插入图片描述

matlab代码实现

main函数部分

clear all;
close all;
clc;
N=300;
Dim=30;
ub=100;
lb=-100;
T=500;
% 学习因子
c1=1.6;
c2=1.8;
% 速度系数
vel=0.01;
[P_gbest,G_best]=PSO(Dim,ub,lb,vel,N,T,c1,c2);
figure,
plot(G_best,'Color','red');
xlim([1,500]);

适应度函数部分

function my_fitness=my_function(X)
%F1测试问题[-100,100] min=0
% o=sum(X.^2);
% my_fitness=o;%F2测试问题[-10,10] min=0;
% o=sum(abs(X))+prod(abs(X));
% my_fitness=o;%F3测试问题——结果极差 min=0
% dim=size(X,2);
% o=0;
% for i=1:dim
%     o=o+sum(X(1:i))^2;
% end
% my_fitness=o;%F4测试问题——结果极差[-100,100] min=0
% o=max(abs(X));
% my_fitness=o;%F5测试问题[-30,30] min=0
% dim=size(X,2);
% my_fitness=sum(100*(X(2:dim)-(X(1:dim-1).^2)).^2+(X(1:dim-1)-1).^2);%F6测试问题[-100,100] min=0
o=sum(abs((X+.5)).^2);
my_fitness=o;
end

PSO算法主体

function [P_gbest,G_best]=PSO(Dim,ub,lb,vel,N,T,c1,c2)
%% 初始化种群
Pop=zeros(N,Dim);
Pop_vel=zeros(N,Dim);
for i=1:Nfor j=1:DimPop(i,j)=lb+rand().*(ub-lb);%初始化个体Pop_vel(i,j)=vel*(lb+rand().*(ub-lb));%初始化个体速度end
end
% 计算个体的适应度值
for i=1:Nfitness(i)=my_function(Pop(i,:));      
end
[fit_gbest,fit_gbest_index]=min(fitness);
P_gbest=Pop(fit_gbest_index,:);%全局中最好的个体
% 初始时 每个个体当前位置即历史中最好的位置
P_pbest=Pop;
%% 进化部分
for t=1:T%omiga=2-(2-0.4)*(t/T);%定义范围为[0.4,2],随着迭代次数线性减少omiga=(0.9-0.4)*(1-(t/T))+0.4;%惯性权重线性递减策略%omiga=(0.4-0.9)*(1-(t/T))+0.9;%惯性权重递增策略——效果不佳% 遍历所有个体,更新所有个体的位置for i=1:Nfor j=1:Dimr1=rand();r2=rand();Pop_vel(i,j)=omiga*Pop_vel(i,j)+c1*r1*(P_pbest(i,j)-Pop(i,j))+c2*r2*(P_gbest(j)-Pop(i,j));Pop(i,j)=Pop(i,j)+Pop_vel(i,j);endend% 遍历个体计算适应度值for i=1:NFlag4Up=Pop(i,:)>ub;Flag4Lp=Pop(i,:)<lb;Pop(i,:)=(Pop(i,:).*(~(Flag4Up+Flag4Lp)))+Flag4Up.*ub+Flag4Lp.*lb;%修正粒子群的位置FlagUp=Pop_vel(i,:)>vel*ub;FlagLp=Pop_vel(i,:)<vel*lb;Pop_vel(i,:)=(Pop_vel(i,:).*(~(FlagUp+FlagLp)))+FlagUp.*vel.*ub+FlagLp.*lb.*vel;%修正粒子群的速度y=my_function(Pop(i,:));if y<fitness(i)P_pbest(i,:)=Pop(i,:);%更新在历史中每个粒子最好的位置fitness(i)=y;endend% 更新最好个体的位置[fit_best,fit_best_index]=min(fitness);G_best(t)=fit_best;P_gbest=Pop(fit_best_index,:);
end
end

测试结果 (F1~F6)

F1
在这里插入图片描述
F2
在这里插入图片描述

F3
在这里插入图片描述
F4
在这里插入图片描述
F5
在这里插入图片描述
F6
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103389.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换

场景 JavaGeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示&#xff1a; JavaGeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示_霸道流氓气质的博客-CSDN博客 在上面实现Java中集成Geotools之后&#xff0c;需求是将WKT数据转换成其他坐标系的W…

银河麒麟(桌面版和服务器版)之远程桌面安装

一、前言 在信创方案中经常介绍支持麒麟系统&#xff0c;实际上麒麟分为银河麒麟和中标麒麟&#xff0c;银河麒麟又分为服务器版和桌面版&#xff0c;服务器器版一般用于应用系统部署&#xff0c;桌面版一般用于日常办公。银河麒麟操作系统作为国产操作系统&#xff0c;是目前国…

力扣---LeetCode21. 合并两个有序链表(链表经典题)

文章目录 前言21. 合并两个有序链表链接&#xff1a;方法一&#xff1a;取小尾插1.1代码&#xff1a;1.2 流程图&#xff1a;1.3 注意&#xff1a; 方法二&#xff1a;带哨兵位2.1代码&#xff1a;2.2流程图&#xff1a; 总结 前言 焦虑不会消除明天的悲伤 只会让你今天的力量…

openEuler Developer Day 2023成功召开!发布嵌入式商业版本及多项成果

【中国&#xff0c;上海&#xff0c;2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前…

QGIS数据可视化学习笔记02——CSV数据和表连接

在其他的GIS软件中&#xff0c;表的连接操作是十分常用的操作&#xff0c;在QGIS中也是一样的&#xff0c;接下来我们介绍QGIS中属性表之间的连接以及如何添加CSV数据到属性表中。 1、表的连接 &emsp如关系型数据库一样&#xff0c;两表连接的前提是&#xff0c;两个表中都…

荔枝派Zero(全志V3S)开启alsa,测试codec

文章目录 前言一、ALSA 简介二、ALSA 框架三、buildroot 配置四、烧录到 SD 卡五、测试1、查看 CODEC 设备2、alsa-utils 使用①、查看设备②、调节音量③、查看控制器④、录音测试⑤、播放测试 前言 默认 dts 中使能了 codec 需要使用的话&#xff0c;在 buildroot 中勾选 a…

Linux离线状态下安装cuda、cudnn、cudatoolkit

目录 1. 下载与安装说明2. CUDA安装3. cuDNN安装4. cudatoolkit安装5. 测试安装成功 1. 下载与安装说明 工具包下载地址 CUDA历史版本下载地址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archivecuDNN历史版本下载地址&#xff1a;https://developer.nvidia.com/r…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;大家都应该知道&#xff0c;PDF是一种实用性非常强且非常便携文件格式&#xff0c;许多用户对其非常熟悉。不管是工作还是学习中&#xff0c;都会下载或者使用到pdf文件。pdf文件具有非常好的兼容性&#xff0c;F可以将各种图片、文字内容整合在…

界面开发框架Qt新手入门 - 自定义排序/筛选模型示例(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 自定义排序/筛选模型…

记一次某应用虚拟化系统远程代码执行

漏洞简介 微步在线漏洞团队通过“X漏洞奖励计划”获取到瑞友天翼应用虚拟化系统远程代码执行漏洞情报(0day)&#xff0c;攻击者可以通过该漏洞执行任意代码&#xff0c;导致系统被攻击与控制。瑞友天翼应用虚拟化系统是基于服务器计算架构的应用虚拟化平台&#xff0c;它将用户…

原理这就是索引下推呀

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 索引下推是之前面试的时候遇到的一个面试题&#xff0c;当时没有答上来&#xff0c;今天来学习一下。 介绍索引下推之前先看一下MySQL基…

【AI炼丹术】写深度学习代码的一些心得体会

写深度学习代码的一些心得体会 体会1体会2体会3总结内容来源 一般情况下&#xff0c;拿到一批数据之后&#xff0c;首先会根据任务先用领域内经典的Model作为baseline跑通&#xff0c;然后再在这个框架内加入自己设计的Model&#xff0c;微调代码以及修改一些超参数即可。总体流…

汇编语言(第3版) - 学习笔记 - 实验8 分析一个奇怪的程序

实验8 分析一个奇怪的程序 题目解析顺序执行查看反汇编测试一下 题目 分析下面的程序&#xff0c;在运行前思考:这个程序可以正确返回吗? 运行后再思考:为什么是这种结果? 通过这个程序加深对相关内容的理解。 assume cs:codesg codesg segmentmov ax, 4c00h int 21h …

JavaWeb-Tomcat

目录 1.什么是Tomcat 2.Tomcat 概述 3.Tomcat基本使用 1.什么是Tomcat Tomcat官网&#xff1a;Apache Tomcat - Welcome! 【摘自百度百科】 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apac…

MySQL: 数据类型之整数型、浮点数、时间日期

目录 前言&#xff1a; 数据类型&#xff1a; 整数型&#xff1a; 浮点数与定点数&#xff1a; 浮点数&#xff1a; 定点数&#xff1a; 日期与时间&#xff1a; DATATIME: DATE&#xff1a; TIMESTAMP: ​编辑 YEAR: TIME: 前言&#xff1a; 前面的几篇写了如何创…

2023年主流的选择仍是Feign, http客户端Feign还能再战

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 微服务组件之http客户端Feign 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f649;。 …

音视频开发面试题大盘点:掌握这些基础知识,你就能轻松应对面试

前言 音视频开发作为一种高技术含量的领域&#xff0c;随着人们对数字媒体的需求不断增加&#xff0c;其前景非常广阔。预计在2023年&#xff0c;音视频开发领域仍将继续保持快速发展的态势&#xff0c;尤其是在移动互联网、物联网、虚拟现实、增强现实等领域。 根据BOSS招聘…

Jenkins Kubernetes

Kubernetes集成Harbor Harbor 私服配置 在Kubernetes的master和所有worker节点上加上harbor配置&#xff0c;修改daemon.json&#xff0c;支持Docker仓库&#xff0c;并重启Docker。 sudo vim /etc/docker/daemon.json {"registry-mirrors": ["https://jrabv…

微信小程序 开发中的问题(simba_wx)

目录 一、[将 proto 文件转成 json 文件](https://blog.csdn.net/wzxzRoad/article/details/129300513)二、[使用 test.json 文件](https://blog.csdn.net/wzxzRoad/article/details/129300513)三、[微信小程序插件网址](https://ext.dcloud.net.cn/)四、[vant-weapp网址](http…

从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库

使用 release-it 实现自动管理发布组件库 上一篇文章已经打包好我们的组件库了,而本篇文章将介绍如何发布一个组件库。当然本篇文章介绍的肯定不单单只是发布那么简单。 组件库发布 我们要发布的包名为打包后的 easyest,因此在 easyest 下执行pnpm init生成package.json {&…