MODEL.setObjective(gurobipy.quicksum((x[i,j,c] * self.C1 * (abs(t[j,c].getValue() - self.DueDate[j])) File src\gurobipy\var.pxi:125 in gurobipy.Var.__getattr__ File src\gurobipy\var.pxi:153 in gurobipy.Var.getAttr File src\gurobipy\attrutil.pxi:35 in gurobipy.__getattr File src\gurobipy\attrutil.pxi:23 in gurobipy.__getattrinfo AttributeError: 'gurobipy.Var' object has no attribute 'getValue'
时间: 2023-06-19 22:07:55 浏览: 49
这个错误提示表明,在你的代码中,某个 gurobipy.Var 对象并没有 getValue() 方法,因此无法调用该方法。可能的原因是,你没有正确地初始化该变量,或者没有在变量的声明中指定它们的类型。你需要检查代码中与该变量相关的部分,以确保正确地声明和初始化变量,并确保变量具有正确的类型。你也可以查看 gurobipy.Var 的文档,以了解哪些方法和属性可用。
相关问题
MODEL.setObjective(gurobipy.quicksum((x[i,j,c] * self.C1 * gurobipy.quicksum(gurobipy.max_(0,t[j,c] - self.DueDate[j])) File src\gurobipy\gurobi.pxi:3631 in gurobipy.quicksum TypeError: 'GenExprMax' object is not iterable
这错误提示是因为在你的代码中使用了 `gurobipy.max_()` 这个函数,它返回的是一个 `GenExprMax` 对象,而不是一个可迭代的对象。因此在调用 `gurobipy.quicksum()` 函数时就会抛出这个错误。
你需要将 `gurobipy.max_()` 函数替换为一个可以迭代的函数,例如 `gurobipy.max_(0,t[j,c] - self.DueDate[j])` 可以替换为 `max(0, t[j,c] - self.DueDate[j])`。这样就可以避免这个错误。
File ~\.spyder-py3\gurobi_vrp\gurobi再次修改.py:98 in <genexpr> MODEL.setObjective(gurobipy.quicksum((x[i,j,c] * self.C1 * (abs(t[j,c] - self.DueDate[j])) TypeError: bad operand type for abs(): 'gurobipy.LinExpr'
这错误发生在你使用了一个 `gurobipy.LinExpr` 对象作为 `abs()` 函数的参数。这是不允许的,因为 `abs()` 只能用于数字类型的参数。
要解决这个错误,你需要先计算 `abs()` 函数的参数的值,并将其作为数字传递给 `abs()` 函数。你可以使用 `getValue()` 方法来获取 `gurobipy.LinExpr` 对象的值。例如,如果你想计算 `t[j,c] - self.DueDate[j]` 的绝对值,你可以这样做:
```
abs_value = abs(t[j,c].getValue() - self.DueDate[j])
```
然后,你可以将 `abs_value` 作为参数传递给 `setObjective()` 方法,如下所示:
```
MODEL.setObjective(gurobipy.quicksum((x[i,j,c] * self.C1 * abs_value)))
```
这应该可以解决这个错误。