From 9af0a7ef7b224f36fd737273d9c335fdf5cfc5f4 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Tue, 4 Jun 2024 08:22:41 +0200 Subject: [PATCH 1/4] Use generic sparsity detector --- Project.toml | 2 ++ src/sparse_sym.jl | 16 +++++----------- test/Project.toml | 6 ++---- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Project.toml b/Project.toml index 4364b41c..8a337614 100644 --- a/Project.toml +++ b/Project.toml @@ -3,6 +3,7 @@ uuid = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" version = "0.7.2" [deps] +ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" ColPack = "ffa27691-3a59-46ab-a8d4-551f45b8d401" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -12,6 +13,7 @@ ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [compat] +ADTypes = "1.2.1" ColPack = "0.4" ForwardDiff = "0.9.0, 0.10.0" NLPModels = "0.18, 0.19, 0.20, 0.21" diff --git a/src/sparse_sym.jl b/src/sparse_sym.jl index e90c5514..f20cb763 100644 --- a/src/sparse_sym.jl +++ b/src/sparse_sym.jl @@ -1,19 +1,13 @@ function compute_hessian_sparsity(f, nvar, c!, ncon) - Symbolics.@variables xs[1:nvar] - xsi = Symbolics.scalarize(xs) - fun = f(xsi) - if ncon > 0 - Symbolics.@variables ys[1:ncon] - ysi = Symbolics.scalarize(ys) - cx = similar(ysi) - fun = fun + dot(c!(cx, xsi), ysi) - end - S = Symbolics.hessian_sparsity(fun, ncon == 0 ? xsi : [xsi; ysi]) # , full = false + detector = Symbolics.SymbolicsSparsityDetector() # replaceable + lagrangian(x) = f(x) + dot(rand(ncon), c!(zeros(ncon), x)) + S = ADTypes.hessian_sparsity(lagrangian, rand(nvar), detector) # , full = false return S end function compute_jacobian_sparsity(c!, cx, x0) - S = Symbolics.jacobian_sparsity(c!, cx, x0) + detector = Symbolics.SymbolicsSparsityDetector() # replaceable + S = ADTypes.jacobian_sparsity(c!, cx, x0, detector) return S end diff --git a/test/Project.toml b/test/Project.toml index 0f94a872..68587070 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -10,7 +10,6 @@ NLPModelsTest = "7998695d-6960-4d3a-85c4-e1bceb8cd856" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SparseDiffTools = "47a9eef4-7e08-11e9-0b38-333d64bd3804" -SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b" Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" @@ -24,7 +23,6 @@ NLPModels = "0.21" NLPModelsModifiers = "0.7" NLPModelsTest = "0.10" ReverseDiff = "1" -SparseDiffTools = "2.3" -Symbolics = "5.3" -SymbolicUtils = "=1.5.1" +SparseDiffTools = "2.19" +Symbolics = "5.29" Zygote = "0.6" From 873e1508da51188da12a36feb97d67906cfb5277 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Tue, 4 Jun 2024 08:37:17 +0200 Subject: [PATCH 2/4] Working --- src/ADNLPModels.jl | 1 + src/sparse_sym.jl | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ADNLPModels.jl b/src/ADNLPModels.jl index 481724bb..d3f846b4 100644 --- a/src/ADNLPModels.jl +++ b/src/ADNLPModels.jl @@ -3,6 +3,7 @@ module ADNLPModels # stdlib using LinearAlgebra, SparseArrays # external +using ADTypes: ADTypes using ColPack, ForwardDiff, ReverseDiff # JSO using NLPModels diff --git a/src/sparse_sym.jl b/src/sparse_sym.jl index f20cb763..1c04aa00 100644 --- a/src/sparse_sym.jl +++ b/src/sparse_sym.jl @@ -1,6 +1,10 @@ function compute_hessian_sparsity(f, nvar, c!, ncon) detector = Symbolics.SymbolicsSparsityDetector() # replaceable - lagrangian(x) = f(x) + dot(rand(ncon), c!(zeros(ncon), x)) + function lagrangian(x) + cx = zeros(eltype(x), ncon) + c!(cx, x) + return f(x) + dot(rand(ncon), cx) + end S = ADTypes.hessian_sparsity(lagrangian, rand(nvar), detector) # , full = false return S end From 50e4e2c51d6243ee91a0d53ea46cdec045403a15 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Tue, 4 Jun 2024 08:38:16 +0200 Subject: [PATCH 3/4] Versions --- test/Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Project.toml b/test/Project.toml index 68587070..1f344a0e 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -23,6 +23,6 @@ NLPModels = "0.21" NLPModelsModifiers = "0.7" NLPModelsTest = "0.10" ReverseDiff = "1" -SparseDiffTools = "2.19" +SparseDiffTools = "2.3" Symbolics = "5.29" Zygote = "0.6" From 1d7ead401496c66907fcb2e63c473fecdf526806 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Tue, 4 Jun 2024 17:16:30 +0200 Subject: [PATCH 4/4] Up Symbolics in docs --- docs/Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Project.toml b/docs/Project.toml index c8657e93..51be8073 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -25,5 +25,5 @@ Percival = "0.7" Plots = "1" SolverBenchmark = "0.5" SymbolicUtils = "=1.5.1" -Symbolics = "5.3" +Symbolics = "5.29" Zygote = "0.6.62"