Python 添加许多约束时,纸浆速度非常慢

Python 添加许多约束时,纸浆速度非常慢,python,linear-programming,glpk,pulp,Python,Linear Programming,Glpk,Pulp,我尝试使用纸浆,但添加4000个约束(67个变量)需要50秒。解决这个问题只需要几分之一秒 我们想用纸浆来轻松地测试一大组问题的几个解决方案 需要这么长时间吗?直接使用PyGLPK只需要几分之一秒,包括设置和求解,所以我希望不会。我能做些什么来提高纸浆中这一步骤的效率 更新 我的约束矩阵非常稀疏,通过只包含非零系数,我能够将这个特定问题的设置时间减少到4或5秒。我仍然能够编写自己的.lp或.mps格式的文件,用cbc或glpsol子流程解决问题,并比PuLP更有效地解析解决方案,这仅仅是因为当

我尝试使用纸浆,但添加4000个约束(67个变量)需要50秒。解决这个问题只需要几分之一秒

我们想用纸浆来轻松地测试一大组问题的几个解决方案

需要这么长时间吗?直接使用PyGLPK只需要几分之一秒,包括设置和求解,所以我希望不会。我能做些什么来提高纸浆中这一步骤的效率


更新


我的约束矩阵非常稀疏,通过只包含非零系数,我能够将这个特定问题的设置时间减少到4或5秒。我仍然能够编写自己的.lp或.mps格式的文件,用cbc或glpsol子流程解决问题,并比PuLP更有效地解析解决方案,这仅仅是因为当PuLP需要几秒钟时,我可以在几毫秒内编写输入文件。我仍然不知道为什么会这样。

我没有足够的代表发表评论

但你有没有看过这个:

问题是:

"The problem is solved in less than 0.5 second.
However setting it up with PULP takes more than 10 seconds. "
这似乎也是您报告的内容。解决方案是不使用+=或求和(…)运算符,而是如链接中所述:

yeah using the += operator with pulp is really slow, as is using sum() 
instead of lpSum()

因此,您可能要将约束一次添加到纸浆中,而不是首先构建约束列表,然后在最后将约束添加到纸浆中?

我遇到了一个类似的问题,我在目标函数中使用了一个包含>10000个变量的表达式。根本原因与最初的海报上看到的相同。在
pulp.LpVariable
数组上使用
sum
比。基于谷歌小组在公认答案中的讨论,我能够使我的代码运行得更快。我知道这是一个老问题,但会包括一些抽象代码的不耐烦

最初的目标是:

sum([x * k for x in xs] + ys)
其中,
xs
纸浆.LpVariable
的列表,
k
是浮点常量,
ys
纸浆.LpVariable
的另一个列表

更快的版本是:

pulp.LpAffineExpression([(x, k) for x in xs] + [(y, 1.0) for y in ys])

我没有准确地计算两个版本的时间。为了了解时差,在运行慢速版本时,我能够在互联网上搜索为什么pulp会如此缓慢,找到这个StackOverflow问题,阅读链接的讨论,并在表达式计算完成之前更新代码。第二个版本需要几秒钟。

您能分享一下将4000个约束添加到LP中的PALL代码片段吗?请您评论一下这个问题:谢谢。我可能仍然有那个代码,如果有的话,我会回去看看。是的,我用了
lpSum
,但我也用
+=
来添加约束。你能用另一种方法发布代码吗?所以,似乎正在开发一个补丁,只需使用类的iadd就可以允许“+=”。这一点尚未得到《纸浆》一书作者的证实,但似乎很有希望。请看一下这个:Plase post代码,它解决了速度问题。从谷歌集团来看,我不清楚自己做错了什么。我添加约束的速度也很慢。为我添加4000个需要30分钟。