一、学习目标
1.了解整数优化对应的实际问题是什么
2.学习将一些奇怪的问题转化为整数优化问题
3.学习两种整数优化算法:树搜索和混合整数线性规划
二、整数优化问题
1.起源
最经典、也是最初提及整数优化方法的问题就是0-1背包问题:
求解方法是按物品的单价进行排序,从高到低选取物品。这里的最优解是“拿黄、灰、蓝、橙”这些物品都只有一个,所以称其为“Binary”的。而如果物品是有多个的话,如下:
就是一个标准整数优化问题了,而这,还是一个比较简单的问题,因为变量还是离散的、非连续的。如果加入非连续的变量,如下:
问题就变得麻烦许多,这样一个有混合变量的问题才是整数优化的难点。至此,我们从背包问题了解整数优化的由来,于是我们的整数优化的数学公式就可以表述如下:
根据是否有连续值、离散值是不是二值,可以将整数优化的问题分为3类,针对目标函数为线性的情况,多设计出了MILP问题。(这是因为,在混合的情况下,还要求解非线性目标函数会很麻烦)
三、整数优化相关问题
除了背包问题这种变量就是离散的问题外,还有一些别的问题也可以(或者说,只有)变成整数优化问题后才能找到最优解。总共有3种:
1.非此即彼约束(Either-or constraints)
问题中有一对约束条件,问题要求只能满足其中一条约束,在这样的情况下,需要引入额外的二值整数变量来采写条件,于是这样就会导致原问题的变量多一个离散值的维度:
2.N个约束中K个满足(K out of N constraints)
如名字所说,问题并没有指定哪K个条件满足,这个也是我们需要优化的目标,与1.相同,需要引入离散变量才行:
3.目标函数仅有N种值情况
由于目标函数只能取N种值得其中一种,或许有人会说,那取其中最小那个不就行吗?不行,因为其对应得解可能不满足约束。那从最小到最大一个一个试可以吗?可以,但如果N比较多,可能要试很久。在这种情况中,我们用离散变量y来定向确定目标函数到底是N个中的哪个。整体描述如下:
四、整数优化算法
1.遍历法
遍历法相当于上一节课的全局优化中的网格法,当变量空间很大时,事件复杂度非常高,只适用于一些比较小的空间中:
2.树搜索法
其思想就是决策树的思想,定义一个初始点作为根结点,每做一个决策都会产生一个孩子结点,到达叶结点时就可以计算出这条路径的得分。此外,如果有一个目前最优结果,那么可以在别的子树搜索时,根据当前结点的得分与目前最优结果得分对比,可以进行剪枝,减少搜索次数。例子如下:
这里采用深搜算法,搜索到叶结点(5)时,记录到当前最优值为20,所以到(7)(9)这些点时,已经超过20了,所以不在往下搜索。
可以别的搜索方法:
3.混合整数线性规划(MILP)
该算法针对的是线性目标函数的混合整数规划问题,使用LP放松法来求解原问题的下界。LP放松实际上,就是把所有变量都认为是连续的,所以才说这样求解出的结果肯定被原问题更优,是原问题的下界。
了解了LP放松的操作后,我们就可以开始我们的迭代优化过程:
我们以一个例子来说明整个过程:
(1)先计算出LP放松的结果:
(2)进入迭代:x1、x2和x3是离散变量,故先取x1=1.25进行左右划分,分为x1<=1和x1>=2。对这样两个区域进行判定、求解最优解。其中x1>=2不是可行域(可以自行验证),x1<=1可求解出:
(3)进入第二步迭代,此时x=(1,1.2,1.8,0),取其中第一个不是整数,即x2,同(2)计算可得:
(4)先选择P3继续迭代,此时x=(0.83,1,1.83,0),所以要取第一个不是整数的变量即x1,重复(2),计算出:
并发现这时x1-x3都是整数,于是可以计算出目前最优值为6.5。而P5叶无需再往下衍生,P6也没有可行域,故P3也搜索完了,接下来应该要沿P4开始搜索,但是P4当前的值为7.83,大于目前最优值6.5,再往下搜索也不会低于6.5。于是找到了最优解:
4.其他算法
实际上就是上一节课我们学的一些办法和别的方法。重点的也是我们上节课的方法。