Gurobi-addConstr:-:“ bool”和“ NoneType”的不受支持的操作数类型

为了添加新的约束,我在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'

我知道:

  1. 类型既不是bool也不是None。所以,那不是问题。
  2. 左侧的
  3. ground_time_min引起了问题。

我设法使用以下两种方法之一解决了该问题:

  1. 将左侧移动到右侧:
model.addConstr(0 >= ground_time_min[o][i] - ground_time_min[o][d] + (Y[o][d][i][j] - 1) * M)
  1. 使用了另一种语法:
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。

因此,我不确定最初制定的约束有什么问题。有人知道这里发生了什么吗?

谢谢。

colby63 回答:Gurobi-addConstr:-:“ bool”和“ NoneType”的不受支持的操作数类型

您必须为所有目标函数系数定义Gurobi变量。至少ground_time_min[o][d]必须是Gurobi变量。

您应首先按照Gurobi Help中的说明在gurobi上定义变量,然后将这些变量与上面使用的第二种语法一起使用。

您可以在C ++ Integer Programming Example上查看实现示例

本文链接:https://www.f2er.com/3164603.html

大家都在问