FBF_PRIMAL_DUAL - forward backward forward primal dual
Program code:
function [sol, info] = fbf_primal_dual(x_0,f1, f2, f3, param)
%FBF_PRIMAL_DUAL forward backward forward primal dual
% Usage: sol = fbf_primal_dual(x_0,f1, f2, f3, param);
% sol = fbf_primal_dual(x_0,f1, f2, f3);
% [sol,info,objective] = fbf_primal_dual(...);
%
% Input parameters:
% x_0 : Starting point of the algorithm
% f1 : First function to minimize
% f2 : Second function to minimize
% f3 : Third function to minimize
% param : Optional parameters
% Output parameters:
% sol : Solution
% info : Structure summarizing informations at convergence
%
% FBF_PRIMAL_DUAL (using forward backward forward based primal dual)
% solves:
%
% sol = argmin f1(x) + f2(Lx) + f3(x)
%
% where x is the optimization variable with f_1 or f_3 a smooth
% function and L a linear operator. f_1 and f_3 are defined like
% other traditional functions.
%
% Note that f2 is a structure of a functions with:
%
% f2.eval(x_i) : an operator to evaluate the function
% f2.prox(x_i, gamma) : an operator to evaluate the prox of the function
%
% Optionally you can define
%
% f2.L : linear operator, matrix or operator (default identity)
% f2.Lt : adjoint of linear operator, matrix or operator (default identity)
% f2.norm_L : bound on the norm of the operator L (default: 1), i.e.
%
% ` ||L x||^2 <= nu * ||x||^2
%
%
% param a Matlab structure containing solver paremeters. See the
% function SOLVEP for more information. Additionally it contains those
% aditional fields:
%
% param.tol : is stopping criterion for the loop. The algorithm stops if
%
% max_i || y_i(t) - y_i(t-1) || / ||y(t) ||< tol,
%
% where y_i(t) are the dual variable of function i at itertion t*
% by default, tol=10e-4.
%
% Warning! This stopping criterion is different from other solvers!
%
% param.mu : parameter mu of paper [1]
% param.epsilon*: parameter epsilon of paper [1]
% param.normalized_timestep*: from 0 to 1, mapping to [epsilon,
% (1-epsilon)/mu]
%
% See also: solvep fb_based_primal_dual
%
% Demos: demo_fbb_primal_dual
%
% References:
% N. Komodakis and J.-C. Pesquet. Playing with duality: An overview of
% recent primal-dual approaches for solving large-scale optimization
% problems. arXiv preprint arXiv:1406.5429, 2014.
%
%
% Url: https://epfl-lts2.github.io/unlocbox-html/doc/solver/fbf_primal_dual.html
% Copyright (C) 2012-2016 Nathanael Perraudin.
% This file is part of UNLOCBOX version 1.7.4
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
% Author: Vassilis Kalofolias, Nathanael Perraudin
% Date: June 2015
% Testing: test_solvers
param.algo = 'FBF_PRIMAL_DUAL';
[sol, info] = solvep(x_0,{f1, f2, f3},param);
end