function [ff,fval_g,A_g,fval_b,A_b] = n1check(m,h) % [ff,fval_g,A_g,fval_b,A_b] = n1check(5,.4) %function [ff,fval_g,A_g] = n1check(m,h) %global m h global nstate FN nstate = m; %ff = rand(2*m,1); FN = randFN(m,2,1,0) global FN0 cc=[]; for i=1:m %for j=1:2 %for s=[-1 1] cc(i,1) = (F([1 i])+F([2 i])); cc(i+m,1) = -(F([1 i])+F([2 i])); %end end % box constraints LB = zeros(m*2,1)+1e-10; UB = ones(m*2,1); % normalization constraints Aeq = zeros(2,2*m); for i=1:2 for j=1:m Aeq(i,m*(i-1)+j) = 1; end end Beq = ones(2,1); % "good" constraints SIGNS = 2*list_all_ind(repmat([2],[1 m]))-3; Ain = zeros(size(SIGNS,1),m*2); rind = 0; for i1 = 1 for i2 = 2 for s = 1:size(SIGNS,1) rind = rind+1; ss = SIGNS(s,:); for j=1:m ind1 = coord2ind([j i1],[m 2]); ind2 = coord2ind([j i2],[m 2]); Ain(rind,ind1) = ss(j); Ain(rind,ind2) = -ss(j); end end end end Bin = ones(size(Ain,1),1)*h*2; [xp,fvalp] = linprog( cc,Ain,Bin,Aeq,Beq,LB,UB); [xn,fvaln] = linprog(-cc,Ain,Bin,Aeq,Beq,LB,UB); if abs(fvalp)>abs(fvaln) x_g = xp; fval_g = fvalp; else x_g = xn; fval_g = fvaln; end A_g = reshape(x_g,m,2); %return % "bad" constraints Ain = zeros(m*2,m*2); rind = 0; for i1 = 1 for i2 = 2 for j=1:m ind1 = coord2ind([j i1],[m 2]); ind2 = coord2ind([j i2],[m 2]); for s = [-1,1] rind = rind+1; Ain(rind,ind1) = s; Ain(rind,ind2) = -s; end end end end Bin = ones(size(Ain,1),1)*h; [xp,fvalp] = linprog( cc,Ain,Bin,Aeq,Beq,LB,UB); [xn,fvaln] = linprog(-cc,Ain,Bin,Aeq,Beq,LB,UB); if abs(fvalp)>abs(fvaln) x_b = xp; fval_b = fvalp; else x_b = xn; fval_b = fvaln; end A_b = reshape(x_b,m,2); ff=[]; for i=1:m for j=1:2 ff(i,j) = F([i j]); end end keyboard return function locobj(A,ff) s=0; s1=0; s2=0 for i=1:size(A,1) s = s + A(i,1)*ff(i,1) - A(i,2)*ff(i,2); s1 = s1 + (A(i,1)-A(i,2))*ff(i,1) + (A(i,1)-A(i,2))*ff(i,2); s2 = s2 + (ff(i,1)-ff(i,2))*A(i,1) + (ff(i,1)-ff(i,2))*A(i,2); end s s1 s2 s+s1+s2 return function r = F(x) %r = length(find(x~=1)); %return global nstate lenseq = length(x); global FN FF = FN{lenseq}; ind = coord2ind(x,(repmat(nstate,1,lenseq))); r = FF(ind)+10; return function h=goods(a) h = sum(abs(a(:,1)-a(:,2)))/2; return function h=bads(a) h = max(abs(a(:,1)-a(:,2))); return