You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gurobipy中定义二维矩阵乘积形式的目标函数

问题解决:Gurobi矩阵乘积目标函数定义报错处理

报错原因

  • 你定义的delta是形状为(6,1)的二维MVar对象,Gurobi的矩阵运算接口要求参与线性运算的向量类变量必须是1维结构,因此触发类型校验错误。
  • 代码中未显式定义单位向量u,运行时还会额外触发变量未定义的报错,需补充对应参数。

修正方案

调整delta的形状为1维,同时确保所有参与矩阵乘法的向量均为1维结构即可,修正后的可运行代码如下:

import numpy as np
import gurobipy as gp
from gurobipy import GRB

D = np.array([[50, 50, 0, 0, 0, 0], [0, 0, 100, 10, 0, 0], [0, 0, 0, 0, 80, 100]])
c = np.array([10, 4, 9, 5, 6, 8])
C = np.diag(c)
# 补充定义长度为3的单位向量u,可根据实际需求调整数值
u = np.array([1/3, 1/3, 1/3])

m = gp.Model("relaxation")
# 将delta定义为1维MVar,长度为6
delta = m.addMVar(shape=6, lb=0.0, ub=1.0, vtype=GRB.CONTINUOUS, name='delta')
# 此时矩阵乘法运算维度完全匹配:u(3,) @ D(3,6) @ C(6,6) @ delta(6,) 结果为标量,可直接作为目标函数
m.setObjective(u @ D @ C @ delta)

相关示例查询渠道

  • Gurobi本地安装路径下的examples/python文件夹中,包含大量mvar开头的示例代码,覆盖各类矩阵运算、目标函数定义的适配场景。
  • Gurobi官方Python API文档中addMVar、setObjective的参数说明与示例部分,可直接查询不同场景下的语法要求。

内容的提问来源于stack exchange,提问作者ryszard eggink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:18:01