我如何使用 "string" 来引用 "linear expression" 作为 Python Gurobi 函数中的参数?
How can I use a "string" to refer to an "linear expression" as an argument inside a Python Gurobi function?
我有以下 Python 代码来定义一堆 "obj":
obj1=LinExpr(sumOFw_plusPLUSw_minus)
obj2=LinExpr(quicksum(epsilon[s] for s in N))
其中 "sumOFw_plusPLUSw_minus" 是一个表达式,"epsilon" 是一个 Var 类型。
我想将其设为参数化,以便以后可以添加更多 objective 表达式。为了应用我尝试在循环中准备一个字符串并使用该字符串调用上面的表达式,如下所示,但是在第 5 行
for j in range(1,2):
for i in range(1,num_obj):
valid_obj='obj'+str(i)
if j==1:
m.setObjective(valid_obj, GRB.MINIMIZE)
else:
m.setObjective(valid_obj, GRB.MAXIMIZE)
m.update()
m.optimize()
问题是 'obj' + str[i] 只是一个 Python 字符串,不是对象。 Gurobi 不知道如何将 Objective 值设置为字符串,它正在寻找 objective 表达式。
要根据参数获得不同的 objective 函数,您可以声明 Objective 成本,并将它们存储在列表中。例如:
cost =[]
cost[0] = LinExpr(sumOFw_plusPLUSw_minus)
cost[1] = LinExpr(quicksum(epsilon[s] for s in N))
...
现在您可以根据索引 i
的值调用成本列表中的适当元素来设置 Objective。 (您甚至可以添加不同的元素,只要它们有效且线性即可。)
valid_obj = cost[i]
m.setObjective(valid_obj, GRB.MINIMIZE)
将起作用,只要列表中的每个元素都是模型中决策变量的有效线性表达式 m
.
我有以下 Python 代码来定义一堆 "obj":
obj1=LinExpr(sumOFw_plusPLUSw_minus)
obj2=LinExpr(quicksum(epsilon[s] for s in N))
其中 "sumOFw_plusPLUSw_minus" 是一个表达式,"epsilon" 是一个 Var 类型。
我想将其设为参数化,以便以后可以添加更多 objective 表达式。为了应用我尝试在循环中准备一个字符串并使用该字符串调用上面的表达式,如下所示,但是在第 5 行
for j in range(1,2):
for i in range(1,num_obj):
valid_obj='obj'+str(i)
if j==1:
m.setObjective(valid_obj, GRB.MINIMIZE)
else:
m.setObjective(valid_obj, GRB.MAXIMIZE)
m.update()
m.optimize()
问题是 'obj' + str[i] 只是一个 Python 字符串,不是对象。 Gurobi 不知道如何将 Objective 值设置为字符串,它正在寻找 objective 表达式。
要根据参数获得不同的 objective 函数,您可以声明 Objective 成本,并将它们存储在列表中。例如:
cost =[]
cost[0] = LinExpr(sumOFw_plusPLUSw_minus)
cost[1] = LinExpr(quicksum(epsilon[s] for s in N))
...
现在您可以根据索引 i
的值调用成本列表中的适当元素来设置 Objective。 (您甚至可以添加不同的元素,只要它们有效且线性即可。)
valid_obj = cost[i]
m.setObjective(valid_obj, GRB.MINIMIZE)
将起作用,只要列表中的每个元素都是模型中决策变量的有效线性表达式 m
.