粒子群算法 PSO

2023-05-16

粒子群算法

粒子群算法(PSO),在PSO中,每个优化问题的潜在解都是搜索空间的一只鸟,被称为粒子,所有的粒子都有一个由适应度函数决定的适值,每个粒子还有一个速度决定它们“”飞行“”的方向和距离,然后粒子们就追随当前的最优粒子在解空间中搜索,整个过程大致为,PSO初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代的过程中,粒子通过跟踪两个极值来更新自己:第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个解是全局极值
假设初始目标搜索空间(初始种群位置) D 维 N 列 X i = ( x i 1 , . . . x i D ) i = 1 , . . . N 第 i 个粒子的飞行速度记为 V i = ( v i 1 , . . . v i D ) i = 1 , . . . N 第 i 个粒子的最优位置个体最优记为 P b e s t = ( p i 1 , . . . p i D ) i = 1 , . . . N 全局最优记为 g b e s t = ( P g 1 , . . . p g D ) 根据以下公式更新位置和速度 V i d = W ∗ V i d + c 1 r 1 ( P i d − X i d ) + c 2 r 2 ( P g d − X i d ) X i d = x i d + v i d 其中 w 为惯性银子, c 1 和 c 2 为学习因子, r 1 和 r 2 为随机数 v i d 为粒子当前速度, P i d 为该粒子当前最优位置, P g d 为全局最优位置 \huge假设初始目标搜索空间(初始种群位置)D维N列\\X_i=(x_{i1},...x_{iD})i=1,...N\\\huge第i个粒子的飞行速度记为\\V_i=(v_{i1},...v_{iD})i=1,...N\\\huge第i个粒子的最优位置 个体最优记为\\P_{best}=(p_{i1},...p_{iD})i=1,...N\\\huge全局最优记为\\g_{best}=(P_{g1},...p_{gD}) \\ \\ \\ \huge根据以下公式更新位置和速度\\V_{id}=W*V_{id}+c_1r_1(P_{id}-X_{id})+c_2r_2(P_{gd}-X_{id})\\X_{id}=x_{id}+v_{id}\\\huge其中w为惯性银子,c_1和c_2为学习因子,r_1和r_2为随机数\\\huge v_{id}为粒子当前速度,\\\huge P_{id}为该粒子当前最优位置,P_{gd}为全局最优位置 假设初始目标搜索空间(初始种群位置)DNXi=(xi1,...xiD)i=1,...Ni个粒子的飞行速度记为Vi=(vi1,...viD)i=1,...Ni个粒子的最优位置个体最优记为Pbest=(pi1,...piD)i=1,...N全局最优记为gbest=(Pg1,...pgD)根据以下公式更新位置和速度Vid=WVid+c1r1(PidXid)+c2r2(PgdXid)Xid=xid+vid其中w为惯性银子,c1c2为学习因子,r1r2为随机数vid为粒子当前速度,Pid为该粒子当前最优位置,Pgd为全局最优位置

代码

初始化
%% 初始化
clear
clc
f=@(x)x.*sin(x).*cos(2*x)-2*x.*sin(3*x)+3*x.*sin(4*x);
N=20;           %初始化种群个数
d=1;            %可行解维数
ger=120;        %最大迭代次数
limit=[-10,10];   %设置位置参数限制
w=0.8;          %惯性权重
c1=0.5;         %自我学习因子
c2=0.5;         %群体学习因子
figure(1);
ezplot(f,[limit(1),0.01,limit(2)]);

x=limit(1)+(limit(2)-limit(1)).*rand(N,d);  %初始种群的位置
v=rand(N,d);                                %初始种群的速度
初始化最优位置
%% 计算各个粒子的适应度 初始化p(i)和pg
for i=1:N
  p(i)=f(x(i,:)); %各个粒子最优适应度,因为第一代,个体最优适应度就是其本身的适应度
  y(i,:)=x(i,:); %各个粒子的个体最优位置,因为为第一代,个体最位置就是其本身
end
pg=x(N,:); %随意初始化,pg为全局最优位置
for i=1:N-1 %寻找全局最优位置
  if f(x(i,:))>f(pg)
    pg=x(i,:);
  end
end
关键算法
%% obj:求解f(x)=xsinxcos2x-2xsin3x+3xsin4x在[0,50]的最小值
%% 初始化
clear
clc
f=@(x)x.*sin(x).*cos(2*x)-2*x.*sin(3*x)+3*x.*sin(4*x);
N=20;           %初始化种群个数
d=1;            %可行解维数
ger=120;        %最大迭代次数
limit=[-10,10];   %设置位置参数限制
w=0.8;          %惯性权重
c1=0.5;         %自我学习因子
c2=0.5;         %群体学习因子
figure(1);
ezplot(f,[limit(1),0.01,limit(2)]);

x=limit(1)+(limit(2)-limit(1)).*rand(N,d);  %初始种群的位置
v=rand(N,d);                                %初始种群的速度

%% 计算各个粒子的适应度 初始化p(i)和pg
for i=1:N
  p(i)=f(x(i,:)); %各个粒子最优适应度,因为第一代,个体最优适应度就是其本身的适应度
  y(i,:)=x(i,:); %各个粒子的个体最优位置,因为为第一代,个体最位置就是其本身
end
pg=x(N,:); %随意初始化,pg为全局最优位置
for i=1:N-1 %寻找全局最优位置
  if f(x(i,:))>f(pg)
    pg=x(i,:);
  end
end

%% 群体更新
iter=1;

while iter<=ger
    for i=1:N
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); %优化粒子速度
        x(i,:)=x(i,:)+v(i,:); %优化粒子位置
        %防止越界,若越界,则取边界值,没有约束的话去掉这两个if语句
        if x(i,:)<limit(1)
          x(i,:)=limit(1);
        end
        if x(i,:)>limit(2)
          x(i,:)=limit(2)
        end
        if f(x(i,:))<p(i) %更新个体最优
          p(i)=f(x(i,:));
          y(i,:)=x(i,:);
        end
        if p(i)<f(pg) %更新全局最优
          pg=y(i,:);
        end
    end
    iter=iter+1;  
end
hold on
plot(pg,f(pg),'ro')
hold off

作者声明

如有问题,欢迎指正!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

粒子群算法 PSO 的相关文章

随机推荐

  • 操作系统--03内存管理

    内存管理 第三章 xff1a 内存管理 xff08 存储器管理 xff09 3 内存保护的两种办法 xff1a 3 1 覆盖与交换3 2 连续分配管理方式3 3 动态分区分配算法1 首次适应算法 xff1a 2 最佳适应算法 xff1a 3
  • SCRUM敏捷项目管理实战(深圳站)

    1 内容提要 SCRUM是目前各互联网公司普遍采用的敏捷项目管理模式 xff0c 与传统的项目管理十大知识领域相比 xff0c 敏捷更加直击要害 xff0c 更加强调自组织和跨职能团队 xff0c 更能帮助企业高效率交付和盈利 xff01
  • 2021年最新gitee使用教程

    gitee简介 Gitee com xff08 码云 xff09 是 OSCHINA NET 推出的代码托管平台 xff0c 支持 Git 和 SVN xff0c 提供免费的私有仓库托管 目前已有超过 600 万的开发者选择 Gitee 为
  • 在vscode中运行c、c++(超级简单)

    第一 下载安装vscode 第二 下载插件 链接 xff1a https pan baidu com s 1mLdKbQWxkZJYhwH0ToD9oQ 提取码 xff1a 3kxe 复制这段内容后打开百度网盘手机App xff0c 操作更
  • flameshot安装并配置插入文字描述、设置默认保存路径、将截图内容添加到粘贴板中

    flameshot配置插入文字描述 设置默认保存路径 将截图内容添加到粘贴板中 安装 xff1a https github com flameshot org flameshot releases 下载相应rpm包 xff0c 安装即可 以
  • 静态域[详解]

    不知道静态域是什么 目前有两种想法 1是代表static修饰的属性 方法等的集合 即所有static修饰的都算 2是认为仅仅代表静态代码块 即 static 下面正式研究 34 何为静态域 34 查到的文章基本分静态域 静态常量 静态方法这
  • OpenFlow 流表

    流规则组成 xff1a 每条流规则由一系列字段组成 xff0c 分为基本字段 条件字段和动作字段三部分 一 xff1a 基本字段 duration sec xff1a 表示流表项的生效时间 xff0c 以秒为单位 可以用来控制流表项的生命周
  • Gittee的使用

    Git Linus用C写的分布式版本控制系统 Git官网 xff1a https git scm com Gittee 国内代码托管和协作开发的平台 xff0c 可以看作为中文版的 GitHub 官网 xff1a Gitee 基于 Git
  • 使用VsCode管理Gitee仓库中的项目

    使用VsCode管理Gitee仓库中的项目的大致流程如下 1 首先得下载安装 git xff0c 详见 Git 详细安装教程详解 Git 安装过程的每一个步骤 mukes的博文 xff09 2 为 git 配置 username和email
  • Linux嵌入式开发之内存占用

    一 引言 内存是嵌入式系统中的关键资源 xff0c 内存占用主要是指软件系统的内存使用情况 本篇博客将介绍如何分析内存使用以便进行进一步优化内存占用相关的基础概念和相关工具 二 内存占用 内存占用是应用程序运行时内存的使用或引用数量 对于开
  • 手眼标定——使用 easy_handeye 和 aruco

    整个过程分为以下三步 aruco ros 的配置使用easy handeye 的配置使用标定过程 aruco 的配置使用 clone aruco 项目 到 ros 工作空间 前往 aruco marker 生成网站 打印 marker xf
  • CentOS7.6 Docker 操作(一)

    CentOS7 6 Docker 操作 xff08 一 xff09 CentOS 7 6镜像地址 网易镜像 xff08 可直接复制地址到迅雷 xff0c 下载会快一些 xff09 http mirrors 163 com centos 7
  • 读取excel 表格控件

    直接在实时编辑器里 xff1a T 61 xlsread 39 C Users 86173 Desktop DESKETOP 111 xlsx 39 t 61 textread 39 C Users 86173 Desktop DESKET
  • Eureka注册中心

    3 Eureka注册中心 假如我们的服务提供者user service部署了多个实例 xff0c 如图 xff1a 大家思考几个问题 xff1a order service在发起远程调用的时候 xff0c 该如何得知user service
  • 从docker 拉去指定版本的镜像

    从docker 拉去指定版本的镜像 1 上https hub docker com 网站 xff0c 查询 点击tags查看 2 拉取 docker pull images tags
  • SpringBoot整合mybatis-plus

    导入依赖 在项目pom文件导入依赖 在项目pom文件导入依赖 span class token tag span class token tag span class token punctuation lt span dependency
  • idea mybatisplus 插件使用

    在plugin中安装mybatisplus 插件 使用 配置数据库 生成代码 表新增字段 xff0c 重新生成实体类覆盖 因业务需求 xff0c 表中可能会时不时增加一些字段 xff0c 大多情况下实体类中不会添加表中没有的字段 xff0c
  • axios请求

    可传参数 span class token function axios span span class token punctuation span span class token punctuation span span class
  • kubesphere

    文章目录 KubeSphere简介安装多租户管理WordPressDevOps 作者声明 KubeSphere 默认的 dashboard 没啥用 xff0c 我们用 kubesphere 可以打通全部的 devops 链路 Kubesph
  • 粒子群算法 PSO

    粒子群算法 粒子群算法 PSO 在PSO中 每个优化问题的潜在解都是搜索空间的一只鸟 xff0c 被称为粒子 xff0c 所有的粒子都有一个由适应度函数决定的适值 xff0c 每个粒子还有一个速度决定它们 飞行 的方向和距离 xff0c 然