简介
由于大规模混合整数规划问题/整数规划问题往往是NP-hard的,所以我们直接对这些问题求解,每当遇到这些复杂问题的时候,一个基本思想就是对复杂的优化问题进行分解(decomposition),关于整数规划问题的分解主流包括三种方法
1 BD (主要思路是行生成+割平面)
2 DW分解 (主要思想就是列生成)
3 Lagrangian decomposition (主要思想就是LR)
前两种方法不是今天的主角,下面主要介绍LR
LR求解整数规划问题基本思想
1 把约束放到目标上去,达到化繁为简的目的
2 尽量松弛掉linked / coupling constraints 让不可分问题变得可分
拉格朗日松弛与对偶问题
如上图所示,整数规划问题P1中含有一类重要但是复杂的约束
第一种做法是直接将复杂约束丢掉,这样虽然好求解,但是求解质量太差,难以获得有用信息。
第二种方法就是将约束添加到目标函数中,同时添加一个惩罚项(拉格朗日乘子)来表示违反约束的代价(拉格朗日松弛问题),如下图所示
P2是P1的一个松弛问题,因此P2问题的最优解是P1的一个上界(max问题)。
为了获得更多的信息,我们想知道最小的上界在哪,也就引入了拉格朗日对偶问题(希望找到一个最好的u使得P2最小)
拉格朗日迭代算法与收敛性分析
前面讲到了希望求解拉格朗日对偶问题(找到最好的u)来找到最小的上界,关于这部分的求解主要包括两部分,1是松弛后子问题的求解;2是拉格朗日乘子的更新(对偶问题求解)
1. 拉格朗日松弛问题求解(此时乘子是固定的)
松弛后的子问题求解,一般要根据子问题的具体性质来确定求解方式。在整数规划问题中采用拉格朗日松弛后的子问题一般最好不要是NP-hard的或者一般问题规模很小可以进行暴力求解,否则子问题的求解还需要进一步特殊处理。所以一般我们求解子问题可以直接让求解器(Gurobi\Cplex等)直接求解即可,也可以根据具体情况采用动态规划,线性规划等手段帮助求解。
2. 拉格朗日对偶问题求解(也可以说是乘子更新)
拉格朗日乘子更新本质上是要求对偶问题。由于对偶问题是一个非光滑凸优化问题,我们这里采用次梯度算法来更新拉格朗日乘子。
乘子得更新主要包括两个部分,1是步长;2是次梯度方向
关于次梯度的选取,一般直接由松弛约束得到 gk = d - DX(对应为约束的松弛变量)
关于步长的选取,一般是由 ø * (UB - P1的目标值) / 次梯度2范数给出