粒子分辨率有限的粒子群优化

时间:2019-09-27 10:53:04

标签: python algorithm optimization particle-swarm

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

我的问题有6个控制变量,除了主要目标函数外,它还具有一些约束条件。目标/适应度函数是在外部模拟中计算的,因此每次测试新粒子时,都会打开,运行sim程序,导出数据,然后将其导入Python。使用20个群集,每个群集测试大约需要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次迭代以下(尽管每次粒子更新时,此假设均采用唯一值),我不总是这样)。

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

1 个答案:

答案 0 :(得分:0)

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

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

这就是说,您的低分辨率粒子可能不是完美的解决方案,但是对于最终性能,您可能不会受到太多的粒子分辨率限制。在如此大的搜索空间中,您很有可能会收敛到某个局部最小值。我怀疑每个粒子丢失的分辨率会影响太大。

详尽搜索

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

可能不是确定的来源,但是remaining life of the Sun大约只有5亿年年,因此,如果您想在太阳死后进行详尽的搜索,则需要走得更快一些系统。