使用Gurobi Python编写双索引约束时遇索引错误求助
解决Gurobi约束中"list indices must be integers or slices not tuple"错误
错误原因:你在约束中使用了b[i,j]这种元组索引方式,但此时b实际是Python列表(而非numpy数组)。列表不支持元组索引,必须用b[i][j]这种逐层索引的形式。
两种解决方法:
方法1:确保b是numpy数组
在添加约束前,确认b已经被正确转换为numpy数组:
- 检查转置步骤:尽量使用numpy原生的转置方法(如
b = b.T),而非基于列表的转置操作(如zip(*b)),避免意外将b转回列表。 - 在添加约束前打印
type(b),如果输出不是numpy.ndarray,重新执行b = np.array(b)完成转换。
方法2:调整列表索引方式
如果b确实需要保持为列表结构,将约束中的b[i,j]改为b[i][j]:
model.addConstrs((gp.quicksum(b[i][j] * x[i, j, k] for i in I) <= B * z[j, k] for j in J for k in K), name="constraint3")
额外建议
使用numpy处理矩阵操作时,尽量全程保持numpy数组类型,避免在列表和numpy数组之间反复转换,减少此类索引错误的概率。
内容的提问来源于stack exchange,提问作者Marià
相关产品推荐
相关产品推荐

