粒子群优化(PSO)算法例题实现

news2024/11/20 7:26:11

目录

一、实验要求

二、算法流程

三、案例实现及结果

完整程序:


一、实验要求

二、算法流程

粒子群算法流程

1、初始化:初始化粒子群;给每个粒子赋予初始位置和速度

2、计算适应值:根据适应度函数,计算每个粒子的适应值

3、求个体最佳适应值:对每一个粒子,将其当前位置的适应值与其历史最佳位置对应的适应值比较,如果当前位置的适应值更高,则用当前位置更新历史最佳位置

4、求群体最佳适应值:对每一个粒子,将其当前位置的适应值与其全局最佳位置对应的适应值比较,如果当前位置的适应值更高,则用当前位置更新全局最佳位置

5、更新粒子位置和速度:根据公式更新每个粒子的速度与位置

6、判断算法是否结束:若未满足结束条件,则返回步骤2,若满足结束条件则算法结束,全局最佳位置即全局最优解

三、案例实现及结果

初始化各参数

学习因子全为c1,c2=1.5;进化参数T=100;种群规模数N=50;粒子堆数D=2;最大速度为1;最小速度为-1;最大粒子为为3,最小粒子位置为-3;对其进行迭代得到如下结果:

 其中最优个体是:-0.0022800 -0.0000772;最优值为:0.0001353

接下来对上述过程改变单一变量看看结果的变化

1.改变学习因子的大小,查看适应度值的变化

如图可知,学习因子的变化对结果的影响很小。

2.种群规模大小变化对适应度结果的影响

 

如图可知,种群规模的大小变化的影响,随种群规模的的逐渐增大有了较大的变化,但达到一定程度后便不再变化。

3.速度大小变化对适应度结果的影响

 如图可知,速度变化的影响随着速度的增大逐渐减小,当速度达到0.1以后速度变化的影响几乎为0。

完整程序:

%% 清空环境
clc;
clear all;
close all;

%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.5; %学习因子1
c2 = 1.5; %学习因子2

T=100;   % 进化次数  
N=50;   %种群规模
D=2; %粒子堆数

Vmax=1; %速度最大数
Vmin=-1; %速度最小数
Xmax=3; %位置最大数
Xmin=-3; %位置最小数
[zbest,fitnesszbest]=pso_train(T,N,D,c1,c2,Vmax,Vmin,Xmax,Xmin);
%% 产生初始粒子和速度
X = rand(N,D)*(Xmax-Xmin)-Xmax;
V = rand(N,D)*(Vmax-Vmin)-Vmax;
for i=1:N
    %随机产生一个种群
%     pop(i,:)=rands(1,2)*(Xmax-Xmin)-Xmax;    %初始种群
%     V(i,:)=rands(1,2)*(Vmax-Vmin)-Vmax;  %初始化速度
%     计算适应度
    fit(i)=fun(X(i,:));   %染色体的适应度
end

%% 个体极值和群体极值
[bestfitness bestindex]=min(fit);
zbest=X(bestindex,:);   %全局最佳
gbest=X;    %个体最佳
fitnessgbest=fit;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值

%% 迭代寻优
for i=1:T
    for j=1:N
        %速度更新
        V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - X(j,:)) + c2*rand*(zbest - X(j,:));
        V(j,find(V(j,:)>Vmax))=Vmax;
        V(j,find(V(j,:)<Vmin))=Vmin;
        %种群更新
        X(j,:)=X(j,:)+0.5*V(j,:);
        X(j,find(X(j,:)>Xmax))=Xmax;
        X(j,find(X(j,:)<Xmin))=Xmin;
        %适应度值
        fit(j)=fun(X(j,:)); 
    end
    for j=1:N
        
        %个体最优更新
        if fit(j) < fitnessgbest(j)
            gbest(j,:) = X(j,:);
            fitnessgbest(j) = fit(j);
        end
        
        %群体最优更新
        if fit(j) < fitnesszbest
            zbest = X(j,:);
            fitnesszbest = fit(j);
        end
    end 
    yy(i)=fitnesszbest;    
end
%% 结果分析
% 绘图
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
fprintf('最优个体是:%8.7f%8.7f\n',zbest(1),zbest(2))
fprintf('最小值是:%8.7f\n',fun(zbest))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新范式+新标准=世界级产品|StarRocks年度总结

岁序常易&#xff0c;华章日新。虎年即将落幕&#xff0c;雄关漫道&#xff0c;我们携手社区斗志昂扬&#xff0c;并肩虎跃雄关。兔年新岁将至&#xff0c;黎明破晓&#xff0c;我们协力社区蓄势待发&#xff0c;昂首共赴新程。值此送虎迎兔的新春佳节之际&#xff0c;感恩与St…

电子技术——MOS放大器的DC偏置

电子技术——MOS放大器的DC偏置 正如前几节我们学习的&#xff0c;MOS放大器的小信号模型的参数取决于正确的DC偏置&#xff0c;这个步骤称为偏置设计。一个好的偏置设计要满足一个稳定的漏极DC电流 IDI_DID​ 和设置正确的 VDSV_{DS}VDS​ 保证MOS管在放大信号的时候处在饱和区…

Qt StyleSheet介绍

文章目录前言纠错技巧可以使用 , 号来同时指明多个同一类型控件的样式表qss注释前言 本文主要以这篇博客为基础。添加一些自己使用的心得和使用样式表的一些技巧 纠错 ID选择器这里类型选择器可以省略&#xff0c;因为每个控件的objectName是不一样的&#xff0c;所以无需指定…

高性能消息队列中间件MQ

毕业后工作半年&#xff0c;在自己的讲课中需要介绍消息队列&#xff0c;以前在大学也有经常接触message queen&#xff0c;但却还不够深入了解掌握&#xff0c;这次写个专门针对mq的文章理清头绪。 以下是学习mq的知识框架&#xff0c;我会不定时更新补充 RabbitMQ概念_MQ 消…

TwinCAT3串口通讯EL6021模块使用-和串口调试助手自由协议通讯

目录 一、简介 二、环境介绍 三、接线连接 四、创建TwinCAT3程序工程 1、IO扫描和参数设置 2、创建PLC程序 &#xff08;1&#xff09;库文件添加 &#xff08;2&#xff09;创建任务和程序 &#xff08;3&#xff09;变量关联 &#xff08;4&#xff09;重新激活工程、运…

adb的一些基本操作

adb的一些基本操作 Android使用的系统一般是debian系列操作系统&#xff0c;所以使用adb shell连接到手机后&#xff0c;可以使用大部分Debian系列的命令进行相关的操作 列出所有应用&#xff1a;adb shell pm list packages 列出第三方(系统)应用&#xff1a;adb shell pm li…

1611_PC汇编语言_math例程分析

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次分析后带有注释的代码我会在笔记最后做一个完整的附加。 这一个例程&#xff0c;主要是为了阐述前面讲到的数学运算。但是从这些操作中&#xff0c;很多底层…

介绍golang限流库以及漏桶与令牌桶的实现原理

RateLimit 限流中间件 前言 为什么需要限流中间件&#xff1f; 在大数据量高并发访问时&#xff0c;经常会出现服务或接口面对大量的请求而导致数据库崩溃的情况&#xff0c;甚至引发连锁反映导致整个系统崩溃。或者有人恶意攻击网站&#xff0c;大量的无用请求出现会导致缓…

Spark JDBC采用分区读取数据库时partitionColumn, lowerBound, upperBound, numPartitions参数理解

partitionColumn是应该用于确定分区的列。 lowerBound并upperBound确定要获取的值的范围。完整数据集将使用与以下查询对应的行&#xff1a; SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound numPartitions确定要创建的分区数。lowerBound和之间…

Unicode 和 UTF-8 详解

结论 Unicode 是 字符集 UTF-8 是 编码规则 字符集&#xff1a;为每一个字符分配唯一的ID&#xff08;如 SCII 码&#xff09; 编码规则&#xff1a;将 码位转换为字节序列的规则 背景 老规矩&#xff0c;我们用图文并茂的方式来讲解&#xff1a; ASCII 这个字符集 由于仅能…

[Android Studio] Android Studio设置杂项

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…

【HBase高级】3. HBase批量装载——Bulk load(1)Bulk load简介与案例介绍

2. HBase批量装载——Bulk load 2.1 简介 很多时候&#xff0c;我们需要将外部的数据导入到HBase集群中&#xff0c;例如&#xff1a;将一些历史的数据导入到HBase做备份。我们之前已经学习了HBase的Java API&#xff0c;通过put方式可以将数据写入到HBase中&#xff0c;我们…

MyBatis(三)使用MyBatis完成CRUD(增删改查)

准备工作 1、创建module&#xff08;Maven的普通Java模块&#xff09;&#xff1a;mybatis-002-crud 2、pom.xml 打包方式jar依赖&#xff1a;mybatis依赖mysql驱动依赖junit依赖logback依赖3、mybatis-config.xml放在类的根路径下 4、CarMapper.xml放在类的根路径下 5、lo…

redis的完整学习

Redis 1.Nosql 单机mysql缓存机制分库分表水平拆分mysql集群&#xff1a;本质上是数据库的读写 MyISAM:表锁&#xff0c;效率低Innodb&#xff1a;行锁 特点 解耦&#xff01; 1.方便扩展 2.大数据量高性能 3.数据类型是多样型的&#xff08;不需要设计数据库&#xff…

c语言 预处理

int main() {//printf("%s\n", __FILE__);//打印所在文件夹位置//printf("%d\n", __LINE__);//打印当前所在行号//printf("%s\n", __DATE__);//打印当前系统日期//printf("%s\n", __TIME__);//时间//printf("%s\n", __FUNCT…

分享155个ASP源码,总有一款适合您

ASP源码 分享155个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 154个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/12oYeESSXJCd32n463LBt4w?pwd5i1n 提取码&#x…

Java线程池中的execute和submit

一、概述 execute和submit都是线程池中执行任务的方法。 execute是Executor接口中的方法 public interface Executor {void execute(Runnable command); }submit是ExecuteService接口中的方法。 public interface ExecutorService extends Executor {<T> Future<T…

vue+element模仿腾讯视频电影网站(二),增加视频播放详情页

一.前言 1. 本项目在线预览&#xff1a;点击访问 2. 作者其他博客成品汇总预览&#xff1a;点击访问 3. 接上一篇&#xff1a;《vueelement模仿腾讯视频电影网站》 暂时源码并没有提供其他获取渠道&#xff0c;私聊作者获取即可&#xff0c;或通过博客后面名片添加作者&#…

【SSM】Mybatis小技巧汇总

Mybatis技巧一&#xff1a;#{} 和 ${} 的区别使用 ${} 特例一&#xff08;排序&#xff09;使用 ${} 特例二&#xff08;表连接&#xff09;使用 ${} 特例三&#xff08;批量删除&#xff09;技巧二&#xff1a;typeAliases 别名机制别名 Alias 性质技巧三&#xff1a;mappersm…

串级PID控制原理-1

串级计算机控制系统的典型结构如图1所示&#xff0c;系统中有两个PID控制器&#xff0c;Gc2(s)称为副调节器传递函数&#xff0c;包围Gc2(s)的内环称为副回路。Gc1(s)称为主调节器传递函数&#xff0c;包围Gc1(s)的外环称为主回路。主调节器的输出控制量u1作为副回路的给定量R2…