【问题标题】:Particle Swarm Optimisation with limited particle resolution具有有限粒子分辨率的粒子群优化
【发布时间】:2026-01-12 19:25:01
【问题描述】:

我正在使用 Python 进行大型电力系统优化项目,我正在使用粒子群优化 (PSO) 优化 6 个系统控制参数。我正在努力寻找一个 PSO 包,它实际上可以满足我的需要。我目前正在使用“pyswarm”包。

我的问题有 6 个控制变量,除了主要目标函数之外,它还有一些约束。目标/适应度函数是在外部模拟中计算的,因此每次测试新粒子时,都会打开并运行 sim 程序,导出数据然后导入 Python。使用 20 的 swarm 大小,每个 swarm 测试大约需要 16 秒的过程。因此,对于典型的 1000 次迭代优化,优化时间为 16,000 秒,或 4.4 小时。我有 450 个场景需要优化,按照目前的速度需要 82 天。显然减少迭代会加快计算速度,但有些场景需要一段时间才能收敛,所以如果可能的话,我想保持高迭代。

我尝试过的所有 PSO 实现都将新粒子生成为浮点数,具有 6+ 小数点分辨率。由于我正在优化物理系统中的参数,我只需要精确到小数点后 2 位的结果。

为了加快优化速度,我想使用一个 PSO 包,您可以在其中设置粒子分辨率,即只尝试带 2 个小数位的值。我认为这应该会使一切变得更快,因为可能值的范围大大减少了。我使用过 pyswarms、pyswarm 和 psopy,但还没有找到任何可以做到这一点的包。有谁知道我怎么能实现这个?我不想编写自己的 PSO 实现,只是为了使用现有的包。

编辑:澄清一下,我的逻辑是,目前,pyswarm 为粒子生成浮点值,分辨率为小数点后 6 位,因此对于边界范围为 20 的粒子,有 2000 万个可能的值。如果粒子生成被限制为小数点后 2 位,那么同一个粒子将只有 2000 个可能的值。使用 20 的群体大小,这意味着在 100 次迭代中,该粒子的每个可能值都将被测试,因此该解决方案可能会在 100 次迭代中收敛(尽管这假定每次更新粒子时都有唯一值,这我不相信总是这样)。

这个假设是正确的,还是我的逻辑有缺陷?

【问题讨论】:

  • 你在Data Science SE 的运气可能会更好,这样的问题可能是热门话题
  • 感谢您的指导,我现在意识到我的问题太宽泛了。我已经用一个更具体的问题更新了 OP,希望它对这个董事会来说更有意义。如果没有,我将前往数据科学/交叉验证。
  • 如果您可以添加一个缓存您的适应度函数结果的层(使用您首选的 2 位精度四舍五入作为查找),那么更高的模拟精度应该不是大问题。

标签: python algorithm optimization particle-swarm


【解决方案1】:

为了解决您的编辑问题(有点长,因此没有评论),例如,您不仅有 20 的范围,并且在该范围内表示了 2000 个可能的值。你有六个控制变量。每个控制变量都有一些您想要搜索的有效范围,并且您的粒子分辨率可以表示该范围内的一些可能值。

假设每个粒子可以代表 每个 控制变量的 2000 个不同的可能值,即 2000^66.4 * 10^19(很大)每个粒子要表示的参数的可能组合。我认为您不可能详尽地搜索整个范围(请参阅最后一节)。

也就是说,您的低分辨率粒子可能无法达到完美的解决方案,但您可能不会受到粒子分辨率的太多限制,以实现最终性能。在如此大的搜索空间中,您更有可能收敛到某个局部最小值;我怀疑每个粒子丢失的分辨率会不会太重要。

详尽搜索

实际上,大数字很有趣!搜索整个参数空间需要多长时间?假设您能够将评估时间加快 1000 倍,因此处理每个群体只需要 0.016 秒。即每 0.016 秒或 0.0008 秒(800 微秒)猜测 20 次。这仍然是 5.12e16 秒或 1.6 万亿年才能彻底搜索这个空间。

可能不是一个确定的来源,但remaining life of the Sun 只有大约 50 亿年,所以如果你想在太阳系死亡之前彻底搜索,你需要走得更快。

【讨论】:

    最近更新 更多