Python Gurobi中覆盖约束的覆盖矩阵
设C是一个集合覆盖问题的二元覆盖矩阵,我想把它转换成Gurobi中适当的覆盖约束。我已经设法使用Python Gurobi中覆盖约束的覆盖矩阵,python,sparse-matrix,linear-programming,gurobi,integer-programming,Python,Sparse Matrix,Linear Programming,Gurobi,Integer Programming,设C是一个集合覆盖问题的二元覆盖矩阵,我想把它转换成Gurobi中适当的覆盖约束。我已经设法使用scipy.csr\u matrix使其工作,但过程似乎很慢。我想知道是否有更有效的方法 # Convert coverage to sparse matrix csr_cover = csr_matrix(C.astype(bool)) cover_rows = np.split(csr_cover.indices, csr_cover.indptr)[1:-1] # add facility c
scipy.csr\u matrix
使其工作,但过程似乎很慢。我想知道是否有更有效的方法
# Convert coverage to sparse matrix
csr_cover = csr_matrix(C.astype(bool))
cover_rows = np.split(csr_cover.indices, csr_cover.indptr)[1:-1]
# add facility coverages to the covering constraints
for i in range(numDemands):
m.addConstr(quicksum(X[j] for j in range(numSites) if i in cover_rows[j]) >= 1)
与上述方法相比,这似乎能更快地构建约束:
cover_rows = [np.nonzero(t)[0] for t in C]
for i in range(numDemands):
m.addConstr(quicksum(X[j] for j in cover_rows[i]) >= 1)
不足为奇;Python if过滤器将执行更多迭代