为了添加新的约束,我在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。
因此,我不确定最初制定的约束有什么问题。有人知道这里发生了什么吗?
谢谢。