I'm stuck with GurobiError: Unable to convert argument to an expression

I'm stuck with GurobiError: Unable to convert argument to an expression

你能帮我吗

GurobiError: Unable to convert argument to an expression

我尝试将变量声明为单个变量(例如 x1、x2、x3 等),但后来我认为可迭代对象会更好(因为存在 'Non-itereable object' 错误),但 Gurobi 仍然不能转换表达式;它现在只在 #96 处抛出一个错误,但我仍然找不到我应该做什么?

我的代码:

import gurobipy as grb

f = [5.5, 5.2, 5]
s = 3.8

lX = [0, 0, 0]
uX = [45000, 4000, 1000000]

lV = [0, 0]

lY = [0, 0]
uY = [1000000, 30000]

r = [3.25, 3.4]
pProc = 0.35
pConv = 0.25

p = [5.75, 4.0]

OreProcessingModel = grb.Model(name="MIP Model")
OreProcessingModel.ModelSense = grb.GRB.MAXIMIZE

x = {i: OreProcessingModel.addVar(vtype=grb.GRB.CONTINUOUS, 
                                  lb=lX[i], 
                                  ub= uX[i],
                                  name="x_{0}".format(i)) 
for i in range(3)}

v = {i: OreProcessingModel.addVar(vtype=grb.GRB.CONTINUOUS,
                                  lb=lV[i],
                                  name="v_{0}".format(i))
for i in range(2)}

y = {i: OreProcessingModel.addVar(vtype=grb.GRB.CONTINUOUS,
                                  lb=lY[i],
                                  ub=uY[i],
                                  name="v_{0}".format(i))
for i in range(2)}

conv = OreProcessingModel.addVar(vtype=grb.GRB.CONTINUOUS, lb=0, ub=50000, name="conv")

vlms2 = [v[0], v[1]]
vlmsitrtr = 2


constraint_1 = {1:
OreProcessingModel.addConstr(
        lhs=grb.quicksum(y[i] for i in range(2)),
        sense=grb.GRB.LESS_EQUAL,
        rhs=100000,
        name="constraint_{1}")
}

constraint_2 = {1:
OreProcessingModel.addConstr(
        lhs=grb.quicksum(v[i] for i in range(2)),
        sense=grb.GRB.LESS_EQUAL,
        rhs=50000,
        name="constraint_{2}")
}

OreProcessingModel.setObjective(grb.quicksum((f[i] * x[i] + s * v[i]) - (y[i]*r[i] + pProc*(y[i]) + pConv*conv))for i in range(3))


OreProcessingModel.optimize()
print(OreProcessingModel)

你不应该使用那样的词典。你可以把这段代码

x = {i: OreProcessingModel.addVar(vtype=grb.GRB.CONTINUOUS, 
                                  lb=lX[i], 
                                  ub= uX[i],
                                  name="x_{0}".format(i)) 
for i in range(3)}

进入这个:

x = OreProcessingModel.addVars(len(lX), vtype=grb.GRB.CONTINUOUS, lb=lX, ub=uX, name="x")

此外,您的变量的维度不匹配。您正在 setObjective() 调用中循环 range(3) 并尝试访问 v[i]y[i] 但这些指令的长度仅为 2.