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

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

Added original make3d

File size: 4.1 KB
Line 
1yalmip('clear')
2clear all
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 = 4;
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));
22
23% Binary for PWA selection
24d = binvar(2,1);
25
26% Value functions
27J = cell(1,N);
28
29% Initialize value function at stage N
30
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
35
36t = sdpvar(nx+nu,1);
37bounds(t,0,600);
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 = F + set(-1 < C*x{k}   < 1);
48    F = F + set(-5 < x{k}     < 5);
49   
50    F = F + set(-1 < C*x1{k+1} < 1);
51    F = F + set(-1 < C*x2{k+1} < 1);
52    F = F + set(-5 < x1{k}     < 5);   
53    F = F + set(-5 < x2{k}     < 5);   
54
55    % PWA Dynamics, noise 1
56    F = F + set(implies(d(1),x1{k+1} == (A*x{k}+B*u{k}+[-0.001;0])));
57    F = F + set(implies(d(2),x1{k+1} == (A*x{k}+pi*B*u{k}+[-0.001;0])));
58   
59    % PWA Dynamics, noise 2
60    F = F + set(implies(d(1),x2{k+1} == (A*x{k}+B*u{k}+[0.001;0])));
61    F = F + set(implies(d(2),x2{k+1} == (A*x{k}+pi*B*u{k}+[0.001;0])));   
62   
63    % Region switcher
64    F = F + set(implies(d(1),x{k}(1) > 0));
65    F = F + set(implies(d(2),x{k}(1) < 0));
66    F = F + set(sum(d) == 1);
67   
68    F = F + set(-t < [x{k};u{k}] < t) ;
69   
70    if k<N-1
71        % Create two value functions, minimize worst case
72        J1{k+1} = pwf(mpsol{k+1},x1{k+1},'convexoverlapping');
73        J2{k+1} = pwf(mpsol{k+1},x2{k+1},'convexoverlapping');
74        sdpvar v
75        F = F + set(J1{k+1} < v) + set(J2{k+1} < v);
76        obj = sum(t) + v;
77    else
78        %J1{N} = 0;
79        %J2{N} = 0;
80        sdpvar v
81        F = F + set(J1{k+1} < v) + set(J2{k+1} < v);
82        obj = sum(t)+v;       
83    end
84   [mpsol{k},sol{k},Uz{k},J{k}] = solvemp(F,obj,[],x{k},u{k});
85end
86
87
88mpsol{k} = rmovlps(mpsol{k})
89
90break
91
92
93% Compare
94sysStruct.A{1} = A;
95sysStruct.B{1} = B;
96sysStruct.C{1} = C;
97sysStruct.D{1} = [0];
98sysStruct.A{2} = A;
99sysStruct.B{2} = B*pi;
100sysStruct.C{2} = C;
101sysStruct.D{2} = [0];
102sysStruct.guardX{1} = [-1 0];
103sysStruct.guardU{1} = [0];
104sysStruct.guardC{1} = [0];
105sysStruct.guardX{2} = [1 0];
106sysStruct.guardU{2} = [0];
107sysStruct.guardC{2} = [0];
108
109%set constraints on output
110sysStruct.ymin    =   -1;
111sysStruct.ymax    =    1;
112
113%set constraints on input
114sysStruct.umin    =   -1;
115sysStruct.umax    =   1;
116
117sysStruct.xmin    =   [-5;-5];
118sysStruct.xmax    =   [5;5];
119
120probStruct.norm=1;
121probStruct.Q=eye(2);
122probStruct.R=1;
123probStruct.N=N-1;
124probStruct.P_N=zeros(2);
125probStruct.subopt_lev=0;
126probStruct.y0bounds=1;
127probStruct.Tconstraint=0;
128ctrl=mpt_control(sysStruct,probStruct)
129
130mpt_isPWAbigger(ctrl,mpsol{1})
131break
132%[ii,jj] = isinside(ctrl.Pn,[1.2;0.8]);
133%ctrl.Bi{jj}*[1.2;0.8]+ctrl.Ci{jj}
134
135%
136%
137% % Online
138% obj = 0;
139% F = set([]);
140% dd = [];
141% for k = N-1:-1:1
142%     
143%     bounds(x{k},-5,5);
144%     bounds(u{k},-1,1);
145%     bounds(x{k+1},-5,5);
146%     
147%     % Feasible region
148%     F = F + set(-1 < u{k}     < 1);
149%     F = F + set(-1 < C*x{k}   < 1);
150%     F = F + set(-5 < x{k}     < 5);
151%     F = F + set(-1 < C*x{k+1} < 1);
152%     F = F + set(-5 < x{k+1}   < 5);
153%
154%     % PWA Dynamics
155%     d = binvar(2,1);dd = [dd;d];
156%     F = F + set(implies(d(1),x{k+1} == (A*x{k}+B*u{k})));
157%     F = F + set(implies(d(2),x{k+1} == (A*x{k}+pi*B*u{k})));
158%     F = F + set(implies(d(1),x{k}(1) > 0));
159%     F = F + set(implies(d(2),x{k}(1) < 0));
160%     F = F + set(sum(d) == 1);
161%    % F = F + set(-0.1 < u{k}-u{k+1} < 0.1);
162%     obj = obj + norm([x{k};u{k}],1);
163%     %obj = obj + x{k}'*x{k}+u{k}'*u{k};%norm([x{k};u{k}],1);
164%     % Compute value function for one step backwards     
165% end
166% [mpsol2{k},sol{k},Uz{k},J2{k},U{k}] = solvemp(F,obj,[],x{k},u{k});
167% solvesdp(F+set(x{k}==[0.5;0.5]),obj)
168% solvesdp(F+set(x{k}==[1.2;0.8]),obj)
169% mpsol{k} = solvemp(F,obj,[],x{k},u);
170% mpsol{1} = rmovlps(mpsol{1});
171%
172%
Note: See TracBrowser for help on using the repository browser.