matlab练习程序(粒子群优化PSO)

2023-05-16

算法没有和图像处理直接相关,不过对于图像分类中的模式识别相关算法,也许会用到这个优化算法。

算法步骤:

1.首先确定粒子个数与迭代次数。

2.对每个粒子随机初始化位置与速度。

3.采用如下公式更新每个粒子的位置与速度。

Px=Px+Pv*t; %位置更新公式 

Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px)); %速度更新公式

这里c1和c2是加速因子,和梯度下降算法那里的加速因子我感觉很类似。

Gx是粒子群中最佳粒子的位置,PBx为当前粒子最佳位置。

4.每次迭代,首先检查新粒子适应度是否高于原最优适应度,如果高于则对自己的位置和适应度进行更新。然后再判断此粒子适应度是否高于全局最优粒子,如果高于则更新全局最优粒子适应度和位置。

因为自己不是主要研究这方面算法的,所以还有一些疑问(自问自答?)。

1.算法需要目标函数,如果没有目标函数怎么办。也许就不用这个算法了,或者其他什么算法先求出了目标函数了。

2.既然给了目标函数,那么直接遍历所有值再max()应该就能求得最佳位置。而PSO算法是不是只是为了减少运算量,比如我这里200*200的矩阵,本来需要计算40000次函数,而PSO只计算了100次函数就得到近似最优解了。

难怪叫优化算法,反正我暂时只能这样理解了,其他细节代码注释的很清楚了。

下图展示了一个PSO的运行结果,目标函数是高斯函数,绿点代表最佳粒子的位置:

matlab代码如下:

main.m


clear all;close all;clc;

[x y]=meshgrid(-100:100,-100:100);
sigma=50;
img = (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2)); %目标函数,高斯函数
mesh(img);
hold on;
n=10;   %粒子群粒子个数

%初始化粒子群,定义结构体
%结构体中八个元素,分别是粒子坐标,粒子速度,粒子适应度,粒子最佳适应度,粒子最佳坐标
par=struct([]);          
for i=1:n
    par(i).x=-100+200*rand();   %[-100 100]对x位置随机初始化
    par(i).y=-100+200*rand();   %[-100 100]对y位置随机初始化
    par(i).vx=-1+2*rand();      %[-1 1]对vx速度随机初始化
    par(i).vy=-1+2*rand();      %[-1 1]对vy速度随机初始化
    par(i).fit=0;               %粒子适应度为0初始化
    par(i).bestfit=0;           %粒子最佳适应度为0初始化
    par(i).bestx=par(i).x;      %粒子x最佳位置初始化
    par(i).besty=par(i).y;      %粒子y最佳位置初始化
end
par_best=par(1);    %初始化粒子群中最佳粒子

for k=1:10    
    plot3(par_best.x+100,par_best.y+100,par_best.fit,'g*'); %画出最佳粒子的位置,+100为相对偏移
    for p=1:n
        [par(p) par_best]=update_par(par(p),par_best);  %更新每个粒子信息         
    end  
end  

update_par.m


function [par par_best]=update_par(par,par_best)
    
    %Px=Px+Pv*t,这里t=1,Px为当前粒子的位置,Pv为当前粒子的速度
    par.x=par.x+par.vx;   
    par.y=par.x+par.vy;   
    
    par.fit=compute_fit(par);    %计算当前粒子适应度
    
    %Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px))
    %这里c1,c2为加速因子
    %Gx为具有最佳适应度粒子的位置
    %PBx为当前粒子的最佳位置
    c1=1;
    c2=1;
    par.vx=par.vx+c1*rand()*(par_best.x-par.x)+c2*rand()*(par.bestx-par.x);   
    par.vy=par.vy+c1*rand()*(par_best.y-par.y)+c2*rand()*(par.besty-par.y);
 
    if par.fit>par.bestfit      %如果当前粒子适应度要好于当前粒子最佳适应度
        par.bestfit=par.fit;    %则更新当前粒子最佳适应度
        par.bestx=par.x;        %更新当前粒子最佳位置
        par.besty=par.y;
        if par.bestfit>par_best.fit     %如果当前粒子最佳适应度好于最佳粒子适应度
            par_best.fit=par.bestfit;   %则更新最佳粒子适应度
            par_best.x=par.x;           %更新最佳粒子位置
            par_best.y=par.y;
        end
    end

end  

compute_fit.m


function re=compute_fit(par)
    x=par.x;
    y=par.y;
    sigma=50;
    if x<-100 || x>100 || y<-100 || y>100
        re=0;        %超出范围适应度为0
    else            %否则适应度按目标函数求解
        re= (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2)); 
    end
end  

 

转载于:https://www.cnblogs.com/tiandsp/p/3157483.html

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

matlab练习程序(粒子群优化PSO) 的相关文章

  • request方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1request概述 request是Servlet service 方法的一个参数 xff0c 类型为javax servlet http HttpServletRequ
  • Eclipse调试:改变颜色, 背景与字体大小 和xml字体调整

    Eclipse背景颜色修改 xff1a 操作界面默认颜色为白色 对于我们长期使用电脑编程的人来说 xff0c 白色很刺激我们的眼睛 xff0c 所以我经常会改变workspace的背景色 xff0c 使眼睛舒服一些 设置方法如下 xff1a
  • ASM汇编常用跳转指令-极速查

    作者 xff1a 逆向驿站 微信公众号 xff1a 逆向驿站 知乎 xff1a 逆向驿站 若不是老鸟 xff0c 是不是经常为各种JXX汇编跳转指令查资料 xff1f 影响效率 xff0c 更影响潜意识整体分析的 34 灵光一现 34 本公
  • Android签名机制及原理

    Android签名机制及原理 Android系统在安装APK的时候 xff0c 首先会检验APK的签名 xff0c 如果发现签名文件不存在或者校验签名失败 xff0c 则会拒绝安装 xff0c 所以应用程序在发布之前一定要进行签名 给APK
  • chrome扩展获取页面dom对象信息

    chrome扩展 xff0c 在popup页面 xff0c 给页面对象绑定点击事件 xff0c 获取当前tab加载页面的DOM对象信息 本chrome扩展功能主要用于获取百度搜索输入框中用户输入的关键字 效果如下 源代码如下 注意 xff1
  • CentOS 7之FirewallD与iptables的区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt FirewallD 即Dynamic Firewall Manager of Linux systems xff0c Linux系统的动态防火墙管理器 xff0c 是 ip
  • goland编辑器护眼背景颜色设置

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 打开goland软件 菜单栏 file settings 打开如下 搞定 色调 xff1a 85 xff1b 饱和度 xff1a 123 xff1b 亮度 xff1a 20
  • 让IE8支持HTML5及canvas功能!

    让IE8支持HTML5及canvas功能 xff01 微软出的IE9支持HTML5 xff0c 但因为不支持XP系统 xff0c 暂时我还用不了 即使能用 xff0c 现阶段如果开发HTML5页面 xff0c 并考虑到兼容性问题的话 xff
  • 卷积神经网络(CNN)的训练过程

    卷积神经网络的训练过程 卷积神经网络的训练过程分为两个阶段 第一个阶段是数据由低层次向高层次传播的阶段 xff0c 即前向传播阶段 另外一个阶段是 xff0c 当前向传播得出的结果与预期不相符时 xff0c 将误差从高层次向底层次进行传播训
  • 编程常用英语词汇大全

    编程常用英语词汇大全 很实用的编程英语词库 xff0c 共收录一千五百余条词汇 第一部分 xff1a application 应用程式 应用 应用程序 application framework 应用程式框架 应用框架 应用程序框架 arc
  • [LTMP搭建] Centos 6.5 安装配置 Tengine

    接上篇 xff1a http www cnblogs com antarctican p 3752812 html 安装PHP 一 安装依赖的扩展 记得前几天编译tengine xff0c 不使用 with http lua module
  • .net项目移植后的虚拟目录的配置问题

    VS NET 2003 开发环境打开此项目 xff08 MyWeb xff09 时 xff0c 出现如果如下问题 xff1a 无法从 Web 服务器获取项目文件 无法打开 Web 项目 MyWeb 文件路径 C Inetpub wwwroo
  • JS 柯里化 (curry)

    用 JS 理解柯里化 函数式编程风格 xff0c 试图以函数作为参数传递 xff08 回调 xff09 和无副作用的返回函数 xff08 修改程序的状态 xff09 很多语言采用了这种编程风格 JavaScript xff0c Haskel
  • C语言头文件编程,C语言编程规范-头文件(Day2)

    1 头文件 背景 对于C语言来说 xff0c 头文件的设计体现了大部分的系统设计 不合理的头文件布局是编译时间过长的根本原因 xff0c 不合理的头文件实际上是不合理的设计 术语定义 依赖 xff1a 本章节特指编译依赖 若x h包含y h
  • Win10共享打印机所需要的设置(无需密码访问实现打印机共享,共享不要密码)...

    原文 xff1a https m baidu com from 61 1086k bd page type 61 1 ssid 61 0 uid 61 0 pu 61 usm 64 0 sz 64 1320 1002 ta 64 iphon
  • RBF神经网络的matlab简单实现

    径向基神经网络 1 径向基函数 Radial Basis Function xff0c RBF 神经网络是一种性能良好的前向网络 xff0c 具有最佳逼近 训练简洁 学习收敛速度快以及克服局部最小值问题的性能 xff0c 目前已经证明径向基
  • npm不是以管理身份运行遇到的问题

    环境 win10 43 npm3 10 5 问题 在npm install lodash时 出现下列错误 34 npm debug log 34 文件内容 0 info it worked if it ends with ok 1 verb
  • JSON_VALUE

    本页目录 语法入参功能描述示例 语法 span class pln style color rgb 0 0 0 VARCHAR JSON VALUE span span class pun style color rgb 102 102 0
  • 浮点数的表示方法

    计算机中浮点数的表示 never2die 长江大学湖北荆州 中文摘要 xff1a 本文介绍了浮点数在计算机中的几种表示方法 xff0c 并对此进行整理分析 xff0c 为人们以后做此方面的研究提供参考 中文关键词 xff1a 浮点数 xff
  • matlab 中atan2函数的介绍

    atan2 a b 是4象限反正切 xff0c 它的取值不仅取决于正切值a b xff0c 还取决于点 b a 落入哪个象限 xff1a 当点 b a 落入第一象限时 xff0c atan2 a b 的范围是 0 pi 2 当点 b a 落

随机推荐

  • 研究生毕业入职阿里,2年升职到P7,晒出真实月薪,以为看错了

    互联网企业已经成为现在大部分年轻人选择职业打拼的行业 xff0c 这个行业机会多 xff0c 有各种各样的职位和机会留给优秀的年轻人去闯 xff0c 但是相应的压力也非常大 毕竟高薪水的待遇下 xff0c 工作压力又怎么会轻松的了呢 xff
  • mac清理软件哪个好用?五大Mac Cleaner介绍推荐

    还在找好用的Mac清理软件吗 xff1f 你的Mac变慢了吗 xff1f 如果给你的Mac安装一款Mac清理软件 xff0c 可以删除Mac中不需要的垃圾文件 xff0c 以释放Mac的磁盘空间和内存 不知道mac清理软件哪个好用 xff1
  • 解决"SSL handshake failed"问题

    前阵子不知是对Ubuntu动了些啥 xff0c 结果Ubuntu One死活也不上 App Center上点击 34 Buy 34 按钮会提示 34 SSL handshake failed 34 猜想大概是由于同一问题导致的 网上给出的解
  • 当在Win8下安装msi类型的文件出现errorcode 2503的解决方法

    Win8安装程序出现2502 2503错误解决方法 在Win8中 xff0c 在安装msi安装包的时候常常会出现代码为2502 2503的错误 其实这种错误是由于安装权限不足造成的 xff0c 可以这种msi的安装包不像其他exe的安装程序
  • 极限编程实践

    摘自 xff1a 敏捷软件开发 xff1a 原则 模式与实践 Robert C Martin 著 xff0c 邓辉 译 极限编程实践 xff1a 1 完整团队 XP项目的所有参与者 xff08 开发人员 业务分析师 测试人员等等 xff09
  • keil5c语言定义引脚,keil编写C程序是不是不能在函数内定义变量啊,求大神

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 肯定可以的 xff1a 比如 程序动态显示字符 显示光标和光标闪烁打开效果 include 包含头文件 xff0c 义 include sbit RS 61 P2 4 定义端口 sbit RW
  • CircleProgressBar

    今天又写了一个demo xff0c 带有两个进度值的 圆环进度条 xff0c 原谅我是个小白 xff0c 只能写一写简单的自定义控件 xff0c 我会继续努力的 先看效果图 001 gif lt pre gt 64 Override pro
  • c++采集声卡输出_手机直播声卡转换器的分析与选购

    时下直播行业非常火爆 xff0c 相关周边产品五花八门 xff0c 良莠不齐 今天为大家带来的这篇长文 xff0c 旨在为选购设备苦恼的朋友提供帮助 闲话少叙 xff0c 开始正题 目前大家的使用的直播设备基本分为以下两种形式 xff1a
  • awk的使用及字符串的操作

    awk教程 awk的基本功能是对文件进行指定规则浏览和抽取信息 基本格式 xff1a 1 awk F 分隔域 39 command 39 input file s 2 写入shell脚本中 3 awk f awk script file i
  • VS2017安装后如何移动 Windows Kits文件夹

    MS的回答 LINK Try the following technique Close all programs move the Windows Kits folder to another disk for example to D
  • pytorch GPU的程序kill后未释放内存

    使用PyTorch设置多线程 xff08 threads xff09 进行数据读取 xff08 DataLoader xff09 xff0c 其实是假的多线程 xff0c 他是开了N个子进程 xff08 PID都连着 xff09 进行模拟多
  • 一个「学渣」从零Web前端自学之路

    从 13 年专科毕业开始 xff0c 一路跌跌撞撞走了很多弯路 xff0c 做过餐厅服务员 xff0c 进过工厂干过流水线 xff0c 做过客服 xff0c 干过电话销售可以说经历相当的 丰富 最后的机缘巧合下 xff0c 走上了前端开发之
  • 请求时token过期自动刷新token

    1 在开发过程中 xff0c 我们都会接触到token xff0c token的作用是什么呢 xff1f 主要的作用就是为了安全 xff0c 用户登陆时 xff0c 服务器会随机生成一个有时效性的token 用户的每一次请求都需要携带上to
  • Lua Table 长度的计算

    计算 Lua 的 Table长度 在 Lua 中 xff0c 我们可以通过这个符号 来计算字符串的长度和一个table的长度 xff0c 比如 xff1a str 61 34 I 39 am a string 34 print str 61
  • Mybatis-Plus 之BaseMapper 方法详解

    为什么80 的码农都做不了架构师 xff1f gt gt gt Mapper 继承该接口后 xff0c 无需编写 mapper xml 文件 xff0c 即可获得CRUD功能 这个 Mapper 支持 id 泛型 64 author hub
  • mac上面查看路由表

    为什么80 的码农都做不了架构师 xff1f gt gt gt 问题 本来想使用linux上面的命令route n查看mac上面的路由表的 xff0c 结果显示mac上面的route命令不是这样玩的 解决 netstat nr Mac上面需
  • el-select使用方法及遇到数据回显的坑

    2019独角兽企业重金招聘Python工程师标准 gt gt gt lt el select v model 61 34 temp lang 34 class 61 34 filter item 34 placeholder 61 34 P
  • 中国电话号码格式

    中国区号 086 北京区号010 我的电话123456 填在表格上应该如何填写呢 xff1f 手机号码应该如何填写呢 xff1f xff1f 00就不必写了 xff0c 写 43 就好了 xff0c 不同的国家国际接入的号不太一样的 xff
  • 【Quick-Cocos2d-x笔记】【一】Mac环境及相关配置

    本来是老老实实的想 xff0c 一心一意的先把C 43 43 学好 xff0c 在觉得自己C 43 43 水平还是菜鸟级的时候不要去动其他的东西 但自上次面试回来时候 xff0c 觉得这样不行啊 xff0c 虽然说现在从事的是C 43 43
  • matlab练习程序(粒子群优化PSO)

    算法没有和图像处理直接相关 xff0c 不过对于图像分类中的模式识别相关算法 xff0c 也许会用到这个优化算法 算法步骤 xff1a 1 首先确定粒子个数与迭代次数 2 对每个粒子随机初始化位置与速度 3 采用如下公式更新每个粒子的位置与