当前位置: 首页 > news >正文

matlab基本粒子群算法实现(一)

算法没有和图像处理直接相关,

不过对于图像分类中的模式识别相关算法,

也许会用到这个优化算法。

不过不管有没有用,

还是得一步一步学起来

算法步骤:

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

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

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

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

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

 

main.m

[xm,fv]=PSO(@fitness,40,2,2,0.5,100,30)
for i=1:30
    s(i)=0.;
end
for i=1:30
    
    F=0;
    for j=1:30
        F=F+xm(i)^2+xm(i);
    end
    s(i)=F;
end
plot(xm,s,'*')
    

 

PSO.m

function [ xm,fv ] = PSO( fitness,N,c1,c2,w,M,D )
%PSO Summary of this function goes here
%   Detailed explanation goes here
format long;
for i=1:N
    for j=1:D
        x(i,j)=randn;
        v(i,j)=rand;
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg= x(N,:);
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end
for t=1:M
    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 fitness(x(i,:))<p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i)<fitness(pg)
            pg=y(i,:);
        end
    end
    Pbest(t)=fitness(pg);
end
xm = pg';
fv =fitness(pg);



end

这个就是优化的函数,

就是求它的最小值,

也可能是局部最小值,

反正大家自己感悟

fitness.m

function F = fitness( x )
%F Summary of this function goes here
%   Detailed explanation goes here
F=0;
for i=1:30
    F=F+x(i)^2+x(i);

end

  

转载于:https://www.cnblogs.com/MnsterLu/p/5562451.html

相关文章:

  • Spark(八):Spark SQL 之 Data Sources And Save Modes
  • java命令执行jar包的方式
  • JAVA_NIO系列——Channel和Buffer详解
  • Microsoft.Web.Redis.RedisSessionStateProvider
  • 【ZZ】如何选择适合自己项目的编程语言
  • 使用css3属性处理单词的换行和断词
  • Linux中文显示设置
  • Spark RDD API详解(一) Map和Reduce
  • 【HTML5】Server-Sent服务器发送事件
  • 阿里云centos 6.5 32位安装可视化界面的方法
  • Android 内容提供者的实现
  • SQL注入攻防入门详解
  • 关于Linux cached内存简析
  • abrtd是什么进程
  • linux下定时任务的使用
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 2017-09-12 前端日报
  • 4个实用的微服务测试策略
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Spark Streaming 使用实例
  • ESLint简单操作
  • Java 多线程编程之:notify 和 wait 用法
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • sessionStorage和localStorage
  • Shell编程
  • Webpack 4 学习01(基础配置)
  • 检测对象或数组
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用agvtool更改app version/build
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 优秀架构师必须掌握的架构思维
  • 找一份好的前端工作,起点很重要
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • # 达梦数据库知识点
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (k8s中)docker netty OOM问题记录
  • (第一天)包装对象、作用域、创建对象
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四) 虚拟摄像头vivi体验
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)重识new
  • .Mobi域名介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Redis的秒杀Dome和异步执行
  • .Net 垃圾回收机制原理(二)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET运行机制
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ?php echo ?,?php echo Hello world!;?
  • @PreAuthorize注解
  • [C/C++]关于C++11中的std::move和std::forward
  • [cocos2d-x]关于CC_CALLBACK
  • [Codeforces1137D]Cooperative Game