有的时候约束条件有点难搞,我们可以把它放到目标函数里面。
记得之前凸函数的时候的结论吗?一大堆函数,每一段都取最大的,最后会得到一个凸函数。同理,每一段都取最小的,得到的是一个凹函数。就这样,我们强行把问题变成了一个凹函数,就算原本的f(x)既不凸也不凹。
可以看到之前的对偶函数是最优值的下界,毕竟加了一大堆0或者比0还小的东西。
一个例题:
其实就是和高数里面求给定条件的极大极小值用的方法,一模一样。
拉格朗日对偶问题
拉格朗日函数是原本问题的下界,现在我们要求这个函数最大是多少,这样就可以尽量靠近原始函数了。
弱对偶性
这是一个非常强的条件:
Slater条件
但显然这个条件不总是成立。那要怎么样才能保证成立呢?
假如对偶问题得到的那个原问题的下界对应的x,放在原问题中是严格可行的(不是一般的可行,要是不等式约束都小于0,不能刚好相等的那种),并且原问题是一个凸问题,那么原问题的下界就是对偶问题求出来的上界,没有任何水分。
当然这是一个充分条件但是不必要。
比如像这个例子,虽然不符合slater条件,但其实是强对偶的。
鞍点解释:
记住:inf是下确界,sup是上确界。
左边是先固定z,w任意,要求最小,因此w的行动方向是顺着马鞍的。
右边是先固定w,z任意,要求最大,因此z的行动方向是横着马鞍的。
可以注意到,强对偶下的对偶函数上界与原函数下界其实就是对应鞍点的。
L(x,l)有鞍点,那么这个点对应的就是最优点,对偶函数和原函数强对偶。
存在强对偶,那也可以证明强对偶是存在的。下图是证明:
注意:在对偶问题中,只有与原来的不等式约束对应的加权系数是有大于等于零的限制的,等式约束对应的加权系数没有限制。
KKT条件
可以看到这些条件其实和对偶函数息息相关。前两个其实就是原始函数的限制,第三个就是对偶函数的限制,第四个则是取到最优值的限制,最后一个是用来证明这个就是最优值的。
可以看到1和4条件好像有点关系。事实上这两个条件一般会导致求解过程中出现分类讨论的情况。
这样,我们要求最优解的话就不用那么麻烦,直接找到符合KKT条件的点就可以了。只要是符合KKT条件的就一定强对偶,一定有各种各样美好的条件并且符合的那个点就是我们要的那个点。
举个例子:灌水问题
通过KKT求解出x*(可能会有多种情况)就可以了。
迭代算法
强凸性:
强凸要求更高一点,不允许有线性的地方。注意是二阶导要大于m,也就是梯度要一直变化,不能有线性的部位。
这个是在说什么呢?就是说有时候我们没有办法求导最好的那个最优解,只有一个相近的,我们可以用这个式子估计误差。可以看到最后可以用x点的导数和二阶导下限m得到x与最优解的距离。
可以看到,m越大一阶导变化越快,越快到0,那么x距离最优解距离就短
有二阶导下界,当然也有上界。结论类似。
另一边是典中典之梯度下降法,阿尔法决定了下降的方向,d决定了大小
可以看到,随着迭代次数增加,误差上界会越来越小。
但有时候找不到这么好的阿尔法怎么办?还有非精确法,回溯法
这个精确法与非精确法没太搞懂,回去查一下
M和m查得越多,条件数越大,函数图像的等高线就会越扁,越椭。假如在这样的函数上用梯度下降的话,搜索路径就成了z字形,效率低。
最速下降法
不仅仅是确定方向,还要自己确定步长。
坐标轮换法:
就是类似于先优化x轴,然后是y轴……这样。当然也存在分块的坐标轮换法(x,y一起优化,然后再是轴之类的)
可以看到假如出现了不可微分的情况,那就在左右梯度中随便选一个出来。
牛顿法
现在,我们回到最开始的有约束的优化问题
有约束的优化问题,本质上就是求解KKT条件
拉格朗日法
这种方法有点类似坐标轮换法,x,v一步一步优化。归根结底还是求KKT条件,只是用近似的方法求。注意到,x是要向让目标函数变小的方向发展的,v是向着符合约束条件的方向发展的。
增广拉格朗日法:
总结一下:
可以看到常规拉格朗日法x和v可以一起更新,增广版本的则是x先更,v会依据x的新值更新。
这个性质就是说,假如V已经是最优值了,那么x的最优值就可以直接用上面这个式子取到,一直优化x就好。
如果C趋近于无穷,那么不用管V,一直优化x就可以直接得到最优值了。
可以看到,利用性质2,我们不用管V的事,直接找x最优值,可以发现v在c面前不值一提。