Benders分解如何成?

摘要:参考视频:068-线性规划(十三):Benders分解-哔哩哔哩 1. Benders分解简介 1.1 什么是Benders分解 Benders分解算法是由提出它的Jacobus Franciscus (Jacques) Benders教授
参考视频:068-线性规划(十三):Benders分解-哔哩哔哩 1. Benders分解简介 1.1 什么是Benders分解 Benders分解算法是由提出它的Jacobus Franciscus (Jacques) Benders教授的名字命名的,核心思想是将两类变量(一类为整数变量,另一类为连续变量)分开求解,然后再合起来。 举个例子,这就像小鸡炖蘑菇: 传统的做法是把小鸡和蘑菇一锅炖出来。事实上,小鸡比较难炖,蘑菇比较好炖。考虑到这一点,Benders分解的思想就是把小鸡(复杂变量)和蘑菇(简单变量)分开炖,但这两锅又要有联系:因为蘑菇要用鸡汤来炖,在炖的过程中我们又要尝尝蘑菇鸡汤的咸淡,再决定要不要往鸡汤里放更多的盐。也就是说,炖鸡的那口锅要给炖蘑菇的那口锅提供鸡汤,而炖蘑菇的那口锅要给炖鸡的那口锅反馈咸淡。重复上面的过程,直到分开炖的口味和一锅炖出来的口味相差无几,我们就把两口锅的东西合起来,就得到了跟传统做法一样原汁原味的小鸡炖蘑菇(๑´ڡ`๑) 1.2 学习Benders分解的前置知识 Cutting plane(割平面) Vaild inequalities(有效不等式):也就是割平面的过程中,利用有效不等式,割去一部分内容物,但没有割去最优解(保持最优特性) Row generation(行生成):行生成的概念 Duality theory(对偶理论):最核心的知识,详情请见之前的博客大规模线性规划的对偶 - 码头牛牛 - 博客园 首先来介绍一下Benders分解的初步逻辑: 如图,Benders分解会把一个优化问题分解为一个主问题(Master Problem)和一个子问题(Sub-Problem)分别进行求解。 Master Problem (MP):只剩下复杂变量(在图中指的是整数变量\(y\))和用来传递信息的变量(在图中指的是变量\(q\))的优化问题 Sub-Problem (SP):包含简单变量的优化问题(图中指的是连续变量\(x\)) 在求解过程,MP会先指定一个可行的\(y\)(相当于控制变量),传给SP。 SP会反馈给MP这个\(y\)是否合适。如果合适的话会利用\(y\)的信息帮助找到最优解;如果\(y\)提供的信息无效或者说是不可行的,那就要避免MP下次还提供这样的信息,也就是把这样的信息cut掉。也就是: 然后再简单介绍一下行生成(有关列生成内容在这里:列生成算法 - 码头牛牛 - 博客园): 行生成关注的是约束,因为约束是以行的形式存在的;列生成关注的是基,因为基是以列的形式存在的。 行生成是从一个隐藏的空间里,不断地去拿有效的约束(有效不等式),并把它们放到松弛的MP里;列生成是从对偶子问题里面,把一个reduce cost比较好的基反馈给MP。 比较典型的行生成方法有:割平面、User Cut等等,下面介绍其中两个: User cut:就是一个提前加的割,作用是减小搜寻范围。在我们对问题有初步把握的基础上,我们可以人工加入几个割平面 (User cut),来割掉一些多余的搜寻空间,以加速搜索进程 Lazy cut:当需要的时候就添加,不需要的时候就不添加。作用是使解变得更加可行。它的思想和Benders分解中加cut的思想是一致的。 如下面第一张图,黄色部分是松弛后的可行域。当我们比较了解这个问题的时候,就可以事先加入User Cut,来缩小这个黄色的搜寻范围;如下面第二张图,有些问题为了方便求解,需要把一些约束给拿掉,拿掉约束后,它会添加一些不可行的点进来,也就是图中灰色的点。这导致了求解的过程中可能会碰到这些点,如果碰到了发现不可行,我们就会添加一个Lazy Cut进来,把这个点砍掉。所以说Lazy cut就是使用到的时候才会拿出来用,而Benders分解的思想就是不断地向松弛主问题添加Lazy Cut。 2. Decomposition process 如图,给出一个具有两类变量的问题,\(x\)是简单的连续变量,\(y\)是复杂变量,\(y\)的可行域是\(Y\)。然后我们把它分解成两类问题(图中红色的\(y\)是一个变量,绿色的\(y\)是一个给定的值): SP:只包含\(x\),在子问题中\(y\)是需要提前给定的。图中SP的目标函数中,\(f^Ty\)其实加不加都行,因为这是个给定常数。 MP:包含变量\(y\)的主问题,它只含有复杂变量。 求解MP,为SP提供一个确定的\(y\);SP会得到当前\(y\)的求解情况,并以割平面(Cutting plane) 的方式反馈给MP。
阅读全文