gpt4 book ai didi

python - 如何使用 "string"将 "linear expression"引用为 Python Gurobi 函数中的参数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:07 28 4
gpt4 key购买 nike

我有以下一段 Python 代码来定义一堆“obj”:

obj1=LinExpr(sumOFw_plusPLUSw_minus)
obj2=LinExpr(quicksum(epsilon[s] for s in N))

其中“sumOFw_plusPLUSw_minus”是一个表达式,“epsilon”是一个 Var 类型。

我想让它参数化,这样我以后可以添加更多的客观表达式。为了应用它,我尝试在循环内准备一个字符串并使用该字符串调用上述表达式,如下所示,但在第 5 行出现“GurobiError:无法将参数转换为表达式”。

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 值设置为字符串,它正在寻找一个客观的表达式。

要根据参数获得不同的目标函数,您可以声明目标成本,并将它们存储在列表中。例如:

cost =[]
cost[0] = LinExpr(sumOFw_plusPLUSw_minus)
cost[1] = LinExpr(quicksum(epsilon[s] for s in N))
...

现在您可以通过根据索引 i 的值调用成本列表中的适当元素来设置目标。 (您甚至可以添加不同的元素,只要它们有效且线性即可。)

valid_obj = cost[i]

m.setObjective(valid_obj, GRB.MINIMIZE) 将起作用,只要列表中的每个元素都是模型 m 中决策变量的有效线性表达式>.

关于python - 如何使用 "string"将 "linear expression"引用为 Python Gurobi 函数中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36158803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com