|
1 | 1 | @testset "SlackModel NLP tests" begin |
2 | | - @testset "API" begin |
| 2 | + @testset "API" for T in [Float64, Float32] |
3 | 3 | f(x) = (x[1] - 2)^2 + (x[2] - 1)^2 |
4 | 4 | ∇f(x) = [2 * (x[1] - 2); 2 * (x[2] - 1); 0] |
5 | 5 | H(x) = [2.0 0 0; 0 2.0 0; 0 0 0] |
6 | 6 | c(x) = [x[1] - 2x[2] + 1; -x[1]^2 / 4 - x[2]^2 + 1 - x[3]] |
7 | 7 | J(x) = [1.0 -2.0 0; -0.5x[1] -2.0x[2] -1] |
8 | 8 | H(x, y) = H(x) + y[2] * [-0.5 0 0; 0 -2.0 0; 0 0 0] |
9 | 9 |
|
10 | | - for dt in [Float64, Float32] |
11 | | - nlp = SlackModel(SimpleNLPModel(zero(dt))) |
12 | | - n = nlp.meta.nvar |
13 | | - m = nlp.meta.ncon |
| 10 | + |
| 11 | + nlp = SlackModel(SimpleNLPModel(T)) |
| 12 | + n = nlp.meta.nvar |
| 13 | + m = nlp.meta.ncon |
14 | 14 |
|
15 | | - x = randn(n) |
16 | | - y = randn(m) |
17 | | - v = randn(n) |
18 | | - w = randn(m) |
19 | | - Jv = zeros(m) |
20 | | - Jtw = zeros(n) |
21 | | - Hv = zeros(n) |
22 | | - Hvals = zeros(nlp.meta.nnzh) |
| 15 | + x = randn(n) |
| 16 | + y = randn(m) |
| 17 | + v = randn(n) |
| 18 | + w = randn(m) |
| 19 | + Jv = zeros(m) |
| 20 | + Jtw = zeros(n) |
| 21 | + Hv = zeros(n) |
| 22 | + Hvals = zeros(nlp.meta.nnzh) |
23 | 23 |
|
24 | | - # Basic methods |
25 | | - @test obj(nlp, x) ≈ f(x) |
26 | | - @test grad(nlp, x) ≈ ∇f(x) |
27 | | - @test hess(nlp, x) ≈ tril(H(x)) |
28 | | - @test hprod(nlp, x, v) ≈ H(x) * v |
29 | | - @test cons(nlp, x) ≈ c(x) |
30 | | - @test jac(nlp, x) ≈ J(x) |
31 | | - @test jprod(nlp, x, v) ≈ J(x) * v |
32 | | - @test jtprod(nlp, x, w) ≈ J(x)' * w |
33 | | - @test hess(nlp, x, y) ≈ tril(H(x, y)) |
34 | | - @test hprod(nlp, x, y, v) ≈ H(x, y) * v |
| 24 | + # Basic methods |
| 25 | + @test obj(nlp, x) ≈ f(x) |
| 26 | + @test grad(nlp, x) ≈ ∇f(x) |
| 27 | + @test hess(nlp, x) ≈ tril(H(x)) |
| 28 | + @test hprod(nlp, x, v) ≈ H(x) * v |
| 29 | + @test cons(nlp, x) ≈ c(x) |
| 30 | + @test jac(nlp, x) ≈ J(x) |
| 31 | + @test jprod(nlp, x, v) ≈ J(x) * v |
| 32 | + @test jtprod(nlp, x, w) ≈ J(x)' * w |
| 33 | + @test hess(nlp, x, y) ≈ tril(H(x, y)) |
| 34 | + @test hprod(nlp, x, y, v) ≈ H(x, y) * v |
35 | 35 |
|
36 | | - # Increasing coverage |
37 | | - fx, cx = objcons(nlp, x) |
38 | | - @test fx ≈ f(x) |
39 | | - @test cx ≈ c(x) |
40 | | - fx, _ = objcons!(nlp, x, cx) |
41 | | - @test fx ≈ f(x) |
42 | | - @test cx ≈ c(x) |
43 | | - fx, gx = objgrad(nlp, x) |
44 | | - @test fx ≈ f(x) |
45 | | - @test gx ≈ ∇f(x) |
46 | | - fx, _ = objgrad!(nlp, x, gx) |
47 | | - @test fx ≈ f(x) |
48 | | - @test gx ≈ ∇f(x) |
49 | | - @test jprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), v, Jv) ≈ J(x) * v |
50 | | - @test jprod!(nlp, x, jac_structure(nlp)..., v, Jv) ≈ J(x) * v |
51 | | - @test jtprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), w, Jtw) ≈ J(x)' * w |
52 | | - @test jtprod!(nlp, x, jac_structure(nlp)..., w, Jtw) ≈ J(x)' * w |
53 | | - Jop = jac_op!(nlp, x, Jv, Jtw) |
54 | | - @test Jop * v ≈ J(x) * v |
55 | | - @test Jop' * w ≈ J(x)' * w |
56 | | - Jop = jac_op!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), Jv, Jtw) |
57 | | - @test Jop * v ≈ J(x) * v |
58 | | - @test Jop' * w ≈ J(x)' * w |
59 | | - Jop = jac_op!(nlp, x, jac_structure(nlp)..., Jv, Jtw) |
60 | | - @test Jop * v ≈ J(x) * v |
61 | | - @test Jop' * w ≈ J(x)' * w |
62 | | - ghjv = zeros(m) |
63 | | - for j = 1:m |
64 | | - eⱼ = [i == j ? 1.0 : 0.0 for i = 1:m] |
65 | | - Cⱼ(x) = H(x, eⱼ) - H(x) |
66 | | - ghjv[j] = dot(gx, Cⱼ(x) * v) |
67 | | - end |
68 | | - @test ghjvprod(nlp, x, gx, v) ≈ ghjv |
69 | | - @test hess_coord!(nlp, x, Hvals) == hess_coord!(nlp, x, y * 0, Hvals) |
70 | | - @test hprod!(nlp, hess_structure(nlp)..., hess_coord(nlp, x), v, Hv) ≈ H(x) * v |
71 | | - @test hprod!(nlp, x, hess_structure(nlp)..., v, Hv) ≈ H(x) * v |
72 | | - @test hprod!(nlp, x, y, hess_structure(nlp)..., v, Hv) ≈ H(x, y) * v |
73 | | - Hop = hess_op(nlp, x) |
74 | | - @test Hop * v ≈ H(x) * v |
75 | | - Hop = hess_op!(nlp, x, Hv) |
76 | | - @test Hop * v ≈ H(x) * v |
77 | | - Hop = hess_op!(nlp, hess_structure(nlp)..., hess_coord(nlp, x), Hv) |
78 | | - @test Hop * v ≈ H(x) * v |
79 | | - Hop = hess_op!(nlp, x, hess_structure(nlp)..., Hv) |
80 | | - @test Hop * v ≈ H(x) * v |
81 | | - Hop = hess_op(nlp, x, y) |
82 | | - @test Hop * v ≈ H(x, y) * v |
83 | | - Hop = hess_op!(nlp, x, y, Hv) |
84 | | - @test Hop * v ≈ H(x, y) * v |
85 | | - Hop = hess_op!(nlp, hess_structure(nlp)..., hess_coord(nlp, x, y), Hv) |
86 | | - @test Hop * v ≈ H(x, y) * v |
87 | | - Hop = hess_op!(nlp, x, y, hess_structure(nlp)..., Hv) |
88 | | - @test Hop * v ≈ H(x, y) * v |
| 36 | + # Increasing coverage |
| 37 | + fx, cx = objcons(nlp, x) |
| 38 | + @test fx ≈ f(x) |
| 39 | + @test cx ≈ c(x) |
| 40 | + fx, _ = objcons!(nlp, x, cx) |
| 41 | + @test fx ≈ f(x) |
| 42 | + @test cx ≈ c(x) |
| 43 | + fx, gx = objgrad(nlp, x) |
| 44 | + @test fx ≈ f(x) |
| 45 | + @test gx ≈ ∇f(x) |
| 46 | + fx, _ = objgrad!(nlp, x, gx) |
| 47 | + @test fx ≈ f(x) |
| 48 | + @test gx ≈ ∇f(x) |
| 49 | + @test jprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), v, Jv) ≈ J(x) * v |
| 50 | + @test jprod!(nlp, x, jac_structure(nlp)..., v, Jv) ≈ J(x) * v |
| 51 | + @test jtprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), w, Jtw) ≈ J(x)' * w |
| 52 | + @test jtprod!(nlp, x, jac_structure(nlp)..., w, Jtw) ≈ J(x)' * w |
| 53 | + Jop = jac_op!(nlp, x, Jv, Jtw) |
| 54 | + @test Jop * v ≈ J(x) * v |
| 55 | + @test Jop' * w ≈ J(x)' * w |
| 56 | + Jop = jac_op!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), Jv, Jtw) |
| 57 | + @test Jop * v ≈ J(x) * v |
| 58 | + @test Jop' * w ≈ J(x)' * w |
| 59 | + Jop = jac_op!(nlp, x, jac_structure(nlp)..., Jv, Jtw) |
| 60 | + @test Jop * v ≈ J(x) * v |
| 61 | + @test Jop' * w ≈ J(x)' * w |
| 62 | + ghjv = zeros(m) |
| 63 | + for j = 1:m |
| 64 | + eⱼ = [i == j ? 1.0 : 0.0 for i = 1:m] |
| 65 | + Cⱼ(x) = H(x, eⱼ) - H(x) |
| 66 | + ghjv[j] = dot(gx, Cⱼ(x) * v) |
89 | 67 | end |
| 68 | + @test ghjvprod(nlp, x, gx, v) ≈ ghjv |
| 69 | + @test hess_coord!(nlp, x, Hvals) == hess_coord!(nlp, x, y * 0, Hvals) |
| 70 | + @test hprod!(nlp, hess_structure(nlp)..., hess_coord(nlp, x), v, Hv) ≈ H(x) * v |
| 71 | + @test hprod!(nlp, x, hess_structure(nlp)..., v, Hv) ≈ H(x) * v |
| 72 | + @test hprod!(nlp, x, y, hess_structure(nlp)..., v, Hv) ≈ H(x, y) * v |
| 73 | + Hop = hess_op(nlp, x) |
| 74 | + @test Hop * v ≈ H(x) * v |
| 75 | + Hop = hess_op!(nlp, x, Hv) |
| 76 | + @test Hop * v ≈ H(x) * v |
| 77 | + Hop = hess_op!(nlp, hess_structure(nlp)..., hess_coord(nlp, x), Hv) |
| 78 | + @test Hop * v ≈ H(x) * v |
| 79 | + Hop = hess_op!(nlp, x, hess_structure(nlp)..., Hv) |
| 80 | + @test Hop * v ≈ H(x) * v |
| 81 | + Hop = hess_op(nlp, x, y) |
| 82 | + @test Hop * v ≈ H(x, y) * v |
| 83 | + Hop = hess_op!(nlp, x, y, Hv) |
| 84 | + @test Hop * v ≈ H(x, y) * v |
| 85 | + Hop = hess_op!(nlp, hess_structure(nlp)..., hess_coord(nlp, x, y), Hv) |
| 86 | + @test Hop * v ≈ H(x, y) * v |
| 87 | + Hop = hess_op!(nlp, x, y, hess_structure(nlp)..., Hv) |
| 88 | + @test Hop * v ≈ H(x, y) * v |
90 | 89 | end |
91 | 90 |
|
92 | 91 | @testset "Show" begin |
|
0 commit comments