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