Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有有限粒子分辨率的粒子群优化_Python_Algorithm_Optimization_Particle Swarm - Fatal编程技术网

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

Python 具有有限粒子分辨率的粒子群优化,python,algorithm,optimization,particle-swarm,Python,Algorithm,Optimization,Particle Swarm,我正在用Python进行一个大型电力系统优化项目,我正在使用粒子群优化(PSO)优化6个系统控制参数。我正在努力寻找一个PSO软件包,实际上可以做我需要的。我目前正在使用“pyswarm”软件包 我的问题有6个控制变量,除了主要目标函数外,还有约束条件。目标/适应度函数是在外部模拟中计算的,因此每次测试新粒子时,sim程序都会打开、运行、数据导出然后导入Python。每一个群体测试大约需要16秒的时间,群体大小为20。因此,对于典型的1000次迭代优化,优化时间为16000秒,或4.4小时。我有

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

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

我尝试过的所有PSO实现都以浮点形式生成新粒子,分辨率为6+小数点。因为我在优化物理系统中的参数,所以我只需要小数点后2位的结果

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

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

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

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

假设每个粒子可以为每个控制变量表示2000个不同的可能值,即每个粒子表示的参数的可能组合。我认为你不可能穷尽地搜索整个范围(见最后一节)

所有这一切都意味着,较低分辨率的粒子可能不会得到完美的解决方案,但最终性能可能不会受到粒子分辨率的太多限制。在如此大的搜索空间中,很可能会收敛到某个局部极小值;我怀疑每一个粒子的分辨率损失会有太大的影响

穷尽搜索 事实上,大数字很有趣!搜索整个参数空间需要多长时间?假设您能够将评估时间缩短1000倍,因此处理每个群集只需0.016秒。即每0.016秒猜20次,或每猜0.0008秒(800美元)。这仍然是
5.12e16
秒或1.6万亿年来彻底搜索太空


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

你可能会有更好的运气,因为这样的问题可能在主题上。谢谢方向,我现在意识到我的问题太广泛了。我已经用一个更具体的问题更新了OP,希望它更适合这个董事会的主题。如果没有,我将转向数据科学/交叉验证。如果可以添加一个层来缓存适应度函数结果(使用首选的2小数点精度舍入作为查找),那么模拟的更高精度应该不是一个大问题。