如何使用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 的代数建模接口要容易得多,即 Vars 而不是 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)