0

我正在尝试在使用 gurobi 和 python 的 quicksum 命令中包含一个 python“max”命令。在 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[hour - 1, i] 为 0 且 v[hour, i] 为 1 的情况下,shutdowncost 为负数。

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

4

1 回答 1

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[hour, i] for i in num_gen for hour in hour_range])

(不需要 2 个快速求和!)然后可以在您的目标函数或其他约束中使用此关闭成本。而且更容易看到正在发生的事情。

于 2017-07-04T20:51:53.133 回答