/
test_lp.jl
125 lines (110 loc) · 3.23 KB
/
test_lp.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using Convex
using FactCheck
TOL = 1e-3
facts("LP Atoms") do
context("abs atom") do
x = Variable()
p = minimize(abs(x), x<=-1)
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(1, TOL)
@fact evaluate(abs(x)) => roughly(1, TOL)
x = Variable(2,2)
p = minimize(sum(abs(x)), x[2,2]>=1, x[1,1]>=1, x>=0)
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(2, TOL)
@fact evaluate(sum(abs(x))) => roughly(2, TOL)
end
context("maximum atom") do
x = Variable(10)
a = rand(10, 1)
p = minimize(maximum(x), x >= a)
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(maximum(a), TOL)
@fact evaluate(maximum(x)) => roughly(maximum(a), TOL)
end
context("minimum atom") do
x = Variable(1)
a = rand(10, 10)
p = maximize(minimum(x), x <= a)
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(minimum(a), TOL)
@fact evaluate(minimum(x)) => roughly(minimum(a), TOL)
x = Variable(4, 4)
y = Variable(4, 6)
z = Variable(1)
c = ones(4, 1)
d = 2 * ones(6, 1)
constraints = [[x y] <= 2, z <= 0, z <= x, 2z >= -1]
objective = sum(x + z) + minimum(y) + c' * y * d
p = maximize(objective, constraints)
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(130, TOL)
@fact evaluate(objective)[1] => roughly(130, TOL)
end
context("max atom") do
x = Variable(10, 10)
y = Variable(10, 10)
a = rand(10, 10)
b = rand(10, 10)
p = minimize(maximum(max(x, y)), [x >= a, y >= b])
@fact vexity(p) => ConvexVexity()
solve!(p)
max_a = maximum(a)
max_b = maximum(b)
@fact p.optval => roughly(max(max_a, max_b), TOL)
@fact evaluate(maximum(max(x, y))) => roughly(max(max_a, max_b), TOL)
end
context("min atom") do
x = Variable(10, 10)
y = Variable(10, 10)
a = rand(10, 10)
b = rand(10, 10)
p = maximize(minimum(min(x, y)), [x <= a, y <= b])
@fact vexity(p) => ConvexVexity()
solve!(p)
min_a = minimum(a)
min_b = minimum(b)
@fact p.optval => roughly(min(min_a, min_b), TOL)
@fact evaluate(minimum(min(x, y))) => roughly(min(min_a, min_b), TOL)
end
context("pos atom") do
x = Variable(3)
a = [-2; 1; 2]
p = minimize(sum(pos(x)), [x >= a, x <= 2])
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(3, TOL)
@fact evaluate(sum(pos(x))) => roughly(3, TOL)
end
context("neg atom") do
x = Variable(3)
p = minimize(1, [x >= -2, x <= -2, neg(x) >= -3])
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(1, TOL)
@fact evaluate(sum(neg(x))) => roughly(-6, TOL)
end
context("hinge loss atom") do
end
context("norm inf atom") do
x = Variable(3)
p = minimize(norm_inf(x), [-2 <= x, x <= 1])
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(0, TOL)
@fact evaluate(norm_inf(x)) => roughly(0, TOL)
end
context("norm 1 atom") do
x = Variable(3)
p = minimize(norm_1(x), [-2 <= x, x <= 1])
@fact vexity(p) => ConvexVexity()
solve!(p)
@fact p.optval => roughly(0, TOL)
@fact evaluate(norm_1(x)) => roughly(0, TOL)
end
end