我们如何加快纸浆中的循环

时间:2019-06-20 20:29:00

标签: python-3.x numpy linear-programming pulp mixed-integer-programming

“我的问题”有1500个约束和1000个方程,并且解对时间敏感,因此通过for循环将约束添加到我的模型中会花费大量时间。

目前,我正在像

这样的模型中添加约束和方程式
    for i in range(6000): 
        lputpay +=(x[i]*lput(pp[i],pst[i]))  #x[i] is pulp variable

这件事需要60%的时间才能解决,我已经尝试了Cython的Numba,但不支持非python对象。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但没有找到使用Python进行纠正的方法。除非您能够找到一种巧妙的方式来利用库,否则Python是一种慢速语言。由于您已经尝试过Numba和Cython,因此在该方面您已经用尽了大多数可用的选项。

我通过切换语言以使用Julia的JuMP解决了我的问题。朱莉娅并不总是对我很好(我通常可以通过切换到C ++来显着提高速度),但是事实证明,这个问题很完美:表示形式仍然很高级,但是性能却是 比Python好得多。

一个简单的例子:

using JuMP
using Cbc
lpModel = Model(solver = CbcSolver(seconds = 3600))
@variable(lpModel, x >= 5)
@variable(lpModel, y >= 6)
@constraint(lpModel, x+y == 18)
@constraint(lpModel, 20x + 30y <= 470)
@objective(lpModel, Max, 2x + 3y)
status = JuMP.solve(lpModel)
println("Number of Tea Cups: $(getvalue(x))")
println("Number of Coffee Mugs : $(getvalue(y))")