“我的问题”有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对象。
答案 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))")