function ephilp(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 = 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; %if islip if 1 global Ainf Binf mylinopt mylinopt = optimset('Diagnostics','off'); mylinopt = optimset('Display','off'); %[Ainf,Binf] = lipab(m,n); Ainf = []; Binf = []; %Binf = Binf * Lipk; end 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 mind mind = 1e6; 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; % 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); fprintf('%s: PARAMS: n=%d m=%d; f in [%d,%d] \n',pstr,n,m,saf,raf); fprintf('DIFF _________________________ mind = %1.9f \n',mind); end return function y = myobj(x) global m n global Ainf Binf mylinopt global lstr rstr global LB UB saf raf global islip global Lipk global dorat 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); K = H*U - P; [x,fval] = linprog(K,Ainf,Binf,[],[],0*K+saf,0*K+raf,0,mylinopt); y = fval; global mind if (y < mind) global mindP mindF mindP = P; mindF = x; mind = y; fprintf('%s: PARAMS: n=%d m=%d; f in [%d,%d] \n',pstr,n,m,saf,raf); fprintf('DIFF _________________________ mind = %1.9f \n',mind); if y < -.01 save BADEPHID m n P y end end return