--- a +++ b/MLFre/DPC/SLEP/pathSolutionTGL.m @@ -0,0 +1,48 @@ +function [Sol,funVal,tsolver]=pathSolutionTGL(X, y, Lambda, opts) +%% solve the TGL problem for a sequence of parameter values + +% -------------------------- pass parameters ---------------------------- % +npar = length(Lambda); +p=size(X,2); +tsolver = zeros(1,npar); +Sol = zeros(p,npar); +funVal = zeros(1,npar); +ind = opts.ind; + +% ind1=[ +% [1, 2, sqrt(2)]', [1, 3, sqrt(3)]' +% ]; % the higher layer +% +% ind2=[ +% [1, 2, sqrt(2)]', [3,3,0]', [1, 3, sqrt(3)]' +% ]; % the higher layer + +% -------------------------- compute lambda ----------------------------- % +lambda_max=findLambdaMax(X'*y, p, ind, size(ind,2)); +if opts.rFlag == 1 + Lambda = Lambda * lambda_max; + opts.rFlag = 0; +end +[Lambdav,Lambda_ind] = sort(Lambda,'descend'); + +% -------------------- solve the problems sequentially ------------------ % +for i = 1:npar + fprintf('in solver step: %d\n',i); + if opts.init~=2 + if i == 1 + opts.x0=zeros(p,1); + else + opts.x0=x1; + end + end + + starts = tic; + %[x1, funVal1, ValueL1]= tree_LeastR(X, y, Lambdav(i), opts); + [x1, funVal1, ~]= tree_LeastR(X, y, Lambdav(i), opts); + tsolver(Lambda_ind(i)) = toc(starts); + funVal(Lambda_ind(i)) = funVal1(end); + Sol(:,Lambda_ind(i))=x1; +end + +end +