本次博客还是继续之前的约束优化问题,介绍求解线性规划的另一种方法——内点法(叫做内点法的原因是优化命题解的迭代过程是从约束域内部出发,沿着中心路径逐步走到边界),包含障碍函数法和原始对偶法。PS:实际应用时考虑求解效率和精度问题,通常首选的是原始对偶法。
参考自:
- S. Boyd, L. Vandenberghe, Convex Optimization
2. CMU 10-725,Convex Optimization
3. 学弱猹 的博客
障碍函数法
考虑问题
由于不等式约束的存在使得问题不能直接求解,那么就想办法去掉不等式约束,这里的做法是对优化问题进行改写使得优化命题不包含不等式约束,而目标函数中包含对不等式约束的惩罚,一个很直接的想法就是对不满足不等约束的情况进行惩罚,因此可以引入如下惩罚函数
当满足约束 时, 即没有惩罚,当 ,也就是说明我们不希望这种情况发生。利用惩罚函数代替不等式约束可以得到优化命题
需要注意,这个目标函数是不连续的,为了使得目标函数连续,我们可以使用对数函数 来近似这个惩罚函数,因为对数函数在 趋于 时的函数值趋于无穷(惩罚无限大,也是我们想要的),同时还可以保证目标函数二次可微。定义 ,并引入系数 来衡量近似程度,则上述优化命题转化为
其中 越大,用对数函数 来近似原来不可导的惩罚函数 的近似效果越好。
此时,原始带不等式约束的优化命题转化成为等式约束的优化命题,接下来我们来看看这一类问题怎么解。
将等数约束优化命题的目标函数乘以 ,(此时认为
为固定的参数,不是变量)该问题的KKT条件可以表示为
可以证明给定 和对应的 ,(断句) 和 是原问题的对偶可行解,其中原问题的拉格朗日函数为
进一步可以证明对偶间隔满足
这可以作为算法的收敛准则,同时意味着随着 趋于无穷, 趋于 。
因此求解上述KKT系统等价于求解方程组(其中 )
根据一阶近似( )
可以得到更新公式为( 表示求导数)
带入 的表达式,即左侧的导数对应为雅可比矩阵
这样就可以得到更新公式
每次更新解后还要增加 的值,直到 duality gap 小于一定阈值即可。理论上来说一个 可以对应一个解,假如说我们让 连续变换,那么这个解也会连续变换,就会形成一条弧线。这一条弧线我们叫中心路径(central path)。
罚函数法的算法流程可以总结为(来自S. Boyd, L. Vandenberghe, Convex Optimization)
给定严格可行解 ,
重复一下步骤:
- 求解最小化问题 s.t. 的最优解
- 更新
- 如果 则停止,否则进入下一步
- 增加
原始对偶内点法
还是考虑刚才那个原始问题
该问题的扰动KKT条件(与原始KKT条件的不同之处在于互补松弛条件的等式右端是 而不是 )为
定义
KKT条件可以写成矩阵形式的方程组
这是一个非线性的系统 ,仍然还是用牛顿求根的方法来计算,记 ,则 (这里的 代表求导),解的更新公式可以表示为
定义符号
表示点 的对偶、中心和原始残差。解的更新公式表示为(左侧为雅可比矩阵)
在罚函数法中,我们的对偶间隔为 ,而在原始对偶内点法中,我们构造一个替代对偶间隔
由于 所以对应的
综上总结原始对偶内点法的步骤为(CMU/convexopt)
选择初始点 使得 , 。定义 ,固定参数
重复以下步骤:
- 计算
- 计算原始对偶更新方向
- 使用回溯法确定步长
- 更新解
- 计算替代对偶间隔
- 判断替代对偶间隔是否小于一定阈值且原始、对偶残差的平方和 小于一定阈值
在上述算法中,需要用到回溯法来搜索步长,在每一步迭代时需要满足约束 以及 开始
进一步令 ,选择参数 ,
- 令 ,直到
- 令 ,直到 (保证充分下降)
评论(0)
您还未登录,请登录后发表或查看评论