使用多变量在python中设置目标

使用多变量在python中设置目标,python,optimization,gurobi,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) fo

我试图使用
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)
理想情况下,我希望代码返回应该使用哪些变量来分配适当的二进制变量。i、 e.x[0,0]=1;x[2,3]=0

如果模型包含在名为
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)
。也许您有多个模型,但试图将目标添加到错误的模型中?

谢谢!你是对的,我不得不把它设为4,确实是我太粗心了