当添加许多约束时,纸浆非常慢

2024-09-19 14:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用PuLP,但是添加4000个约束(有67个变量)需要花费50秒。解决这个问题只需几秒钟。在

我们希望使用PuLP轻松地测试一系列问题的多个解算器。在

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


更新

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


Tags: 文件格式时间mps纸浆pulp算器效率
2条回答

我没有足够的代表来评论。在

但你看过这个吗:

https://groups.google.com/forum/#!topic/pulp-or-discuss/p1N2fkVtYyM

问题是:

"The problem is solved in less than 0.5 second.
However setting it up with PULP takes more than 10 seconds. "

这似乎也是你所报告的。解决方案是不使用+=或sum(…)运算符,而是如链接中所述:

^{pr2}$

所以,也许你一次只向PuLP添加约束1,而不是先构建约束列表,然后在最后向PuLP添加约束?在

我也遇到了类似的问题,我在目标函数中使用了一个包含超过10000个变量的表达式。根本原因与最初的海报锯是一样的。在一个pulp.LpVariable数组上使用sum与{a1}相比真的很慢。基于Google小组在接受答案中的讨论,我可以让我的代码运行得更快。我知道这是一个老问题,但将包括一些抽象的代码为不耐烦。在

最初的目标是:

sum([x * k for x in xs] + ys)

其中xspulp.LpVariable的列表,k是浮点常量,ys是{}的另一个列表。在

更快的版本是:

^{pr2}$

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

相关问题 更多 >