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

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

Added original make3d

File size: 11.5 KB
Line 
1function regress_sos
2
3ops1 = sdpsettings('solver','sdpt3','sos.cong',0,'sos.model',1,'verbose',0);
4ops2 = sdpsettings('solver','sdpt3','sos.cong',1,'sos.model',2,'verbose',0);
5ops3 = sdpsettings('solver','sdpt3','sos.cong',0,'sos.newton',0,'verbose',0,'sos.extlp',0);
6
7if 1
8sdpvar x s t;
9F = set(sos(1+x+(1-s)*x^2-s))+set(sos(2+2*x+x^4-8*t))+set(s>0.49)+set(s+t<0.55);
10obj= -s-t;
11
12fail = regresstest(F,obj,ops1);
13regressreport('Test 1',fail)
14fail = regresstest(F,obj,ops2);
15regressreport('Test 2',fail)
16fail = regresstest(F,obj,ops3);
17regressreport('Test 3',fail)
18
19
20% Disjoint variables
21x = sdpvar(1,1);
22y = sdpvar(1,1);
23t = sdpvar(1,1);
24F = set(sos(1+y^2-t))+set(sos(1+x^2-t));
25obj = -t;
26fail = regresstest(F,obj,ops1);
27regressreport('Test 4',fail)
28fail = regresstest(F,obj,ops2);
29regressreport('Test 5',fail)
30fail = regresstest(F,obj,ops3);
31regressreport('Test 6',fail)
32
33% Disjoint variables and parameters
34x = sdpvar(1,1);
35y = sdpvar(1,1);
36t = sdpvar(1,1);
37s = sdpvar(1,1);
38F = set(sos(1+y^2-t))+set(sos(1+x^2-s));
39obj = -s-t;
40fail = regresstest(F,obj,ops1);
41regressreport('Test 7',fail)
42fail = regresstest(F,obj,ops2);
43regressreport('Test 8',fail)
44fail = regresstest(F,obj,ops3);
45regressreport('Test 9',fail)
46
47
48% Disjoint variables and parameters
49x = sdpvar(1,1);
50y = sdpvar(1,1);
51t = sdpvar(1,1);
52s = sdpvar(1,1);
53F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0);
54obj = -s-t;
55fail = regresstest(F,obj,ops1);
56regressreport('Test 10',fail)
57fail = regresstest(F,obj,ops2);
58regressreport('Test 11',fail)
59fail = regresstest(F,obj,ops3);
60regressreport('Test 12',fail)
61
62% Disjoint variables and parameters
63x = sdpvar(1,1);
64y = sdpvar(1,1);
65t = sdpvar(1,1);
66s = sdpvar(1,1);
67F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0)+set(s>0);
68obj = -s-t;
69fail = regresstest(F,obj,ops1);
70regressreport('Test 13',fail)
71fail = regresstest(F,obj,ops2);
72regressreport('Test 14',fail)
73fail = regresstest(F,obj,ops3);
74regressreport('Test 15',fail)
75
76x = sdpvar(1,1);
77y = sdpvar(1,1);
78t = sdpvar(1,1);
79s = sdpvar(1,1);
80F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0)+set(s>0.5);
81obj = -s-t;
82fail = regresstest(F,obj,ops1);
83regressreport('Test 16',fail)
84fail = regresstest(F,obj,ops2);
85regressreport('Test 17',fail)
86fail = regresstest(F,obj,ops3);
87regressreport('Test 18',fail)
88
89x = sdpvar(1,1);
90y = sdpvar(1,1);
91t = sdpvar(1,1);
92s = sdpvar(1,1);
93F = set(sos(1+y^2-t-s))+set(sos(1+x^2-s))+set(t>0)+set(s>-0.5);
94obj = -s-t;
95fail = regresstest(F,obj,ops1);
96regressreport('Test 19',fail)
97fail = regresstest(F,obj,ops2);
98regressreport('Test 20',fail)
99fail = regresstest(F,obj,ops3);
100regressreport('Test 21',fail)
101
102
103x = sdpvar(1,1);
104y = sdpvar(1,1);
105t = sdpvar(1,1);
106s = sdpvar(1,1);
107F = set(sos(1+y^2-t-s))+set(sos(1+x^2-s))+set(t>0)+set(s>-0.5)+set(s>0);
108obj = -s-t;
109fail = regresstest(F,obj,ops1);
110regressreport('Test 19',fail)
111fail = regresstest(F,obj,ops2);
112regressreport('Test 20',fail)
113fail = regresstest(F,obj,ops3);
114regressreport('Test 21',fail)
115
116x = sdpvar(1,1);
117y = sdpvar(1,1);
118t = sdpvar(1,1);
119s = sdpvar(1,1);
120F = set(sos(t*x^4+s*y^2-t))+set(sos(1+x^2-s));
121obj = -t;
122fail = regresstest(F,obj,ops1,[s t]);
123regressreport('Test 22',fail)
124fail = regresstest(F,obj,ops2,[s t]);
125regressreport('Test 23',fail)
126fail = regresstest(F,obj,ops3,[s t]);
127regressreport('Test 24',fail)
128
129x = sdpvar(1,1);
130y = sdpvar(1,1);
131t = sdpvar(1,1);
132s = sdpvar(1,1);
133sdpvar u
134F = set(sos(t*x^4+s*y^2-t))+set(sos(1+x^2-s));
135obj = -t;
136fail = regresstest(F,obj,ops1,[s t u]);
137regressreport('Test 25',fail)
138fail = regresstest(F,obj,ops2,[s t u]);
139regressreport('Test 26',fail)
140fail = regresstest(F,obj,ops3,[s t u]);
141regressreport('Test 27',fail)
142
143
144x = sdpvar(1,1);
145y = sdpvar(1,1);
146z = sdpvar(1,1);
147t = sdpvar(1,1);
148s = sdpvar(1,1);
149w = sdpvar(1,1);
150F = set(sos(x^4+z^6))+set(sos(x^2+(t+s+w-6)*x*z)) + set([w;s]>0)+set(t>3);
151obj = w;
152fail = regresstest(F,obj,ops1,t+s+w);
153regressreport('Test 28',fail)
154fail = regresstest(F,obj,ops2,t+s+w);
155regressreport('Test 29',fail)
156fail = regresstest(F,obj,ops3,t+s+w);
157regressreport('Test 30',fail)
158
159sdpvar x s t u
160F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0);
161obj = t;
162fail = regresstest(F,obj,ops1,t+s+u);
163regressreport('Test 31',fail)
164fail = regresstest(F,obj,ops2,t+s+u);
165regressreport('Test 32',fail)
166fail = regresstest(F,obj,ops3,t+s+u);
167regressreport('Test 33',fail)
168
169sdpvar x s t u
170F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0);
171obj = t;
172fail = regresstest(F,obj,ops1,t+s+u);
173regressreport('Test 34',fail)
174fail = regresstest(F,obj,ops2,t+s+u);
175regressreport('Test 35',fail)
176fail = regresstest(F,obj,ops3,t+s+u);
177regressreport('Test 36',fail)
178
179sdpvar x s t u
180F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0);
181obj = s;
182fail = regresstest(F,obj,ops1,t+s+u);
183regressreport('Test 37',fail)
184fail = regresstest(F,obj,ops2,t+s+u);
185regressreport('Test 38',fail)
186fail = regresstest(F,obj,ops3,t+s+u);
187regressreport('Test 39',fail)
188
189sdpvar x s u
190F = set(sos(x+(t-100)*x^2+4*s-2+u))+set(s>0) + set(s<3) + set(u<4) + set(u>3) + set(t<102)+set(t>101.8)+set(t>0);
191obj = -s-t;
192fail = regresstest(F,obj,ops1,t+s+u);
193regressreport('Test 40',fail)
194fail = regresstest(F,obj,ops2,t+s+u);
195regressreport('Test 41',fail)
196fail = regresstest(F,obj,ops3,t+s+u);
197regressreport('Test 42',fail)
198
199
200sdpvar x s t u
201F = set(sos(1+x+s*x^2))+set(sos(2+2*s*x+u*x^4));
202obj = s;
203fail = regresstest(F,obj,ops1,t+s+u);
204regressreport('Test 43',fail)
205fail = regresstest(F,obj,ops2,t+s+u);
206regressreport('Test 44',fail)
207fail = regresstest(F,obj,ops3,t+s+u);
208regressreport('Test 45',fail)
209
210end
211sdpvar x y a b c
212V = x^2*a+b*y^2+x*y+3;
213F=set(sos(V))+set([a-4 b c]);
214obj=a;
215fail = regresstest(F,obj,ops1,a+b+c);
216regressreport('Test 46',fail)
217fail = regresstest(F,obj,ops2,a+b+c);
218regressreport('Test 47',fail)
219fail = regresstest(F,obj,ops3,a+b+c);
220regressreport('Test 48',fail)
221
222
223sdpvar x s t
224F = set(sos(x^4+(s+t-2)*x^3+s+t));
225obj = max(s,t);
226fail = regresstest(F,obj,ops1,s+t);
227regressreport('Test 49',fail)
228fail = regresstest(F,obj,ops2,s+t);
229regressreport('Test 50',fail)
230fail = regresstest(F,obj,ops3,s+t);
231regressreport('Test 51',fail)
232
233
234% Markus tentacles problem
235sdpvar x y a
236f = x^4 * y^2 + x^2 * y^4 - 3 * x^2 * y^2 + 1, k = 0;
237df = jacobian(f, [x y]);
238g = 1 - (df(1)^2 + df(2)^2) * (x^2 + y^2);
239if k >= 0
240    v = monolist([x; y], 2*k);
241    coeffVec = sdpvar(length(v), 1);
242    t = coeffVec' * v;
243    constraints = set(sos(f - a - t * g)) + set(sos(t));
244else
245    coeffVec = [];
246    constraints = set(sos(f - a));
247end
248F = constraints;
249obj = -a;
250fail = regresstest(F,obj,ops1,[a; coeffVec]);
251regressreport('Test 52',fail)
252fail = regresstest(F,obj,ops2,[a; coeffVec]);
253regressreport('Test 53',fail)
254fail = regresstest(F,obj,ops3,[a; coeffVec]);
255regressreport('Test 54',fail)
256
257
258
259
260return
261
262
263
264F = set(sos(x^4+z^6))+set(sos(x^2+(t+s+w-6)*x*z)) + set([w;s]>0)+set(t>3);
265solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.model',1,'solver','sedumi'),s+t+w)
266double([s t w])
267solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.model',0,'solver','sedumi'),s+t+w)
268double([s t w])
269
270% Automatic detection of non-negative cones
271sdpvar x s t u
272F = set(sos(1+x+16*x^2+1));
273solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',0,'solver','sedumi'))
274
275
276% Failure before since no free
277sdpvar x s t u
278F = set(sos(x+(t-100)*x^2+4*s-2+u))+set(s>0) + set(s<3) + set(u<4) + set(u>3) + set(t<102)+set(t>101.8)+set(t>0);
279solvesos(F,-s-t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t)
280double([s t])
281
282% Mixed constraint, all free
283sdpvar x s t
284F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104);
285solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t)
286double([s t])
287
288% Mixed constraint, one free
289sdpvar x s t
290F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(s>0) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104);
291solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t)
292double([s t])
293
294
295% Mixed constraint, all free
296sdpvar x s t
297F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(t>0) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104);
298solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t)
299double([s t])
300
301
302
303% Mixed constraint, all free
304sdpvar x s t
305F = set(sos(x+(t-100)*x^2+4*s-2))+set(1.001*s>1) + set(1.001*t>1) + set(s<3) + set(t<102)+set(1.01*t>101.8)+set(2*s+t>104);
306solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t)
307double([s t])
308
309
310% Mixed constraint, negative variables
311sdpvar x s u t
312F = set(sos(x+(t-100)*x^2+pi*s+6+u)) + set(t>1) + set(-12.34567<s<-1) + set(t<102)+set(t>101.8);
313solvesos(F,s+t+u,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u)
314double([s t u])
315
316% Mixed constraint, all free
317sdpvar x s t u
318F = set(sos(x+t*x^2+s+u)) + set(t>1.2) + set(s+t==4) + set(u<0.01) + set(u+t==0.1)
319solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u)
320double([s t u])
321
322
323% Mixed constraint, all constrained
324sdpvar x s t u
325F = set(sos(x+t*x^2+s+u)) + +set(u>0) + set(t==9) + set(s+t==11) + set(u==0.01)
326solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u)
327double([s t u])
328
329%
330%
331% % Failure : t is not used
332sdpvar x s t u
333F = set(sos(1+x+s*x^2))+set(sos(2+2*s*x+u*x^4));
334solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),s+t+u)
335double([s t u])
336
337
338
339
340
341% Automatic detection of diagional constraints
342sdpvar x s t u
343F = set(sos(s+x+x^2))+set(sos(s+2*s*x+u*x^4));
344solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),s+u)
345double([s t u])
346
347
348
349% Automatic detection of diagional constraints
350sdpvar x s t u
351F = set(sos(1+x^2+x^4));
352solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'))
353double([s t u])
354
355
356% Automatic detection of diagional constraints
357sdpvar x y s t u
358F = set(sos(1+x^2+x^4+x^2*y^2+y^4))+set(sos((7-t)*y^8+y^12));
359solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),t)
360double([s t u])
361
362
363x = sdpvar(1,1);
364y = sdpvar(1,1);
365z = sdpvar(1,1);
366p = x^4*y^2+x^2*y^4+z^6-3*x*x*y*y*z*z;
367solvesos(set(sos(p)))
368solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
369
370% PP, p 41
371x = sdpvar(1,1);
372y = sdpvar(1,1);
373z = sdpvar(1,1);
374p = 2*x^4+2*x^3*y-x^2*y^2+5*y^4;
375solvesos(set(sos(p)))
376solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
377
378% PP, p 42
379x = sdpvar(1,1);
380y = sdpvar(1,1);
381z = sdpvar(1,1);
382p = x^4-(2*y*z+1)*x^2+(y^2*z^2+2*y*z+2)
383solvesos(set(sos(p)))
384solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
385
386
387% PP, p 43
388x = sdpvar(1,1);
389y = sdpvar(1,1);
390z = sdpvar(1,1);
391p = x^4+x^2+z^6-3*x*x*z*z;
392solvesos(set(sos(p)))
393solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
394
395x = sdpvar(1,1);
396y = sdpvar(1,1);
397z = sdpvar(1,1);
398p = x^2+y^2+x^4+z^6+(x*x-y^3+z*z*y)^2
399solvesos(set(sos(p)))
400solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
401
402
403% robinson
404x = sdpvar(1,1);
405y = sdpvar(1,1);
406p = x^6+y^6-x^4*y^2-y^4*x^2-x^4-y^4-x^2-y^2+3*x^2*y^2+10
407solvesos(set(sos(p)))
408solvesos(set(sos(p)),[],sdpsettings('sos.model',2))
409
410
411
412
413
414
415
416
417
418function regressreport(text,fail)
419
420switch fail
421    case 0
422        disp(['No problems in ' text]);
423    case 1
424        disp(['Objective differ in ' text]);
425    case 2
426        disp(['Infeasible solution in ' text]);
427    otherwise
428end
429
430   
431function fail  = regresstest(F,obj,ops,pv);
432
433if nargin==3
434    pv = [];
435end
436
437ops.sos.model = 1;
438solvesos(F,obj,ops,pv);
439obj1 = double(obj);
440p1s = checkset(F(find(is(F,'sos'))));
441p1e = checkset(F(find(~is(F,'sos'))));
442
443ops.sos.model = 2;
444solvesos(F,obj,ops,pv);
445obj2 = double(obj);
446p2s = checkset(F(find(is(F,'sos'))));
447p2e = checkset(F(find(~is(F,'sos'))));
448
449
450fail = 0;
451
452if abs(obj1-obj2) > 1e-4
453    fail = 1;
454end
455
456if any(p1s>1e-4)
457   fail = 2;
458   p1s
459end
460if any(p2s>1e-4)
461   fail = 2;
462   p2s
463end
464if any(p1e<-1e-4)
465   fail = 2;
466   p1e
467end
468if any(p2e<-1e-4)
469   fail = 2;
470   p2e
471end
472if fail==0
473    disp('Correct solution');
474end
475
Note: See TracBrowser for help on using the repository browser.