24. 大规模规划(三)随机规划和Benders分解

24. 大规模规划(三)随机规划和Benders分解

这一部分我们介绍两阶段的随机规划问题,并且引入一个新的算法--Benders 分解。

引入问题

假设有一个决策者需要在两个连续的阶段做出决定。在第一阶段需要选择出一个决策向量\(x\),然后紧接着在得到一些新的信息之后需要在第二阶段确定另一个新的决策向量\(y\)。我们假设存在K种可能的情形,并且实际出现的情形在\(x\)确定之后才能知道。我们使用\(\omega\)作为不同情形的下标,记\(\alpha_\omega\)为任意情形\(\omega\)出现的概率。由于\(y\)的确定是在第二阶段,因此\(y\)是与\(\omega\)相关的,那么此时记为\(y_\omega\)用来表示相关性。

分别记目标函数中与\(x\)和\(y_\omega\)对应的cost为\(c\)和\(\text{f}\)。在第一阶段必须满足的约束为

\[\begin{align*} Ax &=b \\ x&\geq 0. \end{align*} \]

另外,对于所有\(\omega\) ,在第一阶段和第二阶段都需要满足的约束为

\[\begin{align*} B_\omega x+Dy_\omega &=d_\omega \\ y_\omega&\geq 0. \end{align*} \]

目标就是选择合适的\(x\)和\(y_1,\cdots,y_K\)使得下面的期望损失最小

\[c^Tx+\alpha_1\text{f}^Ty_1+\cdots +\alpha_K\text{f}^Ty_K. \]

综上,我们可以得到问题

24. 大规模规划(三)随机规划和Benders分解

称这个问题为master问题。注意即使\(K\)值并不是特别大,这个问题也有可能是一个很大规模的问题。因此,我们考虑寻找一个分解算法。

问题重写

考虑满足\(Ax=b\)及\(x\geq 0\)的向量\(x\),假设这个\(x\)就是我们第一阶段的选择。只要\(x\)固定了,第二阶段的决策\(y_\omega\)就可以独立的对每一个\(\omega\)求解如下的问题

\[\begin{align*} \min \quad &f^Ty_\omega \\ \text{s.t.}\quad &B_\omega x+Dy_\omega=d_\omega \\ &y_\omega \geq 0. \end{align*} \]

记\(z_\omega (x)\)为上述问题的最优解。若问题不可行,则记\(z_\omega (x)=\infty\)。如果这时候我们回到第一阶段,那么将会面对

\[\begin{align*} \min \quad &c^Tx+\sum_{\omega=1}^K \alpha_\omega z_\omega (x)\\ \text{s.t.}\quad &Ax=b \\ &x \geq 0. \end{align*} \]

那么在这里我们仅需要考虑不会使得\(z_\omega (x)\)为无穷大的\(x\)。

现在回到这里第一个关于\(y_\omega\)的问题,写出它的对偶问题

\[\begin{align*} \max\quad & p^T_\omega (d_\omega -B_\omega x) \\ \text{s.t.} \quad & p^T_\omega D\leq \text{f}^T. \end{align*} \]

令\(P=\{p\mid p^TD\leq \text{f}^T\}\)。假设\(P\)是非空的并且至少存在一个极点。记\(p^i,\, i=1,\cdots,I\)为所有的极点,\(\text{w}^j,\, j=1,\cdots, J\)为\(P\)的极射线的一个完备集。

由于我们假设\(P\)非空,那么对偶问题要么存在有界最优值要么最优值为无穷大(此时原问题不可行)。注意,\(z_\omega (x) < \infty\)当且仅当

\[(\text{w}^j)^T(d_\omega -B_\omega x)\leq 0,\quad\forall j. \]

这是因为目标值不为无穷大必须满足不存在能够使目标函数值一直下降的方向。当\(z_\omega (x)\)有界时,最优解必然落在\(P\)的一个极点上,也即

\[z_\omega (x)=\max_{i=1,\cdots,I}(p^i)^T(d_\omega - B_\omega x). \]

等价的,\(z_\omega (x)\)是使得下式成立的最小\(z_\omega\):

\[(p^i)^T(d_\omega - B_\omega x)\leq z_\omega,\quad\forall i. \]

综上,这节的第二个问题将可以改写为

24. 大规模规划(三)随机规划和Benders分解

显然,重写后的问题的变量减少了很多。但是注意约束条件可能非常大。

Delayed constraint generation

考虑上面写的master问题的一个relaxed形式,它目标函数不变,但是约束仅为原约束的一个子集。假设已知这个relaxed问题的一个最优解,包含\(x^*\)以及\(z^*=(z_1^*,\cdots,z^*_K)\)。在cutting plane method中,我们需要考虑\((x^*,z^*)\)是否仍然是原master 问题的可行解,也即是否满足所有的约束条件。但是在这里我们换另一种思路,我们通过求解一些辅助子问题进行确定。

对于\(\omega=1,\cdots, K\),考虑子问题

\[\begin{align*} \min\quad & \text{f}^Ty_\omega \\ \text{s.t.}\quad &Dy_\omega=d_\omega-B_\omega x^* \\ & y_\omega \geq 0, \end{align*} \]

注意,对于不同的\(\omega\),上面子问题的区别仅在于等式约束的右边\(d_\omega -B_\omega x^*\),也即原问题的可行域\(P\)都是相同的。因此,在求解子问题时使用对偶单纯形法。

下面可虑可能出现的几种情形。

  1. 若对偶单纯形法的结果表示原子问题是不可行的,那么说明存在对偶可行域\(P\)中一个极射线\(\text{w}^{j(\omega)}\)使得$$(\text{w}^{j(\omega)})^Td_\omega-B_\omega x^* > 0.$$这说明我们找到了一个不满足的约束,那么这个约束就可以被添加到relaxed 的master问题中。
  2. 如果原子问题是可行的,那么对偶单纯形法提供了一个对偶最优基本可行解\(p^{i(\omega)}\)。如果有 $$(p^{i(\omega )})^T(d_\omega - B_\omega x^* ) > z^*_\omega ,$$这说明我们找到了一个不满足的约束,那么此时这个约束可以添加到relaxed 的master 问题中。
  3. 如果原子问题存在可行解,且对于所有\(\omega\)都有\((p^{i(\omega )})^T(d_\omega - B_\omega x^* ) \leq z^*_\omega,\)那么由于\(p^{i(\omega )}\)的最优性,可知对于所有的极点\(p^i\)有 $$(p^{i})^T(d_\omega - B_\omega x^* ) \leq z^*_\omega , $$ 并且有\((\text{w}^{j(\omega)})^Td_\omega-B_\omega x^* \leq 0\),这说明没有约束不成立,也即找到了master问题的最优解,算法结束。

将上面的步骤总结,可得

两阶段问题的Benders 分解算法步骤:

  1. 从relaxed master 问题开始,已知这个relaxed 问题的最优解\((x^*,z^*)\)。
  2. 对于每个\(\omega\),使用对偶单纯形法求解子问题

\[\begin{align*} \min\quad & \text{f}^Ty_\omega \\ \text{s.t.}\quad &Dy_\omega=d_\omega-B_\omega x^* \\ & y_\omega \geq 0, \end{align*} \]

  1. 如果对于每个\(\omega\),对应的子问题是可行的并且最优值小于或等于\(z^*_{\omega}\),那么说明找到了master问题的最优解,算法结束。
  2. 如果存在\(\omega\),它的最优值大于\(z^*_\omega\),找到对应的对偶问题的最优基本可行解\(p^{i(\omega)}\),将约束$$(p^{i})^T(d_\omega - B_\omega x ) \leq z^*_\omega ,$$加入到relaxed master问题中。
  3. 如果对于\(\omega\)子问题是不可行的,则它的对偶问题存在*解。那么对应的存在正的极射线\(\text{w}^{j(\omega)}\)。将约束$$(\text{w}^{j(\omega)})^Td_\omega-B_\omega x^* \leq 0$$加入到relaxed master 问题。

参考文献: Introduction to Linear Optimization by Dimitris Bertsimas & John N. Tsitsiklis.

24. 大规模规划(三)随机规划和Benders分解

上一篇:一键部署node-exporter脚本


下一篇:用dubbo时遇到的一个序列化的坑