我已经阅读了很多有关此问题的问题,但是我还没有弄清楚如何为自己解决问题。 基本上,我需要为LP问题添加很多约束,但是添加约束需要几分钟。 看来问题是,我在每个循环中都使用了“ prob + =”,但是我不确定如何解决这个问题。 我的代码如下:
for i in range(0,numpy.size(Aeq,0)-1):
prob += lpSum(Aeq.getrow(i).toarray()*x)==0
prob += lpSum(Aeq.getrow(numpy.size(Aeq,0)-1).toarray()*x)==1
任何帮助加快速度的工作都将受到赞赏。
答案 0 :(得分:0)
for循环似乎只是在执行矩阵乘法,在这种情况下,您应该可以使用子矩阵并对其进行数学运算。
我不确定您是否可以在PuLP中做到这一点,但是您当然可以在CVXPY中做到这一点:
import cvxpy as cp
import numpy as np
Aeq = np.random.random((10,10))
x = cp.Variable(10)
constraints = [
cp.sum(Aeq[:-1,:]@x, axis=1)==0,
cp.sum(Aeq[-1,:]@x)==1
]
JuMP可能是另一种需要研究的技术。