1 | function test_robust_1 |
---|
2 | |
---|
3 | yalmip('clear') |
---|
4 | sdpvar x w; |
---|
5 | F = set(x + w < 1) + set(-0.5 < w < 0.5) |
---|
6 | sol = solverobust(F,-x,[],w); |
---|
7 | |
---|
8 | mbg_asserttolequal(double(x), 1/2, 1e-5); |
---|
9 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
10 | |
---|
11 | F = set(abs(x) + w < 1) + set(-0.5 < w < 0.5) |
---|
12 | sol = solverobust(F,-x,[],w); |
---|
13 | mbg_asserttolequal(double(x), 1/2, 1e-5); |
---|
14 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
15 | |
---|
16 | F = set(abs(x) + w < 1) + set(-2 < w < 2) |
---|
17 | sol = solverobust(F,-x,[],w); |
---|
18 | mbg_asserttolequal(double((sol.problem == 1) | (sol.problem == 12)), 1, 1e-5); |
---|
19 | |
---|
20 | F = set(abs(x) + w < 1) + set(norm(w,1) < 0.3); |
---|
21 | sol = solverobust(F,-x,[],w); |
---|
22 | mbg_asserttolequal(double(x), 0.7, 1e-5); |
---|
23 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
24 | |
---|
25 | F = set(abs(x) + w < 1) + set(norm(w,2) < 0.3); |
---|
26 | sol = solverobust(F,-x,[],w); |
---|
27 | mbg_asserttolequal(double(x), 0.7, 1e-5); |
---|
28 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
29 | |
---|
30 | x = sdpvar(3,1); |
---|
31 | w = sdpvar(2,1); |
---|
32 | F = set(norm(x,1) + sum(w) < 1) + set(norm(w,1) < 0.3); |
---|
33 | sol = solverobust(F,-sum(x),[],w); |
---|
34 | mbg_asserttolequal(double(sum(x)), 0.7, 1e-5); |
---|
35 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
36 | |
---|
37 | x = sdpvar(3,1); |
---|
38 | w = sdpvar(2,1); |
---|
39 | F = set(norm(x,1) + sum(w) < 1) + set(norm(w,1) < 0.3) + set(uncertain(w)) |
---|
40 | sol = solvesdp(F,-sum(x)); |
---|
41 | mbg_asserttolequal(double(sum(x)), 0.7, 1e-5); |
---|
42 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
43 | |
---|
44 | x = sdpvar(3,1); |
---|
45 | w = sdpvar(2,1); |
---|
46 | F = set(norm(x,1) + sum(w) < 1) + set(w'*w < 0.3^2); |
---|
47 | sol = solverobust(F,-sum(x),[],w); |
---|
48 | mbg_asserttolequal(double(sum(x)), 0.57574, 1e-5); |
---|
49 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
50 | |
---|
51 | % multiple nonlinear operators in uncertainty descr. |
---|
52 | F = set(norm(x,1) + sum(w) < 1) + set(norm(w,1) < 0.3) + set(norm(w,inf) < 0.1); |
---|
53 | sol = solverobust(F,-sum(x),[],w); |
---|
54 | mbg_asserttolequal(double(sum(x)), 0.8, 1e-5); |
---|
55 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
56 | |
---|
57 | % Mixed nonlinear operator |
---|
58 | sdpvar x w |
---|
59 | sol = solverobust(set(norm(x+w,1) < 1) + set(norm(w,2) < 0.2),-sum(x),[],w) |
---|
60 | mbg_asserttolequal(double(sum(x)), 0.8, 1e-5); |
---|
61 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
62 | |
---|
63 | % Mixed nonlinear operator, only part of w in constraints |
---|
64 | sdpvar x w(5,1) |
---|
65 | sol = solverobust(set(norm(x+w(1),1) < 1) + set(norm(w,2) < 0.2),-sum(x),[],w) |
---|
66 | mbg_asserttolequal(double(sum(x)), 0.8, 1e-5); |
---|
67 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
68 | % |
---|
69 | % yalmip('clear') |
---|
70 | % |
---|
71 | % x = sdpvar(3,1); |
---|
72 | % w = sdpvar(2,1); |
---|
73 | % |
---|
74 | % F = set(norm(x,1) + norm(w,1) < 1) + set(norm(w,1) < 0.3) + set(norm(w,inf) < 0.1); |
---|
75 | % sol = solverobust(F,-sum(x),[],w); |
---|
76 | % mbg_asserttolequal(double(sum(x)), 0.8, 1e-5); |
---|
77 | % mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
78 | |
---|
79 | yalmip('clear') |
---|
80 | sdpvar x w t1 t2; |
---|
81 | F = set(abs(x) + w < 1) + set(w == t1*(-0.5) + t2*0.5) + set([t1 t2]>0)+set(t1+t2 == 1) |
---|
82 | sol = solverobust(F,-x,[],[w;t1;t2]); |
---|
83 | mbg_asserttolequal(double(x), 1/2, 1e-5); |
---|
84 | mbg_asserttolequal(sol.problem, 0, 1e-5); |
---|
85 | |
---|
86 | sdpvar x w t |
---|
87 | F = set(x+sum(w) <= 10) |
---|
88 | W = set(-1/2 <= w <= 1/2) |
---|
89 | objective = (x-5)'*(x-5) + x*w; |
---|
90 | sol = solverobust(F + W,objective,[],[w]) |
---|
91 | mbg_asserttolequal(double(x), 4.75, 1e-5); |
---|
92 | |
---|
93 | sdpvar x w(2,1) |
---|
94 | F = set(x+sum(w) <= 1) + set([1 x;x 2] > 0); |
---|
95 | W = set(w'*w <= 1/2); |
---|
96 | objective = (x+1)'*(x+1) + x*norm(w,1); |
---|
97 | sol = solverobust(F + W,objective,[],w); |
---|
98 | mbg_asserttolequal(double(x), -1, 1e-5); |
---|