Python 3.x 我们如何加速纸浆中的循环

Python 3.x 我们如何加速纸浆中的循环,python-3.x,numpy,linear-programming,pulp,mixed-integer-programming,Python 3.x,Numpy,Linear Programming,Pulp,Mixed Integer Programming,我的问题有1500个约束和1000个方程,解决方案是时间敏感的,通过for循环向我的模型添加约束需要花费大量时间 目前,我正在为模型添加约束和方程,如 范围(6000)内的i的: lputpay+=(x[i]*lput(pp[i],pst[i])#x[i]是一个变量 这件事占用了解决过程的60%时间,我尝试过Numba、Cython,但不支持非python对象。我也遇到了同样的问题,没有找到使用python纠正它的方法。Python是一种缓慢的语言,除非您能够找到一种巧妙的方法来利用库。既然你

我的问题有1500个约束和1000个方程,解决方案是时间敏感的,通过for循环向我的模型添加约束需要花费大量时间

目前,我正在为模型添加约束和方程,如

范围(6000)内的i的
:
lputpay+=(x[i]*lput(pp[i],pst[i])#x[i]是一个变量

这件事占用了解决过程的60%时间,我尝试过Numba、Cython,但不支持非python对象。

我也遇到了同样的问题,没有找到使用python纠正它的方法。Python是一种缓慢的语言,除非您能够找到一种巧妙的方法来利用库。既然你已经尝试过Numba和Cython,那么你已经用尽了这方面的大部分可用选项

我用朱莉娅的语言解决了我的问题。Julia对我来说并不总是很好(我通常可以通过切换到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))")
使用跳转
使用Cbc
lpModel=Model(解算器=CbcSolver(秒=3600))
@变量(lpModel,x>=5)
@变量(lpModel,y>=6)
@约束(lpModel,x+y==18)

@约束(lpModel,20x+30y为什么需要它?是需要还是其他什么。更新代码示例以实现它很难从剪断的代码中读出潜在的瓶颈。什么是pp、pst,尤其是lput?是简单的随机访问还是更昂贵的调用(例如lput)?假设是随机访问,如果这个循环占主导地位,我希望您的求解时间小于1秒?lput乘以pp和pst,而不是python for循环迭代的瓶颈स 这个例子不是一个约束,你可能可以删除它。