1 | |
---|
2 | A1 = randn(8,2); |
---|
3 | b1 = rand(8,1)*2-A1*[3;3]; |
---|
4 | A2 = randn(8,2); |
---|
5 | b2 = rand(8,1)*2-A2*[-3;3]; |
---|
6 | A3 = randn(8,2); |
---|
7 | b3 = rand(8,1)*2-A3*[3;-3]; |
---|
8 | A4 = randn(8,2); |
---|
9 | b4 = rand(8,1)*2-A4*[-3;-3]; |
---|
10 | |
---|
11 | plot(polytope(A1,b1),polytope(A2,b2),polytope(A3,b3),polytope(A4,b4)) |
---|
12 | |
---|
13 | yalmip('clear') |
---|
14 | binvar inp1 inp2 inp3 inp4 |
---|
15 | |
---|
16 | x = sdpvar(2,1);bounds(x,-100,100) |
---|
17 | y = sdpvar(1); bounds(y,-100,100); |
---|
18 | |
---|
19 | F = set([]); |
---|
20 | F = F + set(iff(inp1,A1*x < b1)); |
---|
21 | F = F + set(iff(inp2,A2*x < b2)); |
---|
22 | F = F + set(iff(inp3,A3*x < b3)); |
---|
23 | F = F + set(iff(inp4,A4*x < b4)) |
---|
24 | F = F + set(iff(inp4,y==pi)); |
---|
25 | F = F + set(inp1 | inp2 | inp3 | inp4); |
---|
26 | %F = F + set(inp1 + inp2 + inp3 + inp4 == 1); |
---|
27 | F=F+set(x==[-3;-4]) |
---|
28 | |
---|
29 | solvesdp(F,x(2)) |
---|
30 | |
---|
31 | F = set([]); |
---|
32 | F = F + set(inp1 == (A1*x < b1)); |
---|
33 | F = F + set(inp2 == (A2*x < b2)); |
---|
34 | F = F + set(inp3 == (A3*x < b3)); |
---|
35 | F = F + set(inp4 == (A4*x < b4)) |
---|
36 | F = F + set(inp2 == (y==pi)); |
---|
37 | F = F + set(inp1 | inp2 | inp3 | inp4); |
---|
38 | solvesdp(F,x(2)) |
---|
39 | |
---|
40 | |
---|
41 | binvar inp1 inp2 inp3 inp4 |
---|
42 | |
---|
43 | x = sdpvar(2,1); |
---|
44 | |
---|
45 | F = set([]); |
---|
46 | F = F + set(iff(A1*x < b1,inp1)); |
---|
47 | F = F + set(iff(A2*x < b2,inp2)); |
---|
48 | F = F + set(iff(A3*x < b3,inp3)); |
---|
49 | F = F + set(iff(A4*x < b4,inp4)) |
---|
50 | |
---|
51 | F = F + set(inp1 | inp2 | inp3 | inp4); |
---|
52 | |
---|
53 | |
---|
54 | solvesdp(F,x(2)) |
---|
55 | |
---|
56 | |
---|
57 | |
---|
58 | x = sdpvar(2,1);bounds(x,-1000,1000) |
---|
59 | F = set( (A1*x < b1) | (A2*x < b2) | (A3*x < b3) | (A4*x < b4)); |
---|
60 | solvesdp(F,x(2)); |
---|
61 | |
---|
62 | |
---|
63 | clear all |
---|
64 | pwa_di |
---|
65 | yalmip('clear') |
---|
66 | N=3; |
---|
67 | for i=1:N |
---|
68 | x{i} = sdpvar(2,1);bounds(x{i},-[5;5],[5;5]); |
---|
69 | u{i} = sdpvar(1,1);bounds(u{i},-1,1); |
---|
70 | y{i} = sdpvar(2,1);bounds(y{i},-[5;5],[5;5]); |
---|
71 | end |
---|
72 | delta = binvar(N,4); |
---|
73 | |
---|
74 | F = set(x{1} == [0.1;0.11]); |
---|
75 | |
---|
76 | for i = 1:N |
---|
77 | F = F + set(sysStruct.umin < u{i} < sysStruct.umax); |
---|
78 | F = F + set(sysStruct.ymin < y{i} < sysStruct.ymax); |
---|
79 | |
---|
80 | for j = 1:4 |
---|
81 | F = F + set(iff(sysStruct.guardX{j}*x{i} < sysStruct.guardC{j},delta(i,j))); |
---|
82 | F = F + set(iff(delta(i,j),y{i} == [sysStruct.C{j} sysStruct.D{j} sysStruct.g{j}]*[x{i};u{i};1])); |
---|
83 | end |
---|
84 | end |
---|
85 | for i = 1:N-1 |
---|
86 | for j = 1:4 |
---|
87 | F = F + set(iff(delta(i,j),x{i+1} == [sysStruct.A{j} sysStruct.B{j} sysStruct.f{j}]*[x{i};u{i};1])); |
---|
88 | end |
---|
89 | end |
---|
90 | |
---|
91 | tu = sdpvar(N,1) |
---|
92 | ty = sdpvar(N,1) |
---|
93 | tx = sdpvar(N,1) |
---|
94 | for i = 1:N |
---|
95 | F = F + set(-tu(i) < u{i} < tu(i))+set(-ty(i) < y{i} < ty(i))+set(-tx(i) < 8*(x{i}-0*[0.1;0.11]) < tx(i)); |
---|
96 | end |
---|
97 | F=F+set(sum(delta,2)==1); |
---|
98 | solvesdp(F,sum(2*tu)+sum(ty(1:end))+sum(tx(1:end))) |
---|
99 | |
---|
100 | |
---|
101 | |
---|
102 | |
---|
103 | |
---|