У меня есть следующий фрагмент кода в Python для добавления нового ограничения:
for o in range(num_origins):
for d in range(num_destinations):
for i in range(num_launchpads):
for j in range(num_launchpads):
model.addConstr(ground_time_min[o][d] >= ground_time_min[o][i] + (Y[o][d][i][j] - 1) * M)
Только Y[o][d][i][j]
является переменной. ground_time_min
- это параметр, а M - большое число, также параметр.
Когда я запускаю это, я получаю следующую ошибку:
TypeError: unsupported operand type(s) for -: 'bool' and 'NoneType'
Я знаю:
- Типы не являются ни bool, ни None. Итак, это не проблема.
ground_time_min
с левой стороны вызывает проблему.
Мне удалось решить проблему, используя один из этих двух подходов:
- Смещена левая сторона вправо:
model.addConstr(0 >= ground_time_min[o][i] - ground_time_min[o][d] + (Y[o][d][i][j] - 1) * M)
Использовался другой синтаксис:
model.addConstr(ground_time_min[o][d], GRB.GREATER_EQUAL, ground_time_min[o][i] + (Y[o][d][i][j] - 1) * M)
В документации сказано:
Левая сторона для нового ограничения. Может быть константой, Var, LinExpr, QuadExpr или TempConstr.
Итак, я не уверен, что не так с ограничением, сформулированным изначально. Кто-нибудь знает, что здесь происходит?
Спасибо.