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

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

Added original make3d

File size: 3.2 KB
Line 
1yalmip('clear')
2%clear all
3
4% Data
5A = [2 -1;1 0];nx = 2;
6B1 = [1;0];
7B2 = pi*B1;
8nu = 1;
9C = [0.5 0.5];
10
11% Prediction horizon
12N = 4;
13
14% States x(k), ..., x(k+N)
15x = sdpvar(repmat(nx,1,N),repmat(1,1,N));
16
17% Inputs u(k), ..., u(k+N) (last one not used)
18u = sdpvar(repmat(nu,1,N),repmat(1,1,N));
19
20% Binary for PWA selection
21d = binvar(repmat(2,1,N),repmat(1,1,N));
22
23% Value functions
24J = cell(1,N);
25
26% Initialize value function at stage N
27J{N} = 0;
28
29% DP iteration from final state
30for k = N-1:-1:1
31
32    % Control constraints
33    F = set(-1 < u{k} < 1);
34   
35    % We are in a feasible region...
36    F = F + set(-1 < C*x{k}   < 1);
37    F = F + set(-5 < x{k}     < 5);
38   
39    % ...and go to a feasible region
40    F = F + set(-1 < C*x{k+1} < 1);
41    F = F + set(-5 < x{k+1}   < 5);
42
43    % PWA Dynamics
44    F = F + set(implies(d{k}(1),[x{k+1} == A*x{k}+B1*u{k}, x{k}(1) > 0]));
45    F = F + set(implies(d{k}(2),[x{k+1} == A*x{k}+B2*u{k}, x{k}(1) < 0]));
46    F = F + set(sum(d{k}) == 1);
47   
48    % L1 objective
49    obj = norm(x{k},1) + norm(u{k},1);
50       
51   [mpsol{k},sol{k},aux{k},J{k},U{k}] = solvemp(F,obj + J{k+1},[],x{k},u{k});
52
53end
54
55
56
57
58
59break
60
61
62
63break
64mpsol{1} = mpt_removeOverlaps(mpsol{1})
65
66% Compare
67sysStruct.A{1} = A;
68sysStruct.B{1} = B1;
69sysStruct.C{1} = C;
70sysStruct.D{1} = [0];
71sysStruct.A{2} = A;
72sysStruct.B{2} = B2;
73sysStruct.C{2} = C;
74sysStruct.D{2} = [0];
75sysStruct.guardX{1} = [-1 0];
76sysStruct.guardU{1} = [0];
77sysStruct.guardC{1} = [0];
78sysStruct.guardX{2} = [1 0];
79sysStruct.guardU{2} = [0];
80sysStruct.guardC{2} = [0];
81
82%set constraints on output
83sysStruct.ymin    =   -1;
84sysStruct.ymax    =    1;
85
86%set constraints on input
87sysStruct.umin    =   -1;
88sysStruct.umax    =   1;
89
90sysStruct.xmin    =   [-5;-5];
91sysStruct.xmax    =   [5;5];
92
93probStruct.norm=1;
94probStruct.Q=eye(2);
95probStruct.R=1;
96probStruct.N=N-1;
97probStruct.P_N=zeros(2);
98probStruct.subopt_lev=0;
99probStruct.y0bounds=1;
100probStruct.Tconstraint=0;
101ctrl=mpt_control(sysStruct,probStruct)
102
103mpt_isPWAbigger(ctrl,mpsol{1})
104break
105%[ii,jj] = isinside(ctrl.Pn,[1.2;0.8]);
106%ctrl.Bi{jj}*[1.2;0.8]+ctrl.Ci{jj}
107
108%
109%
110% Online
111obj = 0;
112F = set([]);
113dd = [];
114for k = N-1:-1:1
115   
116    % Feasible region
117    F = F + set(-1 < u{k}     < 1);
118    F = F + set(-1 < C*x{k}   < 1);
119    F = F + set(-5 < x{k}     < 5);
120    F = F + set(-1 < C*x{k+1} < 1);
121    F = F + set(-5 < x{k+1}   < 5);
122
123    % PWA Dynamics
124    d = binvar(2,1);dd = [dd;d];
125    F = F + set(implies(d(1),x{k+1} == (A*x{k}+B1*u{k})));
126    F = F + set(implies(d(2),x{k+1} == (A*x{k}+B2*u{k})));
127    F = F + set(implies(d(1),x{k}(1) > 0));
128    F = F + set(implies(d(2),x{k}(1) < 0));
129    F = F + set(sum(d) == 1);
130   
131    F1 = set(x{k+1} == (A*x{k}+B1*u{k})) + set(x{k}(1) > 0);
132    F2 = set(x{k+1} == (A*x{k}+B2*u{k})) + set(x{k}(1) < 0);
133   
134    %F = F + hull(F1,F2);
135   
136   % obj = obj + norm([x{k};u{k}],1);
137    obj = obj + norm([x{k};u{k}],1);
138%    obj = obj + norm([x{k};u{k}],1);
139    % Compute value function for one step backwards     
140end
141mpsol2{k} = solvemp(F,obj,[],x{k},u{k});
142mpsol3{k} = dua_test(F,obj,[],x{k});
143solvesdp(F+set(x{k}==[0.5;0.5]),obj)
144solvesdp(F+set(x{k}==[1.2;0.8]),obj)
145mpsol{k} = solvemp(F,obj,[],x{k},u);
146mpsol2{1} = rmovlps(mpsol2{1});
147
148mpsol1{k} = solvemp(F,obj,[],x{k},u{k});
149%
Note: See TracBrowser for help on using the repository browser.