function setdecouple(m0,n0) global m n randomize m = m0; n = n0; global pstr pstr = mfilename global lstr rstr global islip islip = 1; global dorat dorat = 1; global U P0 P P = ones(m^n,1); P = P/sum(P); zz = P*0 + 1e-12; oo = P*0+1; U = P; P0 = P; global LB UB saf raf Lipk saf = 1; %raf = n; raf = 1e8; Lipk = 1; %raf = 100; pdim = m^n; xdim = pdim; LB = zeros(xdim,1); UB(1:pdim) = zz; UB = LB*0; UB(1:pdim) = oo; Aeq0 = zeros(1,xdim); Aeq0(1:pdim) = oo'; global maxr maxr = 0; global A Aii while 1 % pick an arb. marg. distr. %Pmarg = getmargs(P,m,n); %Pmarg = pnormdim(rand(m,n),1); Pmarg = pnormdim(ones(m,n),1); P = randgivenmarg(m,n,Pmarg); %P = unifP(m,n); % and corresponding marg. distr U = prodmeas(P,m,n); %U = P0; Aii = randbigset; % constrain all P to have Aii be big Ain = zeros(1,pdim); Ain(Aii) = -ones(1,length(Aii)); Bin = -1/2; % constrain P to have these marginals [Aeq,Beq] = constrain_marg(m,n,Pmarg); Aeq = [Aeq;Aeq0]; Beq(end+1)=1; %Aeq = Aeq0; %Beq = 1; x = P(:); y = fmincon(@myobj,x,[],[],Aeq,Beq,LB,UB); %y = fmincon(@myobj,x,Ain,Bin,Aeq,Beq,LB,UB); fprintf('%s: PARAMS: n=%d m=%d; \n',pstr,n,m); fprintf('maxr _________________________ maxr = %1.9f \n',maxr); end return function y = myobj(x) global m n global Aii global lstr rstr global pstr pdim = m^n; xdim = pdim; P = x(1:pdim); P = makepos(P); global U %U = prodmeas(P,m,n); [hh,Ht,H] = gethhn(P,m,n); lhs = sum(P(Aii)); rhs = H*sum(U(Aii)); %r = lhs/rhs; r = max(P./U)/H^2; y = -r; global maxr if (r > maxr) global maxP maxA maxP = P; maxA = Aii; maxr = r; fprintf('%s: PARAMS: n=%d m=%d; \n',pstr,n,m); fprintf('maxr _________________________ maxr = %1.9f \n',maxr); end return function Aii = randbigset global m n P Aii = []; rp = randperm(m^n); for i=1:length(rp) PA = sum(P(Aii)); if PA >= 1/2 break else Aii(end+1) = rp(i); end end return