【发布时间】: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