Gurobipy:矩阵约束
Gurobipy: matrix constraints
设 x
为定义为 x = M.addMVar(shape = n, vtype = GRB.BINARY, name = "x")
的 n 个变量的向量。设 A
为 n×n 矩阵。令 v
为由正整数组成的 n×1 常数向量。我感兴趣的约束:
np.multiply(v, x) <= A @ x
但是,当我在 gurobi 中添加此约束时:
M.addConstr(np.multiply(v, x) <= A @ x, name = "c1")
它给出错误:
File "src/gurobipy/model.pxi", line 3325, in gurobipy.Model.addConstr
File "src/gurobipy/model.pxi", line 3586, in gurobipy.Model.addMConstr
TypeError: must be real number, not MLinExpr
知道为什么会这样吗?我已经研究了几个小时的解决方案。我目前的猜测是,Gurobi 对不平等两边出现的变量都不满意。但是,我还没有找到解决方法。
这将不起作用,因为 Gurobi Python 接口中的矩阵表示需要规范形式 Ax = b。所以你需要将v合并到A矩阵中,你的代码变成这样:
A2 = A-v*np.eye(n)
M.addConstr(A2 @ x >= 0)
设 x
为定义为 x = M.addMVar(shape = n, vtype = GRB.BINARY, name = "x")
的 n 个变量的向量。设 A
为 n×n 矩阵。令 v
为由正整数组成的 n×1 常数向量。我感兴趣的约束:
np.multiply(v, x) <= A @ x
但是,当我在 gurobi 中添加此约束时:
M.addConstr(np.multiply(v, x) <= A @ x, name = "c1")
它给出错误:
File "src/gurobipy/model.pxi", line 3325, in gurobipy.Model.addConstr
File "src/gurobipy/model.pxi", line 3586, in gurobipy.Model.addMConstr
TypeError: must be real number, not MLinExpr
知道为什么会这样吗?我已经研究了几个小时的解决方案。我目前的猜测是,Gurobi 对不平等两边出现的变量都不满意。但是,我还没有找到解决方法。
这将不起作用,因为 Gurobi Python 接口中的矩阵表示需要规范形式 Ax = b。所以你需要将v合并到A矩阵中,你的代码变成这样:
A2 = A-v*np.eye(n)
M.addConstr(A2 @ x >= 0)