使用和增广拉格朗日类似的对偶上升方法,固定其中两个变量,去更新第三个变量的值。
ADMM 算法提供了一个将多优化变量问题转化为单优化变量问题的转化方式(即交替方向),并未涉及具体的下降方法,其中关 x和 z的更新过程需要结合具体的下降类算法,如梯度下降算法等。
ADMM的另一种形式:
如果令w=
,则增广拉格朗日函数可以写成:

上面这个式子被称为是ADMM的缩放形式。
推导过程:

相应地,更新步骤变为:

注意到,此时的
,即第k次迭代的w(k)等于其初值w(0)加上约束条件残差的累加和。
算法测试
求解例子

构造出该目标函数的增广拉格朗日表达式

使用 Matlab 编码【5】求解如下:
主函数
%% 定义参数
% x0,y0都是可行解
param.x0 = 1;
param.y0 = 1;
param.lambda = 1;
param.maxIter = 30;
param.beta = 1.1; % a constant
param.rho = 0.5;
[Hx,Fx] = getHession_F('f1');
[Hy,Fy] = getHession_F('f2');
param.Hx = Hx;
param.Fx = Fx;
param.Hy = Hy;
param.Fy = Fy;
%% solve problem using admm algrithm
[x,y] = solve_admm(param);
%% disp minimum
disp(['[x,y]:' num2str(x) ',' num2str(y)]);
ADMM求解函数:solve_admm
function [x,y] = solve_admm(param)
x = param.x0;
y = param.y0;
lambda = param.lambda;
beta = param.beta;
rho = param.rho;
Hx = param.Hx;
Fx = param.Fx;
Hy = param.Hy;
Fy = param.Fy;
%%
xlb = 0; % the lower bound of x
xub = 3; % the upper bound of x
ylb = 1;
yub = 4;
maxIter = param.maxIter;
i = 1;
funval = zeros(maxIter-1,1);
iterNum = zeros(maxIter-1,1);
while 1
if i == maxIter
break;
end
% solve x
Hxx = eval(Hx);
Fxx = eval(Fx);
x = quadprog(Hxx,Fxx,[],[],[],[],xlb,xub,[]); % Quadratic programming function
% solve y
Hyy = eval(Hy);
Fyy = eval(Fy);
y = quadprog(Hyy,Fyy,[],[],[],[],ylb,yub,[]);
% update lambda
lambda = lambda + rho*(2*x + 3*y -5); % ascend
funval(i) = compute_fval(x,y);
iterNum(i) = i;
i = i + 1;
end
plot(iterNum,funval,'-r');
end
求解函数的 Hessian 矩阵和导数的函数:getHession_F
function [H,F] = getHession_F(fn)
% fn : function name
% H : hessian matrix
% F : 一次项数系数
syms x y lambda rho;
if strcmp(fn,'f1') % 判断输入函数是 f1 的话
f = (x-1)^2 + lambda*(2*x + 3*y -5) + rho/2*(2*x + 3*y -5)^2;
H = hessian(f,x); % 计算函数的 Hessian 矩阵
F = (2*lambda + (rho*(12*y - 20))/2 - 2); % x 的系数
fcol = collect(f,{'x'}); % 固定y,默认x为符号变量
disp(fcol);
elseif strcmp(fn,'f2') % 判断输入函数是 f2 的话
f = (y-2)^2 + lambda*(2*x + 3*y -5) + rho/2*(2*x + 3*y -5)^2;
H = hessian(f,y);
F = (3*lambda + (rho*(12*x - 30))/2 - 4); % y 的系数
fcol = collect(f,{'y'}); % 固定x,默认y为符号变量
disp(fcol);
end
end
计算 ( x , y ) 对应的目标函数值函数:compute_fval
function fval = compute_fval(x,y)
fval = (x-1)^2 + (y-2)^2;
end
算法扩展
这里写一些关于ADMM算法扩展应用的个人理解:
在通信优化问题中,联合优化问题存在多个优化变量(比如,{ x , y , z }),等式或不等式约束中的多变量耦合导致问题直接求解的复杂度过大(尤其是当变量的维度过大时),但是由于占用了共同的资源约束又不可以直接进行变量分解,这时候为了利用ADMM并行求解的思想来处理较大规模的问题,就需要某种办法来引入等式约束将问题变成可以分解的形式。
ADMM方法就是通过 decomposition-coordination 的过程,通过连续协调规模小的局部的子问题的解来找到一个大规模的全局问题的解。
观察变量耦合的等式或不等式约束,看是引入“辅助变量”还是“复制变量”合适。
辅助变量可以替代原来的变量或约束,比如UAV集群轨迹优化中的防碰撞约束 ||q i [ t ] − q j [ t ] ||2 ≥ d min ,可以通过引入辅助变量 z i , j [ t ] = q i [ t ] − q j [ t ]来替代防碰撞约束中的 q i [ t ]和 q j [ t ] 以差值方式耦合的情况,原问题中增加了辅助变量 z i , j , 防碰撞约束可以被等式约束 A q = Z 替代,通过该方法可以将优化问题根据不同的UAVs进行分解,即 q i [ t ] 和 q j [ t ] 以并行方式求解。再比如某个UAV轨迹在相邻时隙之间的最大距离约束 ||q [ t ] − q [ t − 1 ]||2 ≤ v max δ ,也可以引入辅助变量 z [ t ] = q [ t ] − q [ t − 1 ] 来将优化问题在不同的slot上进行分解,q [ t ]和 q [ t − 1] 以并行方式求解。
复制变量就是增加原全局优化变量的一个局部替代变量,通过引入变量的复制变量来保证相同的变量最多出现在一个不等式约束中。比如,全局变量 x 和 y 的线性组合让问题不可分解,通过引入全局变量 x 的局部 copying variables x ˉ 来替代原优化问题中的原变量 x 在目标函数和约束的位置,注意此时也引入了等式约束 x = x ˉ 。这样变量 x 和 y 就可以以并行的方式求解了,同前面标准ADMM的 x 和 z 中的更新类似。
注意,一般而言原变量(global variables)和引入变量(local variables: 辅助变量、复制变量)的更新虽然都是基于 min/max (增广拉格朗日函数)实现,但二者的更新都是基于对方本次迭代中的值已知的前提下的,所以这样可以进行问题分解;local variables, global variables 和 lagrange multiples 是交替进行更新的。
参考资料
【1】http://www.stat.cmu.edu/~ryantibs/convexopt/lectures/admm.pdf (CMU凸优化课件-admm)
【2】https://www.cnblogs.com/wildkid1024/p/11041756.html
【3】Boyd S, Parikh N, Chu E, et al. Distributed optimization and statistical learning via the alternating direction method of multipliers[J]. Foundations and Trends® in Machine learning, 2011, 3(1): 1-122.
【4】https://zhuanlan.zhihu.com/p/103961917 (拉格朗日对偶(Lagrange duality)、KKT条件)
【5】https://zhuanlan.zhihu.com/p/286235184 (matlab实例代码)
【6】直接在matlab中搜索 doc quadprog,会显示该二次规划函数的使用方法.
【7】https://www.zhihu.com/question/36566112/answer/82474155
【8】https://www.zhihu.com/question/36566112/answer/79535746
【9】https://www.zhihu.com/question/36566112/answer/213686443
————————————————
本文转载自CSDN博主:Dr. Winwin
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_44655342/article/details/121899501