约束最优化方法 (四) 乘子法
由于外部罚函数法随着罚因子的增大,增广目标函数的Hesse矩阵条件变得越来越坏,从而导致在实际计算中,数值计算的稳定性变得越来越差,难以精确求解,乘子法是在约束问题的Lagrange函数中加入相应的惩罚,使得在求解系列无约束问题时,罚因子不必趋于无穷大就能求到约束问题的最优解,而且数值计算的稳定性也能得到很好的保证。理论与实践皆表明,乘子法优于外部罚函数法。
等式约束的情形
考虑等式约束问题,将其写成向量形式为:
minf(x);s.t.h(x)=0min f(x); \\ s.t. \ \ h(x)=0 minf(x);s.t. h(x)=0
其中fff,hhh都是二次连续可微函数,设D={x∣h(x)=0}D=\{x|h(x)=0\}D={x∣h(x)=0},上式的Lagrange函数是:
L(x,λ)=f(x)−λTh(x)L(x,\lambda)=f(x)-\lambda^{T}h(x) L(x,λ)=f(x)−λTh(x)
设x∗x^{*}x∗是上式的极小点,λ∗\lambda^{*}λ∗是相应的Lagrange乘子,有:
∇xL(x∗,λ∗)=∇f(x∗)−∇h(x∗)λ∗=0∇λL(x∗,λ∗)=h(x∗)=0\nabla_{x}L(x^{*},\lambda^{*})=\nabla f(x^{*})-\nabla h(x^{*})\lambda^{*}=0 \\ \nabla_{\lambda}L(x^{*},\lambda^{*})=h(x^{*})=0 ∇xL(x∗,λ∗)=∇f(x∗)−∇h(x∗)λ∗=0∇λL(x∗,λ∗)=h(x∗)=0
注意到,对于∀x∈D\forall x \in D∀x∈D,都有h(x)=0h(x)=0h(x)=0,因此:
f(x∗)=L(x∗,λ∗)≤L(x,λ∗)=f(x)f(x^{*})=L(x^{*},\lambda^{*}) \leq L(x,\lambda^{*})=f(x) f(x∗)=L(x∗,λ∗)≤L(x,λ∗)=f(x)
由此可见,约束问题与下述问题等价:
minL(x,λ∗);s.t.h(x)=0min L(x,\lambda^{*});\\ s.t. \ \ h(x)=0 minL(x,λ∗);s.t. h(x)=0
使用外部罚函数法,其增广目标函数为:
F(x,λ∗,μ)=L(x,λ∗)+μh(x)Th(x)F(x,\lambda^{*},\mu)=L(x,\lambda^{*})+\mu h(x)^{T}h(x) F(x,λ∗,μ)=L(x,λ∗)+μh(x)Th(x)
其实λ∗\lambda^{*}λ∗是未知向量。所以实际上不能求出F(x,λ∗,μ)F(x,\lambda^{*},\mu)F(x,λ∗,μ)的极小点。下面将指出,在求x∗x^{*}x∗的同时,采用迭代的方法也会同时求出λ∗\lambda^{*}λ∗。这就是乘子法的基本思想。
一般约束情形
对于一般约束问题
minf(x),s.t.si(x)≥0,i=1,2,⋯,mhj(x)=0,j=1,2,⋯,lmin f(x), \\ s.t. \ \ s_{i}(x) \geq 0, \ \ i=1,2,\cdots, m\\ h_{j}(x)=0, j = 1,2,\cdots, l minf(x),s.t. si(x)≥0, i=1,2,⋯,mhj(x)=0,j=1,2,⋯,l
仿照前面的推导,可得增广目标函数为:
F(x,v,λ,μ)=F(x)+14μ∑i=1m{[max{0,vi−2μsi(x)}]2−vi2}−∑j=1lλjhj(x)+μ∑j=1l[hj(x)]2F(x,v,\lambda,\mu)=F(x)+\frac{1}{4\mu}\sum_{i=1}^{m}\{[max\{0,v_{i}-2\mu s_{i}(x)\}]^{2}-v_{i}^{2}\}-\sum_{j=1}^{l}\lambda_{j}h_{j}(x)+\mu\sum_{j=1}^{l}[h_{j}(x)]^{2} F(x,v,λ,μ)=F(x)+4μ1i=1∑m{[max{0,vi−2μsi(x)}]2−vi2}−j=1∑lλjhj(x)+μj=1∑l[hj(x)]2
乘子迭代公式为:
vik+1=max{0,vik−2μsi(xk)},i=1,2,⋯,mλjk+1=λjk−2μhj(xk),j=1,2,⋯,lv_{i}^{k+1}=max\{0,v_{i}^{k}-2\mu s_{i}(x_{k})\},i=1,2,\cdots ,m \\ \lambda_{j}^{k+1}=\lambda_{j}^{k}-2\mu h_{j}(x_{k}), j=1,2, \cdots, l vik+1=max{0,vik−2μsi(xk)},i=1,2,⋯,mλjk+1=λjk−2μhj(xk),j=1,2,⋯,l
其中λj\lambda_{j}λj代表的是第jjj等式约束所对应的Lagrange乘子,viv_{i}vi代表的是第iii不等式约束对应的Lagrange乘子,显然vi≥0v_{i}\geq0vi≥0。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!
约束最优化方法 (四) 乘子法相关推荐
- 拉格朗日乘子法解决带约束的极值问题
拉格朗日乘子法解决带约束的极值问题 1. 拉格朗日乘子法简介 2. Python实现小栗子 2.1 小栗子1:等式约束下的拉格朗日方程求解 2.2 小栗子2:给定一个椭球,求其内接长方体的最大体积 2 ...
- 数值计算之 拉格朗日乘子法初探
数值计算之 拉格朗日乘子法初探 前言 等式约束优化 等式约束的几何解释 不等式约束优化 多约束优化 KKT条件 代码示例 前言 LM算法的置信域方法中,通过在优化函数后添加一个优化量约束来提升迭代过程 ...
- 机器学习中的数学——拉格朗日乘子法(二):不等式约束与KKT条件
分类目录:<算法设计与分析>总目录 相关文章: ·拉格朗日乘子法(一):等式约束的拉格朗日乘子法 ·拉格朗日乘子法(二):不等式约束与KKT条件 现在接着<拉格朗日乘子法(一):等式 ...
- 最优化方法外罚函数法Matlab,最优化-罚函数法,乘子法
罚函数法: 求解约束条件下的最优化问题 罚函数法的思路就是改变函数f(x),将f(x) 变为F(x) 使得F(x)在无约束条件下取得的最优解,正好符合我们的约束条件,且正好为f(x)在约束条件下的最优 ...
- 最优化:拉格朗日乘子法
作者:桂. 时间:2017-03-27 20:26:17 链接:http://www.cnblogs.com/xingshansi/p/6628785.html 声明:欢迎被转载,不过记得注明出处哦~ ...
- 拉格朗日乘子法(Lagrange Multiplier)和KKT条件
拉格朗日乘子法(Lagrange Multiplier)和KKT条件 一:前言 如果我们现实生活中的多元值求最优化的问题,我们会遇到一下三种场景: 无条件约束的优化问题 有等式约束的优化问题 有不等式 ...
- 拉格朗日乘子法 KKT条件
目录 1. 拉格朗日乘子法用于最优化的原因 2. 最优化问题三种情况 2.1 无约束条件 2.2 等式约束条件:拉格朗日乘子法 2.3 不等式约束条件:KKT 3. Lagrange对偶函数 3.1 ...
- 对拉格朗日乘子法与KKT的理解
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
- 【数学基础】拉格朗日乘子法
概述 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
最新文章
- python数据分析基础 余本国_Python数据分析基础
- 测试你的前端代码 - part3(端到端测试)
- DayDayUp:今天早上看到一条朋友圈——《吃苦与穷的深刻认知》
- 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)
- linux 显示unix时间,小弟我使用过的Linux命令之uptime - 显示系统运行时间
- 诊断SQLSERVER问题常用的日志
- HDU - 1723 - Distribute Message
- kaggle入门项目:Titanic存亡预测(三)数据可视化与统计分析
- 公证服务信息_使用多个公证员提高网络吞吐量
- (238)数字IC工程师核心技能树(一)
- 【es】使用ElasticSearch的44条建议 性能优化
- 用户数据报协议是啥?看完这文就懂了!| 技术头条
- SpringCloud→分布式解决方案、包含主要工具、启动流程、web发展阶段、实现配置中心
- CentOS7搭建Docker私有仓库
- ParaView绘制自由水面的等值线图
- ampserv mysql升级_APMServ5.2.6升级PHP
- shiro 权限框架
- 阿德莱德大学计算机科学,School of Computer Science
- python 时间序列突变检测_Python 百度指数突变点检测
- 使用uni-app开发一个取流播放器(网络电视)app简陋版