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

Python中Gurobi添加多维度变量触发AssertionError问题咨询

问题核心原因

你遇到的AssertionError是因为目标系数矩阵penalty_matrix的维度与addVars生成的变量索引维度不匹配:

  • addVars(range(num_s), range(num_p), range(num_d))生成的是三维变量组,维度为(num_s, num_p, num_d),当num_s=2时,共有2×2×2=8个变量;
  • 但你定义的penalty_matrix是二维数组,维度为(num_p, num_d)即2×2,只有4个系数值,无法为每个变量分配对应的目标系数,因此触发断言错误;
  • 当num_s=1时,变量组维度变为1×2×2,共4个变量,刚好和penalty_matrix的元素数量一致,Gurobi可以按顺序匹配系数,所以错误消失。
解决方案

需要将penalty_matrix调整为与变量维度一致的三维数组。比如如果所有s对应的惩罚系数相同,可以用np.repeat或np.expand_dims扩展维度:

# 扩展为三维:(num_s, num_p, num_d)
penalty_matrix = np.repeat(np.expand_dims(penalty_matrix, axis=0), num_s, axis=0)

或者根据实际业务逻辑,生成每个s对应的专属惩罚系数矩阵,确保最终penalty_matrix的形状为(num_s, num_p, num_d)。

修改后的完整代码示例:

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

num_p = 2
num_s = 2
num_d = 2

# 生成二维惩罚矩阵后扩展为三维
penalty_matrix_2d = np.array([[1 / num_s * abs(0 - t) for t in range(num_d)] for _ in range(num_p)])
penalty_matrix = np.repeat(np.expand_dims(penalty_matrix_2d, axis=0), num_s, axis=0)

model = gp.Model('fixed-example')

# 现在变量维度和目标系数维度匹配
error_variable = model.addVars(range(num_s), range(num_p), range(num_d), obj=penalty_matrix, vtype=GRB.BINARY)

model.optimize()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:35:07