白话粒子群算法

MapReduce与遗传算法、MapReduce与粒子群算法结合与实现 遗传算法(大白话解析遗传算法):http://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html Java代码用遗传算法解决0-1背包:http://wenku.baidu.com/view/20beb6da6f1aff00bed51ea8.html  一、MapReduce和遗传算法结合:(参考文献:MapReduce-GA-eSci 阅读详情

简介

    上次在自话遗传算法中提到后期会写两篇关于粒子群算法和蚁群算法的博文,所以这次给大家带来的是我对粒子群的一些理解,并附带一个相当简单的实例去描述这个算法,我会尽力通俗易懂的把整个算法描述一遍,其实粒子群算法的思想也挺简单的,希望我不要反而写复杂了,下面同样引用百度百科的摘要结束简介部分。

    粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

基本思想

    正如简介所描述的那样,粒子群算法是模拟群体智能所建立起来的一种优化算法,像后面我向大家介绍的蚁群算法也属于这类算法,粒子群算法可以用鸟类在一个空间内随机觅食为例,所有的鸟都不知道食物具体在哪里,但是他们知道大概距离多远,最简单有效的方法就是搜寻目前离食物最近的鸟的周围区域。

    所以,粒子群算法就是把鸟看成一个个粒子,并且他们拥有位置和速度这两个属性,然后根据自身已经找到的离食物最近的解和参考整个共享于整个集群中找到的最近的解去改变自己的飞行方向,最后我们会发现,整个集群大致向同一个地方聚集。而这个地方是离食物最近的区域,条件好的话就会找到食物。这就是粒子群算法,很好理解。

算法描述

    所以,我们需要一个pbest来记录个体搜索到的最优解,用gbest来记录整个群体在一次迭代中搜索到的最优解。速度和粒子位置的更新公式如下:

 

    v[i] = w * v[i] + c1 * rand() * (pbest[i] - present[i]) + c2 * rand() * (gbest - present[i])    

    present[i] = present[i] + v[i]                                                                                                          

    其中v[i]代表第i个粒子的速度,w代表惯性权值,c1和c2表示学习参数,rand()表示在0-1之间的随机数,pbest[i]代表第i个粒子搜索到的最优值,gbest代表整个集群搜索到的最优值,present[i]代表第i个粒子的当前位置。

    我这里打了一个求解y=-x*(x-1) 在[-2,2]上最大值的粒子群算法,选用这个简单的例子主要是能让大家清楚的看到效果和粒子的运动方向,也方便理解我想说的一些观点。代码如下:

#include <iostream>
#include <math.h>
#include <cstdlib>
#include <ctime>
using namespace std;
const int n=2;
 class PSOTest {
//    int n=2; //粒子个数,这里为了方便演示,我们只取两个,观察其运动方向
    float* y;
    float* x;
    float* v;
    float c1;
    float c2;
    float *pbest;
    float gbest;
    float vmax;
 public:
	 
	 void fitnessFunction(){//适应函数
        for(int i=0;i<n;i++){
            y[i]=-1*x[i]*(x[i]-2);
        }
    }
     void init(){ //初始化
        x=new float[n];
        v=new float[n];
        y=new float[n];
        pbest=new float[n];
		c1=2;
		c2=2;
		vmax=(float)0.1;
		gbest=0;
        /***
         * 本来是应该随机产生的,为了方便演示,我这里手动随机落两个点,分别落在最大值两边
         */
        x[0]=-0.5;
		x[1]=(float)1.9;
		v[0]=(float)0.01;
		v[1]=(float)0.02;
        fitnessFunction();
        //初始化当前个体极值,并找到群体极值
        for(int i=0;i<n;i++){
            pbest[i]=y[i];
            if(y[i]>gbest) gbest=y[i];
        }
     
    }
  float Max(float a,float b)
  {
    if(a>=b)
		return a;
	return b;
  }
    //粒子群算法
    void PSO(int max){
		 float w;
        for(int i=0;i<max;i++){
           
            for(int j=0;j<n;j++){
                //更新位置和速度
				w=(float)((float)1.2-(float)(1.2-0.8)/max*i);
				srand(time(NULL));
				v[j]=w*v[j]+c1*((float)rand()/RAND_MAX)*(pbest[j]-x[j])+c2*((float)rand()/RAND_MAX)*(gbest-x[j]);
                if(v[j]>vmax) v[j]=vmax;
                x[j]+=v[j];
                //越界判断
                if(x[j]>2) x[j]=2;
                if(x[j]<-2) x[j]=-2;
                
            }
            fitnessFunction();
            //更新个体极值和群体极值
            for(int j=0;j<n;j++){
				pbest[j]=Max(y[j],pbest[j]);
                if(pbest[j]>gbest) gbest=pbest[j];
                cout<<x[j]<<"  "<<v[j]<<endl;
            }
			cout<<"  gbest   "<<gbest<<endl;
        }
         
        
    }
 };
 int main(){
        PSOTest * ts=new PSOTest();
        ts->init();
        ts->PSO(200);
		return 0;
    }

   

在实验时候,会出现极值很难收敛的问题,所以我们这里讲权重因子w线性的从1.2降到0.8,可以看到,比固定不变,收敛速度要好的很多。
粒子群、遗传、蚁群、模拟退火和鲸鱼算法优缺点比较 概述 智能理论算法的优点是无需先验知识,不需要分析数据内部的规律和内在关联,只需要对数据本身进行学习,自组织、自适应的完成优化问题的求解,缺点是采用这种模型的收敛速度往往极慢,处理大量的样本数据时会占据极多的计算机运行内存,对计算机的运行速度有很高的要求。 优化算法是一种给定方向的遍历 遗传算法(GA) 全局搜索能力强,局部搜索能力较弱,往往只能得到次优解而不是最优解 研究发现,遗传算法可以用极快的速度达到最优解的90%以上,但是要达到真正的最优解需要花费很长时间,即局部搜索能力不足。 粒子群算法 产生早熟 阅读详情

相关推荐

MATLAB群智能算法开源第二十八期-动态元启发式神经网络优化算法

1 写在前面 该系列为基础群智能优化算法,欢迎私信一起交流问题,更多的改进算法可查看往期的推文。有问题或者需要其他建议的话,非常欢迎后台私信交流,共同进步,如若出现违反学术道德的情况与本博客以及作者无关,所有资料仅做参考。推文仅做参考作用,具体原理以及数学模型自行学习改进或后台咨询!!! 群体智能优化算法定义:主要模拟了昆虫、兽群、鸟群和鱼群的群体行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断地改变搜索的方向。任何一种由昆虫群体或者其他动物社会行为机

移步公众号获取 1509

粒子群(PSO)算法的理解与应用

最近在学习粒子群算法,看了很多资料都有点摸不清头脑,直到看了一篇博客中超级简洁的粒子群C++实现代码,才明白粒子群算法的原理,真心感谢博主,在此贴出博主的博客地址:http://blog...

shandianfengfan的博客 2万+

2026 年 JAYA 算法全解:从入门到工程落地,为什么它成了优化界的 “平民神器“

JAYA算法:无参数优化的"平民神器" JAYA算法是2016年提出的元启发式优化算法,其梵语名意为"胜利"。该算法最大特点是无需调参,仅需设置种群大小和迭代次数即可运行,大幅降低了使用门槛。核心思想是让解向当前最优解靠近,同时远离最差解,通过简单更新规则实现高效优化。 2025-2026年迎来爆发期,年论文量达1200多篇。改进版本如CLJAYA-LF(综合学习+莱维飞行)、ESJaya(增强半稳态)等显著提升了算法性能。应用领域包括: 光伏系统优化(发电效率提升2

jj976945的博客 446

优化算法——粒子群算法(PSO)

一、粒子群算法的概述 二、粒子群算法的流程

null的专栏 19万+

2bit反射型超表面设计中的pin管开关状态优化策略

本文深入探讨了2bit反射型超表面设计中,如何通过优化pin管开关状态来精确控制电磁波束。文章详细阐述了从单元设计、pin管精确建模,到利用遗传算法等智能策略进行阵列状态优化的完整流程,旨在实现高效的波束赋形与扫描,为相关工程实践提供关键指导。

weixin_29041767的博客 330

【机器学习入门到精通系列】粒子群优化算法

文章目录1 粒子群算法简介2 算法流程3 粒子群算法模型(不懂就不看哦)4 代码 1 粒子群算法简介 粒子群算法(Particle Swarm Optimization,PSO)是一种模仿鸟群、鱼群觅食行为发展起来的一种进化算法。其概念简单易于编程实现且运行效率高、参数相对较少,应用非常广泛。粒子群算法于1995年提出,距今(2019)已有24年历史。 粒子群算法中每一个粒子的位置代表了待求问题的一个候选解。 每一个粒子的位置在空间内的好坏由该粒子的位置在待求问题中的适应度值决定。每一个粒子在下一代的位置有

NJU phd 在读。 3314

粒子群算法

文章目录前言一、算法描述二、算法公式三、算法流程举个例子总结 前言 粒子群算法是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法,通常认为它是群集智能 (Swarm intelligence, SI) 的一种。它可以被纳入多主体优化系统(Multiagent Optimization System, MAOS)。粒子群优化算法是由Eberhart博士和kennedy博士发明。(百度百科) 一、算法描述 以鸟群寻找食物为例,鸟群的鸟是可以共享信息的,类似于每只鸟都会向大家公布自己的找到的最好的

a424466072的博客 2957

Matlab一键运行的PSO-SVR回归预测工具:含训练测试数据、可视化结果与参数说明

直接在Matlab里跑起来就能做回归预测的PSO优化SVR方案,不用装额外工具箱,R2018a及以上版本开箱即用。主程序main.m调用psoSVRcgForRegress.m自动搜寻SVR最优参数(C、gamma、epsilon),底层对接libsvm预编译接口(svmtrain.mexw64、svmpredict.mexw64),适配Windows系统。自带train.xlsx和test.xlsx两份结构化样本数据,分别用于建模和效果验证;输出svr_prediction_s.png和pso_optim

app77的博客 280

白话c语言,白话C语言系列十二:别再说不懂啥是算法了

前面的系列啰里啰嗦的回顾了C语言的基本语法规范,也曾经举了一些简单的例子,例如比较两个数大小的C语言源码。我在前面也曾经提到过,其实C语言的程序是由语句组成的,从这个角度来说:程序 = 多个功能语句 + 多个功能语句块。站在实现功能的角度,功能语句可以向下继续划分:说实话,第一次看到算法这个词,我也是懵懂的。没想到简单的写点代码,竟然能与这么高大尚的词汇联系到一起。尤其是读硕士的时候,天天接触到什...

weixin_36230515的博客 250

白话算法(理论联系实际)-初探遗传算法接近完美

遗传算法将向你揭示:没有最好只有更好,每一天,每一天,一点点进步,就能不断接近完美,这就是生命得以不断延续的秘密。

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

白话例子群算法—C语言实现

简介     上次在自话遗传算法中提到后期会写两篇关于粒子群算法和蚁群算法的博文,所以这次给大家带来的是我对粒子群的一些理解,并附带一个相当简单的实例去描述这个算法,我会尽力通俗易懂的把整个算法描述一遍,其实粒子群算法的思想也挺简单的,希望我不要反而写复杂了,下面同样引用百度百科的摘要结束简介部分。     粒子群优化算法(PSO)是一种进化计算技术(evolutionary computat

u010480899的博客 1433

从MC到DC:三维重建算法的核心原理与实战对比

本文深入对比了三维重建领域两大经典算法Marching Cubes(MC)与Dual Contouring(DC)的核心原理与实战表现。MC算法原理直观、实现简单,但存在特征丢失和二义性问题;DC算法通过求解二次误差函数(QEF)和利用法向量信息,能更好地保留模型的尖锐特征,但计算更复杂。文章结合医学影像处理实例,为开发者根据速度、精度和特征保真度需求选择合适算法提供了清晰指南。

weixin_29251131的博客 1030

粒子群优化算法

简介 本文深入浅出从代码入手介绍粒子群算法,完美绕开复杂繁琐的公式,直接从应用的角度来阐述粒子群算法(说白了,讲人话和大白话) 1、粒子群算法历史以及原理 这里不过多介绍,想仔细了解请参看维基百科。 2、实现算例的最优值和最优解计算 (1) 从公式(1)可以直接得出最优值:x=1,最优解:y=0。接下来展示下使用粒子群算法来...

cxrs_123的博客 634

squidpy 教程 2:利用 Scanpy 和 Squidpy 进行空间数据的可视化分析

本教程详细介绍了如何利用Squidpy和Scanpy对空间转录组数据进行可视化分析。通过将Scanpy处理得到的聚类结果映射回原始组织图像,并结合基因表达与空间邻域信息,帮助研究者直观揭示细胞类型分布、基因表达模式及空间相互作用,从而深入挖掘空间组学数据的生物学意义。

weixin_29081703的博客 446

unity 休闲游戏 动效规范说明

在特效制作中,有时为了完成更丰富、更绚丽的效果,可能会添加一些高级Shader(着色器),例如扭曲、溶解,这些Shader(着色器)往往需要用到显卡的部分功能,会造成较大的性能损耗。如果对纹理细节要求较高,那么建议使用贴图比例为1∶1的正方形(不强制),使用不等边贴图制作特效时会对纹理清晰度造成一定的损失(引擎算法决定)。首先选择模型体,然后在Inspector(检测视图)中查看该物体的属性,找到MeshRenderer(网格渲染)组件中的阴影设置项,如图。制作特效时,尽量不要使用灯光系统。

丛小胖 1608

什么是算法?一篇科普长文让你彻底搞懂

导航为什么能秒算最优路线?外卖平台如何在百万订单中精准派单?推荐算法为何比你的朋友更懂你的口味?这些问题的答案,都指向同一个词——算法。本文用大白话把算法、智能算法、启发式算法三个核心概念说透,并告诉你它们正在如何悄悄改变世界。一本菜谱的本质是什么?是一套有顺序、有步骤、有目标的操作指南:第一步加油、第二步下葱、第三步放盐、第四步翻炒两分钟,最终把原材料变成一盘菜。算法(Algorithm)就是计算机世界里的"菜谱"——为解决特定问题而设计的、有限且明确的操作步骤序列。

2401_85688943的博客 861

基于freesurfer和3Dslicer的脑区分割与电极定位全流程解析(实战指南)

本文提供了一套基于FreeSurfer和3D Slicer的颅内电极定位实战指南。详细解析了从环境搭建、数据预处理、FreeSurfer脑区分割、影像配准,到3D Slicer中手动与自动化电极定位的全流程。重点介绍了如何利用FreeSurfer进行高精度脑区分割,并在3D Slicer中实现电极触点的可视化标记与坐标提取,最终获得带脑区信息的电极数据,为iEEG/SEEG研究奠定基础。

banana的博客 298

数学建模——关于美赛的一些准备工作

熬到七点多终于交稿了 今年的美赛我们选择了a题,鲭鱼鲱鱼香不香我不知道,我只想为四天前的我点一罐鲱鱼罐头。 我负责队伍的是里面的编程,因为说起编程大家想得可能都是边城(x) 然而我发现,这编程怎么跟我想的编程还真不一样???(x) ————————————————————————————————————————————————— 由于学校并没有为我们开设与MATLAB有关的课,所以用了几天简单入门...

饮tom的博客 2112

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 197

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3257
上一篇: 判断一个树是否是另外一个树的子树
下一篇: <学习笔记>Windows驱动开发技术详解__Windows内存管理
lycommand
博客等级 码龄14年 31粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值