如何使用Gurobi将Python中的变量矩阵乘以系数矩阵
How to multiply variable matrix by coefficient matrix in Python, using Gurobi
我想将下面的两个矩阵相乘并为我的模型设置为 objective:
m = gp.Model("matrix")
x = m.addMVar((9, 9), vtype=GRB.BINARY, name="x")
c = np.random.rand(9,9)
m.setObjective(x @ c, GRB.MINIMIZE)
这是我要实现的目标
这给了我以下错误:
Error code -1: Variable is not a 1D MVar object
我该如何解决?我想 Gurobi 不接受 2D Mvar 对象乘法
正如评论中已经提到的,请注意,两个矩阵的乘积又是一个矩阵,计算的 objective 需要是一个标量,所以这可能不是您想要做的。根据你的图片,你的 objective 是一个简单的线性表达式,而不是矩阵乘积。因此,使用 Gurobi 的代数建模接口要容易得多,即 Var
s 而不是 MVars
:
import gurobipy as gp
from gurobipy import GRB, quicksum as qsum
import numpy as np
M, N = 9, 9
m = gp.Model("matrix")
x = m.addVars(M, N, vtype="B", name="x")
c = np.random.rand(M, N)
m.setObjective(qsum(c[i,j]*x[i,j] for i in range(M) for j in range(N)), GRB.MINIMIZE)
我想将下面的两个矩阵相乘并为我的模型设置为 objective:
m = gp.Model("matrix")
x = m.addMVar((9, 9), vtype=GRB.BINARY, name="x")
c = np.random.rand(9,9)
m.setObjective(x @ c, GRB.MINIMIZE)
这是我要实现的目标
这给了我以下错误:
Error code -1: Variable is not a 1D MVar object
我该如何解决?我想 Gurobi 不接受 2D Mvar 对象乘法
正如评论中已经提到的,请注意,两个矩阵的乘积又是一个矩阵,计算的 objective 需要是一个标量,所以这可能不是您想要做的。根据你的图片,你的 objective 是一个简单的线性表达式,而不是矩阵乘积。因此,使用 Gurobi 的代数建模接口要容易得多,即 Var
s 而不是 MVars
:
import gurobipy as gp
from gurobipy import GRB, quicksum as qsum
import numpy as np
M, N = 9, 9
m = gp.Model("matrix")
x = m.addVars(M, N, vtype="B", name="x")
c = np.random.rand(M, N)
m.setObjective(qsum(c[i,j]*x[i,j] for i in range(M) for j in range(N)), GRB.MINIMIZE)