source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/dev/regress_dppwa_5.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 5.4 KB
Line 
1yalmip('clear')
2
3
4% Data
5A = [2 -1;1 0];nx = 2;
6B = [1;0];nu = 1;
7C = [0.5 0.5];
8
9% Prediction horizon
10N = 3;
11
12% Future state
13% Now for two different noises
14x1  = sdpvar(repmat(nx,1,N),repmat(1,1,N));
15x2 = sdpvar(repmat(nx,1,N),repmat(1,1,N));
16
17% Current state
18x  = sdpvar(repmat(nx,1,N),repmat(1,1,N));
19
20% Inputs u(k), ..., u(k+N) (last one not used)
21u = sdpvar(repmat(nu,1,N),repmat(1,1,N));
22v = sdpvar(repmat(nu,1,N),repmat(1,1,N));
23
24% Binary for PWA selection
25d = binvar(2,1);
26
27% Value functions
28J = cell(1,N);
29
30% Initialize value function at stage N
31J{N} = 0;
32J1{N} = pwa(norm(x1{N},1),set(-10<x1{N}(1)<10));
33J2{N} = pwa(norm(x2{N},1),set(-10<x2{N}(1)<10));
34
35t = sdpvar(nx+nu,1);
36bounds(t,0,600);
37k = N-1
38for k = N-1:-1:1
39   
40    bounds(x{k},-5,5);
41    bounds(u{k},-1,1);
42    bounds(x1{k+1},-5,5);
43    bounds(x2{k+1},-5,5);
44   
45    % Feasible region
46    F =     set(-1 < u{k}      < 1);
47    F =     set(-1 < u{k}+v{k} < 1);
48    F = F + set(-1 < C*x{k}    < 1);
49    F = F + set(-5 < x{k}      < 5);
50   
51    F = F + set(-1 < C*x1{k+1} < 1);
52    F = F + set(-1 < C*x2{k+1} < 1);
53    F = F + set(-5 < x1{k}     < 5);   
54    F = F + set(-5 < x2{k}     < 5);   
55
56    % Two possible extreme predictions
57    F = F + set(x1{k+1} ==  A*x{k}+B*u{k});
58    F = F + set(x2{k+1} ==  pi*A*x{k}+B*(u{k}+v{k}));
59       
60    F = F + set(-t < [x{k};u{k}] < t) ;
61   
62    if k<N-1
63        % Create two value functions, minimize worst case
64        J1{k+1} = pwf(mpsol{k+1},x1{k+1},'convex');
65        J2{k+1} = pwf(mpsol{k+1},x2{k+1},'convex');
66        sdpvar w
67        F = F + set(J1{k+1} < w) + set(J2{k+1} < w);
68        obj = sum(t) + w;
69    else
70       % J1{N} = 0;
71       % J2{N} = 0;
72        sdpvar w
73        F = F + set(J1{k+1} < w) + set(J2{k+1} < w);
74        obj = sum(t)+w;       
75    end
76   [mpsol{k},sol{k},Uz{k},J{k}] = solvemp(F,obj,[],x{k},u{k});
77end
78
79
80mpsol{k} = rmovlps(mpsol{k})
81
82
83
84
85
86J{N} = pwa(norm(x{N},1),set(-10<x{N}(1)<10));
87t = sdpvar(nx+nu,1);
88bounds(t,0,600);
89k = N-1
90for k = N-1:-1:1
91 
92    bounds(x{k},-5,5);
93    bounds(u{k},-1,1);
94    bounds(x{k+1},-5,5);   
95    % Feasible region
96    F =     set(-1 < u{k}     < 1);
97    F = F + set(-1 < C*x{k}   < 1);
98    F = F + set(-5 < x{k}     < 5);   
99    % Two possible extreme predictions
100    F = F + set(x{k+1} ==  A*x{k}+B*u{k});
101    F = F + set(-t < [x{k};u{k}] < t) ; 
102    obj = sum(t)+J{k+1};       
103    [mpsol1{k}] = solvemp(F,obj,[],x{k},u{k});
104end
105   
106J{N} = pwa(norm(x{N},1),set(-10<x{N}(1)<10));
107t = sdpvar(nx+nu,1);
108bounds(t,0,600);
109k = N-1
110for k = N-1:-1:1
111 
112    bounds(x{k},-5,5);
113    bounds(u{k},-1,1);
114    bounds(x{k+1},-5,5);   
115    % Feasible region
116    F =     set(-1 < u{k}     < 1);
117    F = F + set(-1 < C*x{k}   < 1);
118    F = F + set(-5 < x{k}     < 5);   
119    % Two possible extreme predictions
120    F = F + set(x{k+1} ==  pi*A*x{k}+B*u{k});
121    F = F + set(-t < [x{k};u{k}] < t) ; 
122    obj = sum(t)+J{k+1};       
123    [mpsol2{k}] = solvemp(F,obj,[],x{k},u{k});
124end
125   
126   
127   
128   
129
130
131  J{N} = pwa(norm(x{N},1),set(-10<x{N}(1)<10));
132    bounds(x{k},-5,5);
133    bounds(u{k},-1,1);
134    bounds(x{k+1},-5,5);   
135    % Feasible region
136    F =     set(-1 < u{k}     < 1);
137    F = F + set(-1 < C*x{k}   < 1);
138    F = F + set(-5 < x{k}     < 5);   
139    % Two possible extreme predictions
140    F = F + set(x{k+1} ==  pi*A*x{k}+B*u{k});
141    F = F + set(-t < [x{k};u{k}] < t) ;
142   
143        obj = sum(t)+J{k+1};       
144   [mpsol2{k}] = solvemp(F,obj,[],x{k},u{k});
145   
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177break
178
179
180% Compare
181sysStruct.A{1} = A;
182sysStruct.B{1} = B;
183sysStruct.C{1} = C;
184sysStruct.D{1} = [0];
185sysStruct.A{2} = A;
186sysStruct.B{2} = B*pi;
187sysStruct.C{2} = C;
188sysStruct.D{2} = [0];
189sysStruct.guardX{1} = [-1 0];
190sysStruct.guardU{1} = [0];
191sysStruct.guardC{1} = [0];
192sysStruct.guardX{2} = [1 0];
193sysStruct.guardU{2} = [0];
194sysStruct.guardC{2} = [0];
195
196%set constraints on output
197sysStruct.ymin    =   -1;
198sysStruct.ymax    =    1;
199
200%set constraints on input
201sysStruct.umin    =   -1;
202sysStruct.umax    =   1;
203
204sysStruct.xmin    =   [-5;-5];
205sysStruct.xmax    =   [5;5];
206
207probStruct.norm=1;
208probStruct.Q=eye(2);
209probStruct.R=1;
210probStruct.N=N-1;
211probStruct.P_N=zeros(2);
212probStruct.subopt_lev=0;
213probStruct.y0bounds=1;
214probStruct.Tconstraint=0;
215ctrl=mpt_control(sysStruct,probStruct)
216
217mpt_isPWAbigger(ctrl,mpsol{1})
218break
219%[ii,jj] = isinside(ctrl.Pn,[1.2;0.8]);
220%ctrl.Bi{jj}*[1.2;0.8]+ctrl.Ci{jj}
221
222%
223%
224% % Online
225% obj = 0;
226% F = set([]);
227% dd = [];
228% for k = N-1:-1:1
229%     
230%     bounds(x{k},-5,5);
231%     bounds(u{k},-1,1);
232%     bounds(x{k+1},-5,5);
233%     
234%     % Feasible region
235%     F = F + set(-1 < u{k}     < 1);
236%     F = F + set(-1 < C*x{k}   < 1);
237%     F = F + set(-5 < x{k}     < 5);
238%     F = F + set(-1 < C*x{k+1} < 1);
239%     F = F + set(-5 < x{k+1}   < 5);
240%
241%     % PWA Dynamics
242%     d = binvar(2,1);dd = [dd;d];
243%     F = F + set(implies(d(1),x{k+1} == (A*x{k}+B*u{k})));
244%     F = F + set(implies(d(2),x{k+1} == (A*x{k}+pi*B*u{k})));
245%     F = F + set(implies(d(1),x{k}(1) > 0));
246%     F = F + set(implies(d(2),x{k}(1) < 0));
247%     F = F + set(sum(d) == 1);
248%    % F = F + set(-0.1 < u{k}-u{k+1} < 0.1);
249%     obj = obj + norm([x{k};u{k}],1);
250%     %obj = obj + x{k}'*x{k}+u{k}'*u{k};%norm([x{k};u{k}],1);
251%     % Compute value function for one step backwards     
252% end
253% [mpsol2{k},sol{k},Uz{k},J2{k},U{k}] = solvemp(F,obj,[],x{k},u{k});
254% solvesdp(F+set(x{k}==[0.5;0.5]),obj)
255% solvesdp(F+set(x{k}==[1.2;0.8]),obj)
256% mpsol{k} = solvemp(F,obj,[],x{k},u);
257% mpsol{1} = rmovlps(mpsol{1});
258%
259%
Note: See TracBrowser for help on using the repository browser.