目录

1 一个简答的数值案例

1.1 问题分解 

1.2 算法过程及收敛条件 

2 使用Benders分解方法求解基于场景的两阶段随机规划问题

2.1 概述

 2.2 算法流程

2.3 紧凑模型

2.4 解法

 2.5 分解模型 -- 概率的等价处理

 2.6 终止准则

3 随机市场出清的案例分析

3.1 问题建模

3.2 问题分解 

 3.3 计算结果

 4 multi-cut benders decomposition

 5 自适应策略的benders分解


阅读本节要达到的效果:

  • 识别一个包含多个复杂变量和子问题的随机优化问题的可分解结构
  • 写出通用随机规划优化问题的Benders分解算法
  • 使用Benders分解算法求解一个简单的随机市场出清问题案例

首先祭出始祖的文章:

Benders, J. F. (1962). Partitioning procedures for solving mixed-variables programming problems. Numerische mathematik4(1), 238-252.

1 一个简答的数值案例

下面给出一个例子:

benders分解算法python benders分解算法不收敛_网络协议

1.1 问题分解 

例子中,只有一个复杂变量,也就是x3;固定(fixed)该变量,子问题的表述形式如下:

benders分解算法python benders分解算法不收敛_benders分解算法python_02

 我们只固定了一个约束,为什么对偶变量会有小标 h 呢?

对偶变量的定义是目标相对于约束的敏感性,目标函数不是唯一的,所以对偶变量也就有小标h。

下面我们分析主问题:

benders分解算法python benders分解算法不收敛_p2p_03

1.2 算法过程及收敛条件 

算法过程:

benders分解算法python benders分解算法不收敛_迭代_04

收敛条件:

benders分解算法python benders分解算法不收敛_网络_05

2 使用Benders分解方法求解基于场景的两阶段随机规划问题

2.1 概述

benders分解算法python benders分解算法不收敛_p2p_06

在基于场景的两阶段随机规划问题中,第一阶段是主问题,第二阶段是子问题。主问题为子问题提供固定变量的值,子问题为主问题提供复杂变量的敏感性。

benders分解算法python benders分解算法不收敛_benders分解算法python_07

 2.2 算法流程

benders分解算法python benders分解算法不收敛_迭代_08

2.3 紧凑模型

更compact的形式,再次重申,一阶段的变量x是复杂变量

benders分解算法python benders分解算法不收敛_网络协议_09

2.4 解法

benders分解算法python benders分解算法不收敛_迭代_10

 2.5 分解模型 -- 概率的等价处理

benders分解算法python benders分解算法不收敛_网络_11

 

benders分解算法python benders分解算法不收敛_迭代_12

 2.6 终止准则

benders分解算法python benders分解算法不收敛_p2p_13

总结:

  1. 随机规划问题是可分解的
  2. 复杂变量是一阶段的决策变量,子问题最少有场景数目个
  3. 我们可以使用通用的两阶段随机优化问题来表述benders 分解算法
  4. 对于一个凸优化问题,benders分解能够确保收敛于问题的全局最优解。

3 随机市场出清的案例分析

3.1 问题建模

问题描述:

benders分解算法python benders分解算法不收敛_迭代_14

3.2 问题分解 

确定要固定的复杂变量:

benders分解算法python benders分解算法不收敛_迭代_15

 识别子问题:

benders分解算法python benders分解算法不收敛_迭代_16

 主问题:

benders分解算法python benders分解算法不收敛_网络协议_17

 注解:

  1. Objective function of subproblems (previous iterations)
  2. Sensitivities of subproblems, with respect to complicating variable 
  3. Sensitivities of subproblems, with respect to complicating variable 
  4. Sensitivities of subproblems, with respect to complicating variable 

 3.3 计算结果

benders分解算法python benders分解算法不收敛_网络协议_18

 

benders分解算法python benders分解算法不收敛_迭代_19

 4 multi-cut benders decomposition

还是先上参考文献:

  1. Birge, J. R., & Louveaux, F. V. (1988). A multicut algorithm for two-stage stochastic linear programs. European Journal of Operational Research34(3), 384-392.
  2. You, F., & Grossmann, I. E. (2013). Multicut Benders decomposition algorithm for process supply chain planning under uncertainty. Annals of Operations Research210(1), 191-211.

单cut模型:

benders分解算法python benders分解算法不收敛_迭代_20

 多cut版本:

benders分解算法python benders分解算法不收敛_网络协议_21

 两者的区别在于:多cut版本的辅助变量和cut都是基于场景构建的

benders分解算法python benders分解算法不收敛_p2p_22

注解:

  1. 单cut版本我们只有保证cut是有效的,才会被加入到主问题当中;但是多cut版本保证不了这一点,其中可能会包含一些无效的cut。
  2. 多cut版本需要权衡内存和计算负担
  3. 如果添加的cut都是有效的,多cut版本肯定比单cut版本更有效,更快的收敛。
  4. 在单cut版本中,我们主问题的规模随着迭代次数线性增长;而在多cut中,主问题规模呈指数式增长。迭代越多,多cut的弱点若明显。
  5. 如果子问题不是线性规划问题,benders分解得到的不一定是最优解,所以需要加入一些启发式策略。
  6. benders分解并不一定比直接求解原问题更快,他只是使原问题变得更加容易处理。

 5 自适应策略的benders分解

动机:

  1. 多cut版本每次生成多个cut,需要较少的迭代次数。
  2. 转化为单cut版本,可以避免主问题的变量和约束数目规模过大。

参考文献:

  1. Sifuentes, W. S., & Vargas, A. (2007). Hydrothermal scheduling using benders decomposition: accelerating techniques. IEEE Transactions on Power Systems22(3), 1351-1359.
  2. Skar, C., Doorman, G., & Tomasgard, A. (2014, August). Large-scale power system planning using enhanced Benders decomposition. In 2014 Power Systems Computation Conference (pp. 1-7). IEEE.
  3. Zverovich, V., Fábián, C. I., Ellison, E. F., & Mitra, G. (2012). A computational study of a solver system for processing two-stage stochastic LPs with enhanced Benders decomposition. Mathematical Programming Computation4(3), 211-238.
  4. Rahmaniani, R., Crainic, T. G., Gendreau, M., & Rei, W. (2017). The Benders decomposition algorithm: A literature review. European Journal of Operational Research259(3), 801-817.