/
test_exp.jl
101 lines (86 loc) · 2.34 KB
/
test_exp.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
using Convex
using Test
TOL = 1e-3
@testset "Exp Atoms" begin
@testset "exp atom" begin
y = Variable()
p = minimize(exp(y), y>=0)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 1 atol=TOL
@test evaluate(exp(y)) ≈ 1 atol=TOL
y = Variable()
p = minimize(exp(y), y>=1)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ exp(1) atol=TOL
@test evaluate(exp(y)) ≈ exp(1) atol=TOL
y = Variable(5)
p = minimize(sum(exp(y)), y>=0)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 5 atol=TOL
@test evaluate(sum(exp(y))) ≈ 5 atol=TOL
y = Variable(5)
p = minimize(sum(exp(y)), y>=0)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 5 atol=TOL
end
@testset "log atom" begin
y = Variable()
p = maximize(log(y), y<=1)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 0 atol=TOL
y = Variable()
p = maximize(log(y), y<=2)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ log(2) atol=TOL
y = Variable()
p = maximize(log(y), [y<=2, exp(y)<=10])
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ log(2) atol=TOL
end
@testset "log sum exp atom" begin
y = Variable(5)
p = minimize(logsumexp(y), y>=1)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ log(exp(1) * 5) atol=TOL
end
@testset "logistic loss atom" begin
y = Variable(5)
p = minimize(logisticloss(y), y>=1)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ log(exp(1) + 1) * 5 atol=TOL
end
@testset "entropy atom" begin
y = Variable(5, Positive())
p = maximize(entropy(y), sum(y)<=1)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ -(log(1 / 5)) atol=TOL
end
@testset "relative entropy atom" begin
x = Variable(1)
y = Variable(1)
# x log (x/y)
p = minimize(relative_entropy(x,y), y==1, x >= 2)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 2 * log(2) atol=TOL
end
@testset "log perspective atom" begin
x = Variable(1)
y = Variable(1)
# y log (x/y)
p = maximize(log_perspective(x,y), y==5, x <= 10)
@test vexity(p) == ConvexVexity()
solve!(p)
@test p.optval ≈ 5 * log(2) atol=TOL
end
end