python - Gurobi:使用 addConstrs() 但表达式不正确
问题描述
我是 Gurobi 和 Python 的新手。我正在尝试解决一个简单的混合二进制问题,但是有一些错误。
我将问题定义如下,
我想要变量 u[1,1], u[2,1], u[3,1] 和 u[1,2], u[2,2], u[3,2],与变量 p 的相似性。我想添加上面的约束,但是有一些错误说我的表达不正确。
u=m.addVars([1, 2, 3], [1, 2], vtype=GRB.BINARY)
p=m.addVars(3,2,lb=0.0)
m.addConstrs(p[i,j]<= 30*u[i,j]
for i in range(3)
for j in range(2))
m.addConstrs(p[(i,j)]>=5*u[(i,j)]
for i in range(3)
for j in range(2))
错误是这样的
line 14, in <module>
for i in range(3)
File "model.pxi", line 3062, in gurobipy.Model.addConstrs
File "/Users/Documents/pyexercise/HW4Q1.py", line 15, in <genexpr>
for j in range(2))
KeyError: (0, 0)
谁能帮我这个?谢谢!
解决方案
在 Python 中, usingrange(n)
返回从到的n
数字列表。因此,您的函数会遍历键、、、、和。0
n-1
addConstrs()
(0,0)
(0,1)
(1,0)
(1,1)
(2,0)
(2,1)
但是,u
变量由(1,1)
、(1,2)
、(2,1)
、(2,2)
、(3,1)
和索引(3,2)
:
gurobi> u = m.addVars([1, 2, 3], [1, 2], vtype=GRB.BINARY)
gurobi> u.keys()
<gurobi.tuplelist (6 tuples, 2 values each):
( 1 , 1 )
( 1 , 2 )
( 2 , 1 )
( 2 , 2 )
( 3 , 1 )
( 3 , 2 )
>
您收到 aKeyError
因为约束的索引与变量的索引不匹配。要解决此问题,您可以更改变量的构造u
以匹配变量的构造p
:
gurobi> u = m.addVars(3, 2, vtype=GRB.BINARY)
gurobi> u.keys()
<gurobi.tuplelist (6 tuples, 2 values each):
( 0 , 0 )
( 0 , 1 )
( 1 , 0 )
( 1 , 1 )
( 2 , 0 )
( 2 , 1 )
>
推荐阅读
- php - 为什么我在使用递归时不能在类中使用 obj 返回值?
- javascript - 是否可以使用 Ajax 调用内部函数?
- javascript - 状态从starting变成crash了找不到快递
- architecture - 处理来自 GPS 设备的大量实时数据的最佳方式
- reactjs - 渲染道具时导致意外行为的样式化组件
- ethereum - 创建该地址时如何获取某个地址的块号?
- jquery - 根据下拉列表中的选择值显示 Dropzone.js
- jquery - 如何在angular5中使用jquery .counterUp函数?
- javascript - 如何在javascript中向数组添加新的键和值?
- php - Vue数据不在控制台上显示值,但在组件上显示