分析印度杂志
现在读
Python粒子群优化教程
分析印度杂志

Python粒子群优化教程

有几种方法可以用来最大化或最小化一个函数以找到最优值。尽管事实是有几种优化方法可以使用,没有一个人被认为是每种情况的理想选择。因此,每个优化方法都有自己的优点和局限性。粒子群优化(PSO)也是属于自然启发计算领域的优化技术。这是一种以直接的方式搜索空间中最佳解决方案的算法。这是通过迭代地尝试改进关于给定质量措施的候选解决方案来优化问题的方法。在本文中,我们将详细讨论粒子群优化以及其工作和不同的变体。我们还将使用Python Package Pyswarms学习PSO的动手实现。我们将涵盖本文中的以下重点。

表的内容

  1. 粒子群优化(PSO)
  2. 内部工作
  3. 算法的变体
  4. 使用pyswarm实现PSO

让我们从理解粒子群优化算法开始讨论。

注册AWS数据和分析结果>>

粒子群优化(PSO)

在20世纪90年代初开发了一些关于动物群体社会行为的研究。这些调查显示,特定群体,即鸟类和鱼类中的一些生物能够在他们自己中传播知识,并且这种能力为这些动物提供了显着的生存益处。受到这项研究的启发,进行肯尼迪和埃伯哈特1995年提出了PSO算法,这是一种适于优化非线性连续函数的元启发式算法。该算法的灵感来自群体智能的概念,这是普遍表现在动物群体,如鸟群和鱼群。

正如在原始研究中所述,鱼类或一群鸟类在一个群体中移动“可能会受益于所有其他成员的经验。”换句话说,如果一只鸟类在随机寻找食物时,羊群中的所有鸟都可以分享他们的发现并帮助整个鸡群获得最佳的狩猎。虽然我们可能模仿一群鸟类的运动,但我们也可以假设每只鸟都协助我们在高维解决方案空间中找到最佳解决方案,并通过羊群找到的最佳解决方案是空间中最好的解决方案.

PSO的内部工作

研究人员认为,群体行为在探索行为(搜索搜索空间的更大一部分)和利用行为(搜索空间的更小区域以接近(潜在的局部)最优之间是不同的。自粒子群算法诞生以来,研究人员认为,粒子群算法及其参数的设计必须在探索和开发之间达到适当的平衡,以避免早期收敛到局部最优,同时确保较好的收敛速度。

收敛

在粒子群算法的收敛中,无论群如何运行,当所有的个体最优时,都收敛到一个局部最优P或者,也是蜂群最著名的位置G逼近问题的局部最优。

粒子群算法的拓扑结构可能会影响其探索和利用的能力;也就是说,由于拓扑结构的不同,算法对同一优化问题的收敛速度和避免过早收敛的能力也会有所不同,因为拓扑结构决定了每个粒子的搜索信息共享速度或方向。两种最常见的拓扑结构是全局星形和局部环形。

具有全局星型结构且所有粒子都连接在一起的粒子群中平均距离最短,而具有局部环型结构且每个粒子都连接在附近的两个粒子的粒子群中平均距离最高。

实验研究考察了两种常用的结构,全局星型结构(图1a)和局部环型结构(图1b)。每组有16个粒子。需要强调的是,局部结构中最接近的粒子主要是由粒子指数决定的。

自适应机制

可以在没有必要的情况下实现自适应机制,而是在收敛('开发')和发散之间的权衡('探索')之间的必要性。自适应粒子群优化(阿普索犬)的性能优于正则粒子群算法(PSO)。APSO具有更快的收敛时间,可以在整个搜索空间内进行全局搜索。

它允许实时修改惯性权重、加速度系数和其他计算因素,从而提高搜索效率和效率。APSO还可以对全局最优粒子进行操作,跳出最可能的局部最优。

算法的变体

即使是一个简单的PSO算法也可以具有很多不同的变化。有各种方法可以初始化粒子和速度(例如,从零速度开始),只更新p以及整个群更新后的G,等等。

梯度算法

构建基于梯度的PSO算法,可以将PSO算法高效探索多个局部最小值的能力与基于梯度的局部搜索算法有效计算精确局部最小值的能力相结合。

PSO算法用于基于梯度的PSO算法,探索几个局部最小值,并在局部最小吸引力的吸引力中发现一个位置。然后使用高效的基于梯度的本地搜索技术正确地定位深层局部最小值。

混合算法

为了提高优化性能,正在引入新的和更高级的PSO变体。该研究存在某些发展,例如开发混合优化方法,该方法将PSO与其他优化器组合,例如将PSO与基于生物地基的优化组合并包括有效的学习机制。

使用pyspwarm实现粒子群优化

pyswarm是一个基于python的粒子群优化工具。它被群体智能研究人员、实践者和学生使用,他们希望使用声明性高级接口将PSO应用于他们的问题。pyswarm提供了与群优化的交互,以及与PSO的基本优化。

pyswarm在高水平上实现了多粒子群优化技术。因此,它渴望用户友好和适应性强。还可以使用支持模块来帮助您解决优化问题。

另请参阅

在本节中,我们将使用Pyswarms的功能API实现全球最佳优化器pyswarms.single.GBestPSO。我们还将以2D和3D的方式绘制函数。

PySwarm可以直接安装pip安装pyswarms

球面函数的优化
#导入pyswarms从pyswarms.utils.functions导入pys.functions导入single_obj作为fx

我们将努力改善球体功能。让我们现在在优化器中放置一些任意设置。至少,优化有三个步骤:

  • 要将群集配置为字典,请设置超参数。
  • 将字典和相关输入一起传递,以创建优化器的实例。
  • 调用优化()方法,并告诉它在变量中保存最佳成本和位置。
#设置超参数选项= {'c1': 0.5, 'c2': 0.3, 'w':0.9}GlobalBestPSO(n_particles=10, dimensions=2, options=options) # Perform optimization cost, pos = optimizer.optimize(fx.sphere, iters=1000)

这将运行优化1000次迭代之前返回的群体的最佳成本和位置。

可视化功能

Pyswarms包括用于可视化您的群体行为的工具。这些是在Matplotlib的顶部构建的,从而产生了用户友好且高度可定制的图表。绘图仪模块有两个动画方法:绘制轮廓()情节表面()。顾名思义,这些方法可以在二维或三维空间中绘制粒子。

为了绘制球函数,我们应该在我们的群中添加网格。这让我们能够直观地看到粒子与目标函数的关系。通过使用Mesher类,我们可以实现这一点。

进口matplotlib。pyplot作为plt从pyswarm .utils.plotters导入plot_contour, plot_surface从pyswarm .utils.plotters.formatters导入Designer从pyswarm .utils.plotters.formatters导入Mesher

pyswarms.utils.plotters.formatters模块包含许多用于自定义图表和可视化的格式化器。除了Mesher之外,还有一个用于修改字体大小,图表大小等的设计者类,以及用于设置动画延迟和重复的动画类。

2-D图
# Make animation animation = plot_contour(pos_history=optimizer. txt) # Make animation animation = plot_contour(pos_history=optimizer. txt)pos_history, mesher=m, mark=(0,0)) # mark minima animation.save('mymovie.mp4')
三维图
# preprocessing pos_history_3d = m.compute_history_3d(optimizer.pos_history) #调整图形d = Designer(limits=[(-1,1), (-1,1), (-0.1,1)], label=['x-axis', 'y-axis', 'z-axis']) #制作动画animation3d = plot_surface(pos_history=pos_history_3d, mesher=m, Designer =d, mark=(0,0,0)) # mark minima

最后的话

在这篇文章中,通过了解其内部机制如何工作,我们已经看到了PSO背后的理论。此外,我们已经看到了一些变体,除了PSO如何由社区中的不同域中使用。最后,我们通过利用基于Python的Pyswarms图书馆来对PSO进行了动手的经验。

参考文献

你怎么看?

加入我们的不和服务器。加入一个有吸引力的在线社区。加入这里


订阅我们的通讯

通过共享您的电子邮件获取最新的更新和相关优惠。

188BET网页

滚动到顶部
Baidu