在Python中使用多个变量设置目标

时间:2019-03-25 10:48:08

标签: python optimization gurobi

我正在尝试使用gurobi解决分配优化问题。

我有一个 4x4 数组来存储成本,我正尝试将其与存储为 4x4 数组的决策变量相乘。

我尝试了以下方法:

model.setObjective(quicksum(cost[i,j] * x[i][j] for i in range(3) for j in range(3)), GRB.MINIMIZE)

它返回键错误:0

也是

model.setObjective(quicksum(cost[i,j] * x[i,j] for i in range(3) for j in range(3)), GRB.MINIMIZE)

它返回模型中未包含变量

这是我的费用数组:

cost = np.array([[48.3, 5000, 66.0, 55.4], 
                 [50.2, 53.2, 58.9, 56.2], 
                 [47.5, 49.8, 5000, 53.0], 
                 [48.1, 51.8, 64.4, 54.7]])

我这样设置变量:

x = model.addVars(4, 4, vtype=GRB.BINARY)

理想情况下,我希望代码返回应该使用哪些变量来分配适当的二进制变量。即x [0,0] = 1; x [2,3] = 0

1 个答案:

答案 0 :(得分:1)

如果模型包含在名为model的变量中,并且您已将变量x添加到同一模型中,则以下(第二次尝试)适用于最新的Gurobi版本。

model.setObjective(quicksum(cost[i,j] * x[i,j] for i in range(4) for j in range(4)), GRB.MINIMIZE)

,但如果要对所有参数进行汇总,则应使用range(4)而不是range(3)。也许您有多个模型,并试图将目标添加到错误的模型中?