粒子群优化算法PSO

  • 粒子群优化算法
    • 基本原理
    • 算法步骤
    • 代码实现

粒子群优化算法

一群鸟在随机搜索食物,在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是它们知道当前的位置离食物还有多远。那么,找到食物的最简单有效的方法就是搜寻离食物最近的鸟的周围区域。如果将鸟抽象为没有体积和质量的“粒子”,相当于问题的一个解,鸟群就相当于一个解集,离食物最近的鸟相当于解群中的最优粒子,食物的位置相当于全局最优解。

基本原理

粒子群算法是由 Kennedy 和 Eberhart 等通过模拟鸟群的觅食行为而提出的一种基于群体协作的随机搜索算法。标准粒子群算法搜索寻优的基本框架如图 所示:

每个粒子具有两个属性:
粒子位置 x
粒子速度 v
假设在一个 D 维的目标搜索空间中,有 N 个粒子组成一个群落。则:
第 i 粒子的位置为一个 D 维向量,表示为:

第 i 个粒子的飞行速度也是一个 D 维向量,表示为:

第 i 个粒子迄今为止搜索到的最优位置为个体极值,表示为:

整个粒子群迄今为止搜索到的最优位置为全局极值,表示为:

每个粒子追随当前的最优粒子在解空间中运动,并根据如下公式来更新自己的速度和位置:
速度变换公式:

位置变换公式为:

其中,w 为惯性权值;c1 和 c2 为学习因子,分别反映粒子的自我学习能力和向群体 最 优 粒 子学 习 的 能 力 ; r1 和 r2 为 [0,1] 的 均 匀 随 机数 ;vi为 粒 子 速 度,vi属于[-vmax,vmax],vmax是用户设定的一个常量,用来限制粒子的速度。
公式中,第一部分是粒子先前的速度与惯性权值的积,用来保证算法的全局
收敛性,第二部分是粒子自身的学习能力,第三部分是粒子的社会学习能力,表示粒子之间的信息共享与相互协作,第二、三部分是引起粒子速度变化的社会因素,使其在最优解附近具有局部搜索的能力。

算法步骤

基于上述流程,标准粒子群算法的具体步骤可描述如下:
步骤 1:在可行域中随机初始化一群粒子,包括粒子的规模 N、位置 xi和速
度 vi;
步骤 2:根据目标函数计算每个粒子的适应度值 Fit[i] ;
步骤 3:比较每个粒子的适应度值Fit[i]与个体极值 Pbest[i],若Fit[i] > Pbest[i],
则用 Fit[i] 替换 Pbest[i];
步骤 4:比较每个粒子的适应度值 [i]itF 与当前的全局极值 gbest[i],若
Fit[i] > gbest[i],则用 Fit[i] 替换 gbest[i];
步骤 5:根据公式(2-1),(2-2)更新粒子的速度 vi 和位置 xi ;
步骤 6:判断是否达到停止准则,如果达到设置的搜索精度或达到最大迭代次
数则退出,否则返回步骤 2。

代码实现

# coding: utf-8
import numpy as np
import random
import matplotlib.pyplot as pltclass PSO():# PSO参数设置def __init__(self, pN, dim, max_iter):self.w = 0.8self.c1 = 2self.c2 = 2self.r1 = 0.6self.r2 = 0.3self.pN = pN  # 粒子数量self.dim = dim  # 搜索维度self.max_iter = max_iter  # 迭代次数self.X = np.zeros((self.pN, self.dim))  # 所有粒子的位置和速度self.V = np.zeros((self.pN, self.dim))self.pbest = np.zeros((self.pN, self.dim))  # 个体经历的最佳位置和全局最佳位置self.gbest = np.zeros((1, self.dim))self.p_fit = np.zeros(self.pN)  # 每个个体的历史最佳适应值self.fit = 1e10  # 全局最佳适应值#目标函数Sphere函数def function(self, X):return X**4-2*X+3#初始化种群def init_Population(self):for i in range(self.pN):      #因为要随机生成pN个数据,所以需要循环pN次for j in range(self.dim):      #每一个维度都需要生成速度和位置,故循环dim次self.X[i][j] = random.uniform(0, 1)self.V[i][j] = random.uniform(0, 1)self.pbest[i] = self.X[i]     #其实就是给self.pbest定值tmp = self.function(self.X[i])  #得到现在最优self.p_fit[i] = tmp    这个个体历史最佳的位置if tmp < self.fit:   #得到现在最优和历史最优比较大小,如果现在最优大于历史最优,则更新历史最优self.fit = tmpself.gbest = self.X[i]# 更新粒子位置def iterator(self):fitness = []for t in range(self.max_iter):    #迭代次数,不是越多越好for i in range(self.pN):  # 更新gbest\pbesttemp = self.function(self.X[i])if temp < self.p_fit[i]:  # 更新个体最优self.p_fit[i] = tempself.pbest[i] = self.X[i]if self.p_fit[i] < self.fit:  # 更新全局最优self.gbest = self.X[i]self.fit = self.p_fit[i]for i in range(self.pN):self.V[i] = self.w * self.V[i] + self.c1 * self.r1 * (self.pbest[i] - self.X[i]) + \self.c2 * self.r2 * (self.gbest - self.X[i])self.X[i] = self.X[i] + self.V[i]fitness.append(self.fit)print(self.X[0], end=" ")print(self.fit)  # 输出最优值return fitness

##输出

#程序
my_pso = PSO(pN=30, dim=1, max_iter=100)
my_pso.init_Population()
fitness = my_pso.iterator()
# 画图
plt.figure(1)
plt.title("Figure1")
plt.xlabel("iterators", size=14)
plt.ylabel("fitness", size=14)
t = np.array([t for t in range(0, 100)])
fitness = np.array(fitness)
plt.plot(t, fitness, color='b', linewidth=3)
plt.show()

在上面我们计算 适应度函数
我们看一看结果:
1.迭代图像

粒子群优化算法python相关推荐

  1. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  2. Python自定义:粒子群优化算法

    Python中的粒子群算法 例子算法又被称作飞鸟觅食算法,是一种常见的现代启发式优化算法.在Python中,处于不同的情况考虑,我们都可能使用到该算法.在这里我给出三种情况下的解决方案或者替代方案. ...

  3. 优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)

    目录 ▎标准PSO算法 ▎RDPSO算法 ▎标准PSO算法Python工具包 01 | 工具包适用范围 02 | 工具包安装方法 03 | 工具包使用实例 ▎参考文献 今天为各位讲解一种改进的粒子群优 ...

  4. 【python】利用python实现简单粒子群优化算法实例

    前言 最近在准备复(bai)习(lan)智能信息处理ing--想着通过复现一些PPT上简单算法例子的方式加深自己对算法的理解,也作为大家使用粒子群这一算法的思路与代码参考hhh 算法简述 粒子群算法( ...

  5. 【项目实战】Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 粒子群优化算法(Particle Swarm optimizat ...

  6. 9.群智能算法及其应用: 粒子群优化算法及应用, 蚁群算法及其应用

    本文内容为浙江工业大学王万良慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到CSD ...

  7. 智能算法系列之粒子群优化算法

      本博客封面由ChatGPT + DALL·E 2共同创作而成. 文章目录 前言 1. 算法思想 2. 细节梳理 2.1 超参数的选择 2.2 一些trick 3. 算法实现 3.1 问题场景 3. ...

  8. Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战

    Particle Swarm Optimization 粒子群算法(PSO算法) 定义 粒子群算法,又称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近 ...

  9. 粒子群优化算法分布式电源选址定容 matlab源代码,分析了分布式电源接入配电网前后对网络损耗的影响,在此基础上提出采用混合模拟退火算法的改进粒子群优化算法进行分布式电源选址和定代码按照高水平文章复现

    (1)粒子群优化算法分布式电源选址定容 如图12 matlab源代码,代码按照高水平文章复现,保证正确 分析了分布式电源接入配电网前后对网络损耗的影响,在此基础上提出采用混合模拟退火算法的改进粒子群优 ...

  10. 【优化算法】粒子群优化算法

    粒子群优化算法 粒子群优化算法简介 粒子群优化算法原理 粒子群优化算法的数学描述 粒子群优化算法框架 PySwarms:Python中粒子群优化的研究工具包 PySwarms快速使用 示例:编写自己的 ...

最新文章

  1. 计算机网络实验二交换机配置Cisco,思科实验1计算机和交换机的ip地址设置
  2. 计算机基础及wps office应用_全国2019年4月自考00018《计算机应用基础》试题
  3. xshell 安装yum_本地yum源配置及Xshell连接
  4. Prometheus Targets动态配置
  5. Nginx配置统计页面及访问控制(htpasswd和客户端IP)
  6. 关于京东抢票的一个BUG
  7. 台式计算机如何上无线网络,台式电脑如何实现无线上网
  8. 计算机主板电池没电什么情况,主板电池没电会怎么样-电脑主板坏了会出现什么样的情况?...
  9. 问世到现在电子计算机的性能,一级计算机练习.doc
  10. C语言中逗号运算符和逗号表达式
  11. Windows10 安装软件时提示“ the error code is 2503/2502”错误解决办法
  12. 美国麦当劳“四川辣酱”将再次回归;“澳大利亚制造”巧克力要崛起;中国食品行业首个“零碳工厂”诞生 | 食品饮料新品...
  13. 关于电脑插上耳机后扬声器与耳机同时播放声音。
  14. 架构师教大家如何用SpringBoot技术快速实现天气预报系统
  15. C语言易错点汇总(二)
  16. VPC5021电流模式 PWM 控制器 3uA 超低启动电流
  17. 以太坊钱包2-Android-转账(ETH)
  18. netty框架及原理解析
  19. 完美匹配-匈牙利算法(Hungarian method Edmonds)讲解
  20. 联想ThinkPad E560 按F5 F6调节屏幕亮度,将调节屏幕亮度的按钮改为fn+F5 F6控制

热门文章

  1. c语言中math的作用,C语言Math函数库简介
  2. RF模型(随机森林模型)详解
  3. 如何设置pycharm代码字体
  4. STM32使用MCUISP下载程序教程
  5. 华为交换机学习指南基于策略划分VLAN
  6. 【如何注销CSDN账号】说容易也容易,说难也难
  7. idea启动报错,插件报错:internal error please refre to http://jb.gg/ide/critical-starup-error
  8. JPL星历文件de405下载方法
  9. 量子力学概论_科学网—《量子力学导论》潘必才 - 中国科大出版社的博文
  10. SQL Server 2005安装时提示“服务无法启动”