首页 > 解决方案 > 如何使用 Gurobi 在 Python 中将变量矩阵乘以系数矩阵

问题描述

我想将下面的两个矩阵相乘并设置为我的模型的目标:

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)

这是我想要实现的目标

在此处输入图像描述

这给了我以下错误:

错误代码 -1:变量不是一维 MVar 对象

我该如何解决?我想 Gurobi 不接受 2D Mvar 对象乘法

标签: pythonmatrixmultidimensional-arraylinear-programminggurobi

解决方案


正如评论中已经提到的,请注意,两个矩阵的乘积又是一个矩阵,并且评估的目标需要是一个标量,所以这可能不是您想要做的。根据您的图片,您的目标是简单的线性表达式,而不是矩阵乘积。因此,使用 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)

推荐阅读