Python中的PSO算法2025年1月5日 | 17 分钟阅读 确实,有几种方法可以让你让一个函数发挥最佳作用,无论你是想让它尽可能小还是尽可能大。网上有各种优化技术,但没有一种是万能的解决方案。每种方法都有其优缺点。 我们将在这里探讨的一种方法是 PSO,即粒子群优化。这种方法属于受自然启发的一组优化技术。PSO 是一种算法,它以简单直接的方式在定义空间内寻找最佳解决方案。它就像一群粒子协同工作,在每个区域中找到最佳结果。这种方法提供了一种有效解决问题的令人兴奋的方式。 你有没有想过我们如何通过不断改进来改进事物?嗯,有一种巧妙的方法可以做到这一点,它被称为粒子群优化 (PSO)。它就像一个数字助手,致力于一个解决方案,使其尽可能达到最佳。这就像拥有一支微型数字粒子团队,协同工作以找到完美的答案。 粒子群优化 (PSO) 是计算机编程和问题解决中一个简单但非常有效的工具。它由 Eberhart 和 Kennedy 于 1995 年创建,灵感来自鸟群和鱼群的集体行为。我有时将 PSO 用于流体模拟 (CFD) 中物体的空气动力学形状改进等任务,但它也适用于机器学习项目。 现在,让我们谈谈 PSO 的作用。它就像一群数字鸟群在寻找问题的最佳解决方案。它不总是能找到绝对最佳的答案,但它非常擅长解决棘手的挑战,尤其是当它们涉及许多变量和复杂情况时。 在这个简短的介绍中,我将向你展示最基本的 PSO 形式。稍后,我将创建一个更高级的教程,深入探讨它的工作原理。 以下是构成基本 PSO 算法的两个主要方程。请注意,当你在方程中看到“k”时,它指的是当前步骤,而“k+1”表示下一步。 粒子在下一步的位置Xik+1 = xik+1 + vik+1 简而言之,PSO 就像一群粒子(想象它们是鸟)协同工作,以找到问题的最佳解决方案。这些方程帮助这些粒子决定下一步去哪里,这个过程重复进行,直到它们尽可能接近最佳解决方案。这就像看着鸟儿一起努力寻找它们的出路,这在计算机科学和优化中非常酷。 粒子群优化 (PSO) 是一种用于解决各种优化问题的算法。它受到鸟类或鱼类群居行为的启发,其中个体根据其他个体的位置调整它们的运动以找到最佳路径。在 PSO 中,每个解决方案都由一个粒子表示,该粒子在解决方案空间中移动以找到最佳解决方案。 在 PSO 中,要考虑的关键因素是“困惑度”和“突发性”。让我们以更简单的方式分解这些概念 现在,让我们深入研究 PSO 方程及其组成部分 粒子速度在 PSO 中,粒子根据以下方程更新其速度和位置 Vik+1 = wkvik + c1r1(pik-xik) + c2r2(pgk-xik) 变量定义
现在,让我们简化方程以确定两个关键术语
这些项有助于引导粒子寻找最佳解决方案。 以下是 PSO 工作原理的简化流程 A) 初始化
B) 优化
Fik ,xik
如果 fik<=fibest 则 fibest=fik 且 pik=xik
如果 fik<=fgbest 则 fgbest=fik 且 pgk=xik
C) 终止 就是这样!正如你从粒子速度方程中看到的那样,PSO 背后的主要思想是粒子不断在三种力之间平衡
这种动态过程有助于他们寻找当前问题的最佳解决方案。 Wk,c1,c2,r1,r2,pgk,pik 当我们谈论粒子群的行为时,我们会考虑一些基本因素。这些因素就像影响粒子运动的力。让我们分解它们
现在,这些力并非都相等。它们被赋予了不同的权重,这意味着有些力比其他力具有更大的影响力。这种加权由“w”、“c1”和“c2”表示。 此外,还涉及一些随机性。想象一下在不同方向上的轻微推或 nudges,由“r1”和“r2”表示。这些随机变化可以使粒子探索新的方法。 因此,根据我们赋予这些力的权重,整个群体(群)的最佳已知位置或粒子的个人最佳位置将对粒子的运动产生重大影响。它假设粒子的初始速度不会使其偏离太多。 有时,如果粒子需要很长时间才能达到共同目标(收敛),可能是因为我们过于重视粒子的初始速度(惯性)。在这种情况下,我们可以减少它以加快速度。但是,我们需要小心,因为过小的惯性可能会使粒子停留在局部最小值处,无法探索更好的解决方案。 在更技术性的表示中,这些力可以表示为具有不同大小的向量,表示每个力在方程中的重要程度。它帮助我们了解这些力如何协同作用以引导群中的粒子。 在我们刚刚讨论的例子中,我们正在谈论一群粒子如何协同工作以找到问题的最佳解决方案。这就像一群机器人试图在一个迷宫中导航。 什么是粒子群优化 (PSO)在 20 世纪 90 年代,研究人员研究了动物在群体中的行为方式。他们发现,像鸟和鱼这样的动物可以在它们的群体中分享信息或相互交流。当它们需要躲避捕食者或智胜其他动物群体时,这会很有帮助。基于这个想法,Kennedy 和 Eberhart 在 1995 年提出了一种叫做 PSO 算法的东西。它是一种特殊的算法,用于解决棘手的问题。他们受到鸟类和鱼类等动物在群体和鱼群中协同工作以实现目标的启发。 研究表明,动物会分享信息,就像分享技巧或智慧一样。这有助于它们弄清楚新的情况,例如寻找食物或躲避捕食者。这就像一群鸟分享它们所看到的东西,这使得找到最佳解决方案变得更容易,这被称为群体智能。 粒子群优化内部工作原理群集行为可分为两种主要类型。第一种类型是“探索行为”,即群体中的动物试图在一个具有许多可能解决方案的广阔区域中寻找某物。第二种类型是“利用行为”,其中群集智能在一个较小、更有前景的区域中寻找最佳解决方案。 粒子群优化 (PSO) 是一种常用于在探索和利用之间找到正确平衡的方法。这种平衡至关重要,因为它确保了群体有效地收敛到最佳解决方案。简单来说,PSO 帮助群体在广泛探索和深入挖掘最佳答案之间找到最佳平衡点。 粒子群优化收敛性PSO(粒子群优化)过程侧重于一组粒子如何聚集在一起以找到最佳解决方案。将这些粒子想象成个体,试图在问题空间中找到通往局部“最佳”点的方法。 现在,这些个体或粒子受到其个人经验(其自身最佳已知位置,表示为 P)和群体集体知识(整个群体中最突出的部分,也称为 G)的引导。目标是让每个个体都达到特定问题的局部最佳点。 PSO 算法探索和利用问题空间的能力取决于这些粒子的连接或结构方式,我们称之为“拓扑结构”。拓扑结构可以被认为是这些个体交流和共享信息的方式。 存在不同的拓扑结构,例如局部环(粒子主要与其直接邻居交互)或全局星形(粒子与所有其他粒子交互)。拓扑结构的选择会影响算法的行为方式。它影响粒子如何搜索解决方案、共享信息、调整速度,甚至决定移动方向。 因此,简单来说,PSO 过程就是一群个体协同工作,每个个体都利用自己的经验和群体的集体知识来找到最佳解决方案。它们如何相互连接和交互(拓扑结构)在解决问题中起着重要作用。 简单来说,让我们谈谈系统中的粒子可以连接的两种方式。想象一群粒子。在一种设置中,所有粒子都像一张网一样连接起来,形成一个全局星形结构。
在另一种设置中,每个粒子仅与其两个最近的邻居连接,从而创建一个局部环形结构。 自适应机制你可以在自适应系统中设置它,以在关注一种解决方案和探索不同可能性之间找到正确的平衡。把它想象成微调策略,使其既高效又对新想法开放。 现在,考虑自适应粒子群优化 (APSO)。它是常规粒子群优化 (PSO) 的更高级版本。很酷的是,APSO 往往更好。它收敛到解决方案的速度更快,并且可以探索整个解决方案空间,使其非常适合全局搜索最佳答案。 粒子群优化的变体有各种 PSO(粒子群优化)算法,其中一些可能非常简单。在这些算法中,粒子及其速度可以以不同的方式启动。该过程涉及更新整个群集并为 Pi 和 G 分配值,以及其他因素。 梯度粒子群优化想象一下我们正在使用一种称为 PSO(粒子群优化)的方法,它擅长在问题中找到不同的局部最小值。现在,如果我们将它与另一种涉及遵循景观斜率(梯度)的技术配对,它有助于我们精确定位特定区域的最低点。PSO 和基于梯度的方法的这种组合很实用,因为 PSO 擅长探索各种可能性,而基于梯度的方法为我们提供了精确找到最低点的精度。本质上,这就像拥有一种擅长侦察潜在解决方案的工具,然后使用另一种工具精确确定最佳解决方案。 混合粒子群优化研究人员正在探索和使用更新、更先进的粒子群优化 (PSO) 变体,以使优化过程更有效。一种有趣的方法是使用混合 PSO,它将传统的 PSO 与另一种优化技术相结合。一个例子是结合基于生物地理学的优化并集成智能学习机制。这种组合增强了现有的 PSO,使其在解决优化问题时更鲁棒和高效。这是一个旨在改进优化技术的持续研究领域。 使用 PySwarms 实现粒子群优化介绍 PySwarms,一个专为群优化设计的基于 Python 的工具。无论你是研究人员、实践者还是学生,这个工具都提供了一种用户友好的方式,通过高级接口应用粒子群优化 (PSO) 算法。PySwarms 是将群优化与基本优化方法无缝集成的理想工具。 通过 PySwarms,你可以实现各种多粒子群优化技术,使其在不同项目中具有高度的适应性和用户友好性。该工具的支持模块进一步增强了解决优化问题的有效性。 现在,让我们探讨如何使用 PySwarm 的函数式 API(称为“pyswarms. Single.GBestPSO”)使用全局最优优化器。我们将以 2D 和 3D 格式可视化结果,从而全面了解优化过程。 要开始,你可以使用以下命令轻松安装 PySwarms 让我们首先引入一些模块 所以,一旦你引入了所有必要的元素,让我们专注于改进我们的球体函数。PSO 粒子群优化很实用。你可以从优化器中任何你喜欢的设置开始。这里有三个主要步骤 调整设置:将超参数想象成我们组的设置。将它们设置为字典——一个带有每个位置标签的列表。 创建优化器:现在,使用该字典创建优化器。这就像为我们的组提供它变得更好所需的指令。 保存最佳结果:“optimize()”函数帮助我们找到最佳结果。此函数将最佳成本和位置保存在变量中。这就像记下最佳分数和它发生的位置一样。 可视化函数PySwarm 拥有各种工具,旨在方便地查看群中发生的情况。将这些工具想象成观察和理解粒子群行为的方式。很酷的是,这些行为是使用 Matplotlib 可视化的,Matplotlib 是一种工具,可以让我们创建不仅高度可定制而且用户友好的图表。 让我们特别谈谈两种方法:“plot_contour()”和“plot_surface()”方法。这些魔咒在 2D 或 3D 空间中绘制粒子,以视觉方式表示发生的情况。但是,要可视化球体函数,我们必须将一个特定的函数(称为网格函数)散布到我们的群中。 想象一下这些工具可以绘制粒子活动的图片。我们有一个名为“Mesher”类的方便工具可以帮助我们做到这一点。它就像一支画家的画笔,让我们能够描绘出我们群体的行为。你猜怎么着?“pyswarms.utils.plotters.formatters”模块通过提供不同的格式来美化你的图表,让你随心所欲。 但等等,还有更多!就像造型师一样,我们还有一个用于视觉表示的“Designer”类。它让我们调整诸如图形大小、字体大小等。对于那些喜欢动画的人,还有一个动画师类,可以让你设置能量重复的次数以及每帧之间的延迟。因此,使用 PySwarm,你不仅可以了解群体的行为,还可以使用工具使其看起来很棒。 因此,准备好探索粒子群优化的世界,并学习如何一步步改进你的解决方案。
因此,在这些例子中,我们比较了机器人在试图穿越迷宫时,是更看重自己的想法还是更看重群体的想法。 当我们查看这两种设置中粒子之间的平均距离时,存在一个令人兴奋的差异。在全局星形结构中,每个人都与所有人相连,粒子之间的平均距离最短。但在局部环形结构中,粒子只与其两个最近的邻居连接,平均长度在整个粒子群中最高。 在图片中,你可以看到差异。左侧是全局星形结构;右侧是局部环形结构。每个组有 16 个粒子,因此它们之间的平均距离有所不同。它们的连接方式显着影响它们平均彼此之间有多近或多远。 Python 中 PSO 算法的优点粒子群优化 (PSO) 就像一种超级智能算法,灵感来自鸟类和鱼类的社交方式。在 Python 或任何其他编程语言中使用它会带来巨大的好处。以下是为什么在 Python 中使用 PSO 是一个明智之举的原因
但是,虽然 PSO 很棒,但它并不是一个万能的解决方案。它的表现如何取决于问题以及你如何设置。因此,尝试不同的设置是一个好主意,以便为你的特定任务找到最佳点。 Python 中 PSO 算法的缺点粒子群优化 (PSO) 是一种广泛用于近似解决优化和搜索问题的算法。虽然它有其优点,但也有缺点,主要是在 Python 或任何编程语言中应用时。让我们深入探讨 PSO 算法的一些潜在问题
重要的是要了解 PSO 的成功取决于你正在解决的具体问题。通过仔细的参数调整、针对特定问题的调整或将 PSO 与其他优化技术相结合,可以缓解这些缺点。 结论总而言之,在 Python 中使用粒子群优化 (PSO) 算法是解决优化问题的一种有效且鲁棒的方法。通过尝试设置和尝试不同的方法,我们发现该算法非常擅长探索各种可能性并快速确定最佳解决方案。它可以处理各种问题复杂度和大小,使其适用于许多优化任务。根据特定指标进行测试表明,它可以快速找到解决方案,即使问题变得更大,也能很好地工作。当然,像任何优化工具一样,它也有其挑战,特别是处理局部最优,这就像这些算法中的常见障碍。我们必须思考如何帮助它更好地摆脱这些困境。展望未来,我们可以探索自动设置其参数的方法,以及使其运行更快并处理更大挑战的方法。总的来说,Python 中的 PSO 算法似乎是一个有前途的工具,可以帮助解决许多不同领域的实际问题。随着我们不断研究和改进它,它可能会变得更有价值和更有效地解决棘手的优化问题。 下一主题Python-亲和力传播 |
我们请求您订阅我们的新闻通讯以获取最新更新。