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 | |
---|