[37] | 1 | function test_logic_sat_2 |
---|
| 2 | |
---|
| 3 | randn('seed',12345); |
---|
| 4 | rand('seed',12345); |
---|
| 5 | |
---|
| 6 | A1 = randn(8,2); |
---|
| 7 | b1 = rand(8,1)*2-A1*[3;3]; |
---|
| 8 | A2 = randn(8,2); |
---|
| 9 | b2 = rand(8,1)*2-A2*[-3;3]; |
---|
| 10 | A3 = randn(8,2); |
---|
| 11 | b3 = rand(8,1)*2-A3*[3;-3]; |
---|
| 12 | A4 = randn(8,2); |
---|
| 13 | b4 = rand(8,1)*2-A4*[-3;-3]; |
---|
| 14 | |
---|
| 15 | binvar inp1 inp2 inp3 inp4 |
---|
| 16 | F = set(inp1 | inp2 | inp3 | inp4); |
---|
| 17 | x = sdpvar(2,1); |
---|
| 18 | F = F + set(iff(inp1,A1*x < b1)); |
---|
| 19 | F = F + set(iff(inp2,A2*x < b2)); |
---|
| 20 | F = F + set(iff(inp3,A3*x < b3)); |
---|
| 21 | F = F + set(iff(inp4,A4*x < b4)); |
---|
| 22 | F = F + set(-100 < x < 100); |
---|
| 23 | sol = solvesdp(F,-x(2)); |
---|
| 24 | mbg_asserttolequal(sol.problem,0); |
---|
| 25 | mbg_asserttolequal(double(x),[1.89084694511033 4.32311245145436]',1e-6); |
---|
| 26 | mbg_asserttolequal(double([inp1 inp2 inp3 inp4]),[0 0 0 1]); |
---|
| 27 | |
---|
| 28 | F = set(inp1 | inp2 | inp3 | inp4); |
---|
| 29 | F = F + set(inp1 == (A1*x < b1)); |
---|
| 30 | F = F + set(inp2 == (A2*x < b2)); |
---|
| 31 | F = F + set(inp3 == (A3*x < b3)); |
---|
| 32 | F = F + set(inp4 == (A4*x < b4)); |
---|
| 33 | F = F + set(-100 < x < 100); |
---|
| 34 | sol = solvesdp(F,-x(2)); |
---|
| 35 | mbg_asserttolequal(sol.problem,0); |
---|
| 36 | mbg_asserttolequal(double(x),[1.89084694511033 4.32311245145436]',1e-6); |
---|
| 37 | mbg_asserttolequal(double([inp1 inp2 inp3 inp4]),[0 0 0 1]); |
---|
| 38 | |
---|
| 39 | F = set(inp1 | inp2 | inp3 | inp4); |
---|
| 40 | F = F + set(implies(inp1,A1*x < b1)); |
---|
| 41 | F = F + set(implies(inp2,A2*x < b2)); |
---|
| 42 | F = F + set(implies(inp3,A3*x < b3)); |
---|
| 43 | F = F + set(implies(inp4,A4*x < b4)); |
---|
| 44 | F = F + set(-100 < x < 100); |
---|
| 45 | sol = solvesdp(F,-x(2)); |
---|
| 46 | mbg_asserttolequal(sol.problem,0); |
---|
| 47 | mbg_asserttolequal(double(x),[1.89084694511033 4.32311245145436]',1e-6); |
---|
| 48 | mbg_asserttolequal(double([inp1 inp2 inp3 inp4]),[0 0 0 1]); |
---|
| 49 | |
---|
| 50 | F = set( (A1*x < b1) | (A2*x < b2) | (A3*x < b3) | (A4*x < b4)); |
---|
| 51 | F = F + set(-100 < x < 100); |
---|
| 52 | sol = solvesdp(F,-x(2)); |
---|
| 53 | mbg_asserttolequal(sol.problem,0); |
---|
| 54 | mbg_asserttolequal(double(x),[1.89084694511033 4.32311245145436]',1e-6); |
---|
| 55 | mbg_asserttolequal(double([inp1 inp2 inp3 inp4]),[0 0 0 1]); |
---|
| 56 | |
---|
| 57 | x = sdpvar(2,1); |
---|
| 58 | bounds(x,-100,100); |
---|
| 59 | F = set( (A1*x < b1) | (A2*x < b2) | (A3*x < b3) | (A4*x < b4)); |
---|
| 60 | F = F + set(-100 < x < 100); |
---|
| 61 | sol = solvesdp(F,-x(2)); |
---|
| 62 | mbg_asserttolequal(sol.problem,0); |
---|
| 63 | mbg_asserttolequal(double(x),[1.89084694511033 4.32311245145436]',1e-6); |
---|
| 64 | mbg_asserttolequal(double([inp1 inp2 inp3 inp4]),[0 0 0 1]); |
---|
| 65 | |
---|
| 66 | ii = sdpvar(1,1); |
---|
| 67 | jj = sdpvar(1,1); |
---|
| 68 | x = sdpvar(1,8); |
---|
| 69 | p = [0 1 7 2 3 4 3 20]; |
---|
| 70 | solvesdp(set(-100 < [x(:);ii;jj] < 100) + set(x == p)+set(x([ii jj]) <= 3)+set(ii~=jj),-ii-jj); |
---|
| 71 | mbg_asserttolequal(sol.problem,0); |
---|
| 72 | mbg_asserttolequal(min(double([ii jj])),[5]); |
---|
| 73 | mbg_asserttolequal(max(double([ii jj])),[7]); |
---|
| 74 | |
---|
| 75 | |
---|