在quicksum中使用max命令 - 使用python进行gurobi

时间:2017-06-27 16:48:04

标签: python gurobi integer-programming mixed-integer-programming

我正在尝试包含一个python" max"使用gurobi和python在quicksum命令中执行命令。在LinExpr限制下,显然有这样做的错误,因为它不被接受。

shutdowncost = quicksum(quicksum(shutdown_cost[i] * max((v[hour -1, i] - v[hour, i]),0) for i in num_gen) for hour in hour_range)

V是模型中的二进制变量,而余数是固定变量。问题是在v [小时-1,i]为0,v [小时,i]为1的情况下,shutdowncost为负数。

是否有另一个命令可用于替换quicksum中的max命令?

1 个答案:

答案 0 :(得分:0)

这篇论文讨论了启动和关闭约束:MIPFormulation。他们使用符号:

  • u [t] 1表示在线,0表示离线,二进制(状态)
  • v [t] 1用于打开该时间段,二进制(turn_on)
  • w [t] 1关闭那段时间,二进制(turn_off)

这些gurobi二元变量使用约束来定义:

  • u [t] - u [t-1] == v [t] - w [t]
  • v [t] + w [t]< = 1

然后可以定义shutdowncost:

  • shutdowncost = quicksum([shutdown_cost [i] * w [小时,i]代表我在num_gen中的小时in hour_range])

(不需要2个速布!) 然后可以在目标函数或其他约束中使用此关闭成本。而且更容易看到发生了什么。