凸优化:ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法系列之二:Precursors

最近开始对凸优化(convex optimization)中的ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法开始感兴趣,接下来我会写一系列关于ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法的内容。

凸优化:ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法系列之二:Precursors

[本文地址:http://blog.csdn.net/shanglianlm/article/details/46808763]

2- 先导(Precursors)

2-1 对偶上升法(Dual Ascent)

设有如下优化问题:

minf(x)   s.t.    Ax=b         (2.1)

它的拉格朗日形式为:
L(x,λ)=f(x)+λT(Axb)

对偶形式为:
g(λ)=infxL(x,λ)=f(ATλ)bTλ

其中 f^* 是 f 的共轭函数。

The conjugate function
这里写图片描述
这里写图片描述

对偶问题为:

max g(λ)

假设强对偶成立,原问题和对偶问题的最优值一样(Assuming that strong duality holds, the optimal values of the primal and dual problems are the same)。
这里写图片描述

对偶上升法的迭代更新为:

xk+1=argminxL(x,λk)             (2.2)    x-
λk+1=λk+αk(Axk+1b)                (2.3)     

其中 αk>0 是步长。

2-2 对偶分解法(Dual Decomposition)

假设目标函数是可以分解的,即

f(x)=i=1Nfi(xi)

因此,拉格朗日函数可以改写为:
L(x,λ)=i=1NLi(xi,λ)=i=1N(fi(xi)+λTAixi(1/N)λTb)

所以它的迭代更新为:
xk+1i=argminxiLi(xi,λk)        (2.4)
λk+1=λk+αk(Axk+1b)        (2.5)

2-3 增广拉格朗日(Augmented Lagrangians)

为了增加对偶上升法的鲁棒性和放松函数 f 的强凸约束,我们引入增广拉格朗日(Augmented Lagrangians)形式:

Lρ(x,λ)=f(x)+λT(Axb)+(ρ/2)||Axb||22        (2.6)

其中惩罚因子 ρ>0
与 (2.1) 式相比,(2.6) 式只是增加了一个惩罚项。

2-4 乘子法(Method of Multipliers)

对应于的迭代公式为:

xk+1=argminxLρ(x,λk)        (2.7)
λk+1=λk+ρ(Axk+1b)        (2.8)

我们称之为乘子法(Method of Multipliers)。

将拉格朗日应用于对偶上升法可以极大地增加它的收敛属性,但是它要求一些代价。当 f 可以分解,而拉格朗日 Lρ 不能分解的,因此 (13) 式不能对每个 xi 并行最小化。这意味着乘子法不能被用来分解。于是我们引出ADMM (见 下节)。

参考或延伸材料:
[1]Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers
[2] 凸优化讲义
[3] A Note on the Alternating Direction Method of Multipliers

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交替方向乘子方法(Alternating Direction Method of Multipliers, ADMM)是一种用于解决约束优化问题的迭代算法,可以用于求解线性和非线性的凸优化问题。其基本思想是将原问题分解为若干个子问题,并通过引入拉格朗日乘子来将其联合起来求解。 下面给出使用MATLAB实现ADMM的示例代码: ``` function [x, y] = admm(A, b, rho, alpha, max_iter, tol) % A: 系数矩阵 % b: 右侧常数向量 % rho: ADMM参数 % alpha: 权重系数 % max_iter: 最大迭代次数 % tol: 误差阈值 [m, n] = size(A); x = zeros(n, 1); y = zeros(m, 1); z = zeros(n, 1); u = zeros(m, 1); AtA = A' * A; Atb = A' * b; for k = 1:max_iter % 更新x x = (rho * eye(n) + AtA) \ (rho * z - Atb + A' * (y - u)); % 更新y y = alpha * max(0, A * x + u - b - alpha/ rho) + (1 - alpha) * min(0, A * x + u - b + alpha / rho); % 更新z z = x + u / rho; % 更新u u = u + rho * (A * x - y + b); % 判断是否满足收敛条件 r = A * x - y; s = rho * (z - z_old); eps_pri = sqrt(n) * tol + tol * max(norm(A * x), norm(y)); eps_dual = sqrt(n) * tol + tol * norm(rho * u); if max(norm(r), norm(s)) < eps_pri && norm(rho * A' * u) < eps_dual break; end z_old = z; end end ``` 其中,x和y是ADMM算法的主要变量,分别对应原始问题中的决策变量和拉格朗日乘子。z是辅助变量,u是更新步长。在实现中,我们采用了一个非负惩罚函数来实现对y的非负约束。最后的收敛条件是通过判断残差r和s是否达到一定阈值来实现的。 关于ADMM的收敛特性,一般来说,它可以保证在满足一些条件的情况下收敛到原问题的最优解。具体而言,需要保证原问题是凸的、有界的、闭合的,且罚函数的参数rho足够大。此外,还需要保证原问题的约束条件是仿射的,即可以表示为线性等式或不等式的形式。当满足这些条件时,ADMM算法可以保证收敛到原问题的最优解,并且收敛速度通常比其他优化算法更快。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值