迄今为止,我们介绍的优化算法都是从整体性出发,搜索全局最优点。而且大多数都是从一个初始可行解出发进行的(分支定界搜索从某种意义上可以说不是)。换句话,这些算法都是直接求解。但一些问题过于复杂,要优化的变量实在过多,规模庞大,以至于没办法从整体考虑入手。今天我们介绍间接求解的算法,将原问题分解成多个足够简单、可以单独迭代直接求解的子问题(subproblem),伴随的主问题(master problem)结合所有子问题的结果给出模型的精确或近似最优解。话不多说,进入正题。
1
列生成算法
首先要介绍的是列生成算法,我们在介绍离散优化模型的分类时提到过(集合包装、覆盖、划分模型)。
传送门:离散优化模型
列生成算法适用于满足以下特点的优化问题:
该问题对应的数学模型能够简单地使用约束矩阵中每一个可能的列来表示决策变量的选择,这些可行的列是通过一个独立子问题构造生成,同时能够满足即便是那些难以用模型表达的复杂约束条件。
列生成算法的思想是基于给定生成的列,通过迭代求解限制主问题(partial master problem)实现全局优化——这里的主问题是指受限原始问题(restricted version),只包含了取值非零的决策变量对应的列。如果原始问题的模型是一个整数线性规划问题,则可以求解受限问题的线性松弛问题。其算法数学表达为:
我们给出列生成算法的一般步骤:
对偶问题在前面以及详细介绍过,传送门:线性规划的对偶理论
该算法最难实现的部分是步骤2中如何构造小于0的检验数,一个方法就是把J的所有列拿出来逐个尝试,但效率无疑是低下的。我们可以采取启发式算法,只要判断所有可行列中最小检验数是否小于0即可。
我们通过一个案例来了解该算法——家具型材切割。
家具制造所需要的型材都是从长度为b=11米的进料中切割下来的ÿ