粒子群算法(二)全局版本

2024-05-27 03:58
文章标签 算法 全局 版本 粒子

本文主要是介绍粒子群算法(二)全局版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标准的粒子群算法

(一)问题抽象

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子I在N维空间的位置表示为矢量Xi=(X1,X2,…,Xn),飞行速度表示为矢量Vi=(V1,V2,…,Vn)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值)。这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

(二)算法描述

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。

随机粒子是如何运动的?只是说按照一定的公式更新。这个公式是粒子群算法中的位置速度更新公式。要求求取函数y=1-cos(3*x)*exp(-x)在[0,4]最大值,并在[0,4]之间放置了两个随机点,这些点的坐标假设为x1=1.5; x2=2.5;这里的点是一个标量,但是更一般的情况--x为一个矢量的情况,比如二维的情况z=2*x1+3*x22的情况。这个时候每个粒子为二维,记粒子P1=(x11,x12),P2=(x21,x22),P3=(x31,x32),......Pn=(xn1,xn2)。这里n为粒子群群体的规模,也就是这个群中粒子的个数,每个粒子的维数为2。更一般的是粒子的维数为q,这样在这个种群中有n个粒子,每个粒子为q维。

由n个粒子组成的群体对Q维(每个粒子的维数)空间进行搜索。每个粒子表示为:xi=(xi1,xi2,xi3,...,xiQ),每个粒子对应的速度可以表示为vi=(vi1,vi2,vi3,....,viQ),每个粒子在搜索时要考虑两个因素:

1,自己搜索到的历史最优值 pi ,pi=(pi1,pi2,....,piQ),i=1,2,3,....,n。

2,全部粒子搜索到的最优值 pg,pg=(pg1,pg2,....,pgQ),注意这里的pg只有一个。

下面给出粒子群算法的位置速度更新公式:

重要的参数记忆

是保持原来速度的系数,所以叫做惯性权重

是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。通常设置为2。

是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。通常设置为2。

是[0,1]区间内均匀分布的随机数

是对位置更新的时候,在速度前面加的一个系数,这个系数叫做约束因子。通常设置为1。

这样一个标准的粒子群算法就结束了。

(三)标准PSO算法流程

Step1:初始化一群微粒(群体规模为m),包括随机位置和速度;

Step2:评价每个微粒的适应度;

Step3:对每个微粒,将其适应值与其经过的最好位置 pbest作比较,如果较好,则将其作为当前的 最好位置pbest;

Step4:对每个微粒,将其适应值与其经过的最好位置 gbest作比较,如果较好,则将其作为当前的 最好位置gbest;

Step5:根据上述公式调整微粒速度和位置;

Step6:未达到结束条件则转Step2。

迭代终止条件根据具体问题一般选为 最大迭代次数Gk 或 微粒群迄今为止搜索到的最优位置满足预定最小适应值。

对整个基本的粒子群的过程给一个简单的图形表示:

注意:这里的粒子是同时跟踪自己的历史最优值与全局(群体)最优值来改变自己的位置及速度的,所以又叫做全局的标准粒子群优化算法。

(四)遗传算法和粒子群算法的比较

共性

(1)都属于仿生算法。 

(2)都属于全局优化方法。

(3)都属于随机搜索算法。

(4)都隐含并行性。

(5)根据个体的适配信息进行搜索,因此不受函数约束条件的限制,如连续性、可导性等。

(6)对高维复杂问题,往往会遇到早熟收敛和收敛性能差的缺点,都无法保证收敛到最优点。

差异: 

(1) PSO有记忆,对好的解所有粒子都保存,而GA中以前的知识随着种群的改变而改变。 

(2) PSO中的粒子仅仅通过当前搜索到最优点进行共享信息,所以很大程度上这是一种单共享项信息机制。而GA中,染色体之间相互共享信息,使得整个种群都向最优区域移动。 

(3) GA的编码技术和遗传操作比较简单,而PSO相对于GA没有交叉和变异操作,粒子只是通过内部速度进行更新,因此原理更简单、参数更少、实现更容易。

GA可以用来研究三个方面问题:网络连接权重、网络结构、学习算法。优势在于可处理传统方法不能处理的问题,例如不可导的节点传递函数或没有梯度信息。缺点:在某些问题上性能不是特别好;网络权重的编码和遗传算子的选择有时较麻烦。研究表明PSO是一种很有潜力的神经网络算法。速度较快且有较好的结果,且没有遗传算法碰到的问题。


这篇关于粒子群算法(二)全局版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006457

相关文章

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中,办公软件的重要性不言而喻。从文档处理到电子表格分析,再到演示文稿制作,强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件,一直以来都受到广大用户的关注与喜爱。而其最新发布的 ONLYOFFICE 8.1 版本桌面编辑器,更是带来了诸多改进和新特性。本文将详细评测 ONLYOFFICE 8.1 版本桌面编辑器,探讨其在功能、用户

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

Visual Studio中,MSBUild版本问题

假如项目规定了MSBUild版本,那么在安装完Visual Studio后,假如带的MSBUild版本与项目要求的版本不符合要求,那么可以把需要的MSBUild添加到系统中,然后即可使用。步骤如下:            假如项目需要使用V12的MSBUild,而安装的Visual Studio带的MSBUild版本为V14。 ①到MSDN下载V12 MSBUild包,把V12包解压到目录(

大林 PID 算法

Dahlin PID算法是一种用于控制和调节系统的比例积分延迟算法。以下是一个简单的C语言实现示例: #include <stdio.h>// DALIN PID 结构体定义typedef struct {float SetPoint; // 设定点float Proportion; // 比例float Integral; // 积分float Derivative; // 微分flo

axios全局封装AbortController取消重复请求

为什么? 问题:为什么axios要配置AbortController?防抖节流不行吗? 分析: 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在,如果存在,清除延时器,重新开启一个延时器,只执行最后一次请求。节流呢,是判断延时器是否存在,如果存在,直接return掉,直到执行完这个延时器。事实上,这些体验感都不算友好,因为对于用户来说,得等一些时间,尤其是首次请求,不是那么流畅

Pycharm配置conda环境(解决新版本无法识别可执行文件问题)

引言: 很多小伙伴在下载最新版本的pycharm或者更新到最新版本后为项目配置conda环境的时候,发现文件夹目录中无法显示可执行文件(一般为python.exe),以下就是本人遇到该问题后试验和解决该问题的一些方法和思路。 一般遇到该问题的人群有两种,一种是刚入门对pycharm进行conda环境配置的小白(例如我),不熟悉相关环境配置的操作和过程,还有一种是入坑pycharm有段时间的老手