benders_cuts

通用Benders切割生成器。

在阅读了Grothey、Leyffer和McKinnon的“关于Benders分解中可行性的说明”[GLM99]之后,更容易理解这段代码。

原始问题:

\[\begin{split}\min\ & f(x, y) + h0(y) \\ s.t.\ & g(x, y) <= 0 \\ & h(y) <= 0\end{split}\]

其中 y 是复杂变量。重新表述为

\[\begin{split}\min\ & h0(y) + \eta \\ s.t.\ & g(x, y) <= 0 \\ & f(x, y) <= \eta \\ & h(y) <= 0\end{split}\]

根本问题必须是以下形式

\[\begin{split}\min\ & h0(y) + \eta \\ s.t.\ & h(y) <= 0 \\ & benders\ cuts\end{split}\]

最后一个约束将自动由BendersCutGenerators生成。BendersCutGenerators必须处理一个形式为的子问题

\[\begin{split}\min\ & f(x, y) \\ s.t.\ & g(x, y) <= 0\end{split}\]

除了约束条件实际上不必采用这种形式。子问题将自动转换为

\[\begin{split}\min\ & _z & \\ s.t.\ & g(x, y) - z <= 0 & \quad (\alpha) \\ & f(x, y) - \eta - z <= 0 & \quad (\beta) \\ & y - y_k = 0 & \quad (\gamma) \\ & \eta - \eta_k = 0 & \quad (\delta) \\\end{split}\]

Classes

BendersCutGenerator(*args, **kwargs)

BendersCutGeneratorData(component)

IndexedBendersCutGenerator(*args, **kwargs)

ScalarBendersCutGenerator(*args, **kwargs)