如何使用“字符串”将“线性表达式”称为Python Gurobi函数中的参数?

时间:2016-03-22 15:38:28

标签: python linear-programming gurobi

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

mosquitto_pub -h mytarget.azure-devices.net -p 8883 -t "devices/Device1/messages/events/" -i Device2 -u "mytarget.azure-devices.net/Device2" -P "SharedAccessSignature sr=bbvgathering.azure-devices.net&sig=snip&se=snip&skn=snip" --capath /etc/ssl/certs/ --tls-version tlsv1 -d -V mqttv311 -q 1 -m "{\"key\": \"value\"}"

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

我想让它参数化,以便我可以在以后添加更多客观表达式。为了应用我尝试在循环中准备一个字符串并使用下面的字符串调用上面的表达式,但在第5行得到了“ GurobiError:无法将参数转换为表达式”。

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

1 个答案:

答案 0 :(得分:1)

问题是'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] 就会起作用。