From 8da9956186df3464b7c579d84f5223b4958cd92e Mon Sep 17 00:00:00 2001 From: tmigot Date: Mon, 17 May 2021 21:39:56 +0200 Subject: [PATCH] remove f and c in structure --- src/ad.jl | 20 +++++++------------- src/nlp.jl | 8 ++++---- src/nls.jl | 8 ++++---- test/nlp/basic.jl | 10 +++++----- test/nlp/nlpmodelstest.jl | 2 +- test/nls/basic.jl | 6 +++--- test/nls/nlpmodelstest.jl | 2 +- 7 files changed, 25 insertions(+), 31 deletions(-) diff --git a/src/ad.jl b/src/ad.jl index 619eb593..aad20338 100644 --- a/src/ad.jl +++ b/src/ad.jl @@ -3,14 +3,12 @@ struct ForwardDiffAD <: ADBackend nnzh::Int nnzj::Int end -function ForwardDiffAD(f, c, x0::AbstractVector, ncon::Integer) - nvar = length(x0) +function ForwardDiffAD(nvar::Integer, ncon::Integer) nnzh = nvar * (nvar + 1) / 2 nnzj = nvar * ncon return ForwardDiffAD(nnzh, nnzj) end -function ForwardDiffAD(f, x0::AbstractVector) - nvar = length(x0) +function ForwardDiffAD(nvar::Integer) nnzh = nvar * (nvar + 1) / 2 return ForwardDiffAD(nnzh, 0) end @@ -18,14 +16,12 @@ struct ZygoteAD <: ADBackend nnzh::Int nnzj::Int end -function ZygoteAD(f, c, x0::AbstractVector, ncon::Integer) - nvar = length(x0) +function ZygoteAD(nvar::Integer, ncon::Integer) nnzh = nvar * (nvar + 1) / 2 nnzj = nvar * ncon return ZygoteAD(nnzh, nnzj) end -function ZygoteAD(f, x0::AbstractVector) - nvar = length(x0) +function ZygoteAD(nvar::Integer) nnzh = nvar * (nvar + 1) / 2 return ZygoteAD(nnzh, 0) end @@ -33,14 +29,12 @@ struct ReverseDiffAD <: ADBackend nnzh::Int nnzj::Int end -function ReverseDiffAD(f, c, x0::AbstractVector, ncon::Integer) - nvar = length(x0) +function ReverseDiffAD(nvar::Integer, ncon::Integer) nnzh = nvar * (nvar + 1) / 2 nnzj = nvar * ncon return ReverseDiffAD(nnzh, nnzj) end -function ReverseDiffAD(f, x0::AbstractVector) - nvar = length(x0) +function ReverseDiffAD(nvar::Integer) nnzh = nvar * (nvar + 1) / 2 return ReverseDiffAD(nnzh, 0) end @@ -127,7 +121,7 @@ end return Zygote.jacobian(f, x)[1] end function hessian(b::ZygoteAD, f, x) - return jacobian(ForwardDiffAD(f, x), x -> gradient(b, f, x), x) + return jacobian(ForwardDiffAD(length(x)), x -> gradient(b, f, x), x) end function Jprod(::ZygoteAD, f, x, v) return vec(Zygote.jacobian(t -> f(x + t * v), 0)[1]) diff --git a/src/nlp.jl b/src/nlp.jl index b5839490..14b23fc4 100644 --- a/src/nlp.jl +++ b/src/nlp.jl @@ -39,7 +39,7 @@ function ADNLPModel( f, x0::AbstractVector{T}; name::String = "Generic", - adbackend = ForwardDiffAD(f, x0), + adbackend = ForwardDiffAD(length(x0)), ) where {T} nvar = length(x0) @lencheck nvar x0 @@ -57,7 +57,7 @@ function ADNLPModel( lvar::AbstractVector, uvar::AbstractVector; name::String = "Generic", - adbackend = ForwardDiffAD(f, x0), + adbackend = ForwardDiffAD(length(x0)), ) where {T} nvar = length(x0) @lencheck nvar x0 lvar uvar @@ -87,7 +87,7 @@ function ADNLPModel( y0::AbstractVector = fill!(similar(lcon), zero(T)), name::String = "Generic", lin::AbstractVector{<:Integer} = Int[], - adbackend = ForwardDiffAD(f, c, x0, length(lcon)), + adbackend = ForwardDiffAD(length(x0), length(lcon)), ) where {T} nvar = length(x0) ncon = length(lcon) @@ -129,7 +129,7 @@ function ADNLPModel( y0::AbstractVector = fill!(similar(lcon), zero(T)), name::String = "Generic", lin::AbstractVector{<:Integer} = Int[], - adbackend = ForwardDiffAD(f, c, x0, length(lcon)), + adbackend = ForwardDiffAD(length(x0), length(lcon)), ) where {T} nvar = length(x0) ncon = length(lcon) diff --git a/src/nls.jl b/src/nls.jl index 73c9eac2..e3ee2194 100644 --- a/src/nls.jl +++ b/src/nls.jl @@ -46,7 +46,7 @@ function ADNLSModel( nequ::Integer; linequ::AbstractVector{<:Integer} = Int[], name::String = "Generic", - adbackend = ForwardDiffAD(F, x0), + adbackend = ForwardDiffAD(length(x0)), ) where {T} nvar = length(x0) @@ -72,7 +72,7 @@ function ADNLSModel( uvar::AbstractVector; linequ::AbstractVector{<:Integer} = Int[], name::String = "Generic", - adbackend = ForwardDiffAD(F, x0), + adbackend = ForwardDiffAD(length(x0)), ) where {T} nvar = length(x0) @lencheck nvar lvar uvar @@ -102,7 +102,7 @@ function ADNLSModel( lin::AbstractVector{<:Integer} = Int[], linequ::AbstractVector{<:Integer} = Int[], name::String = "Generic", - adbackend = ForwardDiffAD(F, c, x0, length(lcon)), + adbackend = ForwardDiffAD(length(x0), length(lcon)), ) where {T} nvar = length(x0) ncon = length(lcon) @@ -148,7 +148,7 @@ function ADNLSModel( lin::AbstractVector{<:Integer} = Int[], linequ::AbstractVector{<:Integer} = Int[], name::String = "Generic", - adbackend = ForwardDiffAD(F, c, x0, length(lcon)), + adbackend = ForwardDiffAD(length(x0), length(lcon)), ) where {T} nvar = length(x0) ncon = length(lcon) diff --git a/test/nlp/basic.jl b/test/nlp/basic.jl index 1a9dccbb..3f20a672 100644 --- a/test/nlp/basic.jl +++ b/test/nlp/basic.jl @@ -25,16 +25,16 @@ function test_autodiff_model() for adbackend in (:ForwardDiffAD, :ZygoteAD, :ReverseDiffAD) x0 = zeros(2) f(x) = dot(x, x) - nlp = ADNLPModel(f, x0, adbackend = eval(adbackend)(f, x0)) + nlp = ADNLPModel(f, x0, adbackend = eval(adbackend)(length(x0))) c(x) = [sum(x) - 1] - nlp = ADNLPModel(f, x0, c, [0], [0], adbackend = eval(adbackend)(f, c, x0, 1)) + nlp = ADNLPModel(f, x0, c, [0], [0], adbackend = eval(adbackend)(length(x0), 1)) @test obj(nlp, x0) == f(x0) x = range(-1, stop = 1, length = 100) y = 2x .+ 3 + randn(100) * 0.1 regr = LinearRegression(x, y) - nlp = ADNLPModel(regr, ones(2), adbackend = eval(adbackend)(regr, ones(2))) + nlp = ADNLPModel(regr, ones(2), adbackend = eval(adbackend)(2)) β = [ones(100) x] \ y @test abs(obj(nlp, β) - norm(y .- β[1] - β[2] * x)^2 / 2) < 1e-12 @test norm(grad(nlp, β)) < 1e-12 @@ -42,8 +42,8 @@ function test_autodiff_model() @testset "Constructors for ADNLPModel" begin lvar, uvar, lcon, ucon, y0 = -ones(2), ones(2), -ones(1), ones(1), zeros(1) badlvar, baduvar, badlcon, baducon, bady0 = -ones(3), ones(3), -ones(2), ones(2), zeros(2) - unc_adbackend = eval(adbackend)(f, x0) - con_adbackend = eval(adbackend)(f, c, x0, 1) + unc_adbackend = eval(adbackend)(2) + con_adbackend = eval(adbackend)(2, 1) nlp = ADNLPModel(f, x0, adbackend = unc_adbackend) nlp = ADNLPModel(f, x0, lvar, uvar, adbackend = unc_adbackend) nlp = ADNLPModel(f, x0, c, lcon, ucon, adbackend = con_adbackend) diff --git a/test/nlp/nlpmodelstest.jl b/test/nlp/nlpmodelstest.jl index b61226c8..7bc9878d 100644 --- a/test/nlp/nlpmodelstest.jl +++ b/test/nlp/nlpmodelstest.jl @@ -3,7 +3,7 @@ for problem in NLPModelsTest.nlp_problems @testset "Checking NLPModelsTest tests on problem $problem" begin nlp_ad = eval(Meta.parse(lowercase(problem) * "_autodiff"))() - nlp_ad.adbackend = eval(adbackend)(nlp_ad.f, nlp_ad.meta.x0) + nlp_ad.adbackend = eval(adbackend)(length(nlp_ad.meta.x0)) nlp_man = eval(Meta.parse(problem))() show(IOBuffer(), nlp_ad) diff --git a/test/nls/basic.jl b/test/nls/basic.jl index 4cda3318..fe8eaa1f 100644 --- a/test/nls/basic.jl +++ b/test/nls/basic.jl @@ -2,7 +2,7 @@ function autodiff_nls_test() for adbackend in (:ForwardDiffAD, :ZygoteAD, :ReverseDiffAD) @testset "autodiff_nls_test for $adbackend" begin F(x) = [x[1] - 1; x[2] - x[1]^2] - nls = ADNLSModel(F, zeros(2), 2, adbackend = eval(adbackend)(F, zeros(2))) + nls = ADNLSModel(F, zeros(2), 2, adbackend = eval(adbackend)(2)) @test isapprox(residual(nls, ones(2)), zeros(2), rtol = 1e-8) end @@ -13,8 +13,8 @@ function autodiff_nls_test() c(x) = [sum(x) - 1] lvar, uvar, lcon, ucon, y0 = -ones(2), ones(2), -ones(1), ones(1), zeros(1) badlvar, baduvar, badlcon, baducon, bady0 = -ones(3), ones(3), -ones(2), ones(2), zeros(2) - unc_adbackend = eval(adbackend)(F, x0) - con_adbackend = eval(adbackend)(F, c, x0, 1) + unc_adbackend = eval(adbackend)(2) + con_adbackend = eval(adbackend)(2, 1) nlp = ADNLSModel(F, x0, 3, adbackend = unc_adbackend) nlp = ADNLSModel(F, x0, 3, lvar, uvar, adbackend = unc_adbackend) nlp = ADNLSModel(F, x0, 3, c, lcon, ucon, adbackend = con_adbackend) diff --git a/test/nls/nlpmodelstest.jl b/test/nls/nlpmodelstest.jl index 2fb7212e..da41c391 100644 --- a/test/nls/nlpmodelstest.jl +++ b/test/nls/nlpmodelstest.jl @@ -2,7 +2,7 @@ for problem in NLPModelsTest.nls_problems @testset "Checking NLPModelsTest tests on problem $problem" begin nls_ad = eval(Meta.parse(lowercase(problem) * "_autodiff"))() - nls_ad.adbackend = eval(adbackend)(nls_ad.F, nls_ad.meta.x0) + nls_ad.adbackend = eval(adbackend)(length(nls_ad.meta.x0)) nls_man = eval(Meta.parse(problem))() nlss = AbstractNLSModel[nls_ad]