乘子法

本文先简要介绍三个乘子法,它们的收敛条件依次减弱(不做具体介绍),然后应用 ADMM 算法求解 Basis pursuit 问题最后读读 Boyd 给出的代码。

Lagrange Multiplier(拉格朗日乘子法)

Augmented Lagrangian Multiplier(增广拉格朗日乘子法,ALM)

Alternating Direction Method of Multipliers(变方向乘子法,ADMM)

乘子法部分参考文献[1]。

拉格朗日乘子法

考虑如下等式约束的优化问题

用拉格朗日乘子法求解,先写出拉格朗日函数:

其中

 是拉格朗日乘子。它的对偶函数为

对偶问题为

我们需要的解是

这里的

 是对偶问题的最优解,下面我们用梯度下降法求解它。迭代公式为

其中

①总结拉格朗日乘子法的更新方法如下:

增广拉格朗日乘子法

用增广拉格朗日乘子法求解,先写出增广拉格朗日函数:

②类似拉格朗日乘子法,增广拉格朗日乘子法的更新方法如下:

ADMM

ADMM 问题形式(with

 convex)

它的增广拉格朗日函数为

③ADMM 的更新方法如下:

Basis pursuit

优化目标:

写成 ADMM 的形式

其中

 表示指示函数,相关的内容我在 [Opt] 近端最小化算法 有写过。那么它的增广拉格朗日函数为

第一步:更新

 :

我们记

 。上述问题为

 在仿射集上的投影问题,求解参考[4],具体原理等内容我在 [ML] 深入线性回归 提到过。

它的解为

 。

第二步:更新

 :

第三步,更新乘子

因此我们只要按如下等价地更新

 即可

④ 总结 Basis pursuit 更新方法如下:

MATLAB 代码

运行结果

左实线:目标函数值迭代更新变化曲线

右上实线:primal residual

右上虚线:primal feasibility tolerance

右下实线:dual residual

右下虚线:dual feasibility tolerance

MATLAB 中在命令行窗口输入如下指令获取 basis_pursuit 函数

grabcode("http://web.stanford.edu/~boyd/papers/admm/basis_pursuit/basis_pursuit.html")

输入以下指令获取 Basis pursuit example 测试代码

grabcode("http://web.stanford.edu/~boyd/papers/admm/basis_pursuit/basis_pursuit_example.html")

basis_pursuit.m

function[z, history] =basis_pursuit(A, b, rho, alpha)% basis_pursuit Solve basis pursuit via ADMM

%

% [x, history] = basis_pursuit(A, b, rho, alpha)

%

% Solves the following problem via ADMM:

%

% minimize ||x||_1

% subject to Ax = b

%

% The solution is returned in the vector x.

%

% history is a structure that contains the objective value, the primal and

% dual residual norms, and the tolerances for the primal and dual residual

% norms at each iteration.

%

% rho is the augmented Lagrangian parameter.

%

% alpha is the over-relaxation parameter (typical values for alpha are

% between 1.0 and 1.8).

%

% More information can be found in the paper linked at:

% http://www.stanford.edu/~boyd/papers/distr_opt_stat_learning_admm.html

%

t_start = tic;

%% Global constants and defaults

QUIET = 0;

MAX_ITER = 1000;

ABSTOL = 1e-4; % 绝对误差容限

RELTOL = 1e-2; % 相对误差容限

%% Data preprocessing

[~, n] = size(A);

%% ADMM solver

x = zeros(n,1);

z = zeros(n,1);

u = zeros(n,1);

if ~QUIET

fprintf(‘%3s\t%10s\t%10s\t%10s\t%10s\t%10s\n‘, ‘iter‘, ...

‘r norm‘, ‘eps pri‘, ‘s norm‘, ‘eps dual‘, ‘objective‘);

end

% precompute static variables for x-update (projection on to Ax=b)

AAt = A*A‘;

P = eye(n) - A‘ * (AAt \ A);

q = A‘ * (AAt \ b);

for k = 1:MAX_ITER

% x-update

x = P*(z - u) + q;

% z-update with relaxation

zold = z;

x_hat = alpha*x + (1 - alpha)*zold; % 带松弛的更新方法

z = shrinkage(x_hat + u, 1/rho);

u = u + (x_hat - z);

% diagnostics, reporting, termination checks

history.objval(k) = objective(A, b, x);

history.r_norm(k) = norm(x - z); % primal residual

history.s_norm(k) = norm(-

matlab增广拉格朗日,[Opt] 拉格朗日乘子法 | ADMM | Basis pursuit相关推荐

  1. 增广拉格朗日乘子法、ADMM

    增广拉格朗日乘子法 关于拉格朗日的定义,具体见:http://mp.blog.csdn.net/mdeditor/79341632 概述 增广拉格朗日乘子法(Augmented Lagrange Me ...

  2. RPCA的算法推导-增广拉格朗日乘子法- PPT讲解

    大家好,今天我要讲的是RPCA,那么什么是RPCA呢,它又有什么作用呢,在这里我分了四个部分去讲,背景和意义,RPCA的研究内容,也就是算法的推导,RPCA在现实中的应用.在很多的具体问题中,我们可以 ...

  3. 一文详解从拉格朗日乘子法、KKT条件、对偶上升法到罚函数与增广Lagrangian乘子法再到ADMM算法(交替方向乘子法)

    最近看了ADMM算法,发现这个算法需要用到许多不少前备知识,在搜索补齐这些知识的过程中感觉网上的资料与总结在零散的同时又不够清晰,在此本文对这一块的内容进行汇总,同时表达自己的一些理解. 目录 拉格朗 ...

  4. 增广拉格朗日乘子法(Augmented Lagrange Method)

    增广拉格朗日乘子法(Augmented Lagrange Method) 在了解增广拉格朗日乘子法之前,我们先了解一下基本拉格朗日乘子法 拉格朗日乘子法 基本的拉格朗日乘子法,常用于解决函数在约束条件 ...

  5. 凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)

    凸优化学习 我们前面说过,拉格朗日法在实际中应用不大.为什么呢?因为 α \alpha α的取值很难取,这就导致拉格朗日法鲁棒性很低,收敛很慢,解很不稳定.于是就有了今天的增广拉格朗日法和ADMM. ...

  6. 增广拉格朗日乘子法ALM

    增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题,http://www.cnblogs.com/lochan/p/6000678.html 假定需要求解的问题如下: minimize f(X) ...

  7. 【OR】增广拉格朗日乘子法

    导航 乘子法 不等式约束 参考资料 乘子法 考虑带约束的优化问题(P)(P)(P) min⁡f(x)s.t.hi(x)=0,i=1,-,l\min f(x)\\ s.t. \quad h_i(x)=0 ...

  8. 约束优化:PHR-ALM 增广拉格朗日函数法

    文章目录 约束优化:PHR-ALM 增广拉格朗日函数法 等式约束非凸优化问题的PHR-ALM 不等式约束非凸优化问题的PHR-ALM 对于一般非凸优化问题的PHR-ALM 参考文献 约束优化:PHR- ...

  9. 基于蒙特卡诺和拉格朗日乘子法的电动车调度【有序、无序充放电】【Matlab代码】

    目录 1 概述 2 蒙特卡洛模拟方法介绍 3 拉格朗日乘子法 4 规模化电动汽车充电负荷预测计算方法 5 Matlab代码实现 1 概述 电动汽车EV(Electric Vehicle)具有清洁环保. ...

最新文章

  1. 软件工具将GPU代码迁移到fpga以用于AI应用
  2. Perl时间处理函数
  3. 孙立岩 python-basic: 用于学习python基础的课件(161718)
  4. javascript 值传递与作用域
  5. web自动化测试---概述
  6. rewrite.php wordpress 缓存 固定连接,【转】Wordpress中文标签无法正常连接 - 完美解决方案...
  7. Java实现获取HDFS子目录数量_Java实现读取HDFS目录
  8. 【EFCORE笔记】异步查询工作原理注释标记
  9. 丘成桐在CNCC会议的演讲全文
  10. 广搜 广搜 poj 3984
  11. 合成视频以假乱真新高度!商汤科技、中科院、南洋理工大学联合提出当前最高清的语音驱动视频生成系统...
  12. IIS6.0下ASP的新增功能
  13. Dubbo学习总结(6)——Dubbo开源现状与未来规划
  14. java中实现多线程的两种基本方法
  15. K3/Cloud 用插件打开一张已存在的单据
  16. SQL数据库置疑问题的处理方法
  17. 利用Python实现简单的相似图片搜索
  18. VC无进程木马下载器源码(利用IE隐藏进程)
  19. 武汉适合几月份去旅游 武汉必去景点
  20. 001 第一季:SpringBoot2核心技术

热门文章

  1. C++ atof 函数
  2. MATLAB汽车号牌识别系统设计
  3. 介绍一下迪士尼动画法则
  4. win10引导安卓x86_微软确认Win10手机支持X86架构 iOS/Android震撼了!
  5. Ubuntu16.04设置扩展屏幕左右位置 及图形化方式
  6. 文本的下划线的几种方式
  7. HTML+CSS写网站的Logo部分
  8. Node.js学习十(url 网址)
  9. Schnorr协议:非交互零知识身份证明和数字签名
  10. 【python初级】10进制与2进制8进制16进制的转换