function[phi,lvraisemblance] = constructionModelesLassoRank(Pi,Rho,mini,maxi,X,Y,tau,A1,rangmin,rangmax)

	PI = 4.0 * atan(1.0);

	%get matrix sizes
	[n,p] = size(X);
	[~,m,k,~] = size(Rho);
	L = size(A1, 2); %A1 est p x m+1 x L ou p x L ?!

	%On cherche les rangs possiblement intéressants
	deltaRank = rangmax - rangmin + 1;
	Size = deltaRank^k;
	Rank = zeros(Size,k,'int64');
	for r=1:k
		%On veut le tableau de toutes les combinaisons de rangs possibles
		%Dans la première colonne : on répète (rangmax-rangmin)^(k-1) chaque chiffre : ca remplit la colonne
		%Dans la deuxieme : on répète (rangmax-rangmin)^(k-2) chaque chiffre, et on fait ca (rangmax-rangmin)^2 fois
		%...
		%Dans la dernière, on répète chaque chiffre une fois, et on fait ca (rangmin-rangmax)^(k-1) fois.
		Rank(:,r) = rangmin + reshape(repmat(0:(deltaRank-1), deltaRank^(k-r), deltaRank^(r-1)), Size, 1);
	end

	%output parameters
	phi = zeros(p,m,k,L*Size);
	lvraisemblance = zeros(L*Size,2);
	for lambdaIndex=1:L
		%On ne garde que les colonnes actives
		%active sera l'ensemble des variables informatives
		active = A1(:,lambdaIndex);
		active(active==0) = [];
		if length(active) > 0
			for j=1:Size
				[phiLambda,LLF] = EMGrank(Pi(:,lambdaIndex),Rho(:,:,:,lambdaIndex),mini,maxi,X(:,active),Y,tau,Rank(j,:));
				lvraisemblance((lambdaIndex-1)*Size+j,:) = [LLF, sum(Rank(j,:) .* (length(active)-Rank(j,:)+m))];
				phi(active,:,:,(lambdaIndex-1)*Size+j) = phiLambda;
			end
		end
	end

end
