ADMM在什么情况下使用,如何使用

原文链接:https://user.qzone.qq.com/553702786/blog/1500126869


  写了大量基于ADMM的代码,总结一下ADMM的一般使用前提:ADMM是针对于等式约束和小于等于型不等式约束两种情况,ADMM的交替,是指原始变量、分裂变量以及对偶变量(即拉格朗日系数, Lagrange  coefficient)三种变量的交替更新,目标函数是基于增广拉格朗日函数的,也称Augmented Lagrangian function(ALF)。这个ALF其实就是在我们大学高等数学中学习的拉格朗日乘子法基础上再增加一个二次惩罚项,至于为什么加的是二次惩罚项,主要因为我们求解的问题有个前提:针对于等式约束或者小于等于型不等式约束,恰能用二次惩罚项建模,这意味着,在收敛的时候,二次惩罚项中的值要几乎等于0,或者比较小,至于多小,取决于正则系数的选取。
  值得再深入讨论一下的是分裂Bregman方法,这种方法本质是不是新方法,就是缩放版的ADMM,很多外行人会以为两者有所差别,其实并无区别!
  第三点我们要讨论的是,变量替换的规则,是否要要将所有原始变量替换成分裂变量呢?例如令原始变量F赋值给分裂变量Z,是否需要将ALF中的所有F都变成Z呢?答案是否定的,一般我们仅仅将L1正则项中的原始变量进行变量替换,然后增加拉格朗日乘子项和二次惩罚项,这么做的目的是,去耦合的同时,简化计算。
% 基于ADMM的L1正则化求解

function z = L1_ADMM(b, lambda, beta, alpha)
% lasso  Solve lasso problem via ADMM
% Author: Yingpin Chen of UESTC and MNNU
% Solves the following problem via ADMM:
%   minimize 1/2*|| F - b ||_2^2 + \lambda || F ||_1
% beta is the augmented Lagrangian parameter.
% alpha is the over-relaxation parameter (typical values for alpha are
% between 1.0 and 1.8).
%******   Global constants and defaults   ******
n=length(b);
m=n;
MAX_ITER = 200;%默认值为1000
ABSTOL   = 1e-4;
RELTOL   = 1e-2;
%******   ADMM solver   ******
F = zeros(n,1);
z = zeros(n,1);
u = zeros(n,1);%u为z的共轭
for k = 1:MAX_ITER
    % F-update
    F = (b + beta*(z - u))*(1/(beta+1));
     
    % z-update with relaxation
    zold = z;
    F_hat = alpha*F + (1 - alpha)*zold;
    z = shrink(F_hat + u, lambda/beta);
    
    % u-update
    u = u + beta*(F_hat - z);
end
end


%%%矩阵+复数版软阈值收缩
%功能:矩阵、向量通用+复数版软阈值收缩
%超简洁版
%版本:V4.0
%作者:YingPin Chen
function y = shrink(x,mu)
    y = sign(x).*max(abs(x)-mu,0);     %这里的sign不仅仅可以求实数的正负号,还可以求复数的相位,更加简洁
end 

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
【资源说明】 基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip 基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip 基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip 基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip基于matlab实现ADMM算法在分布式调度中的应用源码+详细代码注释.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值