Матрица покрытия для покрытия ограничений в Python Gurobi

Пусть C - бинарная матрица покрытия для задачи покрытия множества, и я хочу преобразовать это в соответствующие ограничения покрытия в Gurobi. Мне удалось заставить его работать с помощью scipy.csr_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)

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)
Другие вопросы по тегам