source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/dev/regress_dppwa_6.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;
6B = [1;0];nu = 1;
7C = [0.5 0.5];
8
9% Prediction horizon
10N = 4;
11
12% States x(k), ..., x(k+N)
13x = sdpvar(repmat(nx,1,N),repmat(1,1,N));
14
15% Inputs u(k), ..., u(k+N) (last one not used)
16u = sdpvar(repmat(nu,1,N),repmat(1,1,N));
17
18% Binary for PWA selection
19d = binvar(2,1);
20
21% Value functions
22J = cell(1,N);
23
24% Initialize value function at stage N
25J{N} = 0;
26t = sdpvar(nx+nu,1);
27bounds(t,0,600);
28for k = N-1:-1:1
29   
30    bounds(x{k},-5,5);
31    bounds(u{k},-1,1);
32    bounds(x{k+1},-5,5);
33   
34    % Feasible region
35    F =     set(-1 < u{k}     < 1);
36    F = F + set(-1 < C*x{k}   < 1);
37    F = F + set(-5 < x{k}     < 5);
38    F = F + set(-1 < C*x{k+1} < 1);
39    F = F + set(-5 < x{k+1}   < 5);
40
41    % PWA Dynamics
42    F = F + set(implies(d(1),x{k+1} == (A*x{k}+B*u{k})));
43    F = F + set(implies(d(2),x{k+1} == (pi*A*x{k}+B*u{k})));
44    F = F + set(implies(d(1),x{k}(1) > 0));
45    F = F + set(implies(d(2),x{k}(1) < 0));
46    F = F + set(sum(d) == 1);
47    sdpvar v
48    F = F + set(J{k+1}<v);
49   
50    F = F + set(-t < [x{k};u{k}] < t) ;
51
52   [mpsol{k},sol{k},Uz{k},J{k}] = solvemp(F,sum(t) + v,[],x{k},u{k});
53  % plot(mpsol{k}{1}.Pn)
54  % pause
55end
56
57mpsol{1} = rmovlps(mpsol{1})
58
59% Compare
60sysStruct.A{1} = A;
61sysStruct.B{1} = B;
62sysStruct.C{1} = C;
63sysStruct.D{1} = [0];
64sysStruct.A{2} = A;
65sysStruct.B{2} = B*pi;
66sysStruct.C{2} = C;
67sysStruct.D{2} = [0];
68sysStruct.guardX{1} = [-1 0];
69sysStruct.guardU{1} = [0];
70sysStruct.guardC{1} = [0];
71sysStruct.guardX{2} = [1 0];
72sysStruct.guardU{2} = [0];
73sysStruct.guardC{2} = [0];
74
75%set constraints on output
76sysStruct.ymin    =   -1;
77sysStruct.ymax    =    1;
78
79%set constraints on input
80sysStruct.umin    =   -1;
81sysStruct.umax    =   1;
82
83sysStruct.xmin    =   [-5;-5];
84sysStruct.xmax    =   [5;5];
85
86probStruct.norm=1;
87probStruct.Q=eye(2);
88probStruct.R=1;
89probStruct.N=N-1;
90probStruct.P_N=zeros(2);
91probStruct.subopt_lev=0;
92probStruct.y0bounds=1;
93probStruct.Tconstraint=0;
94ctrl=mpt_control(sysStruct,probStruct)
95
96mpt_isPWAbigger(ctrl,mpsol{1})
97break
98%[ii,jj] = isinside(ctrl.Pn,[1.2;0.8]);
99%ctrl.Bi{jj}*[1.2;0.8]+ctrl.Ci{jj}
100
101%
102%
103% % Online
104% obj = 0;
105% F = set([]);
106% dd = [];
107% for k = N-1:-1:1
108%     
109%     bounds(x{k},-5,5);
110%     bounds(u{k},-1,1);
111%     bounds(x{k+1},-5,5);
112%     
113%     % Feasible region
114%     F = F + set(-1 < u{k}     < 1);
115%     F = F + set(-1 < C*x{k}   < 1);
116%     F = F + set(-5 < x{k}     < 5);
117%     F = F + set(-1 < C*x{k+1} < 1);
118%     F = F + set(-5 < x{k+1}   < 5);
119%
120%     % PWA Dynamics
121%     d = binvar(2,1);dd = [dd;d];
122%     F = F + set(implies(d(1),x{k+1} == (A*x{k}+B*u{k})));
123%     F = F + set(implies(d(2),x{k+1} == (A*x{k}+pi*B*u{k})));
124%     F = F + set(implies(d(1),x{k}(1) > 0));
125%     F = F + set(implies(d(2),x{k}(1) < 0));
126%     F = F + set(sum(d) == 1);
127%    % F = F + set(-0.1 < u{k}-u{k+1} < 0.1);
128%     obj = obj + norm([x{k};u{k}],1);
129%     %obj = obj + x{k}'*x{k}+u{k}'*u{k};%norm([x{k};u{k}],1);
130%     % Compute value function for one step backwards     
131% end
132% [mpsol2{k},sol{k},Uz{k},J2{k},U{k}] = solvemp(F,obj,[],x{k},u{k});
133% solvesdp(F+set(x{k}==[0.5;0.5]),obj)
134% solvesdp(F+set(x{k}==[1.2;0.8]),obj)
135% mpsol{k} = solvemp(F,obj,[],x{k},u);
136% mpsol{1} = rmovlps(mpsol{1});
137%
138%
Note: See TracBrowser for help on using the repository browser.