m = 3 n = 3 phi = zeros(m^n,1); %combs = generate_combs(m^n,n); %nc = size(combs,1); LBK = -ones(size(phi)); UBK = ones(size(phi)); LBg = zeros(size(phi)); UBg = n+zeros(size(phi)); [Aing,Bing] = gradab(m^n); [Ainl,Binl] = lipab(m,n); GG = gengray(n,m); iif = invperm(GG+1); good = 1; loop = 1; while good %rp = randperm(nc); %rc = rp(1); %for rc=1:nc %com = combs(rc,:); if 0 com = zeros(m^n,1); rp = randperm(m^n); rp = rp(1:m); com(rp) = ones(m,1); phi = cumsum(com'); end if 1 % generate legit K & derive phi from it global cc A0=pnormdim(rand(m,m,n-1),1); C0 = pnormdim(rand(m,1),1); %C0 = zeros(m,1); C0(2)=1; x = optmasklp(A0,C0); K = cc; [x,fval] = linprog(-K,Ainl,Binl,[],[],LBg,UBg); %[x,fval] = linprog(-K,[],[],[],[],LBg,UBg); %**** need Lipschitz!!! phi = round(x'-min(x)); if round(rand) phi = randlip(m,n)'; end if phi*K < 0, K = -K; end end if 0 b = round(rand); b = 1; if b K = randn(m^n,1); else [x,fval] = linprog(-phi,[],[],[],[],LBK,UBK); K = x; end %if phi*K<0 % K = -K; %end ip = find(K>=0); in = find(K<0); K(ip) = K(ip)/sum(K(ip)); K(in) = K(in)/abs(sum(K(in))); end if 0 [sK,iik] = sort(K); iif = invperm(iik); [x,fval] = linprog(-sK,Aing,Bing,[],[],LBg,UBg); phi = x(iif)'-min(x); end if 0 [x,fval] = linprog(-K,Ainl,Binl,[],[],LBg,UBg); phi = round(x'-min(x)); end if 0 [K,fval] = linprog(-phi',[],[],ones(1,m^n),0,LBK,UBK); if phi*K < 0, K = -K; end ip = find(K>=0); in = find(K<0); K(ip) = K(ip)/sum(K(ip)); K(in) = K(in)/abs(sum(K(in))); else [K,fval] = linprog(-phi',[],[],[],[],LBK,UBK); end b=round(rand); if b if round(rand) [K,fval] = linprog(-phi',[],[],[],[],LBK,UBK); else [K,fval] = linprog(-phi',[],[],ones(1,m^n),0,LBK,UBK); end else K = randn(m^n,1); end b=round(rand); if b ip = find(K>=0); in = find(K<0); K(ip) = K(ip)/sum(K(ip)); K(in) = K(in)/abs(sum(K(in))); end if phi*K < 0, K = -K; end [MU,S] = k2mask(K,m,n); %S = randk2mask(K,m,n); phim = fillgmask(MU,m); good = (phi*K <= S + 1e-9); if ~good 'rats' keyboard end if phi*K > sum(K.*(K>0)) 'vindication!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' end %fprintf('...........................loop %d: completed %d out of %d \n',loop,rc,nc); %end end