1
1
using GalacticOptim, GalacticOptimJL, GalacticFlux, Test
2
2
using ForwardDiff, Zygote, ReverseDiff, FiniteDiff, Tracker
3
-
3
+ using ModelingToolkit
4
4
x0 = zeros (2 )
5
- rosenbrock (x, p= nothing ) = (1 - x[1 ])^ 2 + 100 * (x[2 ] - x[1 ]^ 2 )^ 2
5
+ rosenbrock (x, p= nothing ) = (1 - x[1 ])^ 2 + 100 * (x[2 ] - x[1 ]^ 2 )^ 2
6
6
l1 = rosenbrock (x0)
7
7
8
8
function g! (G, x)
@@ -17,16 +17,24 @@ function h!(H, x)
17
17
H[2 , 2 ] = 200.0
18
18
end
19
19
20
- G1 = Array {Float64} (undef,2 )
21
- G2 = Array {Float64} (undef,2 )
20
+ G1 = Array {Float64} (undef, 2 )
21
+ G2 = Array {Float64} (undef, 2 )
22
22
H1 = Array {Float64} (undef, 2 , 2 )
23
23
H2 = Array {Float64} (undef, 2 , 2 )
24
24
25
25
g! (G1, x0)
26
26
h! (H1, x0)
27
27
28
+ cons = (x, p) -> [x[1 ]^ 2 + x[2 ]^ 2 ]
29
+ optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoModelingToolkit (), cons = cons)
30
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoModelingToolkit (), nothing )
31
+ optprob. grad (G2, x0)
32
+ @test G1 == G2
33
+ optprob. hess (H2, x0)
34
+ @test H1 == H2
35
+
28
36
optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoForwardDiff ())
29
- optprob = GalacticOptim. instantiate_function (optf,x0,GalacticOptim. AutoForwardDiff (),nothing )
37
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoForwardDiff (), nothing )
30
38
optprob. grad (G2, x0)
31
39
@test G1 == G2
32
40
optprob. hess (H2, x0)
@@ -35,16 +43,16 @@ optprob.hess(H2, x0)
35
43
prob = OptimizationProblem (optprob, x0)
36
44
37
45
sol = solve (prob, Optim. BFGS ())
38
- @test 10 * sol. minimum < l1
46
+ @test 10 * sol. minimum < l1
39
47
40
48
sol = solve (prob, Optim. Newton ())
41
- @test 10 * sol. minimum < l1
49
+ @test 10 * sol. minimum < l1
42
50
43
51
sol = solve (prob, Optim. KrylovTrustRegion ())
44
- @test 10 * sol. minimum < l1
52
+ @test 10 * sol. minimum < l1
45
53
46
54
optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoZygote ())
47
- optprob = GalacticOptim. instantiate_function (optf,x0,GalacticOptim. AutoZygote (),nothing )
55
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoZygote (), nothing )
48
56
optprob. grad (G2, x0)
49
57
@test G1 == G2
50
58
optprob. hess (H2, x0)
@@ -53,33 +61,33 @@ optprob.hess(H2, x0)
53
61
prob = OptimizationProblem (optprob, x0)
54
62
55
63
sol = solve (prob, Optim. BFGS ())
56
- @test 10 * sol. minimum < l1
64
+ @test 10 * sol. minimum < l1
57
65
58
66
sol = solve (prob, Optim. Newton ())
59
- @test 10 * sol. minimum < l1
67
+ @test 10 * sol. minimum < l1
60
68
61
69
sol = solve (prob, Optim. KrylovTrustRegion ())
62
- @test 10 * sol. minimum < l1
70
+ @test 10 * sol. minimum < l1
63
71
64
72
optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoReverseDiff ())
65
- optprob = GalacticOptim. instantiate_function (optf,x0,GalacticOptim. AutoReverseDiff (),nothing )
73
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoReverseDiff (), nothing )
66
74
optprob. grad (G2, x0)
67
75
@test G1 == G2
68
76
optprob. hess (H2, x0)
69
77
@test H1 == H2
70
78
71
79
prob = OptimizationProblem (optprob, x0)
72
80
sol = solve (prob, Optim. BFGS ())
73
- @test 10 * sol. minimum < l1
81
+ @test 10 * sol. minimum < l1
74
82
75
83
sol = solve (prob, Optim. Newton ())
76
- @test 10 * sol. minimum < l1
84
+ @test 10 * sol. minimum < l1
77
85
78
86
sol = solve (prob, Optim. KrylovTrustRegion ())
79
- @test 10 * sol. minimum < l1
87
+ @test 10 * sol. minimum < l1
80
88
81
89
optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoTracker ())
82
- optprob = GalacticOptim. instantiate_function (optf,x0,GalacticOptim. AutoTracker (),nothing )
90
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoTracker (), nothing )
83
91
optprob. grad (G2, x0)
84
92
@test G1 == G2
85
93
@test_throws ErrorException optprob. hess (H2, x0)
@@ -88,26 +96,26 @@ optprob.grad(G2, x0)
88
96
prob = OptimizationProblem (optprob, x0)
89
97
90
98
sol = solve (prob, Optim. BFGS ())
91
- @test 10 * sol. minimum < l1
99
+ @test 10 * sol. minimum < l1
92
100
93
101
@test_throws ErrorException solve (prob, Newton ())
94
102
95
103
optf = OptimizationFunction (rosenbrock, GalacticOptim. AutoFiniteDiff ())
96
- optprob = GalacticOptim. instantiate_function (optf,x0,GalacticOptim. AutoFiniteDiff (),nothing )
104
+ optprob = GalacticOptim. instantiate_function (optf, x0, GalacticOptim. AutoFiniteDiff (), nothing )
97
105
optprob. grad (G2, x0)
98
- @test G1 ≈ G2 rtol= 1e-6
106
+ @test G1 ≈ G2 rtol = 1e-6
99
107
optprob. hess (H2, x0)
100
- @test H1 ≈ H2 rtol= 1e-6
108
+ @test H1 ≈ H2 rtol = 1e-6
101
109
102
110
prob = OptimizationProblem (optprob, x0)
103
111
sol = solve (prob, Optim. BFGS ())
104
- @test 10 * sol. minimum < l1
112
+ @test 10 * sol. minimum < l1
105
113
106
114
sol = solve (prob, Optim. Newton ())
107
- @test 10 * sol. minimum < l1
115
+ @test 10 * sol. minimum < l1
108
116
109
117
sol = solve (prob, Optim. KrylovTrustRegion ())
110
118
@test sol. minimum < l1 # the loss doesn't go below 5e-1 here
111
119
112
- sol = solve (prob, Flux. ADAM (0.1 ), maxiters = 1000 )
113
- @test 10 * sol. minimum < l1
120
+ sol = solve (prob, Flux. ADAM (0.1 ), maxiters= 1000 )
121
+ @test 10 * sol. minimum < l1
0 commit comments